diff --git a/wp/router.php b/wp/router.php deleted file mode 100644 index ec17a9fcb..000000000 --- a/wp/router.php +++ /dev/null @@ -1,66 +0,0 @@ -provider(); - -if ($provider === '') { - - return; -} - -if ($provider === 'vercel-blob') { - $warning = Bootstrap::validateVercelBlob($config->vercelToken(), $config->vercelStoreId()); - if ($warning !== null) { - trigger_error('serverlesswp-stream-wrapper: ' . $warning, E_USER_WARNING); - return; - } -} - -$resolved = Bootstrap::resolveWpContentDir( - $config->wpContentDir(), - dirname(__DIR__, 3), - $_SERVER['DOCUMENT_ROOT'] ?? null, -); - -if ($resolved['warning'] !== null) { - trigger_error('serverlesswp-stream-wrapper: ' . $resolved['warning'], E_USER_WARNING); -} - -if ($resolved['dir'] === null) { - return; -} - -$router = new PathRouter( - $resolved['dir'], - $config->targetPaths(), - $config->excludePatterns(), - $config->excludePaths(), -); - -$adapter = match ($provider) { - 's3' => new S3Adapter( - bucket: $config->s3Bucket() ?? '', - region: $config->s3Region(), - prefix: $config->s3Prefix(), - endpoint: $config->s3Endpoint(), - key: $config->s3Key(), - secret: $config->s3Secret(), - forcePathStyle: $config->s3ForcePathStyle(), - acl: $config->s3Acl(), - ), - 'vercel-blob' => new VercelBlobAdapter( - token: $config->vercelToken() ?? '', - storeId: $config->vercelStoreId() ?? '', - access: $config->vercelAccess(), - apiBase: $config->vercelApiBase(), - downloadBase: $config->vercelDownloadBase(), - ), - default => null, -}; - -if ($adapter === null) { - trigger_error("serverlesswp-stream-wrapper: unknown provider '{$provider}'", E_USER_WARNING); - return; -} - -StreamWrapper::register($adapter, $router); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/composer.json deleted file mode 100644 index bc607924d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "mitchmac/serverlesswp-stream-wrapper", - "description": "WordPress plugin that intercepts wp-content file operations and routes them to remote object storage (S3, Vercel Blob)", - "type": "wordpress-plugin", - "license": "MIT", - "require": { - "php": "^8.2", - "aws/aws-sdk-php": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "autoload": { - "psr-4": { - "ServerlessWpStreamWrapper\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "ServerlessWpStreamWrapper\\Tests\\": "tests/" - } - }, - "config": { - "optimize-autoloader": true, - "sort-packages": true, - "platform": { - "php": "8.2.0" - } - }, - "extra": { - "aws/aws-sdk-php": [ - "S3" - ] - }, - "scripts": { - "pre-autoload-dump": "Aws\\Script\\Composer\\Composer::removeUnusedServices" - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/composer.lock b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/composer.lock deleted file mode 100644 index fbb467ebe..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/composer.lock +++ /dev/null @@ -1,2896 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "e6ae8f42cbb37ec38c835aca25a07303", - "packages": [ - { - "name": "aws/aws-crt-php", - "version": "v1.2.7", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", - "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "https://github.com/awslabs/aws-crt-php", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" - }, - "time": "2024-10-18T22:15:13+00:00" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.391.1", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "90920ce5518aa864e04da0224bb0ba0ee9e31d7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/90920ce5518aa864e04da0224bb0ba0ee9e31d7f", - "reference": "90920ce5518aa864e04da0224bb0ba0ee9e31d7f", - "shasum": "" - }, - "require": { - "aws/aws-crt-php": "^1.2.3", - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^7.8.2 || ^8.0", - "guzzlehttp/promises": "^2.0.3 || ^3.0", - "guzzlehttp/psr7": "^2.6.3 || ^3.0", - "mtdowling/jmespath.php": "^2.9.1", - "php": ">=8.1", - "psr/http-message": "^1.0 || ^2.0", - "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "composer/composer": "^2.7.8", - "dms/phpunit-arraysubset-asserts": "^v0.5.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-sockets": "*", - "phpunit/phpunit": "^10.0", - "psr/cache": "^2.0 || ^3.0", - "psr/simple-cache": "^2.0 || ^3.0", - "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", - "yoast/phpunit-polyfills": "^2.0" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-pcntl": "To use client-side monitoring", - "ext-sockets": "To use client-side monitoring" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Aws\\": "src/" - }, - "exclude-from-classmap": [ - "src/data/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "https://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "https://aws.amazon.com/sdk-for-php", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://github.com/aws/aws-sdk-php/discussions", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.391.1" - }, - "time": "2026-08-07T20:18:18+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "8.0.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "d1cbca76970939a9c2ced55b1e25ea26f34fc773" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d1cbca76970939a9c2ced55b1e25ea26f34fc773", - "reference": "d1cbca76970939a9c2ced55b1e25ea26f34fc773", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^3.0.1", - "guzzlehttp/psr7": "^3.0", - "php": "^7.4 || ^8.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php82": "^1.27" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "4.0.1", - "guzzlehttp/test-server": "^1.0", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^9.6.34", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/8.0.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2026-08-05T19:50:26+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "64f38b87fa7d371853804161bfc701c9bc2cc00a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/64f38b87fa7d371853804161bfc701c9bc2cc00a", - "reference": "64f38b87fa7d371853804161bfc701c9bc2cc00a", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^9.6.34" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2026-08-05T19:35:04+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "b094ded77ee97a6027ad6cf0e8c7b9f88381814c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b094ded77ee97a6027ad6cf0e8c7b9f88381814c", - "reference": "b094ded77ee97a6027ad6cf0e8c7b9f88381814c", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/http-factory": "^1.1", - "psr/http-message": "^2.0", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php82": "^1.27" - }, - "provide": { - "psr/http-factory-implementation": "1.1", - "psr/http-message-implementation": "2.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "1.1.0", - "jshttp/mime-db": "1.54.0.1", - "php-http/psr7-integration-tests": "^1.5.1", - "phpunit/phpunit": "^9.6.34" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2026-07-20T13:48:31+00:00" - }, - { - "name": "mtdowling/jmespath.php", - "version": "2.9.2", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", - "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^3.0.3", - "phpunit/phpunit": "^8.5.52" - }, - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.9-dev" - } - }, - "autoload": { - "files": [ - "src/JmesPath.php" - ], - "psr-4": { - "JmesPath\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.9.2" - }, - "time": "2026-07-06T18:56:19+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v7.4.15", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ff16a16bf87fdf264638b8f6995b3515975e3c79", - "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.15" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-07-22T07:36:05+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.37.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T16:19:22+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.38.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-27T06:59:30+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.37.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T16:19:22+00:00" - }, - { - "name": "symfony/polyfill-php82", - "version": "v1.38.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php82.git", - "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", - "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php82\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php82/tree/v1.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-26T12:45:58+00:00" - } - ], - "packages-dev": [ - { - "name": "myclabs/deep-copy", - "version": "1.13.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-08-01T08:46:24+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.8.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" - }, - "time": "2026-07-04T14:30:18+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "11.0.12", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", - "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^5.7.0", - "php": ">=8.2", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-text-template": "^4.0.1", - "sebastian/code-unit-reverse-lookup": "^4.0.1", - "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.1", - "sebastian/lines-of-code": "^3.0.1", - "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.3.1" - }, - "require-dev": { - "phpunit/phpunit": "^11.5.46" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", - "type": "tidelift" - } - ], - "time": "2025-12-24T07:01:01+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "5.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", - "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", - "type": "tidelift" - } - ], - "time": "2026-02-02T13:52:54+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "5.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^11.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:07:44+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:08:43+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "7.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:09:35+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "11.5.56", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "5f83edffa6967c3db468d48a695ec7bcb02e9256" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5f83edffa6967c3db468d48a695ec7bcb02e9256", - "reference": "5f83edffa6967c3db468d48a695ec7bcb02e9256", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-filter": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.12", - "phpunit/php-file-iterator": "^5.1.1", - "phpunit/php-invoker": "^5.0.1", - "phpunit/php-text-template": "^4.0.1", - "phpunit/php-timer": "^7.0.1", - "sebastian/cli-parser": "^3.0.2", - "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.3", - "sebastian/diff": "^6.0.2", - "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.2", - "sebastian/global-state": "^7.0.2", - "sebastian/object-enumerator": "^6.0.1", - "sebastian/recursion-context": "^6.0.3", - "sebastian/type": "^5.1.3", - "sebastian/version": "^5.0.2", - "staabm/side-effects-detector": "^1.0.5" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.56" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsoring.html", - "type": "other" - } - ], - "time": "2026-07-06T14:52:39+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:41:36+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-19T07:56:08+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:45:54+00:00" - }, - { - "name": "sebastian/comparator", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", - "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.4" - }, - "suggest": { - "ext-bcmath": "For comparing BcMath\\Number objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", - "type": "tidelift" - } - ], - "time": "2026-01-24T09:26:40+00:00" - }, - { - "name": "sebastian/complexity", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:49:50+00:00" - }, - { - "name": "sebastian/diff", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:53:05+00:00" - }, - { - "name": "sebastian/environment", - "version": "7.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", - "type": "tidelift" - } - ], - "time": "2025-05-21T11:55:47+00:00" - }, - { - "name": "sebastian/exporter", - "version": "6.3.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", - "type": "tidelift" - } - ], - "time": "2025-09-24T06:12:51+00:00" - }, - { - "name": "sebastian/global-state", - "version": "7.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:57:36+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:58:38+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "6.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:00:13+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:01:32+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "6.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", - "type": "tidelift" - } - ], - "time": "2025-08-13T04:42:22+00:00" - }, - { - "name": "sebastian/type", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", - "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/type", - "type": "tidelift" - } - ], - "time": "2025-08-09T06:55:48+00:00" - }, - { - "name": "sebastian/version", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-10-09T05:16:32+00:00" - }, - { - "name": "staabm/side-effects-detector", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/staabm/side-effects-detector.git", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^9.6.21", - "symfony/var-dumper": "^5.4.43", - "tomasvotruba/type-coverage": "1.0.0", - "tomasvotruba/unused-public": "1.0.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A static analysis tool to detect side effects in PHP code", - "keywords": [ - "static analysis" - ], - "support": { - "issues": "https://github.com/staabm/side-effects-detector/issues", - "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" - }, - "funding": [ - { - "url": "https://github.com/staabm", - "type": "github" - } - ], - "time": "2024-10-20T05:08:20+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.3.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2025-11-17T20:03:58+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^8.2" - }, - "platform-dev": {}, - "platform-overrides": { - "php": "8.2.0" - }, - "plugin-api-version": "2.9.0" -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/serverlesswp-stream-wrapper.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/serverlesswp-stream-wrapper.php deleted file mode 100644 index fbf188c0f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/serverlesswp-stream-wrapper.php +++ /dev/null @@ -1,37 +0,0 @@ -

ServerlessWP Stream Wrapper: Composer dependencies not installed. Run composer install in the plugin directory.

'; - }); - return; - } - require_once $autoload; -} - -(new Plugin())->register(); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Adapters/Precondition.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Adapters/Precondition.php deleted file mode 100644 index 0c3a5409d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Adapters/Precondition.php +++ /dev/null @@ -1,24 +0,0 @@ -bucket = $bucket; - $this->prefix = rtrim($prefix, '/'); - $this->acl = $acl ?: null; - - if ($client !== null) { - $this->client = $client; - return; - } - - $config = [ - 'version' => 'latest', - 'region' => $region, - ]; - - if ($endpoint) { - $config['endpoint'] = $endpoint; - } - if ($endpoint || $forcePathStyle) { - $config['use_path_style_endpoint'] = true; - } - - if ($key && $secret) { - $config['credentials'] = ['key' => $key, 'secret' => $secret]; - } - - $this->client = new S3Client($config); - } - - private function s3Key(string $key): string - { - $key = ltrim($key, '/'); - return $this->prefix ? $this->prefix . '/' . $key : $key; - } - - private function stripPrefix(string $s3Key): string - { - if ($this->prefix && str_starts_with($s3Key, $this->prefix . '/')) { - return substr($s3Key, strlen($this->prefix) + 1); - } - return $s3Key; - } - - public function get(string $key): string|false - { - $result = $this->fetch($key); - return $result['status'] === self::FETCH_FOUND ? (string) $result['contents'] : false; - } - - public function fetch(string $key): array - { - try { - $result = $this->client->getObject([ - 'Bucket' => $this->bucket, - 'Key' => $this->s3Key($key), - ]); - } catch (AwsException $e) { - return [ - 'status' => $this->isNotFound($e) ? self::FETCH_NOT_FOUND : self::FETCH_ERROR, - 'contents' => null, - 'etag' => null, - ]; - } - - $etag = isset($result['ETag']) ? (string) $result['ETag'] : null; - - return [ - 'status' => self::FETCH_FOUND, - 'contents' => (string) $result['Body'], - 'etag' => $etag !== '' ? $etag : null, - ]; - } - - public function put(string $key, string $contents, ?Precondition $condition = null): bool - { - try { - $params = [ - 'Bucket' => $this->bucket, - 'Key' => $this->s3Key($key), - 'Body' => $contents, - 'ContentType' => $this->detectMimeType($key), - ]; - if ($this->acl !== null) { - $params['ACL'] = $this->acl; - } - if ($condition?->ifMatch !== null) { - $params['IfMatch'] = $condition->ifMatch; - } - if ($condition?->requireAbsent) { - $params['IfNoneMatch'] = '*'; - } - $this->client->putObject($params); - return true; - } catch (AwsException $e) { - if ($condition !== null && $this->isPreconditionFailure($e)) { - throw new PreconditionFailedException( - $condition->requireAbsent - ? "conditional create of '{$key}' lost: another writer created it first" - : "conditional write on '{$key}' lost: object changed since it was read", - 0, - $e, - ); - } - return false; - } - } - - private function isNotFound(AwsException $e): bool - { - return $e->getStatusCode() === 404 - || in_array($e->getAwsErrorCode(), ['NoSuchKey', 'NotFound'], true); - } - - private function isPreconditionFailure(AwsException $e): bool - { - return in_array($e->getStatusCode(), [409, 412], true) - || in_array($e->getAwsErrorCode(), ['PreconditionFailed', 'ConditionalRequestConflict'], true); - } - - public function delete(string $key): bool - { - try { - $this->client->deleteObject([ - 'Bucket' => $this->bucket, - 'Key' => $this->s3Key($key), - ]); - return true; - } catch (AwsException) { - return false; - } - } - - public function exists(string $key): bool - { - return $this->stat($key) !== false; - } - - public function stat(string $key): array|false - { - try { - $result = $this->client->headObject([ - 'Bucket' => $this->bucket, - 'Key' => $this->s3Key($key), - ]); - return [ - 'size' => (int) $result['ContentLength'], - 'mtime' => $result['LastModified']->getTimestamp(), - 'type' => 'file', - ]; - } catch (AwsException) { - return false; - } - } - - public function listPrefix(string $prefix): array - { - $s3Prefix = $this->s3Key($prefix); - - if ($s3Prefix !== '' && !str_ends_with($s3Prefix, '/')) { - $s3Prefix .= '/'; - } - - $keys = []; - $params = ['Bucket' => $this->bucket, 'Prefix' => $s3Prefix]; - - do { - $result = $this->client->listObjectsV2($params); - foreach ($result['Contents'] ?? [] as $obj) { - $keys[] = $this->stripPrefix($obj['Key']); - } - $params['ContinuationToken'] = $result['NextContinuationToken'] ?? null; - } while ($result['IsTruncated'] ?? false); - - return $keys; - } - - public function rename(string $from, string $to): bool - { - try { - $this->client->copyObject([ - 'Bucket' => $this->bucket, - 'CopySource' => $this->bucket . '/' . $this->s3Key($from), - 'Key' => $this->s3Key($to), - ]); - $this->delete($from); - return true; - } catch (AwsException) { - return false; - } - } - - private function detectMimeType(string $key): string - { - return match (strtolower(pathinfo($key, PATHINFO_EXTENSION))) { - 'jpg', 'jpeg' => 'image/jpeg', - 'png' => 'image/png', - 'gif' => 'image/gif', - 'webp' => 'image/webp', - 'svg' => 'image/svg+xml', - 'css' => 'text/css', - 'js' => 'application/javascript', - 'html', 'htm' => 'text/html', - 'txt' => 'text/plain', - 'pdf' => 'application/pdf', - default => 'application/octet-stream', - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Adapters/StorageAdapterInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Adapters/StorageAdapterInterface.php deleted file mode 100644 index b460dc5e4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Adapters/StorageAdapterInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -' and '' form — - // BLOB_STORE_ID and the dashboard show the prefixed one. The API header - // and the download host want the bare id, so a prefixed value would make - // every request 404 with "store_not_found". - $this->storeId = str_starts_with($storeId, 'store_') - ? substr($storeId, strlen('store_')) - : $storeId; - $this->apiBase = rtrim($apiBase ?: self::DEFAULT_API_BASE, '/'); - $this->downloadBase = rtrim( - $downloadBase ?: "https://{$this->storeId}.{$access}.blob.vercel-storage.com", - '/', - ); - } - - private function blobUrl(string $key): string - { - return $this->downloadBase . '/' . $this->encodedPath($key); - } - - private function encodedPath(string $key): string - { - return implode('/', array_map('rawurlencode', explode('/', ltrim($key, '/')))); - } - - public function get(string $key): string|false - { - $result = $this->fetch($key); - return $result['status'] === self::FETCH_FOUND ? (string) $result['contents'] : false; - } - - public function fetch(string $key): array - { - $response = $this->download($key); - - if ($response['status'] !== 200) { - return [ - 'status' => $response['status'] === 404 ? self::FETCH_NOT_FOUND : self::FETCH_ERROR, - 'contents' => null, - 'etag' => null, - ]; - } - - return [ - 'status' => self::FETCH_FOUND, - 'contents' => $response['body'], - 'etag' => $this->strongEtag($response['headers']['etag'] ?? null), - ]; - } - - private function download(string $key): array - { - return $this->request('GET', $this->blobUrl($key) . '?cache=0', [ - 'Authorization' => "Bearer {$this->token}", - ]); - } - - private function apiHeaders(array $headers = []): array - { - return array_merge([ - 'Authorization' => "Bearer {$this->token}", - 'x-vercel-blob-store-id' => $this->storeId, - 'x-api-version' => self::API_VERSION, - ], $headers); - } - - private function strongEtag(?string $etag): ?string - { - if ($etag === null || $etag === '') { - return null; - } - return preg_replace('#^W/#', '', $etag); - } - - public function put(string $key, string $contents, ?Precondition $condition = null): bool - { - $url = $this->apiBase . '/?' . http_build_query( - ['pathname' => ltrim($key, '/')], - '', - '&', - PHP_QUERY_RFC3986, - ); - $headers = $this->apiHeaders([ - 'x-content-type' => $this->detectMimeType($key), - // Both are required by the API on a write: without the access header - // the store rejects the upload, and without an explicit '0' the - // server is free to append a random suffix to the pathname, which - // would store the blob under a key the wrapper can never read back. - 'x-vercel-blob-access' => $this->access, - 'x-add-random-suffix' => '0', - ]); - - // Omitting this header means create-only. - if (!$condition?->requireAbsent) { - $headers['x-allow-overwrite'] = '1'; - } - - if ($condition?->ifMatch !== null) { - $headers['x-if-match'] = $condition->ifMatch; - } - - $response = $this->request('PUT', $url, $headers, $contents); - - if ($condition?->ifMatch !== null && $response['status'] === 412) { - throw new PreconditionFailedException( - "conditional write on '{$key}' lost: blob changed since it was read", - ); - } - - if ($condition?->requireAbsent && $response['status'] === 400) { - throw new PreconditionFailedException( - "conditional create of '{$key}' lost: another writer created it first", - ); - } - - if ($response['status'] !== 200) { - $this->reportApiError('upload', $key, $response); - return false; - } - - return true; - } - - /** - * Writes carry the reason a file did not persist; the caller only sees a - * bool, so surface the API's own error code in the platform log. - */ - private function reportApiError(string $operation, string $key, array $response): void - { - $error = json_decode($response['body'], true)['error'] ?? []; - $code = is_array($error) ? (string) ($error['code'] ?? '') : ''; - $message = is_array($error) ? (string) ($error['message'] ?? '') : ''; - - trigger_error( - sprintf( - "serverlesswp-stream-wrapper: Vercel Blob %s of '%s' failed: HTTP %d%s%s", - $operation, - $key, - $response['status'], - $code !== '' ? " {$code}" : '', - $message !== '' ? " — {$message}" : '', - ), - E_USER_WARNING, - ); - } - - public function delete(string $key): bool - { - $response = $this->request('POST', $this->apiBase . '/delete', $this->apiHeaders([ - 'Content-Type' => 'application/json', - ]), json_encode(['urls' => [$this->blobUrl($key)]])); - return $response['status'] === 200; - } - - public function exists(string $key): bool - { - return $this->stat($key) !== false; - } - - public function stat(string $key): array|false - { - $url = $this->apiBase . '/?' . http_build_query( - ['url' => $this->blobUrl($key)], - '', - '&', - PHP_QUERY_RFC3986, - ); - $response = $this->request('GET', $url, $this->apiHeaders()); - - if ($response['status'] !== 200) { - return false; - } - - $meta = json_decode($response['body'], true); - if (!is_array($meta)) { - return false; - } - - $mtime = time(); - if (!empty($meta['uploadedAt'])) { - $parsed = strtotime($meta['uploadedAt']); - if ($parsed !== false) { - $mtime = $parsed; - } - } - - return [ - 'size' => (int) ($meta['size'] ?? 0), - 'mtime' => $mtime, - 'type' => 'file', - ]; - } - - public function listPrefix(string $prefix): array - { - $url = $this->apiBase . '/?' . http_build_query( - [ - 'prefix' => ltrim($prefix, '/'), - 'storeId' => $this->storeId, - ], - '', - '&', - PHP_QUERY_RFC3986, - ); - $response = $this->request('GET', $url, $this->apiHeaders()); - - if ($response['status'] !== 200 || $response['body'] === '') { - return []; - } - - $data = json_decode($response['body'], true); - $keys = []; - foreach ($data['blobs'] ?? [] as $blob) { - $keys[] = $blob['pathname']; - } - return $keys; - } - - public function rename(string $from, string $to): bool - { - $contents = $this->get($from); - if ($contents === false) { - return false; - } - if (!$this->put($to, $contents)) { - return false; - } - $this->delete($from); - return true; - } - - /** @return array{status:int, headers:array, body:string} */ - protected function request(string $method, string $url, array $headers = [], ?string $body = null): array - { - $ch = curl_init($url); - - $curlHeaders = []; - foreach ($headers as $name => $value) { - $curlHeaders[] = "{$name}: {$value}"; - } - - $opts = [ - CURLOPT_CUSTOMREQUEST => $method, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_HEADER => true, - CURLOPT_HTTPHEADER => $curlHeaders, - CURLOPT_FOLLOWLOCATION => true, - CURLOPT_TIMEOUT => 30, - ]; - - if ($method === 'HEAD') { - $opts[CURLOPT_NOBODY] = true; - } - - if ($body !== null) { - $opts[CURLOPT_POSTFIELDS] = $body; - } - - curl_setopt_array($ch, $opts); - - $raw = (string) curl_exec($ch); - $status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); - $hSize = (int) curl_getinfo($ch, CURLINFO_HEADER_SIZE); - curl_close($ch); - - $headerBlock = substr($raw, 0, $hSize); - $responseBody = substr($raw, $hSize); - - $parsedHeaders = []; - foreach (explode("\r\n", $headerBlock) as $line) { - if (str_contains($line, ':')) { - [$name, $value] = explode(':', $line, 2); - $parsedHeaders[strtolower(trim($name))] = trim($value); - } - } - - return ['status' => $status, 'headers' => $parsedHeaders, 'body' => $responseBody]; - } - - private function detectMimeType(string $key): string - { - return match (strtolower(pathinfo($key, PATHINFO_EXTENSION))) { - 'jpg', 'jpeg' => 'image/jpeg', - 'png' => 'image/png', - 'gif' => 'image/gif', - 'webp' => 'image/webp', - 'svg' => 'image/svg+xml', - 'css' => 'text/css', - 'js' => 'application/javascript', - 'html', 'htm' => 'text/html', - 'txt' => 'text/plain', - 'pdf' => 'application/pdf', - default => 'application/octet-stream', - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Bootstrap.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Bootstrap.php deleted file mode 100644 index 399a2feff..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Bootstrap.php +++ /dev/null @@ -1,77 +0,0 @@ - null, - 'warning' => "SERVERLESSWP_STREAM_WP_CONTENT_DIR is set to '{$configured}', which is not a directory. " - . 'Not registering the stream wrapper.', - ]; - } - - return ['dir' => $configured, 'warning' => null]; - } - - if (!is_dir($inferred)) { - return [ - 'dir' => null, - 'warning' => "wp-content inferred from the bootstrap file's location as '{$inferred}', " - . 'which is not a directory. Set SERVERLESSWP_STREAM_WP_CONTENT_DIR. ' - . 'Not registering the stream wrapper.', - ]; - } - - if ($documentRoot !== null && $documentRoot !== '' && !self::isWithin($inferred, $documentRoot)) { - return [ - 'dir' => $inferred, - 'warning' => "wp-content inferred as '{$inferred}', which is outside the document root " - . "'{$documentRoot}'. If WordPress runs from a different copy of the tree, set " - . 'SERVERLESSWP_STREAM_WP_CONTENT_DIR to the path it actually uses or no files will be routed to storage.', - ]; - } - - return ['dir' => $inferred, 'warning' => null]; - } - - private static function isWithin(string $path, string $parent): bool - { - $path = realpath($path) ?: rtrim($path, '/'); - $parent = realpath($parent) ?: rtrim($parent, '/'); - - return $path === $parent || str_starts_with($path, rtrim($parent, '/') . '/'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Config.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Config.php deleted file mode 100644 index 34458d286..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/Config.php +++ /dev/null @@ -1,250 +0,0 @@ -provider = $this->read('SERVERLESSWP_STREAM_PROVIDER', ''); - $this->targetPaths = $this->read('SERVERLESSWP_STREAM_TARGET_PATHS', 'wp-content'); - - $this->publicPaths = $this->read('SERVERLESSWP_STREAM_PUBLIC_PATHS', 'wp-content/uploads'); - - $this->publicAssetPaths = $this->read('SERVERLESSWP_STREAM_PUBLIC_ASSET_PATHS', 'wp-content/cache'); - $this->excludePaths = $this->read('SERVERLESSWP_STREAM_EXCLUDE_PATHS', 'wp-content/plugins,wp-content/themes,wp-content/mu-plugins,wp-content/languages,wp-content/upgrade'); - - $this->excludePatterns = $this->read('SERVERLESSWP_STREAM_EXCLUDE_PATTERNS', '*.sqlite,*.db,*.php,*.log,.htaccess'); - $this->wpContentDir = $this->readNullable('SERVERLESSWP_STREAM_WP_CONTENT_DIR'); - - $this->s3Bucket = $this->readFirst(['SERVERLESSWP_STREAM_S3_BUCKET', 'SQLITE_S3_BUCKET', 'S3_OFFLOAD_BUCKET']); - $this->s3Region = $this->readFirst(['SERVERLESSWP_STREAM_S3_REGION', 'SQLITE_S3_REGION']) ?? 'us-east-1'; - $this->s3Prefix = $this->read('SERVERLESSWP_STREAM_S3_PREFIX', ''); - $this->s3Endpoint = $this->readFirst(['SERVERLESSWP_STREAM_S3_ENDPOINT', 'SQLITE_S3_ENDPOINT']); - $this->s3Key = $this->readFirst(['SERVERLESSWP_STREAM_S3_KEY', 'SQLITE_S3_API_KEY', 'S3_KEY_ID']); - $this->s3Secret = $this->readFirst(['SERVERLESSWP_STREAM_S3_SECRET', 'SQLITE_S3_API_SECRET', 'S3_ACCESS_KEY']); - $this->s3ForcePathStyle = $this->truthy($this->readFirst(['SERVERLESSWP_STREAM_S3_FORCE_PATH_STYLE', 'SQLITE_S3_FORCE_PATH_STYLE'])); - $this->s3Acl = $this->readNullable('SERVERLESSWP_STREAM_S3_ACL'); - - $this->cacheControl = $this->read('SERVERLESSWP_STREAM_CACHE_CONTROL', 'public, max-age=3600, s-maxage=86400'); - - $this->vercelToken = $this->readFirst([ - 'SERVERLESSWP_STREAM_VERCEL_TOKEN', - 'BLOB_READ_WRITE_TOKEN', - ]); - if ($this->vercelToken === null && $requestOidcToken !== null && $requestOidcToken !== '') { - $this->vercelToken = $requestOidcToken; - } - $this->vercelToken ??= $this->readFirst(['VERCEL_OIDC_TOKEN']); - - $this->vercelStoreId = $this->readFirst([ - 'SERVERLESSWP_STREAM_VERCEL_STORE_ID', - 'BLOB_STORE_ID', - 'SQLITE_BLOB_STORE_ID', - ]); - $this->vercelAccess = $this->read('SERVERLESSWP_STREAM_VERCEL_ACCESS', 'public'); - $this->vercelApiBase = $this->readNullable('SERVERLESSWP_STREAM_VERCEL_API_BASE'); - $this->vercelDownloadBase = $this->readNullable('SERVERLESSWP_STREAM_VERCEL_DOWNLOAD_BASE'); - $this->cdnBaseUrl = $this->readNullable('SERVERLESSWP_STREAM_CDN_BASE_URL'); - } - - private function read(string $name, string $default): string - { - if (defined($name)) { - return (string) constant($name); - } - $env = getenv($name); - return $env !== false ? $env : $default; - } - - private function readNullable(string $name): ?string - { - if (defined($name)) { - return (string) constant($name); - } - $env = getenv($name); - return $env !== false ? $env : null; - } - - private function readFirst(array $names): ?string - { - foreach ($names as $name) { - if (defined($name)) { - return (string) constant($name); - } - $env = getenv($name); - if ($env !== false && $env !== '') { - return $env; - } - } - return null; - } - - private function truthy(?string $value): bool - { - if ($value === null) { - return false; - } - return !in_array(strtolower($value), ['', '0', 'false', 'no', 'off'], true); - } - - public function provider(): string - { - return $this->provider; - } - - /** @return string[] */ - public function targetPaths(): array - { - if ($this->targetPaths === '') { - return []; - } - return array_filter(array_map('trim', explode(',', $this->targetPaths))); - } - - public const PUBLIC_ASSET_EXTENSIONS = [ - 'css', 'js', 'mjs', - 'svg', 'png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'ico', 'bmp', - 'woff', 'woff2', 'ttf', 'otf', 'eot', - ]; - - /** @return string[] */ - public function publicPaths(): array - { - if ($this->publicPaths === '') { - return []; - } - return array_filter(array_map('trim', explode(',', $this->publicPaths))); - } - - /** @return string[] */ - public function publicAssetPaths(): array - { - if ($this->publicAssetPaths === '') { - return []; - } - return array_filter(array_map('trim', explode(',', $this->publicAssetPaths))); - } - - /** @return string[] */ - public function excludePaths(): array - { - if ($this->excludePaths === '') { - return []; - } - return array_filter(array_map('trim', explode(',', $this->excludePaths))); - } - - /** @return string[] */ - public function excludePatterns(): array - { - if ($this->excludePatterns === '') { - return []; - } - return array_filter(array_map('trim', explode(',', $this->excludePatterns))); - } - - public function wpContentDir(): ?string - { - return $this->wpContentDir; - } - - public function s3Bucket(): ?string - { - return $this->s3Bucket; - } - - public function s3Region(): string - { - return $this->s3Region; - } - - public function s3Prefix(): string - { - return rtrim($this->s3Prefix, '/'); - } - - public function s3Endpoint(): ?string - { - return $this->s3Endpoint; - } - - public function s3Key(): ?string - { - return $this->s3Key; - } - - public function s3Secret(): ?string - { - return $this->s3Secret; - } - - public function s3ForcePathStyle(): bool - { - return $this->s3ForcePathStyle; - } - - public function s3Acl(): ?string - { - return $this->s3Acl; - } - - public function cacheControl(): string - { - return $this->cacheControl; - } - - public function vercelToken(): ?string - { - return $this->vercelToken; - } - - public function vercelStoreId(): ?string - { - return $this->vercelStoreId; - } - - public function vercelAccess(): string - { - return $this->vercelAccess; - } - - public function vercelApiBase(): ?string - { - return $this->vercelApiBase; - } - - public function vercelDownloadBase(): ?string - { - return $this->vercelDownloadBase; - } - - public function cdnBaseUrl(): ?string - { - return $this->cdnBaseUrl ? rtrim($this->cdnBaseUrl, '/') : null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/PathRouter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/PathRouter.php deleted file mode 100644 index cd83aeb16..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/PathRouter.php +++ /dev/null @@ -1,133 +0,0 @@ -wpContentDir = rtrim($wpContentDir, '/'); - $this->excludePatterns = $excludePatterns; - - $wpRoot = dirname($this->wpContentDir); - - $this->targetPrefixes = array_map( - fn(string $rel) => $wpRoot . '/' . ltrim($rel, '/'), - $targetRelPaths, - ); - - $this->excludePrefixes = array_map( - fn(string $rel) => $wpRoot . '/' . ltrim($rel, '/'), - $excludeRelPaths, - ); - } - - public function isRemote(string $path): bool - { - $path = $this->normalize($path); - - if (!$this->matchesTargetPrefix($path)) { - return false; - } - - if ($this->matchesExcludePrefix($path)) { - return false; - } - - if ($this->isExcluded($path)) { - return false; - } - - if (function_exists('apply_filters')) { - return (bool) apply_filters('serverlesswp_stream_wrapper_use_remote', true, $path); - } - - return true; - } - - public function toStorageKey(string $absolutePath): string - { - $path = $this->normalize($absolutePath); - $prefix = $this->wpContentDir . '/'; - if (str_starts_with($path, $prefix)) { - return substr($path, strlen($prefix)); - } - - return ltrim($path, '/'); - } - - public function toAbsolutePath(string $key): string - { - return $this->wpContentDir . '/' . ltrim($key, '/'); - } - - public function wpContentDir(): string - { - return $this->wpContentDir; - } - - private function matchesTargetPrefix(string $path): bool - { - foreach ($this->targetPrefixes as $prefix) { - if ($path === $prefix || str_starts_with($path, $prefix . '/')) { - return true; - } - } - return false; - } - - private function matchesExcludePrefix(string $path): bool - { - foreach ($this->excludePrefixes as $prefix) { - if ($path === $prefix || str_starts_with($path, $prefix . '/')) { - return true; - } - } - return false; - } - - private function isExcluded(string $path): bool - { - $basename = basename($path); - foreach ($this->excludePatterns as $pattern) { - if (fnmatch($pattern, $basename)) { - return true; - } - } - return false; - } - - private function normalize(string $path): string - { - if (str_starts_with($path, 'file://')) { - $path = substr($path, 7); - } - return $this->resolveDots($path); - } - - private function resolveDots(string $path): string - { - $parts = explode('/', $path); - $resolved = []; - foreach ($parts as $part) { - if ($part === '' || $part === '.') { - continue; - } - if ($part === '..') { - array_pop($resolved); - } else { - $resolved[] = $part; - } - } - return '/' . implode('/', $resolved); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/StatCache.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/StatCache.php deleted file mode 100644 index 2653a07d8..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/StatCache.php +++ /dev/null @@ -1,77 +0,0 @@ - ($entry['expires'] ?? 0)) { - unset(self::$cache[$key]); - return null; - } - } - return $entry; - } - - public static function set(string $key, array $entry): void - { - if (($entry['type'] ?? '') === 'missing') { - $entry['expires'] = time() + self::MISSING_TTL; - } - self::$cache[$key] = $entry; - } - - public static function invalidate(string $key): void - { - unset(self::$cache[$key]); - } - - public static function invalidatePrefix(string $prefix): void - { - $prefix = rtrim($prefix, '/'); - foreach (array_keys(self::$cache) as $key) { - if ($key === $prefix || str_starts_with($key, $prefix . '/')) { - unset(self::$cache[$key]); - } - } - } - - public static function flush(): void - { - self::$cache = []; - } - - public static function buildStatArray(array $entry): array - { - $isDir = ($entry['type'] ?? 'file') === 'dir'; - $size = (int) ($entry['size'] ?? 0); - $mtime = (int) ($entry['mtime'] ?? time()); - $mode = $isDir ? 0040755 : 0100644; - - return [ - 0 => 0, 'dev' => 0, - 1 => 0, 'ino' => 0, - 2 => $mode, 'mode' => $mode, - 3 => 1, 'nlink' => 1, - 4 => 0, 'uid' => 0, - 5 => 0, 'gid' => 0, - 6 => 0, 'rdev' => 0, - 7 => $size, 'size' => $size, - 8 => $mtime,'atime' => $mtime, - 9 => $mtime,'mtime' => $mtime, - 10 => $mtime,'ctime' => $mtime, - 11 => -1, 'blksize' => -1, - 12 => -1, 'blocks' => -1, - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/StreamWrapper.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/StreamWrapper.php deleted file mode 100644 index 7b85815d4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/StreamWrapper.php +++ /dev/null @@ -1,861 +0,0 @@ -isRemote($absolutePath)) { - return self::PUSH_NOT_REMOTE; - } - - $key = self::$router->toStorageKey($absolutePath); - - // Bypass this wrapper. - stream_wrapper_restore('file'); - $contents = @file_get_contents($absolutePath); - stream_wrapper_unregister('file'); - stream_wrapper_register('file', static::class); - - if ($contents === false) { - return self::PUSH_NO_LOCAL_COPY; - } - - if (!self::$adapter->put($key, $contents)) { - self::$failedWrites[$key] = true; - trigger_error( - "serverlesswp-stream-wrapper: failed to push uploaded file '{$key}' to remote storage", - E_USER_WARNING, - ); - return self::PUSH_FAILED; - } - - unset(self::$failedWrites[$key]); - StatCache::set($key, ['size' => strlen($contents), 'mtime' => time(), 'type' => 'file']); - - if ($deleteLocal) { - stream_wrapper_restore('file'); - @unlink($absolutePath); - stream_wrapper_unregister('file'); - stream_wrapper_register('file', static::class); - } - - return self::PUSH_OK; - } - - public static function discardLocalFile(string $absolutePath): void - { - if (self::$router === null || !self::$router->isRemote($absolutePath)) { - return; - } - - StatCache::invalidate(self::$router->toStorageKey($absolutePath)); - - stream_wrapper_restore('file'); - @unlink($absolutePath); - stream_wrapper_unregister('file'); - stream_wrapper_register('file', static::class); - } - - public static function unregister(): void - { - if (in_array('file', stream_get_wrappers(), true)) { - stream_wrapper_unregister('file'); - } - stream_wrapper_restore('file'); - } - - public static function isRegistered(): bool - { - return self::$adapter !== null && self::$router !== null; - } - - public static function isRemotePath(string $path): bool - { - return self::$router !== null && self::$router->isRemote($path); - } - - public static function existsInStorage(string $absolutePath): bool - { - if (self::$adapter === null || self::$router === null) { - return false; - } - if (!self::$router->isRemote($absolutePath)) { - return false; - } - - $key = self::$router->toStorageKey($absolutePath); - $cached = StatCache::get($key); - if ($cached !== null) { - return $cached['type'] !== 'missing'; - } - - $stat = self::$adapter->stat($key); - if ($stat === false) { - StatCache::set($key, ['type' => 'missing', 'size' => 0, 'mtime' => 0]); - return false; - } - - StatCache::set($key, $stat); - return true; - } - - public static function writeFailed(string $absolutePath): bool - { - if (self::$router === null || !self::$router->isRemote($absolutePath)) { - return false; - } - return isset(self::$failedWrites[self::$router->toStorageKey($absolutePath)]); - } - - public static function preCacheLocalFile(string $absolutePath): void - { - if (self::$router === null || !self::$router->isRemote($absolutePath)) { - return; - } - - $key = self::$router->toStorageKey($absolutePath); - - stream_wrapper_restore('file'); - $stat = @stat($absolutePath); - stream_wrapper_unregister('file'); - stream_wrapper_register('file', static::class); - - if ($stat !== false) { - StatCache::set($key, [ - 'size' => $stat['size'], - 'mtime' => $stat['mtime'], - 'type' => 'file', - ]); - } - } - - public function stream_open(string $path, string $mode, int $options, ?string &$opened_path): bool - { - $resolved = $this->normalize($path); - - if (!self::$router->isRemote($resolved)) { - return $this->openPassthrough($resolved, $mode, $options, $opened_path); - } - - $this->isRemote = true; - $this->storageKey = self::$router->toStorageKey($resolved); - $this->buffer = fopen('php://temp', 'r+b'); - $this->isDirty = false; - - if ($options & STREAM_USE_PATH) { - $opened_path = $resolved; - } - - $baseMode = $this->parseBaseMode($mode); - - if ($baseMode === 'x' || $baseMode === 'x+') { - if (self::$adapter->exists($this->storageKey)) { - fclose($this->buffer); - $this->buffer = null; - if ($options & STREAM_REPORT_ERRORS) { - trigger_error("serverlesswp-stream-wrapper: remote file '{$this->storageKey}' already exists", E_USER_WARNING); - } - return false; - } - $this->isDirty = true; - - $this->absentAtOpen = true; - $this->canConditionOnAbsence = true; - } - - if ($baseMode === 'w' || $baseMode === 'w+') { - $this->isDirty = true; - } - - $this->isReadModifyWrite = in_array($baseMode, ['r+', 'a', 'a+', 'c', 'c+'], true); - - if ($baseMode === 'r' || $baseMode === 'r+') { - $existing = $this->download(); - if ($existing === null) { - fclose($this->buffer); - $this->buffer = null; - if ($options & STREAM_REPORT_ERRORS) { - trigger_error("serverlesswp-stream-wrapper: cannot open remote file '{$this->storageKey}'", E_USER_WARNING); - } - return false; - } - fwrite($this->buffer, $existing); - rewind($this->buffer); - if ($baseMode === 'r+') { - $this->isDirty = false; - } - } - - if (in_array($baseMode, ['a', 'a+', 'c', 'c+'], true)) { - $existing = $this->download(); - - if ($existing === null && !$this->absentAtOpen) { - fclose($this->buffer); - $this->buffer = null; - if ($options & STREAM_REPORT_ERRORS) { - trigger_error( - "serverlesswp-stream-wrapper: cannot read '{$this->storageKey}' to open it for " - . 'writing; refusing to overwrite contents that could not be read', - E_USER_WARNING, - ); - } - return false; - } - - $this->canConditionOnAbsence = $this->absentAtOpen; - - if ($existing !== null) { - fwrite($this->buffer, $existing); - } - - if ($baseMode === 'a' || $baseMode === 'a+') { - $this->isAppend = true; - $this->appendBaseLength = $existing === null ? 0 : strlen($existing); - fseek($this->buffer, 0, SEEK_END); - } else { - rewind($this->buffer); - } - } - - return true; - } - - private function download(): ?string - { - $result = self::$adapter->fetch($this->storageKey); - - if ($result['status'] === StorageAdapterInterface::FETCH_NOT_FOUND) { - $this->absentAtOpen = true; - return null; - } - - if ($result['status'] !== StorageAdapterInterface::FETCH_FOUND) { - return null; - } - - $this->openEtag = $result['etag']; - return (string) $result['contents']; - } - - public function stream_read(int $count): string|false - { - if ($this->realHandle !== null) { - return fread($this->realHandle, $count); - } - return fread($this->buffer, $count); - } - - public function stream_write(string $data): int - { - if ($this->realHandle !== null) { - return (int) fwrite($this->realHandle, $data); - } - $this->isDirty = true; - return (int) fwrite($this->buffer, $data); - } - - public function stream_close(): void - { - if ($this->realHandle !== null) { - fclose($this->realHandle); - $this->realHandle = null; - return; - } - - if ($this->isRemote && $this->isDirty && $this->buffer !== null) { - rewind($this->buffer); - $this->commit(stream_get_contents($this->buffer)); - } - - if ($this->buffer !== null) { - fclose($this->buffer); - $this->buffer = null; - } - } - - private function commit(string $contents): void - { - try { - if (self::$adapter->put($this->storageKey, $contents, $this->writeCondition())) { - $this->cacheWritten($contents); - return; - } - $this->recordFailedWrite(); - trigger_error( - "serverlesswp-stream-wrapper: failed to upload '{$this->storageKey}' to remote storage", - E_USER_WARNING, - ); - return; - } catch (PreconditionFailedException) { - } - - // Appends can be replayed safely; other writes cannot. - if (!$this->isAppend) { - $this->recordFailedWrite(); - trigger_error( - $this->absentAtOpen - ? "serverlesswp-stream-wrapper: dropped write to '{$this->storageKey}' — another " - . 'writer created it first, and this handle has nothing of theirs to ' - . 'merge with' - : "serverlesswp-stream-wrapper: dropped write to '{$this->storageKey}' — another " - . 'writer changed it after this handle read it, and replaying an ' - . 'in-place edit would discard that change', - E_USER_WARNING, - ); - return; - } - - $replayed = $this->replayAppend(substr($contents, $this->appendBaseLength)); - if ($replayed === false) { - $this->recordFailedWrite(); - trigger_error( - "serverlesswp-stream-wrapper: dropped append to '{$this->storageKey}' after " - . self::CONFLICT_RETRIES . ' conflicting writes', - E_USER_WARNING, - ); - return; - } - - $this->cacheWritten($replayed); - } - - private function recordFailedWrite(): void - { - self::$failedWrites[$this->storageKey] = true; - } - - private function writeCondition(): ?Precondition - { - if ($this->isReadModifyWrite && $this->openEtag !== null) { - return Precondition::matches($this->openEtag); - } - - if ($this->canConditionOnAbsence && $this->absentAtOpen) { - return Precondition::absent(); - } - - return null; - } - - private function replayAppend(string $appended): string|false - { - for ($attempt = 0; $attempt < self::CONFLICT_RETRIES; $attempt++) { - $current = self::$adapter->fetch($this->storageKey); - if ($current['status'] !== StorageAdapterInterface::FETCH_FOUND) { - return false; - } - - $merged = (string) $current['contents'] . $appended; - $etag = $current['etag']; - $condition = $etag !== null ? Precondition::matches($etag) : null; - - try { - return self::$adapter->put($this->storageKey, $merged, $condition) - ? $merged - : false; - } catch (PreconditionFailedException) { - continue; - } - } - - return false; - } - - private function cacheWritten(string $contents): void - { - unset(self::$failedWrites[$this->storageKey]); - - StatCache::set($this->storageKey, [ - 'size' => strlen($contents), - 'mtime' => time(), - 'type' => 'file', - ]); - } - - public function stream_flush(): bool - { - if ($this->realHandle !== null) { - return fflush($this->realHandle); - } - - // Remote writes upload once, from stream_close(). - return true; - } - - public function stream_eof(): bool - { - if ($this->realHandle !== null) { - return feof($this->realHandle); - } - return feof($this->buffer); - } - - public function stream_seek(int $offset, int $whence = SEEK_SET): bool - { - if ($this->realHandle !== null) { - return fseek($this->realHandle, $offset, $whence) === 0; - } - return fseek($this->buffer, $offset, $whence) === 0; - } - - public function stream_tell(): int|false - { - if ($this->realHandle !== null) { - return ftell($this->realHandle); - } - return ftell($this->buffer); - } - - public function stream_truncate(int $size): bool - { - if ($this->realHandle !== null) { - return ftruncate($this->realHandle, $size); - } - if ($this->buffer !== null) { - $this->isDirty = true; - return ftruncate($this->buffer, $size); - } - return false; - } - - public function stream_stat(): array|false - { - if ($this->realHandle !== null) { - return fstat($this->realHandle) ?: false; - } - - if (!$this->isRemote || $this->storageKey === '') { - return false; - } - - $cached = StatCache::get($this->storageKey); - if ($cached !== null && $cached['type'] !== 'missing') { - return StatCache::buildStatArray($cached); - } - - $stat = self::$adapter->stat($this->storageKey); - if ($stat !== false) { - StatCache::set($this->storageKey, $stat); - return StatCache::buildStatArray($stat); - } - - return false; - } - - public function stream_lock(int $operation): bool - { - if ($this->realHandle !== null) { - $base = $operation & ~LOCK_NB; - if (!in_array($base, [LOCK_SH, LOCK_EX, LOCK_UN], true)) { - return true; - } - return flock($this->realHandle, $operation); - } - - return true; - } - - public function stream_set_option(int $option, int $arg1, int $arg2): bool - { - return false; - } - - public function stream_cast(int $castAs): mixed - { - return false; - } - - public function url_stat(string $path, int $flags): array|false - { - $resolved = $this->normalize($path); - - if (!self::$router->isRemote($resolved)) { - return $this->withRealFs(function () use ($resolved, $flags) { - return ($flags & STREAM_URL_STAT_LINK) ? @lstat($resolved) : @stat($resolved); - }); - } - - $key = self::$router->toStorageKey($resolved); - $cached = StatCache::get($key); - - if ($cached !== null) { - if ($cached['type'] === 'missing') { - return false; - } - return StatCache::buildStatArray($cached); - } - - $stat = self::$adapter->stat($key); - if ($stat !== false) { - StatCache::set($key, $stat); - return StatCache::buildStatArray($stat); - } - - if (self::$adapter->exists($key . '/') || self::$adapter->listPrefix($key) !== []) { - $entry = ['type' => 'dir', 'size' => 0, 'mtime' => time()]; - StatCache::set($key, $entry); - return StatCache::buildStatArray($entry); - } - - StatCache::set($key, ['type' => 'missing', 'size' => 0, 'mtime' => 0]); - return false; - } - - public function unlink(string $path): bool - { - $resolved = $this->normalize($path); - - if (!self::$router->isRemote($resolved)) { - return (bool) $this->withRealFs(fn() => unlink($resolved)); - } - - $key = self::$router->toStorageKey($resolved); - $result = self::$adapter->delete($key); - StatCache::invalidate($key); - return $result; - } - - public function rename(string $from, string $to): bool - { - $fromResolved = $this->normalize($from); - $toResolved = $this->normalize($to); - $fromRemote = self::$router->isRemote($fromResolved); - $toRemote = self::$router->isRemote($toResolved); - - if (!$fromRemote && !$toRemote) { - return (bool) $this->withRealFs(fn() => rename($fromResolved, $toResolved)); - } - - if ($fromRemote && $toRemote) { - $fromKey = self::$router->toStorageKey($fromResolved); - $toKey = self::$router->toStorageKey($toResolved); - $result = self::$adapter->rename($fromKey, $toKey); - if ($result) { - StatCache::invalidate($fromKey); - StatCache::invalidate($toKey); - } - return $result; - } - - if ($fromRemote) { - $fromKey = self::$router->toStorageKey($fromResolved); - $contents = self::$adapter->get($fromKey); - if ($contents === false) { - return false; - } - $written = $this->withRealFs(fn() => file_put_contents($toResolved, $contents)); - if ($written === false) { - return false; - } - self::$adapter->delete($fromKey); - StatCache::invalidate($fromKey); - return true; - } - - $contents = $this->withRealFs(fn() => file_get_contents($fromResolved)); - if ($contents === false) { - return false; - } - $toKey = self::$router->toStorageKey($toResolved); - $result = self::$adapter->put($toKey, $contents); - if ($result) { - $this->withRealFs(fn() => unlink($fromResolved)); - StatCache::set($toKey, ['size' => strlen($contents), 'mtime' => time(), 'type' => 'file']); - } - return $result; - } - - public function mkdir(string $path, int $mode, int $options): bool - { - $resolved = $this->normalize($path); - - if (!self::$router->isRemote($resolved)) { - $recursive = (bool) ($options & STREAM_MKDIR_RECURSIVE); - return (bool) $this->withRealFs(fn() => mkdir($resolved, $mode, $recursive)); - } - - $key = self::$router->toStorageKey($resolved); - $entry = ['type' => 'dir', 'size' => 0, 'mtime' => time()]; - StatCache::set($key, $entry); - - if ($options & STREAM_MKDIR_RECURSIVE) { - $parts = explode('/', trim($key, '/')); - $cumulative = ''; - foreach ($parts as $part) { - $cumulative = $cumulative === '' ? $part : $cumulative . '/' . $part; - StatCache::set($cumulative, $entry); - } - } - - // Object storage has no real directories: a directory exists precisely - // when a key underneath it exists, which listPrefix() and the StatCache - // above already express. Persisting a trailing-slash "marker" blob is an - // S3-ism that some backends (Vercel Blob) reject outright — a PUT to a - // pathname ending in '/' fails there, which turned WordPress's - // wp_mkdir_p() into "Unable to create directory ...". Since the marker - // is not needed for correctness, treat mkdir as a metadata-only success. - return true; - } - - public function rmdir(string $path, int $options): bool - { - $resolved = $this->normalize($path); - - if (!self::$router->isRemote($resolved)) { - return (bool) $this->withRealFs(fn() => rmdir($resolved)); - } - - $key = self::$router->toStorageKey($resolved); - - if (!str_contains($key, '/')) { - trigger_error( - "serverlesswp-stream-wrapper: refusing rmdir on root storage target '{$key}'", - E_USER_WARNING, - ); - return false; - } - - $marker = rtrim($key, '/') . '/'; - - $children = array_filter( - self::$adapter->listPrefix($key), - fn(string $childKey) => $childKey !== $marker, - ); - - if ($children !== []) { - trigger_error( - "serverlesswp-stream-wrapper: rmdir('{$resolved}') failed — directory not empty", - E_USER_WARNING, - ); - return false; - } - - if (!self::$adapter->delete($marker)) { - trigger_error( - "serverlesswp-stream-wrapper: failed to delete directory marker '{$marker}'", - E_USER_WARNING, - ); - return false; - } - - StatCache::invalidatePrefix($key); - return true; - } - - public function stream_metadata(string $path, int $option, mixed $value): bool - { - $resolved = $this->normalize($path); - - if (!self::$router->isRemote($resolved)) { - return (bool) $this->withRealFs(function () use ($resolved, $option, $value) { - return match ($option) { - STREAM_META_TOUCH => empty($value) - ? @touch($resolved) - : @touch($resolved, $value[0] ?? time(), $value[1] ?? $value[0] ?? time()), - STREAM_META_OWNER, STREAM_META_OWNER_NAME => @chown($resolved, $value), - STREAM_META_GROUP, STREAM_META_GROUP_NAME => @chgrp($resolved, $value), - STREAM_META_ACCESS => @chmod($resolved, $value), - default => false, - }; - }); - } - - $key = self::$router->toStorageKey($resolved); - - if ($option === STREAM_META_TOUCH) { - if (self::$adapter->exists($key)) { - return true; - } - $result = self::$adapter->put($key, ''); - if ($result) { - StatCache::set($key, ['size' => 0, 'mtime' => time(), 'type' => 'file']); - } - return $result; - } - - return true; - } - - public function dir_opendir(string $path, int $options): bool - { - $resolved = $this->normalize($path); - - if (!self::$router->isRemote($resolved)) { - $handle = $this->withRealFs(fn() => opendir($resolved)); - if ($handle === false) { - return false; - } - $this->realDirHandle = $handle; - return true; - } - - $key = self::$router->toStorageKey($resolved); - $allKeys = self::$adapter->listPrefix($key); - - $prefixWithSlash = rtrim($key, '/') . '/'; - $seen = []; - foreach ($allKeys as $k) { - $relative = substr($k, strlen($prefixWithSlash)); - $segment = explode('/', $relative)[0]; - if ($segment !== '' && !in_array($segment, $seen, true)) { - $seen[] = $segment; - } - } - - $this->dirEntries = array_merge(['.', '..'], $seen); - $this->dirIndex = 0; - return true; - } - - public function dir_readdir(): string|false - { - if ($this->realDirHandle !== null) { - return readdir($this->realDirHandle); - } - - if ($this->dirIndex >= count($this->dirEntries)) { - return false; - } - return $this->dirEntries[$this->dirIndex++]; - } - - public function dir_rewinddir(): bool - { - if ($this->realDirHandle !== null) { - rewinddir($this->realDirHandle); - return true; - } - $this->dirIndex = 0; - return true; - } - - public function dir_closedir(): bool - { - if ($this->realDirHandle !== null) { - closedir($this->realDirHandle); - $this->realDirHandle = null; - return true; - } - $this->dirEntries = []; - $this->dirIndex = 0; - return true; - } - - private function openPassthrough(string $resolved, string $mode, int $options, ?string &$opened_path): bool - { - $this->isRemote = false; - - $handle = $this->withRealFs(fn() => @fopen($resolved, $mode)); - if ($handle === false) { - if ($options & STREAM_REPORT_ERRORS) { - trigger_error("serverlesswp-stream-wrapper: failed to open '{$resolved}' with mode '{$mode}'", E_USER_WARNING); - } - return false; - } - - $this->realHandle = $handle; - - if ($options & STREAM_USE_PATH) { - $opened_path = $resolved; - } - - return true; - } - - private function withRealFs(callable $fn): mixed - { - // Run against native file://. - stream_wrapper_restore('file'); - try { - return $fn(); - } finally { - stream_wrapper_unregister('file'); - stream_wrapper_register('file', static::class); - } - } - - private function normalize(string $path): string - { - if (str_starts_with($path, 'file://')) { - $path = substr($path, 7); - } - return $this->resolveDots($path); - } - - private function resolveDots(string $path): string - { - // Normalize traversal before routing. - $parts = explode('/', $path); - $resolved = []; - foreach ($parts as $part) { - if ($part === '' || $part === '.') { - continue; - } - if ($part === '..') { - array_pop($resolved); - } else { - $resolved[] = $part; - } - } - return '/' . implode('/', $resolved); - } - - private function parseBaseMode(string $mode): string - { - $stripped = str_replace(['b', 't'], '', $mode); - return $stripped; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/WordPress/Plugin.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/WordPress/Plugin.php deleted file mode 100644 index 1791f3e9d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/WordPress/Plugin.php +++ /dev/null @@ -1,308 +0,0 @@ -config = $config; - $rewriter = new UrlRewriter($config); - $rewriter->register(); - - // Imagick bypasses PHP streams. - add_filter('wp_image_editors', [$this, 'preferGd']); - - add_filter('pre_move_uploaded_file', [$this, 'moveUploadedFile'], 10, 4); - add_filter('wp_generate_attachment_metadata', [$this, 'pushAfterGeneration'], 10, 3); - - // Convert delayed persistence failures into upload errors. - add_filter('wp_handle_upload', [$this, 'failUploadIfNotPersisted'], 10, 2); - - add_action('template_redirect', [$this, 'serveRemoteFile'], 1); - - add_action('admin_notices', [$this, 'renderBlockedNotice']); - } - - public function preferGd(array $editors): array - { - $gd = array_filter($editors, fn($e) => $e === 'WP_Image_Editor_GD'); - $other = array_filter($editors, fn($e) => $e !== 'WP_Image_Editor_GD'); - return array_values(array_merge($gd, $other)); - } - - private function debug(string $value): void - { - if (getenv('SERVERLESSWP_STREAM_DEBUG') !== false && !headers_sent()) { - header('X-Serverlesswp-Stream-Debug: ' . $value, false); - } - } - - public function serveRemoteFile(): void - { - $requestPath = urldecode(strtok($_SERVER['REQUEST_URI'] ?? '', '?')); - $this->debug('uri=' . $requestPath); - - if (str_contains($requestPath, '..') || str_contains($requestPath, "\0")) { - $this->debug('decline=traversal'); - return; - } - - $contentUrlPath = rtrim((string) parse_url(content_url(), PHP_URL_PATH), '/'); - if ($contentUrlPath === '' || !str_starts_with($requestPath, $contentUrlPath . '/')) { - $this->debug('decline=prefix content-url-path=' . $contentUrlPath); - return; - } - - $absolutePath = WP_CONTENT_DIR . substr($requestPath, strlen($contentUrlPath)); - - if (!StreamWrapper::isRegistered()) { - $this->debug('decline=unregistered'); - return; - } - - if (!StreamWrapper::isRemotePath($absolutePath)) { - $this->debug('decline=not-remote path=' . $absolutePath); - return; - } - - // Stored does not mean public. - if (!$this->isPublicPath($absolutePath)) { - $this->debug('decline=not-public path=' . $absolutePath); - $this->reportBlocked($absolutePath); - return; - } - - $contents = @file_get_contents($absolutePath); - if ($contents === false) { - $this->debug('decline=read-failed path=' . $absolutePath); - - nocache_headers(); - return; - } - - $fileInfo = wp_check_filetype(basename($requestPath)); - $mime = $fileInfo['type'] ?: 'application/octet-stream'; - - status_header(200); - header('Content-Type: ' . $mime); - header('Content-Length: ' . strlen($contents)); - - header('Cache-Control: ' . ($this->config ?? new Config())->cacheControl()); - echo $contents; - exit; - } - - private function isPublicPath(string $absolutePath): bool - { - $config = $this->config ?? new Config(); - - $public = $this->matchesAnyPath($absolutePath, $config->publicPaths()); - - if (!$public && $this->matchesAnyPath($absolutePath, $config->publicAssetPaths())) { - $public = $this->hasAssetExtension($absolutePath); - } - - return (bool) apply_filters('serverlesswp_stream_wrapper_is_public_path', $public, $absolutePath); - } - - private function matchesAnyPath(string $absolutePath, array $relativePaths): bool - { - $wpRoot = dirname(rtrim(WP_CONTENT_DIR, '/')); - - foreach ($relativePaths as $relative) { - $prefix = $wpRoot . '/' . ltrim($relative, '/'); - if ($absolutePath === $prefix || str_starts_with($absolutePath, $prefix . '/')) { - return true; - } - } - - return false; - } - - private function hasAssetExtension(string $path): bool - { - $extension = strtolower(pathinfo($path, PATHINFO_EXTENSION)); - return in_array($extension, Config::PUBLIC_ASSET_EXTENSIONS, true); - } - - private function reportBlocked(string $absolutePath): void - { - if (self::$blockedReported) { - return; - } - self::$blockedReported = true; - - if (get_transient(self::REPORT_COOLDOWN_KEY) !== false) { - return; - } - set_transient(self::REPORT_COOLDOWN_KEY, time(), self::REPORT_COOLDOWN); - - if (!StreamWrapper::existsInStorage($absolutePath)) { - return; - } - - $config = $this->config ?? new Config(); - - error_log(sprintf( - 'serverlesswp-stream-wrapper: refused to serve %s — the object exists in storage but is ' - . 'outside the serving policy (SERVERLESSWP_STREAM_PUBLIC_PATHS=%s, ' - . 'SERVERLESSWP_STREAM_PUBLIC_ASSET_PATHS=%s). Add its directory to one of those if it is ' - . 'meant to be downloadable.', - $absolutePath, - implode(',', $config->publicPaths()), - implode(',', $config->publicAssetPaths()), - )); - - if (!$this->hasAssetExtension($absolutePath)) { - return; - } - - if (get_transient(self::BLOCKED_NOTICE_KEY) === false) { - set_transient(self::BLOCKED_NOTICE_KEY, $absolutePath, HOUR_IN_SECONDS); - } - } - - public function renderBlockedNotice(): void - { - if (!current_user_can('manage_options')) { - return; - } - - $path = get_transient(self::BLOCKED_NOTICE_KEY); - if (!is_string($path) || $path === '') { - return; - } - - printf( - '

%s %s

%s

' - . '

%s

', - esc_html__('Stored file not served', 'serverlesswp-stream-wrapper'), - esc_html__( - 'An asset was requested that exists in object storage but sits outside this ' - . "site's serving policy, so it returned 404:", - 'serverlesswp-stream-wrapper', - ), - esc_html($path), - esc_html__( - 'If it is meant to be public, add its directory to SERVERLESSWP_STREAM_PUBLIC_ASSET_PATHS ' - . '(served only for CSS, JS, images and fonts) or SERVERLESSWP_STREAM_PUBLIC_PATHS (served ' - . 'whatever the file type).', - 'serverlesswp-stream-wrapper', - ), - ); - } - - public function moveUploadedFile(mixed $default, array $fileInfo, string $destPath, string $mimeType): mixed - { - if (!StreamWrapper::isRegistered() || !StreamWrapper::isRemotePath($destPath)) { - return $default; - } - - stream_wrapper_restore('file'); - wp_mkdir_p(dirname($destPath)); - - // Sideloads are not PHP uploads. - $moved = is_uploaded_file($fileInfo['tmp_name']) - ? (bool) @move_uploaded_file($fileInfo['tmp_name'], $destPath) - : (bool) @rename($fileInfo['tmp_name'], $destPath); - stream_wrapper_unregister('file'); - stream_wrapper_register('file', StreamWrapper::class); - - if (!$moved) { - return $default; - } - - StreamWrapper::preCacheLocalFile($destPath); - - if (!StreamWrapper::pushLocalFile($destPath, deleteLocal: false)) { - $this->failedPushes[$destPath] = true; - } - - return $destPath; - } - - public function failUploadIfNotPersisted(array $upload, string $context): array - { - $file = $upload['file'] ?? ''; - - if ($file === '' || !isset($this->failedPushes[$file])) { - return $upload; - } - - unset($this->failedPushes[$file]); - StreamWrapper::discardLocalFile($file); - - return [ - 'error' => sprintf( - 'The uploaded file could not be saved to remote storage (%s). Nothing was kept.', - $context, - ), - ]; - } - - public function pushAfterGeneration(array $metadata, int $attachmentId, string $context = 'create'): array - { - if (!StreamWrapper::isRegistered()) { - return $metadata; - } - - $uploadDir = wp_upload_dir(); - $basedir = rtrim($uploadDir['basedir'], '/'); - $file = $metadata['file'] ?? ''; - - if ($file === '') { - return $metadata; - } - - $originalPath = $basedir . '/' . $file; - if ($this->notPersisted($originalPath, StreamWrapper::pushLocalFileStatus($originalPath))) { - trigger_error( - "serverlesswp-stream-wrapper: attachment {$attachmentId} original '{$file}' did not reach " - . 'remote storage on this request; metadata left intact', - E_USER_WARNING, - ); - } - - $sizeDir = $basedir . '/' . dirname($file); - foreach ($metadata['sizes'] ?? [] as $sizeName => $size) { - if (empty($size['file'])) { - continue; - } - - $sizePath = $sizeDir . '/' . $size['file']; - if ($this->notPersisted($sizePath, StreamWrapper::pushLocalFileStatus($sizePath))) { - unset($metadata['sizes'][$sizeName]); - } - } - - return $metadata; - } - - private function notPersisted(string $absolutePath, string $pushStatus): bool - { - if ($pushStatus === StreamWrapper::PUSH_FAILED) { - return true; - } - - return $pushStatus === StreamWrapper::PUSH_NO_LOCAL_COPY - && StreamWrapper::writeFailed($absolutePath); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/WordPress/UrlRewriter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/WordPress/UrlRewriter.php deleted file mode 100644 index 9f89b3b99..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/src/WordPress/UrlRewriter.php +++ /dev/null @@ -1,28 +0,0 @@ -config->cdnBaseUrl(); - if ($base) { - add_filter('upload_dir', [$this, 'rewriteUploadDir']); - } - } - - public function rewriteUploadDir(array $dirs): array - { - $base = rtrim((string) $this->config->cdnBaseUrl(), '/'); - $dirs['baseurl'] = $base . '/uploads'; - $dirs['url'] = $base . '/uploads' . $dirs['subdir']; - return $dirs; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/autoload.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/autoload.php deleted file mode 100644 index 8c7fe1c2f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/autoload.php +++ /dev/null @@ -1,22 +0,0 @@ - git clone --recursive https://github.com/awslabs/aws-crt-php.git -> git clone https://github.com/microsoft/php-sdk-binary-tools.git C:\php-sdk -> C:\php-sdk\phpsdk-vs16-x64.bat - -C:\php-sdk\ -$ cd - -\ -$ phpize - -# --with-prefix only required when your php runtime in system path is different than the runtime you wish to use. -\ -$ configure --enable-awscrt=shared --with-prefix= - -\ -$ nmake - -\ -$ nmake generate-php-ini - -# check .\php-win.ini, it now has the full path to php_awscrt.dll that you can manually load to your php runtime, or you can run the following command to run tests and load the required native extension for awscrt. -\ -$ .\dev-scripts\run_tests.bat -``` - -Note: for VS2017, Cmake will default to build for Win32, refer to [here](https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2015%202017.html). If you are building for x64 php, you can set environment variable as follow to let cmake pick x64 compiler. - -```bat -set CMAKE_GENERATOR=Visual Studio 15 2017 -set CMAKE_GENERATOR_PLATFORM=x64 -``` - -## Debugging - -Using [PHPBrew](https://github.com/phpbrew/phpbrew) to build/manage multiple versions of PHP is helpful. - -Note: You must use a debug build of PHP to debug native extensions. -See the [PHP Internals Book](https://www.phpinternalsbook.com/php7/build_system/building_php.html) for more info - -```shell -# PHP 8 example -$ phpbrew install --stdout -j 8 8.0 +default -- CFLAGS=-Wno-error --disable-cgi --enable-debug -# PHP 5.5 example -$ phpbrew install --stdout -j 8 5.5 +default -openssl -mbstring -- CFLAGS="-w -Wno-error" --enable-debug --with-zlib=/usr/local/opt/zlib -$ phpbrew switch php-8.0.6 # or whatever version is current, it'll be at the end of the build output -$ phpize -$ ./configure -$ make CMAKE_BUILD_TYPE=Debug -``` - -Ensure that the php you launch from your debugger is the result of `which php` , not just -the system default php. - -## Security - -See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information. - -## Known OpenSSL related issue (Unix only) - -* When your php loads a different version of openssl than your system openssl version, awscrt may fail to load or weirdly crash. You can find the openssl version php linked via: `php -i | grep 'OpenSSL'`, and awscrt linked from the build log, which will be `Found OpenSSL: * (found version *)` - -The easiest workaround to those issue is to build from source and get aws-lc for awscrt to depend on instead. -TO do that, same instructions as [here](#building-from-github-source), but use `USE_OPENSSL=OFF make` instead of `make` - -## License - -This project is licensed under the Apache-2.0 License. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/composer.json deleted file mode 100644 index 13e7ac65e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/composer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "aws/aws-crt-php", - "homepage": "https://github.com/awslabs/aws-crt-php", - "description": "AWS Common Runtime for PHP", - "keywords": ["aws","amazon","sdk","crt"], - "type": "library", - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "minimum-stability": "alpha", - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit":"^4.8.35||^5.6.3||^9.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "suggest": { - "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." - }, - "scripts": { - "test": "./dev-scripts/run_tests.sh", - "test-extension": "@test", - "test-win": ".\\dev-scripts\\run_tests.bat" - }, - "license": "Apache-2.0" -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/format-check.py b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/format-check.py deleted file mode 100755 index 35ac46e8c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/format-check.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import os -from pathlib import Path -import re -from subprocess import list2cmdline, run -from tempfile import NamedTemporaryFile - -CLANG_FORMAT_VERSION = '18.1.6' - -INCLUDE_REGEX = re.compile(r'^ext/.*\.(c|h|inl)$') -EXCLUDE_REGEX = re.compile(r'^$') - -arg_parser = argparse.ArgumentParser(description="Check with clang-format") -arg_parser.add_argument('-i', '--inplace-edit', action='store_true', - help="Edit files inplace") -args = arg_parser.parse_args() - -os.chdir(Path(__file__).parent) - -# create file containing list of all files to format -filepaths_file = NamedTemporaryFile(delete=False) -for dirpath, dirnames, filenames in os.walk('.'): - for filename in filenames: - # our regexes expect filepath to use forward slash - filepath = Path(dirpath, filename).as_posix() - if not INCLUDE_REGEX.match(filepath): - continue - if EXCLUDE_REGEX.match(filepath): - continue - - filepaths_file.write(f"{filepath}\n".encode()) -filepaths_file.close() - -# use pipx to run clang-format from PyPI -# this is a simple way to run the same clang-format version regardless of OS -cmd = ['pipx', 'run', f'clang-format=={CLANG_FORMAT_VERSION}', - f'--files={filepaths_file.name}'] -if args.inplace_edit: - cmd += ['-i'] -else: - cmd += ['--Werror', '--dry-run'] - -print(f"{Path.cwd()}$ {list2cmdline(cmd)}") -if run(cmd).returncode: - exit(1) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/AwsCredentials.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/AwsCredentials.php deleted file mode 100644 index 6f6acee2c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/AwsCredentials.php +++ /dev/null @@ -1,69 +0,0 @@ - '', - 'secret_access_key' => '', - 'session_token' => '', - 'expiration_timepoint_seconds' => 0, - ]; - } - - private $access_key_id; - private $secret_access_key; - private $session_token; - private $expiration_timepoint_seconds = 0; - - public function __get($name) { - return $this->$name; - } - - function __construct(array $options = []) { - parent::__construct(); - - $options = new Options($options, self::defaults()); - $this->access_key_id = $options->access_key_id->asString(); - $this->secret_access_key = $options->secret_access_key->asString(); - $this->session_token = $options->session_token ? $options->session_token->asString() : null; - $this->expiration_timepoint_seconds = $options->expiration_timepoint_seconds->asInt(); - - if (strlen($this->access_key_id) == 0) { - throw new \InvalidArgumentException("access_key_id must be provided"); - } - if (strlen($this->secret_access_key) == 0) { - throw new \InvalidArgumentException("secret_access_key must be provided"); - } - - $creds_options = self::$crt->aws_credentials_options_new(); - self::$crt->aws_credentials_options_set_access_key_id($creds_options, $this->access_key_id); - self::$crt->aws_credentials_options_set_secret_access_key($creds_options, $this->secret_access_key); - self::$crt->aws_credentials_options_set_session_token($creds_options, $this->session_token); - self::$crt->aws_credentials_options_set_expiration_timepoint_seconds($creds_options, $this->expiration_timepoint_seconds); - $this->acquire(self::$crt->aws_credentials_new($creds_options)); - self::$crt->aws_credentials_options_release($creds_options); - } - - function __destruct() { - self::$crt->aws_credentials_release($this->release()); - parent::__destruct(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/CredentialsProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/CredentialsProvider.php deleted file mode 100644 index e9d358867..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/CredentialsProvider.php +++ /dev/null @@ -1,23 +0,0 @@ -credentials_provider_release($this->release()); - parent::__destruct(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/Signable.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/Signable.php deleted file mode 100644 index 100b56ad5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/Signable.php +++ /dev/null @@ -1,43 +0,0 @@ -signable_new_from_http_request($http_message->native); - }); - } - - public static function fromChunk($chunk_stream, $previous_signature="") { - if (!($chunk_stream instanceof InputStream)) { - $chunk_stream = new InputStream($chunk_stream); - } - return new Signable(function() use($chunk_stream, $previous_signature) { - return self::$crt->signable_new_from_chunk($chunk_stream->native, $previous_signature); - }); - } - - public static function fromCanonicalRequest($canonical_request) { - return new Signable(function() use($canonical_request) { - return self::$crt->signable_new_from_canonical_request($canonical_request); - }); - } - - protected function __construct($ctor) { - parent::__construct(); - $this->acquire($ctor()); - } - - function __destruct() { - self::$crt->signable_release($this->release()); - parent::__destruct(); - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SignatureType.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SignatureType.php deleted file mode 100644 index 3d3b99f08..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SignatureType.php +++ /dev/null @@ -1,15 +0,0 @@ -sign_request_aws($signable->native, $signing_config->native, - function($result, $error_code) use ($on_complete) { - $signing_result = SigningResult::fromNative($result); - $on_complete($signing_result, $error_code); - }, null); - } - - static function testVerifySigV4ASigning($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y) { - return self::$crt->test_verify_sigv4a_signing($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SigningAlgorithm.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SigningAlgorithm.php deleted file mode 100644 index dd1105989..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SigningAlgorithm.php +++ /dev/null @@ -1,11 +0,0 @@ - SigningAlgorithm::SIGv4, - 'signature_type' => SignatureType::HTTP_REQUEST_HEADERS, - 'credentials_provider' => null, - 'region' => null, - 'service' => null, - 'use_double_uri_encode' => false, - 'should_normalize_uri_path' => false, - 'omit_session_token' => false, - 'signed_body_value' => null, - 'signed_body_header_type' => SignedBodyHeaderType::NONE, - 'expiration_in_seconds' => 0, - 'date' => time(), - 'should_sign_header' => null, - ]; - } - - private $options; - - public function __construct(array $options = []) { - parent::__construct(); - $this->options = $options = new Options($options, self::defaults()); - $sc = $this->acquire(self::$crt->signing_config_aws_new()); - self::$crt->signing_config_aws_set_algorithm($sc, $options->algorithm->asInt()); - self::$crt->signing_config_aws_set_signature_type($sc, $options->signature_type->asInt()); - if ($credentials_provider = $options->credentials_provider->asObject()) { - self::$crt->signing_config_aws_set_credentials_provider( - $sc, - $credentials_provider->native); - } - self::$crt->signing_config_aws_set_region( - $sc, $options->region->asString()); - self::$crt->signing_config_aws_set_service( - $sc, $options->service->asString()); - self::$crt->signing_config_aws_set_use_double_uri_encode( - $sc, $options->use_double_uri_encode->asBool()); - self::$crt->signing_config_aws_set_should_normalize_uri_path( - $sc, $options->should_normalize_uri_path->asBool()); - self::$crt->signing_config_aws_set_omit_session_token( - $sc, $options->omit_session_token->asBool()); - self::$crt->signing_config_aws_set_signed_body_value( - $sc, $options->signed_body_value->asString()); - self::$crt->signing_config_aws_set_signed_body_header_type( - $sc, $options->signed_body_header_type->asInt()); - self::$crt->signing_config_aws_set_expiration_in_seconds( - $sc, $options->expiration_in_seconds->asInt()); - self::$crt->signing_config_aws_set_date($sc, $options->date->asInt()); - if ($should_sign_header = $options->should_sign_header->asCallable()) { - self::$crt->signing_config_aws_set_should_sign_header_fn($sc, $should_sign_header); - } - } - - function __destruct() - { - self::$crt->signing_config_aws_release($this->release()); - parent::__destruct(); - } - - public function __get($name) { - return $this->options->get($name); - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SigningResult.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SigningResult.php deleted file mode 100644 index b8a4ab566..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/SigningResult.php +++ /dev/null @@ -1,33 +0,0 @@ -acquire($native); - } - - function __destruct() { - // No destruction necessary, SigningResults are transient, just release - $this->release(); - parent::__destruct(); - } - - public static function fromNative($ptr) { - return new SigningResult($ptr); - } - - public function applyToHttpRequest(&$http_request) { - self::$crt->signing_result_apply_to_http_request($this->native, $http_request->native); - // Update http_request from native - $http_request = Request::unmarshall($http_request->toBlob()); - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/StaticCredentialsProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/StaticCredentialsProvider.php deleted file mode 100644 index 8dc624944..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Auth/StaticCredentialsProvider.php +++ /dev/null @@ -1,35 +0,0 @@ -$name; - } - - function __construct(array $options = []) { - parent::__construct(); - $this->credentials = new AwsCredentials($options); - - $provider_options = self::$crt->credentials_provider_static_options_new(); - self::$crt->credentials_provider_static_options_set_access_key_id($provider_options, $this->credentials->access_key_id); - self::$crt->credentials_provider_static_options_set_secret_access_key($provider_options, $this->credentials->secret_access_key); - self::$crt->credentials_provider_static_options_set_session_token($provider_options, $this->credentials->session_token); - $this->acquire(self::$crt->credentials_provider_static_new($provider_options)); - self::$crt->credentials_provider_static_options_release($provider_options); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/CRT.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/CRT.php deleted file mode 100644 index d196a4737..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/CRT.php +++ /dev/null @@ -1,358 +0,0 @@ -aws_crt_last_error(); - } - - /** - * @param integer $error Error code from the CRT, usually delivered via callback or {@see last_error} - * @return string Human-readable description of the provided error code - */ - public static function error_str($error) { - return self::$impl->aws_crt_error_str((int) $error); - } - - /** - * @param integer $error Error code from the CRT, usually delivered via callback or {@see last_error} - * @return string Name/enum identifier for the provided error code - */ - public static function error_name($error) { - return self::$impl->aws_crt_error_name((int) $error); - } - - public static function log_to_stdout() { - return self::$impl->aws_crt_log_to_stdout(); - } - - public static function log_to_stderr() { - return self::$impl->aws_crt_log_to_stderr(); - } - - public static function log_to_file($filename) { - return self::$impl->aws_crt_log_to_file($filename); - } - - public static function log_to_stream($stream) { - return self::$impl->aws_crt_log_to_stream($stream); - } - - public static function log_set_level($level) { - return self::$impl->aws_crt_log_set_level($level); - } - - public static function log_stop() { - return self::$impl->aws_crt_log_stop(); - } - - public static function log_message($level, $message) { - return self::$impl->aws_crt_log_message($level, $message); - } - - /** - * @return object Pointer to native event_loop_group_options - */ - function event_loop_group_options_new() { - return self::$impl->aws_crt_event_loop_group_options_new(); - } - - /** - * @param object $elg_options Pointer to native event_loop_group_options - */ - function event_loop_group_options_release($elg_options) { - self::$impl->aws_crt_event_loop_group_options_release($elg_options); - } - - /** - * @param object $elg_options Pointer to native event_loop_group_options - * @param integer $max_threads Maximum number of threads to allow the event loop group to use, default: 0/1 per CPU core - */ - function event_loop_group_options_set_max_threads($elg_options, $max_threads) { - self::$impl->aws_crt_event_loop_group_options_set_max_threads($elg_options, (int)$max_threads); - } - - /** - * @param object Pointer to event_loop_group_options, {@see event_loop_group_options_new} - * @return object Pointer to the new event loop group - */ - function event_loop_group_new($options) { - return self::$impl->aws_crt_event_loop_group_new($options); - } - - /** - * @param object $elg Pointer to the event loop group to release - */ - function event_loop_group_release($elg) { - self::$impl->aws_crt_event_loop_group_release($elg); - } - - /** - * return object Pointer to native AWS credentials options - */ - function aws_credentials_options_new() { - return self::$impl->aws_crt_credentials_options_new(); - } - - function aws_credentials_options_release($options) { - self::$impl->aws_crt_credentials_options_release($options); - } - - function aws_credentials_options_set_access_key_id($options, $access_key_id) { - self::$impl->aws_crt_credentials_options_set_access_key_id($options, $access_key_id); - } - - function aws_credentials_options_set_secret_access_key($options, $secret_access_key) { - self::$impl->aws_crt_credentials_options_set_secret_access_key($options, $secret_access_key); - } - - function aws_credentials_options_set_session_token($options, $session_token) { - self::$impl->aws_crt_credentials_options_set_session_token($options, $session_token); - } - - function aws_credentials_options_set_expiration_timepoint_seconds($options, $expiration_timepoint_seconds) { - self::$impl->aws_crt_credentials_options_set_expiration_timepoint_seconds($options, $expiration_timepoint_seconds); - } - - function aws_credentials_new($options) { - return self::$impl->aws_crt_credentials_new($options); - } - - function aws_credentials_release($credentials) { - self::$impl->aws_crt_credentials_release($credentials); - } - - function credentials_provider_release($provider) { - self::$impl->aws_crt_credentials_provider_release($provider); - } - - function credentials_provider_static_options_new() { - return self::$impl->aws_crt_credentials_provider_static_options_new(); - } - - function credentials_provider_static_options_release($options) { - self::$impl->aws_crt_credentials_provider_static_options_release($options); - } - - function credentials_provider_static_options_set_access_key_id($options, $access_key_id) { - self::$impl->aws_crt_credentials_provider_static_options_set_access_key_id($options, $access_key_id); - } - - function credentials_provider_static_options_set_secret_access_key($options, $secret_access_key) { - self::$impl->aws_crt_credentials_provider_static_options_set_secret_access_key($options, $secret_access_key); - } - - function credentials_provider_static_options_set_session_token($options, $session_token) { - self::$impl->aws_crt_credentials_provider_static_options_set_session_token($options, $session_token); - } - - function credentials_provider_static_new($options) { - return self::$impl->aws_crt_credentials_provider_static_new($options); - } - - function input_stream_options_new() { - return self::$impl->aws_crt_input_stream_options_new(); - } - - function input_stream_options_release($options) { - self::$impl->aws_crt_input_stream_options_release($options); - } - - function input_stream_options_set_user_data($options, $user_data) { - self::$impl->aws_crt_input_stream_options_set_user_data($options, $user_data); - } - - function input_stream_new($options) { - return self::$impl->aws_crt_input_stream_new($options); - } - - function input_stream_release($stream) { - self::$impl->aws_crt_input_stream_release($stream); - } - - function input_stream_seek($stream, $offset, $basis) { - return self::$impl->aws_crt_input_stream_seek($stream, $offset, $basis); - } - - function input_stream_read($stream, $length) { - return self::$impl->aws_crt_input_stream_read($stream, $length); - } - - function input_stream_eof($stream) { - return self::$impl->aws_crt_input_stream_eof($stream); - } - - function input_stream_get_length($stream) { - return self::$impl->aws_crt_input_stream_get_length($stream); - } - - function http_message_new_from_blob($blob) { - return self::$impl->aws_crt_http_message_new_from_blob($blob); - } - - function http_message_to_blob($message) { - return self::$impl->aws_crt_http_message_to_blob($message); - } - - function http_message_release($message) { - self::$impl->aws_crt_http_message_release($message); - } - - function signing_config_aws_new() { - return self::$impl->aws_crt_signing_config_aws_new(); - } - - function signing_config_aws_release($signing_config) { - return self::$impl->aws_crt_signing_config_aws_release($signing_config); - } - - function signing_config_aws_set_algorithm($signing_config, $algorithm) { - self::$impl->aws_crt_signing_config_aws_set_algorithm($signing_config, (int)$algorithm); - } - - function signing_config_aws_set_signature_type($signing_config, $signature_type) { - self::$impl->aws_crt_signing_config_aws_set_signature_type($signing_config, (int)$signature_type); - } - - function signing_config_aws_set_credentials_provider($signing_config, $credentials_provider) { - self::$impl->aws_crt_signing_config_aws_set_credentials_provider($signing_config, $credentials_provider); - } - - function signing_config_aws_set_region($signing_config, $region) { - self::$impl->aws_crt_signing_config_aws_set_region($signing_config, $region); - } - - function signing_config_aws_set_service($signing_config, $service) { - self::$impl->aws_crt_signing_config_aws_set_service($signing_config, $service); - } - - function signing_config_aws_set_use_double_uri_encode($signing_config, $use_double_uri_encode) { - self::$impl->aws_crt_signing_config_aws_set_use_double_uri_encode($signing_config, $use_double_uri_encode); - } - - function signing_config_aws_set_should_normalize_uri_path($signing_config, $should_normalize_uri_path) { - self::$impl->aws_crt_signing_config_aws_set_should_normalize_uri_path($signing_config, $should_normalize_uri_path); - } - - function signing_config_aws_set_omit_session_token($signing_config, $omit_session_token) { - self::$impl->aws_crt_signing_config_aws_set_omit_session_token($signing_config, $omit_session_token); - } - - function signing_config_aws_set_signed_body_value($signing_config, $signed_body_value) { - self::$impl->aws_crt_signing_config_aws_set_signed_body_value($signing_config, $signed_body_value); - } - - function signing_config_aws_set_signed_body_header_type($signing_config, $signed_body_header_type) { - self::$impl->aws_crt_signing_config_aws_set_signed_body_header_type($signing_config, $signed_body_header_type); - } - - function signing_config_aws_set_expiration_in_seconds($signing_config, $expiration_in_seconds) { - self::$impl->aws_crt_signing_config_aws_set_expiration_in_seconds($signing_config, $expiration_in_seconds); - } - - function signing_config_aws_set_date($signing_config, $timestamp) { - self::$impl->aws_crt_signing_config_aws_set_date($signing_config, $timestamp); - } - - function signing_config_aws_set_should_sign_header_fn($signing_config, $should_sign_header_fn) { - self::$impl->aws_crt_signing_config_aws_set_should_sign_header_fn($signing_config, $should_sign_header_fn); - } - - function signable_new_from_http_request($http_message) { - return self::$impl->aws_crt_signable_new_from_http_request($http_message); - } - - function signable_new_from_chunk($chunk_stream, $previous_signature) { - return self::$impl->aws_crt_signable_new_from_chunk($chunk_stream, $previous_signature); - } - - function signable_new_from_canonical_request($canonical_request) { - return self::$impl->aws_crt_signable_new_from_canonical_request($canonical_request); - } - - function signable_release($signable) { - self::$impl->aws_crt_signable_release($signable); - } - - function signing_result_release($signing_result) { - self::$impl->aws_crt_signing_result_release($signing_result); - } - - function signing_result_apply_to_http_request($signing_result, $http_message) { - return self::$impl->aws_crt_signing_result_apply_to_http_request( - $signing_result, $http_message); - } - - function sign_request_aws($signable, $signing_config, $on_complete, $user_data) { - return self::$impl->aws_crt_sign_request_aws($signable, $signing_config, $on_complete, $user_data); - } - - function test_verify_sigv4a_signing($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y) { - return self::$impl->aws_crt_test_verify_sigv4a_signing($signable, $signing_config, $expected_canonical_request, $signature, $ecc_key_pub_x, $ecc_key_pub_y); - } - - public static function crc32($input, $previous = 0) { - return self::$impl->aws_crt_crc32($input, $previous); - } - - public static function crc32c($input, $previous = 0) { - return self::$impl->aws_crt_crc32c($input, $previous); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Headers.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Headers.php deleted file mode 100644 index 8d1457cf7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Headers.php +++ /dev/null @@ -1,50 +0,0 @@ -headers = $headers; - } - - public static function marshall($headers) { - $buf = ""; - foreach ($headers->headers as $header => $value) { - $buf .= Encoding::encodeString($header); - $buf .= Encoding::encodeString($value); - } - return $buf; - } - - public static function unmarshall($buf) { - $strings = Encoding::readStrings($buf); - $headers = []; - for ($idx = 0; $idx < count($strings);) { - $headers[$strings[$idx++]] = $strings[$idx++]; - } - return new Headers($headers); - } - - public function count() { - return count($this->headers); - } - - public function get($header) { - return isset($this->headers[$header]) ? $this->headers[$header] : null; - } - - public function set($header, $value) { - $this->headers[$header] = $value; - } - - public function toArray() { - return $this->headers; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Message.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Message.php deleted file mode 100644 index a8c151fe2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Message.php +++ /dev/null @@ -1,95 +0,0 @@ -method = $method; - $this->path = $path; - $this->query = $query; - $this->headers = new Headers($headers); - $this->acquire(self::$crt->http_message_new_from_blob(self::marshall($this))); - } - - public function __destruct() { - self::$crt->http_message_release($this->release()); - parent::__destruct(); - } - - public function toBlob() { - return self::$crt->http_message_to_blob($this->native); - } - - protected static function marshall($msg) { - $buf = ""; - $buf .= Encoding::encodeString($msg->method); - $buf .= Encoding::encodeString($msg->pathAndQuery()); - $buf .= Headers::marshall($msg->headers); - return $buf; - } - - protected static function _unmarshall($buf, $class=Message::class) { - $method = Encoding::readString($buf); - $path_and_query = Encoding::readString($buf); - $parts = explode("?", $path_and_query, 2); - $path = isset($parts[0]) ? $parts[0] : ""; - $query = isset($parts[1]) ? $parts[1] : ""; - $headers = Headers::unmarshall($buf); - - // Turn query params back into a dictionary - if (strlen($query)) { - $query = rawurldecode($query); - $query = explode("&", $query); - $query = array_reduce($query, function($params, $pair) { - list($param, $value) = explode("=", $pair, 2); - $params[$param] = $value; - return $params; - }, []); - } else { - $query = []; - } - - return new $class($method, $path, $query, $headers->toArray()); - } - - public function pathAndQuery() { - $path = $this->path; - $queries = []; - foreach ($this->query as $param => $value) { - $queries []= urlencode($param) . "=" . urlencode($value); - } - $query = implode("&", $queries); - if (strlen($query)) { - $path = implode("?", [$path, $query]); - } - return $path; - } - - public function method() { - return $this->method; - } - - public function path() { - return $this->path; - } - - public function query() { - return $this->query; - } - - public function headers() { - return $this->headers; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Request.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Request.php deleted file mode 100644 index bec4ac1a1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Request.php +++ /dev/null @@ -1,32 +0,0 @@ -body_stream = $body_stream; - } - - public static function marshall($request) { - return parent::marshall($request); - } - - public static function unmarshall($buf) { - return parent::_unmarshall($buf, Request::class); - } - - public function body_stream() { - return $this->body_stream; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Response.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Response.php deleted file mode 100644 index 526edc3a9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/HTTP/Response.php +++ /dev/null @@ -1,27 +0,0 @@ -status_code = $status_code; - } - - public static function marshall($response) { - return parent::marshall($response); - } - - public static function unmarshall($buf) { - return parent::_unmarshall($buf, Response::class); - } - - public function status_code() { - return $this->status_code; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/IO/EventLoopGroup.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/IO/EventLoopGroup.php deleted file mode 100644 index 7e989e768..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/IO/EventLoopGroup.php +++ /dev/null @@ -1,39 +0,0 @@ - 0, - ]; - } - - function __construct(array $options = []) { - parent::__construct(); - $options = new Options($options, self::defaults()); - $elg_options = self::$crt->event_loop_group_options_new(); - self::$crt->event_loop_group_options_set_max_threads($elg_options, $options->getInt('max_threads')); - $this->acquire(self::$crt->event_loop_group_new($elg_options)); - self::$crt->event_loop_group_options_release($elg_options); - } - - function __destruct() { - self::$crt->event_loop_group_release($this->release()); - parent::__destruct(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/IO/InputStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/IO/InputStream.php deleted file mode 100644 index 6aef70927..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/IO/InputStream.php +++ /dev/null @@ -1,50 +0,0 @@ -stream = $stream; - $options = self::$crt->input_stream_options_new(); - // The stream implementation in native just converts the PHP stream into - // a native php_stream* and executes operations entirely in native - self::$crt->input_stream_options_set_user_data($options, $stream); - $this->acquire(self::$crt->input_stream_new($options)); - self::$crt->input_stream_options_release($options); - } - - public function __destruct() { - $this->release(); - parent::__destruct(); - } - - public function eof() { - return self::$crt->input_stream_eof($this->native); - } - - public function length() { - return self::$crt->input_stream_get_length($this->native); - } - - public function read($length = 0) { - if ($length == 0) { - $length = $this->length(); - } - return self::$crt->input_stream_read($this->native, $length); - } - - public function seek($offset, $basis) { - return self::$crt->input_stream_seek($this->native, $offset, $basis); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Internal/Encoding.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Internal/Encoding.php deleted file mode 100644 index 7c625592d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Internal/Encoding.php +++ /dev/null @@ -1,37 +0,0 @@ -= self::NONE && $level <= self::TRACE); - CRT::log_set_level($level); - } - - public static function log($level, $message) { - CRT::log_message($level, $message); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/NativeResource.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/NativeResource.php deleted file mode 100644 index 528df759f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/NativeResource.php +++ /dev/null @@ -1,42 +0,0 @@ -native = $handle; - } - - protected function release() { - $native = $this->native; - $this->native = null; - return $native; - } - - function __destruct() { - // Should have been destroyed and released by derived resource - assert($this->native == null); - unset(self::$resources[spl_object_hash($this)]); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Options.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Options.php deleted file mode 100644 index 363a396c4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-crt-php/src/AWS/CRT/Options.php +++ /dev/null @@ -1,77 +0,0 @@ -value = $value; - } - - public function asObject() { - return $this->value; - } - - public function asMixed() { - return $this->value; - } - - public function asInt() { - return empty($this->value) ? 0 : (int)$this->value; - } - - public function asBool() { - return boolval($this->value); - } - - public function asString() { - return !empty($this->value) ? strval($this->value) : ""; - } - - public function asArray() { - return is_array($this->value) ? $this->value : (!empty($this->value) ? [$this->value] : []); - } - - public function asCallable() { - return is_callable($this->value) ? $this->value : null; - } -} - -final class Options { - private $options; - - public function __construct($opts = [], $defaults = []) { - $this->options = array_replace($defaults, empty($opts) ? [] : $opts); - } - - public function __get($name) { - return $this->get($name); - } - - public function asArray() { - return $this->options; - } - - public function toArray() { - return array_merge_recursive([], $this->options); - } - - public function get($name) { - return new OptionValue($this->options[$name]); - } - - public function getInt($name) { - return $this->get($name)->asInt(); - } - - public function getString($name) { - return $this->get($name)->asString(); - } - - public function getBool($name) { - return $this->get($name)->asBool(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/CODE_OF_CONDUCT.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/CODE_OF_CONDUCT.md deleted file mode 100644 index 5dccd4cfb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,4 +0,0 @@ -## Code of Conduct -This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). -For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact -opensource-codeofconduct@amazon.com with any additional questions or comments. \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/CRT_INSTRUCTIONS.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/CRT_INSTRUCTIONS.md deleted file mode 100644 index 047b4b087..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/CRT_INSTRUCTIONS.md +++ /dev/null @@ -1,4 +0,0 @@ -## Building and enabling the Common Run Time - -1. **Follow instructions on crt repo** – Clone and build the repo as shown [here][https://github.com/awslabs/aws-crt-php]. -1. **Enable the CRT** – add the following line to your php.ini file `extension=path/to/aws-crt-php/modules/awscrt.so` \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/LICENSE deleted file mode 100644 index 8d53e9f5e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/LICENSE +++ /dev/null @@ -1,141 +0,0 @@ -# Apache License -Version 2.0, January 2004 - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -## 1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 -through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the -License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled -by, or are under common control with that entity. For the purposes of this definition, "control" means -(i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract -or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial -ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software -source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, -including but not limited to compiled object code, generated documentation, and conversions to other media -types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, -as indicated by a copyright notice that is included in or attached to the work (an example is provided in the -Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) -the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, -as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not -include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work -and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any -modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to -Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to -submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of -electronic, verbal, or written communication sent to the Licensor or its representatives, including but not -limited to communication on electronic mailing lists, source code control systems, and issue tracking systems -that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but -excluding communication that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been -received by Licensor and subsequently incorporated within the Work. - -## 2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare -Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -## 3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent -license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such -license applies only to those patent claims licensable by such Contributor that are necessarily infringed by -their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such -Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim -or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work -constitutes direct or contributory patent infringement, then any patent licenses granted to You under this -License for that Work shall terminate as of the date such litigation is filed. - -## 4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You meet the following conditions: - - 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and - - 2. You must cause any modified files to carry prominent notices stating that You changed the files; and - - 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, - trademark, and attribution notices from the Source form of the Work, excluding those notices that do - not pertain to any part of the Derivative Works; and - - 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that - You distribute must include a readable copy of the attribution notices contained within such NOTICE - file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed as part of the Derivative Works; within - the Source form or documentation, if provided along with the Derivative Works; or, within a display - generated by the Derivative Works, if and wherever such third-party notices normally appear. The - contents of the NOTICE file are for informational purposes only and do not modify the License. You may - add Your own attribution notices within Derivative Works that You distribute, alongside or as an - addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be - construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or different license -terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative -Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the -conditions stated in this License. - -## 5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by -You to the Licensor shall be under the terms and conditions of this License, without any additional terms or -conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate -license agreement you may have executed with Licensor regarding such Contributions. - -## 6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, service marks, or product names of -the Licensor, except as required for reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -## 7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor -provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, -MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the -appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -## 8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless -required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any -Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential -damages of any character arising as a result of this License or out of the use or inability to use the Work -(including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has been advised of the possibility -of such damages. - -## 9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, -acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole -responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold -each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/NOTICE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/NOTICE deleted file mode 100644 index e231afd7a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/NOTICE +++ /dev/null @@ -1,17 +0,0 @@ -# AWS SDK for PHP - - - -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"). -You may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/THIRD-PARTY-LICENSES b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/THIRD-PARTY-LICENSES deleted file mode 100644 index 6f7dc6252..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/THIRD-PARTY-LICENSES +++ /dev/null @@ -1,84 +0,0 @@ -The AWS SDK for PHP includes the following third-party software/licensing: - - -** Guzzle - https://github.com/guzzle/guzzle - -Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ----------------- - -** jmespath.php - https://github.com/mtdowling/jmespath.php - -Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ----------------- - -** phpunit-mock-objects -- https://github.com/sebastianbergmann/phpunit-mock-objects - -Copyright (c) 2002-2018, Sebastian Bergmann . -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Sebastian Bergmann nor the names of his - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/composer.json deleted file mode 100644 index f60335d27..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/composer.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "aws/aws-sdk-php", - "homepage": "https://aws.amazon.com/sdk-for-php", - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "keywords": ["aws","amazon","sdk","s3","ec2","dynamodb","cloud","glacier"], - "type": "library", - "license": "Apache-2.0", - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "https://aws.amazon.com" - } - ], - "support": { - "forum": "https://github.com/aws/aws-sdk-php/discussions", - "issues": "https://github.com/aws/aws-sdk-php/issues" - }, - "require": { - "php": ">=8.1", - "guzzlehttp/guzzle": "^7.8.2 || ^8.0", - "guzzlehttp/psr7": "^2.6.3 || ^3.0", - "guzzlehttp/promises": "^2.0.3 || ^3.0", - "mtdowling/jmespath.php": "^2.9.1", - "ext-pcre": "*", - "ext-json": "*", - "ext-simplexml": "*", - "aws/aws-crt-php": "^1.2.3", - "psr/http-message": "^1.0 || ^2.0", - "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0" - }, - "require-dev": { - "composer/composer" : "^2.7.8", - "ext-openssl": "*", - "ext-dom": "*", - "ext-sockets": "*", - "phpunit/phpunit": "^10.0", - "behat/behat": "~3.0", - "doctrine/cache": "~1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "andrewsville/php-token-reflection": "^1.4", - "psr/cache": "^2.0 || ^3.0", - "psr/simple-cache": "^2.0 || ^3.0", - "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", - "yoast/phpunit-polyfills": "^2.0", - "dms/phpunit-arraysubset-asserts": "^v0.5.0" - }, - "suggest": { - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-curl": "To send requests using cURL", - "ext-sockets": "To use client-side monitoring", - "ext-pcntl": "To use client-side monitoring", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications" - }, - "autoload": { - "psr-4": { - "Aws\\": "src/" - }, - "files": ["src/functions.php"], - "exclude-from-classmap": ["src/data/"] - }, - "autoload-dev": { - "psr-4": { - "Aws\\Test\\": "tests/" - }, - "classmap": ["build/"] - }, - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AbstractConfigurationProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AbstractConfigurationProvider.php deleted file mode 100644 index 78a5cdada..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AbstractConfigurationProvider.php +++ /dev/null @@ -1,157 +0,0 @@ -get($cacheKey); - if ($found instanceof static::$interfaceClass) { - return Promise\Create::promiseFor($found); - } - - return $provider() - ->then(function ($config) use ( - $cache, - $cacheKey - ) { - $cache->set($cacheKey, $config); - return $config; - }); - }; - } - - /** - * Creates an aggregate configuration provider that invokes the provided - * variadic providers one after the other until a provider returns - * configuration. - * - * @return callable - */ - public static function chain() - { - $links = func_get_args(); - if (empty($links)) { - throw new \InvalidArgumentException('No providers in chain'); - } - - return function () use ($links) { - /** @var callable $parent */ - $parent = array_shift($links); - $promise = $parent(); - while ($next = array_shift($links)) { - $promise = $promise->otherwise($next); - } - return $promise; - }; - } - - /** - * Gets the environment's HOME directory if available. - * - * @return null|string - */ - protected static function getHomeDir() - { - // On Linux/Unix-like systems, use the HOME environment variable - if ($homeDir = getenv('HOME')) { - return $homeDir; - } - - // Get the HOMEDRIVE and HOMEPATH values for Windows hosts - $homeDrive = getenv('HOMEDRIVE'); - $homePath = getenv('HOMEPATH'); - - return ($homeDrive && $homePath) ? $homeDrive . $homePath : null; - } - - /** - * Gets default config file location from environment, falling back to aws - * default location - * - * @return string - */ - protected static function getDefaultConfigFilename() - { - if ($filename = getenv(self::ENV_CONFIG_FILE)) { - return $filename; - } - return self::getHomeDir() . '/.aws/config'; - } - - /** - * Wraps a config provider and caches previously provided configuration. - * - * @param callable $provider Config provider function to wrap. - * - * @return callable - */ - public static function memoize(callable $provider) - { - return function () use ($provider) { - static $result; - static $isConstant; - - // Constant config will be returned constantly. - if ($isConstant) { - return $result; - } - - // Create the initial promise that will be used as the cached value - if (null === $result) { - $result = $provider(); - } - - // Return config and set flag that provider is already set - return $result - ->then(function ($config) use (&$isConstant) { - $isConstant = true; - return $config; - }); - }; - } - - /** - * Reject promise with standardized exception. - * - * @param $msg - * @return Promise\RejectedPromise - */ - protected static function reject($msg) - { - $exceptionClass = static::$exceptionClass; - return new Promise\RejectedPromise(new $exceptionClass($msg)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php deleted file mode 100644 index 2c9b412d0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php +++ /dev/null @@ -1,89 +0,0 @@ -definition = $definition; - $this->shapeMap = $shapeMap; - if (isset($definition['contextParam'])) { - $this->contextParam = $definition['contextParam']; - } - } - - public function toArray() - { - return $this->definition; - } - - /** - * @return mixed|null - */ - #[\ReturnTypeWillChange] - public function offsetGet($offset) - { - return isset($this->definition[$offset]) - ? $this->definition[$offset] : null; - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function offsetSet($offset, $value) - { - $this->definition[$offset] = $value; - } - - /** - * @return bool - */ - #[\ReturnTypeWillChange] - public function offsetExists($offset) - { - return isset($this->definition[$offset]); - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function offsetUnset($offset) - { - unset($this->definition[$offset]); - } - - protected function shapeAt($key) - { - if (!isset($this->definition[$key])) { - throw new \InvalidArgumentException('Expected shape definition at ' - . $key); - } - - return $this->shapeFor($this->definition[$key]); - } - - protected function shapeFor(array $definition) - { - return isset($definition['shape']) - ? $this->shapeMap->resolve($definition) - : Shape::create($definition, $this->shapeMap); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ApiProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ApiProvider.php deleted file mode 100644 index 818ff5daf..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ApiProvider.php +++ /dev/null @@ -1,244 +0,0 @@ - 'api-2', - 'paginator' => 'paginators-1', - 'waiter' => 'waiters-2', - 'docs' => 'docs-2', - ]; - - /** @var array API manifest */ - private $manifest; - - /** @var string The directory containing service models. */ - private $modelsDir; - - /** - * Resolves an API provider and ensures a non-null return value. - * - * @param callable $provider Provider function to invoke. - * @param string $type Type of data ('api', 'waiter', 'paginator'). - * @param string $service Service name. - * @param string $version API version. - * - * @return array - * @throws UnresolvedApiException - */ - public static function resolve(callable $provider, $type, $service, $version) - { - // Execute the provider and return the result, if there is one. - $result = $provider($type, $service, $version); - if (is_array($result)) { - if (!isset($result['metadata']['serviceIdentifier'])) { - $result['metadata']['serviceIdentifier'] = $service; - } - return $result; - } - - // Throw an exception with a message depending on the inputs. - if (!isset(self::$typeMap[$type])) { - $msg = "The type must be one of: " . implode(', ', self::$typeMap); - } elseif ($service) { - $msg = "The {$service} service does not have version: {$version}."; - } else { - $msg = "You must specify a service name to retrieve its API data."; - } - - throw new UnresolvedApiException($msg); - } - - /** - * Default SDK API provider. - * - * This provider loads pre-built manifest data from the `data` directory. - * - * @return self - */ - public static function defaultProvider() - { - return new self(__DIR__ . '/../data', \Aws\manifest()); - } - - /** - * Loads API data after resolving the version to the latest, compatible, - * available version based on the provided manifest data. - * - * Manifest data is essentially an associative array of service names to - * associative arrays of API version aliases. - * - * [ - * ... - * 'ec2' => [ - * 'latest' => '2014-10-01', - * '2014-10-01' => '2014-10-01', - * '2014-09-01' => '2014-10-01', - * '2014-06-15' => '2014-10-01', - * ... - * ], - * 'ecs' => [...], - * 'elasticache' => [...], - * ... - * ] - * - * @param string $dir Directory containing service models. - * @param array $manifest The API version manifest data. - * - * @return self - */ - public static function manifest($dir, array $manifest) - { - return new self($dir, $manifest); - } - - /** - * Loads API data from the specified directory. - * - * If "latest" is specified as the version, this provider must glob the - * directory to find which is the latest available version. - * - * @param string $dir Directory containing service models. - * - * @return self - * @throws \InvalidArgumentException if the provided `$dir` is invalid. - */ - public static function filesystem($dir) - { - return new self($dir); - } - - /** - * Retrieves a list of valid versions for the specified service. - * - * @param string $service Service name - * - * @return array - */ - public function getVersions($service) - { - if (!isset($this->manifest)) { - $this->buildVersionsList($service); - } - - if (!isset($this->manifest[$service]['versions'])) { - return []; - } - - return array_values(array_unique($this->manifest[$service]['versions'])); - } - - /** - * Execute the provider. - * - * @param string $type Type of data ('api', 'waiter', 'paginator'). - * @param string $service Service name. - * @param string $version API version. - * - * @return array|null - */ - public function __invoke($type, $service, $version) - { - // Resolve the type or return null. - if (isset(self::$typeMap[$type])) { - $type = self::$typeMap[$type]; - } else { - return null; - } - - // Resolve the version or return null. - if (!isset($this->manifest)) { - $this->buildVersionsList($service); - } - - if (!isset($this->manifest[$service]['versions'][$version])) { - return null; - } - - $version = $this->manifest[$service]['versions'][$version]; - $path = "{$this->modelsDir}/{$service}/{$version}/{$type}.json"; - - try { - return \Aws\load_compiled_json($path); - } catch (\InvalidArgumentException $e) { - return null; - } - } - - /** - * @param string $modelsDir Directory containing service models. - * @param array $manifest The API version manifest data. - */ - private function __construct($modelsDir, ?array $manifest = null) - { - $this->manifest = $manifest; - $this->modelsDir = rtrim($modelsDir, '/'); - if (!is_dir($this->modelsDir)) { - throw new \InvalidArgumentException( - "The specified models directory, {$modelsDir}, was not found." - ); - } - } - - /** - * Build the versions list for the specified service by globbing the dir. - */ - private function buildVersionsList($service) - { - $dir = "{$this->modelsDir}/{$service}/"; - - if (!is_dir($dir)) { - return; - } - - // Get versions, remove . and .., and sort in descending order. - $results = array_diff(scandir($dir, SCANDIR_SORT_DESCENDING), ['..', '.']); - - if (!$results) { - $this->manifest[$service] = ['versions' => []]; - } else { - $this->manifest[$service] = [ - 'versions' => [ - 'latest' => $results[0] - ] - ]; - $this->manifest[$service]['versions'] += array_combine($results, $results); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/CborDecoder.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/CborDecoder.php deleted file mode 100644 index 95f72886a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/CborDecoder.php +++ /dev/null @@ -1,664 +0,0 @@ -offset = 0; - $this->length = strlen($data); - - return $this->decodeValue($data); - } - - /** - * Decode multiple CBOR values from sequential binary data - * - * @param string $data The CBOR-encoded binary data containing multiple values - * - * @return array Array of decoded PHP values in the order they appear in the data - * @throws CborException If data is malformed CBOR - */ - public function decodeAll(string $data): array - { - $this->length = strlen($data); - $this->offset = 0; - $values = []; - - while ($this->offset < $this->length) { - $values[] = $this->decodeValue($data); - } - - return $values; - } - - /** - * Decodes a single CBOR value at the current offset - * - * @param string $data Reference to the CBOR data being decoded - * - * @return mixed The decoded value - * @throws CborException If unexpected end of data or invalid CBOR format - */ - private function decodeValue(string &$data): mixed - { - $offset = $this->offset; - $length = $this->length; - - if ($offset >= $length) { - throw new CborException("Unexpected end of data"); - } - - $byte = ord($data[$offset++]); - $majorType = $byte >> 5; - $info = $byte & 0x1F; - - switch ($majorType) { - case 0: // Unsigned integer - if ($info < 24) { - $this->offset = $offset; - - return $info; - } - - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 1; - - return ord($data[$offset]); - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 2; - - return (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 4; - - return unpack('N', $data, $offset)[1]; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 8; - - return unpack('J', $data, $offset)[1]; - - default: - throw new CborException("Invalid additional info for integer: $info"); - } - - case 1: // Negative integer - if ($info < 24) { - $this->offset = $offset; - - return -1 - $info; - } - - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 1; - - return -1 - ord($data[$offset]); - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 2; - - return -1 - ((ord($data[$offset]) << 8) | ord($data[$offset + 1])); - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 4; - - return -1 - unpack('N', $data, $offset)[1]; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 8; - $unsigned = unpack('J', $data, $offset)[1]; - - return ($unsigned === 9223372036854775807) ? PHP_INT_MIN : -1 - $unsigned; - - default: - throw new CborException("Invalid additional info for integer: $info"); - } - - case 2: // Byte string - if ($info < 24) { - $len = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $len = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $len = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteString($data, 0x40); - - default: - throw new CborException("Invalid additional info for byte string: $info"); - } - } - - if ($offset + $len > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + $len; - - return substr($data, $offset, $len); - - case 3: // Text string - if ($info < 24) { - $len = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $len = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $len = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteString($data, 0x60); - - default: - throw new CborException("Invalid additional info for text string: $info"); - } - } - - if ($offset + $len > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + $len; - - return substr($data, $offset, $len); - - case 4: // Array - if ($info < 24) { - $count = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $count = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $count = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteArray($data); - - default: - throw new CborException("Invalid additional info for array: $info"); - } - } - - $this->offset = $offset; - $arr = []; - - for ($i = 0; $i < $count; $i++) { - $arr[] = $this->decodeValue($data); - } - - return $arr; - - case 5: // Map - if ($info < 24) { - $count = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $count = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $count = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteMap($data); - - default: - throw new CborException("Invalid additional info for map: $info"); - } - } - - $this->offset = $offset; - $map = []; - - for ($i = 0; $i < $count; $i++) { - $key = $this->decodeValue($data); - $map[$key] = $this->decodeValue($data); - } - - return $map; - - case 6: // Tag - switch ($info) { - case 24: - $offset++; - break; - - case 25: - $offset += 2; - break; - - case 26: - $offset += 4; - break; - - case 27: - $offset += 8; - break; - } - - $this->offset = $offset; - - return $this->decodeValue($data); - - case 7: // Simple/float - switch ($info) { - case 20: - $this->offset = $offset; - - return false; - - case 21: - $this->offset = $offset; - - return true; - - case 22: - case 23: - $this->offset = $offset; - - return null; - - case 25: // Half-precision float - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 2; - $half = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $sign = ($half >> 15) & 0x01; - $exp = ($half >> 10) & 0x1F; - $mant = $half & 0x3FF; - - if ($exp === 0) { - return $mant === 0 - ? ($sign ? -0.0 : 0.0) - : ($sign ? -1 : 1) * pow(2, -14) * ($mant / 1024); - } - - if ($exp === 31) { - return $mant === 0 ? ($sign ? -INF : INF) : NAN; - } - - return (float) (($sign ? -1 : 1) * pow(2, $exp - 15) * (1 + $mant / 1024)); - - case 26: // Single-precision float - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 4; - - return unpack('G', $data, $offset)[1]; - - case 27: // Double-precision float - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 8; - - return unpack('E', $data, $offset)[1]; - - case 31: - throw new CborException("Unexpected break"); - - default: - throw new CborException("Unknown simple value: $info"); - } - - default: - throw new CborException("Unknown major type: $majorType"); - } - } - - /** - * Decode indefinite-length string (byte or text) - * - * @param string $data Reference to the CBOR data being decoded - * @param int $expectedMajor Expected major type (0x40 for byte string, 0x60 for text string) - * - * @return string The concatenated string from all chunks - * @throws CborException If invalid chunk format or unexpected end of data - */ - private function decodeIndefiniteString(string &$data, int $expectedMajor): string - { - $chunks = []; - - while (true) { - $offset = $this->offset; - $length = $this->length; - - if ($offset >= $length) { - throw new CborException("Unexpected end of data"); - } - - $byte = ord($data[$offset++]); - - if ($byte === 0xFF) { - $this->offset = $offset; - - return implode('', $chunks); - } - - if (($byte & 0xE0) !== $expectedMajor) { - throw new CborException("Invalid chunk in indefinite string"); - } - - $info = $byte & 0x1F; - - if ($info === 31) { - throw new CborException("Nested indefinite string"); - } - - if ($info < 24) { - $len = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $len = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $len = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - default: - throw new CborException("Invalid chunk length info: $info"); - } - } - - if ($offset + $len > $length) { - throw new CborException("Not enough data for chunk"); - } - - $chunks[] = substr($data, $offset, $len); - $this->offset = $offset + $len; - } - } - - /** - * Decode indefinite-length array - * - * @param string $data Reference to the CBOR data being decoded - * - * @return array The decoded array elements - * @throws CborException If unexpected end of data - */ - private function decodeIndefiniteArray(string &$data): array - { - $result = []; - - while (true) { - if ($this->offset >= $this->length) { - throw new CborException("Unexpected end of data"); - } - - if (ord($data[$this->offset]) === 0xFF) { - $this->offset++; - - return $result; - } - - $result[] = $this->decodeValue($data); - } - } - - /** - * Decode indefinite-length map - * - * @param string $data Reference to the CBOR data being decoded - * - * @return array The decoded map as associative array - * @throws CborException If unexpected end of data or odd number of items - */ - private function decodeIndefiniteMap(string &$data): array - { - $result = []; - - while (true) { - if ($this->offset >= $this->length) { - throw new CborException("Unexpected end of data"); - } - - if (ord($data[$this->offset]) === 0xFF) { - $this->offset++; - - return $result; - } - - $key = $this->decodeValue($data); - $result[$key] = $this->decodeValue($data); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/CborEncoder.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/CborEncoder.php deleted file mode 100644 index c96d806b5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/CborEncoder.php +++ /dev/null @@ -1,345 +0,0 @@ - $data] wrappers) - * - Type 3: Text strings (UTF-8) - * - Type 4: Arrays - * - Type 5: Maps - * - Type 6: Tagged values (timestamps) - * - Type 7: Simple values (null, bool, float) - * - * @internal - */ -final class CborEncoder -{ - /** - * Pre-encoded integers 0-23 (single byte) and common larger values - * CBOR major type 0 (unsigned integer) - */ - private const INT_CACHE = [ - 0 => "\x00", 1 => "\x01", 2 => "\x02", 3 => "\x03", - 4 => "\x04", 5 => "\x05", 6 => "\x06", 7 => "\x07", - 8 => "\x08", 9 => "\x09", 10 => "\x0A", 11 => "\x0B", - 12 => "\x0C", 13 => "\x0D", 14 => "\x0E", 15 => "\x0F", - 16 => "\x10", 17 => "\x11", 18 => "\x12", 19 => "\x13", - 20 => "\x14", 21 => "\x15", 22 => "\x16", 23 => "\x17", - 24 => "\x18\x18", 25 => "\x18\x19", 26 => "\x18\x1A", - 32 => "\x18\x20", 50 => "\x18\x32", 64 => "\x18\x40", - 100 => "\x18\x64", 128 => "\x18\x80", 200 => "\x18\xC8", - 255 => "\x18\xFF", 256 => "\x19\x01\x00", 500 => "\x19\x01\xF4", - 1000 => "\x19\x03\xE8", 1023 => "\x19\x03\xFF", - ]; - - /** - * Pre-encoded negative integers -1 to -24 and common larger values - * CBOR major type 1 (negative integer) - */ - private const NEG_CACHE = [ - -1 => "\x20", -2 => "\x21", -3 => "\x22", -4 => "\x23", - -5 => "\x24", -10 => "\x29", -20 => "\x33", -24 => "\x37", - -25 => "\x38\x18", -50 => "\x38\x31", -100 => "\x38\x63", - ]; - - /** - * Encode a PHP value to CBOR binary string - * - * @param mixed $value The value to encode - * - * @return string - */ - public function encode(mixed $value): string - { - return $this->encodeValue($value); - } - - /** - * Recursively encode a value to CBOR - * - * @param mixed $value Value to encode - * @return string Encoded CBOR bytes - */ - private function encodeValue(mixed $value): string - { - switch (gettype($value)) { - case 'string': - $len = strlen($value); - if ($len < 24) { - return chr(0x60 | $len) . $value; - } - - if ($len < 0x100) { - return "\x78" . chr($len) . $value; - } - - return $this->encodeTextString($value); - - case 'array': - if (isset($value['__cbor_timestamp'])) { - return "\xC1\xFB" . pack('E', $value['__cbor_timestamp']); - } - - // Encode a byte string (major type 2) - if (isset($value['__cbor_bytes'])) { - $bytes = $value['__cbor_bytes']; - $len = strlen($bytes); - if ($len < 24) { - return chr(0x40 | $len) . $bytes; - } - - if ($len < 0x100) { - return "\x58" . chr($len) . $bytes; - } - - if ($len < 0x10000) { - return "\x59" . pack('n', $len) . $bytes; - } - - return "\x5A" . pack('N', $len) . $bytes; - } - - if (array_is_list($value)) { - return $this->encodeArray($value); - } - - return $this->encodeMap($value); - - case 'integer': - if (isset(self::INT_CACHE[$value])) { - return self::INT_CACHE[$value]; - } - - if (isset(self::NEG_CACHE[$value])) { - return self::NEG_CACHE[$value]; - } - - // Fast path for positive integers - // Major type 0: unsigned integer - if ($value >= 0) { - if ($value < 24) { - return chr($value); - } - - if ($value < 0x100) { - return "\x18" . chr($value); - } - - if ($value < 0x10000) { - return "\x19" . pack('n', $value); - } - - if ($value < 0x100000000) { - return "\x1A" . pack('N', $value); - } - - return "\x1B" . pack('J', $value); - } - - return $this->encodeInteger($value); - - case 'double': - // Encode a float (major type 7, float 64) - return "\xFB" . pack('E', $value); - - case 'boolean': - // Encode a boolean (major type 7, simple) - return $value ? "\xF5" : "\xF4"; - - case 'NULL': - // Encode null (major type 7, simple) - return "\xF6"; - - case 'object': - throw new CborException("Cannot encode object of type: " . get_class($value)); - - default: - throw new CborException("Cannot encode value of type: " . gettype($value)); - } - } - - /** - * Encode an integer (major type 0 or 1) - * - * @param int $value - * @return string - */ - private function encodeInteger(int $value): string - { - if (isset(self::INT_CACHE[$value])) { - return self::INT_CACHE[$value]; - } - - if (isset(self::NEG_CACHE[$value])) { - return self::NEG_CACHE[$value]; - } - - if ($value >= 0) { - // Major type 0: unsigned integer - if ($value < 24) { - return chr($value); - } - - if ($value < 0x100) { - return "\x18" . chr($value); - } - - if ($value < 0x10000) { - return "\x19" . pack('n', $value); - } - - if ($value < 0x100000000) { - return "\x1A" . pack('N', $value); - } - - return "\x1B" . pack('J', $value); - } - - // Major type 1: negative integer (-1 - n) - $value = -1 - $value; - if ($value < 24) { - return chr(0x20 | $value); - } - - if ($value < 0x100) { - return "\x38" . chr($value); - } - - if ($value < 0x10000) { - return "\x39" . pack('n', $value); - } - - if ($value < 0x100000000) { - return "\x3A" . pack('N', $value); - } - - return "\x3B" . pack('J', $value); - } - - /** - * Encode a text string (major type 3) - * - * @param string $value - * @return string - */ - private function encodeTextString(string $value): string - { - $len = strlen($value); - - if ($len < 24) { - return chr(0x60 | $len) . $value; - } - - if ($len < 0x100) { - return "\x78" . chr($len) . $value; - } - - if ($len < 0x10000) { - return "\x79" . pack('n', $len) . $value; - } - - if ($len < 0x100000000) { - return "\x7A" . pack('N', $len) . $value; - } - - return "\x7B" . pack('J', $len) . $value; - } - - /** - * Encode an array (major type 4) - * - * @param array $value - * @return string - */ - private function encodeArray(array $value): string - { - $count = count($value); - - if ($count < 24) { - $result = chr(0x80 | $count); - } elseif ($count < 0x100) { - $result = "\x98" . chr($count); - } elseif ($count < 0x10000) { - $result = "\x99" . pack('n', $count); - } elseif ($count < 0x100000000) { - $result = "\x9A" . pack('N', $count); - } else { - $result = "\x9B" . pack('J', $count); - } - - foreach ($value as $item) { - $result .= $this->encodeValue($item); - } - - return $result; - } - - /** - * Encode a map (major type 5) - * - * @param array $value - * @return string - */ - private function encodeMap(array $value): string - { - $count = count($value); - - if ($count < 24) { - $result = chr(0xA0 | $count); - } elseif ($count < 0x100) { - $result = "\xB8" . chr($count); - } elseif ($count < 0x10000) { - $result = "\xB9" . pack('n', $count); - } elseif ($count < 0x100000000) { - $result = "\xBA" . pack('N', $count); - } else { - $result = "\xBB" . pack('J', $count); - } - - foreach ($value as $k => $v) { - if (is_int($k)) { - $result .= $this->encodeInteger($k); - } else { - $len = strlen($k); - if ($len < 24) { - $result .= chr(0x60 | $len) . $k; - } elseif ($len < 0x100) { - $result .= "\x78" . chr($len) . $k; - } else { - $result .= "\x79" . pack('n', $len) . $k; - } - } - - $result .= $this->encodeValue($v); - } - - return $result; - } - - /** - * Create an empty map (major type 5 with 0 elements) - * - * @return string - */ - public function encodeEmptyMap(): string - { - return "\xA0"; - } - - /** - * Create an empty indefinite map (major type 5 indefinite length) - * - * @return string - */ - public function encodeEmptyIndefiniteMap(): string - { - return "\xBF\xFF"; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/Exception/CborException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/Exception/CborException.php deleted file mode 100644 index 3195b0976..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Cbor/Exception/CborException.php +++ /dev/null @@ -1,6 +0,0 @@ -format('Y-m-d H:i:s.u'), - new DateTimeZone('UTC') - ); - } - - /** - * @return DateTimeResult - */ - public static function fromISO8601($iso8601Timestamp) - { - if (is_numeric($iso8601Timestamp) || !is_string($iso8601Timestamp)) { - throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromISO8601'); - } - - // Prior to 8.0.10, nanosecond precision is not supported - // Reduces to microsecond precision if nanosecond precision is detected - if (PHP_VERSION_ID < 80010 - && preg_match(self::ISO8601_NANOSECOND_REGEX, $iso8601Timestamp, $matches) - ) { - $iso8601Timestamp = $matches[1] . ($matches[3] ?? ''); - } - - return new DateTimeResult($iso8601Timestamp); - } - - /** - * Create a new DateTimeResult from an unknown timestamp. - * - * @return DateTimeResult - * @throws Exception - */ - public static function fromTimestamp($timestamp, $expectedFormat = null) - { - if (empty($timestamp)) { - return self::fromEpoch(0); - } - - if (!(is_string($timestamp) || is_numeric($timestamp))) { - throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromTimestamp'); - } - - try { - if ($expectedFormat == 'iso8601') { - try { - return self::fromISO8601($timestamp); - } catch (Exception $exception) { - return self::fromEpoch($timestamp); - } - } else if ($expectedFormat == 'unixTimestamp') { - try { - return self::fromEpoch($timestamp); - } catch (Exception $exception) { - return self::fromISO8601($timestamp); - } - } else if (\Aws\is_valid_epoch($timestamp)) { - return self::fromEpoch($timestamp); - } - return self::fromISO8601($timestamp); - } catch (Exception $exception) { - throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromTimestamp'); - } - } - - /** - * Serialize the DateTimeResult as an ISO 8601 date string. - * - * @return string - */ - public function __toString() - { - return $this->format('c'); - } - - /** - * Serialize the date as an ISO 8601 date when serializing as JSON. - * - * @return string - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - return (string) $this; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/DocModel.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/DocModel.php deleted file mode 100644 index 1a0ecf95f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/DocModel.php +++ /dev/null @@ -1,139 +0,0 @@ -docs = $docs; - } - - /** - * Convert the doc model to an array. - * - * @return array - */ - public function toArray() - { - return $this->docs; - } - - /** - * Retrieves documentation about the service. - * - * @return null|string - */ - public function getServiceDocs() - { - return isset($this->docs['service']) ? $this->docs['service'] : null; - } - - /** - * Retrieves documentation about an operation. - * - * @param string $operation Name of the operation - * - * @return null|string - */ - public function getOperationDocs($operation) - { - return isset($this->docs['operations'][$operation]) - ? $this->docs['operations'][$operation] - : null; - } - - /** - * Retrieves documentation about an error. - * - * @param string $error Name of the error - * - * @return null|string - */ - public function getErrorDocs($error) - { - return isset($this->docs['shapes'][$error]['base']) - ? $this->docs['shapes'][$error]['base'] - : null; - } - - /** - * Retrieves documentation about a shape, specific to the context. - * - * @param string $shapeName Name of the shape. - * @param string $parentName Name of the parent/context shape. - * @param string $ref Name used by the context to reference the shape. - * - * @return null|string - */ - public function getShapeDocs($shapeName, $parentName, $ref) - { - if (!isset($this->docs['shapes'][$shapeName])) { - return ''; - } - - $result = ''; - $d = $this->docs['shapes'][$shapeName]; - if (isset($d['refs']["{$parentName}\${$ref}"])) { - $result = $d['refs']["{$parentName}\${$ref}"]; - } elseif (isset($d['base'])) { - $result = $d['base']; - } - - if (isset($d['append'])) { - if (!isset($d['excludeAppend']) - || !in_array($parentName, $d['excludeAppend']) - ) { - $result .= $d['append']; - } - } - - if (isset($d['appendOnly']) - && in_array($parentName, $d['appendOnly']['shapes']) - ) { - $result .= $d['appendOnly']['message']; - } - - return $this->clean($result); - } - - - private function clean($content) - { - if (!$content) { - return ''; - } - - $tidy = new \tidy(); - $tidy->parseString($content, [ - 'indent' => true, - 'doctype' => 'omit', - 'output-html' => true, - 'show-body-only' => true, - 'drop-empty-paras' => true, - 'clean' => true, - 'drop-proprietary-attributes' => true, - 'hide-comments' => true, - 'logical-emphasis' => true - ]); - $tidy->cleanRepair(); - - return (string) $content; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/AbstractErrorParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/AbstractErrorParser.php deleted file mode 100644 index a209a9cfe..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/AbstractErrorParser.php +++ /dev/null @@ -1,85 +0,0 @@ -api = $api; - } - - abstract protected function payload( - ResponseInterface $response, - StructureShape $member - ); - - protected function populateShape( - array &$data, - ResponseInterface $response, - ?CommandInterface $command = null - ) { - $data['body'] = []; - - if (!empty($command) && !empty($this->api)) { - - // If modeled error code is indicated, check for known error shape - if (!empty($data['code'])) { - - $errors = $this->api->getOperation($command->getName())->getErrors(); - foreach ($errors as $error) { - - // If error code matches a known error shape, populate the body - if ($this->errorCodeMatches($data, $error)) { - $data['body'] = $this->payload( - $response, - $error - ); - $data['error_shape'] = $error; - - foreach ($error->getMembers() as $name => $member) { - switch ($member['location']) { - case 'header': - $this->extractHeader($name, $member, $response, $data['body']); - break; - case 'headers': - $this->extractHeaders($name, $member, $response, $data['body']); - break; - case 'statusCode': - $this->extractStatus($name, $response, $data['body']); - break; - } - } - - break; - } - } - } - } - - return $data; - } - - private function errorCodeMatches(array $data, $error): bool - { - return $data['code'] == $error['name'] - || (isset($error['error']['code']) && $data['code'] === $error['error']['code']); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/AbstractRpcV2ErrorParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/AbstractRpcV2ErrorParser.php deleted file mode 100644 index 2f8a11f6f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/AbstractRpcV2ErrorParser.php +++ /dev/null @@ -1,159 +0,0 @@ -parseError($response); - - if (isset($data['parsed']['__type'])) { - $data['message'] = $data['parsed']['message'] ?? null; - } - - $this->populateShape($data, $response, $command); - - return $data; - } - - /** - * @param ResponseInterface $response - * @param StructureShape $member - * - * @return array - */ - abstract protected function payload( - ResponseInterface $response, - StructureShape $member - ): array; - - /** - * @param StreamInterface $body - * @param ResponseInterface $response - * - * @return mixed - */ - abstract protected function parseBody( - StreamInterface $body, - ResponseInterface $response - ): mixed; - - /** - * @param ResponseInterface $response - * - * @return array - */ - private function parseError(ResponseInterface $response): array - { - $statusCode = (string) $response->getStatusCode(); - $errorCode = null; - $errorType = null; - - if ($this->api?->getMetadata('awsQueryCompatible') !== null - && $response->hasHeader(self::HEADER_QUERY_ERROR) - && $awsQueryError = $this->parseQueryCompatibleHeader($response) - ) { - $errorCode = $awsQueryError['code']; - $errorType = $awsQueryError['type']; - } - - if (!$errorCode && $response->hasHeader(self::HEADER_ERROR_TYPE)) { - $errorCode = $this->extractErrorCode( - $response->getHeaderLine(self::HEADER_ERROR_TYPE) - ); - } - - $parsedBody = null; - $body = $response->getBody(); - if ($body->getSize()) { - //TODO handle unseekable streams with CachingStream - $parsedBody = array_change_key_case($this->parseBody($body, $response)); - } - - if (!$errorCode && $parsedBody) { - $errorCode = $this->extractErrorCode( - $parsedBody['code'] ?? $parsedBody['__type'] ?? '' - ); - } - - return [ - 'request_id' => $response->getHeaderLine(self::HEADER_REQUEST_ID), - 'code' => $errorCode ?: null, - 'message' => null, - 'type' => $errorType ?? ($statusCode[0] === '4' ? 'client' : 'server'), - 'parsed' => $parsedBody, - ]; - } - - /** - * Parse AWS Query Compatible error from header - * - * @param ResponseInterface $response - * - * @return array|null Returns ['code' => string, 'type' => string] or null - */ - private function parseQueryCompatibleHeader(ResponseInterface $response): ?array - { - $parts = explode(';', $response->getHeaderLine(self::HEADER_QUERY_ERROR)); - if (count($parts) === 2 && $parts[0] && $parts[1]) { - return [ - 'code' => $parts[0], - 'type' => $parts[1], - ]; - } - - return null; - } - - /** - * Extract error code from raw error string containing # and/or : delimiters - * - * @param string $rawErrorCode - * @return string - */ - private function extractErrorCode(string $rawErrorCode): string - { - // Handle format with both # and uri (e.g., "namespace#ErrorCode:http://foo-bar") - if (str_contains($rawErrorCode, ':') && str_contains($rawErrorCode, '#')) { - $start = strpos($rawErrorCode, '#') + 1; - $end = strpos($rawErrorCode, ':', $start); - return substr($rawErrorCode, $start, $end - $start); - } - - // Handle format with uri only : (e.g., "ErrorCode:http://foo-bar.com/baz") - if (str_contains($rawErrorCode, ':')) { - return substr($rawErrorCode, 0, strpos($rawErrorCode, ':')); - } - - // Handle format with only # (e.g., "namespace#ErrorCode") - if (str_contains($rawErrorCode, '#')) { - return substr($rawErrorCode, strpos($rawErrorCode, '#') + 1); - } - - return $rawErrorCode; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/JsonParserTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/JsonParserTrait.php deleted file mode 100644 index b6cd2aa4e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/JsonParserTrait.php +++ /dev/null @@ -1,147 +0,0 @@ -getStatusCode(); - $error_code = null; - $error_type = null; - - // Parse error code and type for query compatible services - if ($this->api - && !is_null($this->api->getMetadata('awsQueryCompatible')) - && $response->hasHeader('x-amzn-query-error') - ) { - $awsQueryError = $this->parseAwsQueryCompatibleHeader($response); - if ($awsQueryError) { - $error_code = $awsQueryError['code']; - $error_type = $awsQueryError['type']; - } - } - - // Parse error code from X-Amzn-Errortype header - if (!$error_code && $response->hasHeader('X-Amzn-Errortype')) { - $error_code = $this->extractErrorCode( - $response->getHeaderLine('X-Amzn-Errortype') - ); - } - - $parsedBody = null; - - $rawBody = AbstractParser::getBodyContents($response); - if (!empty($rawBody)) { - $parsedBody = $this->parseJson($rawBody, $response); - } - - // Parse error code from response body - if (!$error_code && $parsedBody) { - $error_code = $this->parseErrorFromBody($parsedBody); - } - - if (!isset($error_type)) { - $error_type = $code[0] == '4' ? 'client' : 'server'; - } - - return [ - 'request_id' => $response->getHeaderLine('x-amzn-requestid'), - 'code' => $error_code ?? null, - 'message' => null, - 'type' => $error_type, - 'parsed' => $parsedBody - ]; - } - - /** - * Parse AWS Query Compatible error from header - * - * @param ResponseInterface $response - * @return array|null Returns ['code' => string, 'type' => string] or null - */ - private function parseAwsQueryCompatibleHeader(ResponseInterface $response): ?array - { - $queryError = $response->getHeaderLine('x-amzn-query-error'); - $parts = explode(';', $queryError); - - if (count($parts) === 2 && $parts[0] && $parts[1]) { - return [ - 'code' => $parts[0], - 'type' => $parts[1] - ]; - } - - return null; - } - - /** - * Parse error code from response body - * - * @param array|null $parsedBody - * @return string|null - */ - private function parseErrorFromBody(?array $parsedBody): ?string - { - if (!$parsedBody - || (!isset($parsedBody['code']) && !isset($parsedBody['__type'])) - ) { - return null; - } - - $error_code = $parsedBody['code'] ?? $parsedBody['__type']; - return $this->extractErrorCode($error_code); - } - - /** - * Extract error code from raw error string containing # and/or : delimiters - * - * @param string $rawErrorCode - * @return string - */ - private function extractErrorCode(string $rawErrorCode): string - { - // Handle format with both # and uri (e.g., "namespace#http://foo-bar") - if (str_contains($rawErrorCode, ':') && str_contains($rawErrorCode, '#')) { - $start = strpos($rawErrorCode, '#') + 1; - $end = strpos($rawErrorCode, ':', $start); - return substr($rawErrorCode, $start, $end - $start); - } - - // Handle format with uri only : (e.g., "ErrorCode:http://foo-bar.com/baz") - if (str_contains($rawErrorCode, ':')) { - return substr($rawErrorCode, 0, strpos($rawErrorCode, ':')); - } - - // Handle format with only # (e.g., "namespace#ErrorCode") - if (str_contains($rawErrorCode, '#')) { - return substr($rawErrorCode, strpos($rawErrorCode, '#') + 1); - } - - return $rawErrorCode; - } - - protected function payload( - ResponseInterface $response, - StructureShape $member - ) { - $rawBody = AbstractParser::getBodyContents($response); - - if (!empty($rawBody)) { - $jsonBody = $this->parseJson($rawBody, $response); - } else { - $jsonBody = $rawBody; - } - - return $this->parser->parse($member, $jsonBody); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/JsonRpcErrorParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/JsonRpcErrorParser.php deleted file mode 100644 index e4e9070f4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/JsonRpcErrorParser.php +++ /dev/null @@ -1,49 +0,0 @@ -parser = $parser ?: new JsonParser(); - } - - public function __invoke( - ResponseInterface $response, - ?CommandInterface $command = null - ) { - $response = AbstractParser::getResponseWithCachingStream($response); - $data = $this->genericHandler($response); - - // Make the casing consistent across services. - if ($data['parsed']) { - $data['parsed'] = array_change_key_case($data['parsed']); - } - - if (isset($data['parsed']['__type'])) { - if (!isset($data['code'])) { - $parts = explode('#', $data['parsed']['__type']); - $data['code'] = isset($parts[1]) ? $parts[1] : $parts[0]; - } - $data['message'] = $data['parsed']['message'] ?? null; - } - - $this->populateShape($data, $response, $command); - - return $data; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/RestJsonErrorParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/RestJsonErrorParser.php deleted file mode 100644 index ea2be9da0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/RestJsonErrorParser.php +++ /dev/null @@ -1,53 +0,0 @@ -parser = $parser ?: new JsonParser(); - } - - public function __invoke( - ResponseInterface $response, - ?CommandInterface $command = null - ) { - $response = AbstractParser::getResponseWithCachingStream($response); - $data = $this->genericHandler($response); - - // Merge in error data from the JSON body - if ($json = $data['parsed']) { - $data = array_replace($json, $data); - } - - // Correct error type from services like Amazon Glacier - if (!empty($data['type'])) { - $data['type'] = strtolower($data['type']); - } - - // Retrieve error message directly - $data['message'] = $data['parsed']['message'] - ?? $data['parsed']['Message'] - ?? $data['parsed']['error_description'] - ?? null; - - $this->populateShape($data, $response, $command); - - return $data; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/RpcV2CborErrorParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/RpcV2CborErrorParser.php deleted file mode 100644 index 8aa84d478..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/RpcV2CborErrorParser.php +++ /dev/null @@ -1,65 +0,0 @@ -decoder = new CborDecoder(); - parent::__construct($api); - } - - /** - * @param ResponseInterface $response - * @param StructureShape $member - * - * @return array - * @throws \Exception - */ - protected function payload( - ResponseInterface $response, - StructureShape $member - ): array - { - $body = $response->getBody(); - $cborBody = $this->parseCbor($body, $response); - - return $this->resolveOutputShape($member, $cborBody); - } - - /** - * @param StreamInterface $body - * @param ResponseInterface $response - * - * @return mixed - */ - protected function parseBody( - StreamInterface $body, - ResponseInterface $response - ): mixed - { - return $this->parseCbor($body, $response); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/XmlErrorParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/XmlErrorParser.php deleted file mode 100644 index 50221843e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ErrorParser/XmlErrorParser.php +++ /dev/null @@ -1,121 +0,0 @@ -parser = $parser ?: new XmlParser(); - } - - public function __invoke( - ResponseInterface $response, - ?CommandInterface $command = null - ) { - $response = AbstractParser::getResponseWithCachingStream($response); - $code = (string) $response->getStatusCode(); - - $data = [ - 'type' => $code[0] == '4' ? 'client' : 'server', - 'request_id' => null, - 'code' => null, - 'message' => null, - 'parsed' => null - ]; - - $rawBody = AbstractParser::getBodyContents($response); - if (!empty($rawBody)) { - $this->parseBody($this->parseXml($rawBody, $response), $data); - } else { - $this->parseHeaders($response, $data); - } - - $this->populateShape($data, $response, $command); - - return $data; - } - - private function parseHeaders(ResponseInterface $response, array &$data) - { - if ($response->getStatusCode() == '404') { - $data['code'] = 'NotFound'; - } - - $data['message'] = $response->getStatusCode() . ' ' - . $response->getReasonPhrase(); - - if ($requestId = $response->getHeaderLine('x-amz-request-id')) { - $data['request_id'] = $requestId; - $data['message'] .= " (Request-ID: $requestId)"; - } - } - - private function parseBody(\SimpleXMLElement $body, array &$data) - { - $data['parsed'] = $body; - $prefix = $this->registerNamespacePrefix($body); - - if ($tempXml = $body->xpath("//{$prefix}Code[1]")) { - $data['code'] = (string) $tempXml[0]; - } - - if ($tempXml = $body->xpath("//{$prefix}Message[1]")) { - $data['message'] = (string) $tempXml[0]; - } - - $tempXml = $body->xpath("//{$prefix}RequestId[1]"); - if (isset($tempXml[0])) { - $data['request_id'] = (string)$tempXml[0]; - } - } - - protected function registerNamespacePrefix(\SimpleXMLElement $element) - { - $namespaces = $element->getDocNamespaces(); - if (!isset($namespaces[''])) { - return ''; - } - - // Account for the default namespace being defined and PHP not - // being able to handle it :(. - $element->registerXPathNamespace('ns', $namespaces['']); - return 'ns:'; - } - - protected function payload( - ResponseInterface $response, - StructureShape $member - ) { - $rawBody = AbstractParser::getBodyContents($response); - - if (empty($rawBody)) { - return $rawBody; - } - - $xmlBody = $this->parseXml($rawBody, $response); - $prefix = $this->registerNamespacePrefix($xmlBody); - $errorBody = $xmlBody->xpath("//{$prefix}Error"); - - if (is_array($errorBody) && !empty($errorBody[0])) { - return $this->parser->parse($member, $errorBody[0]); - } - - return $rawBody; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Exception/RpcV2CborException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Exception/RpcV2CborException.php deleted file mode 100644 index 445061d5a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Exception/RpcV2CborException.php +++ /dev/null @@ -1,11 +0,0 @@ -member) { - if (!isset($this->definition['member'])) { - throw new \RuntimeException('No member attribute specified'); - } - $this->member = Shape::create( - $this->definition['member'], - $this->shapeMap - ); - } - - return $this->member; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/MapShape.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/MapShape.php deleted file mode 100644 index f180f9a68..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/MapShape.php +++ /dev/null @@ -1,54 +0,0 @@ -value) { - if (!isset($this->definition['value'])) { - throw new \RuntimeException('No value specified'); - } - - $this->value = Shape::create( - $this->definition['value'], - $this->shapeMap - ); - } - - return $this->value; - } - - /** - * @return Shape - */ - public function getKey() - { - if (!$this->key) { - $this->key = isset($this->definition['key']) - ? Shape::create($this->definition['key'], $this->shapeMap) - : new Shape(['type' => 'string'], $this->shapeMap); - } - - return $this->key; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Operation.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Operation.php deleted file mode 100644 index 43c695e72..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Operation.php +++ /dev/null @@ -1,158 +0,0 @@ -staticContextParams = $definition['staticContextParams']; - } - - if (isset($definition['operationContextParams'])) { - $this->operationContextParams = $definition['operationContextParams']; - } - - parent::__construct($definition, $shapeMap); - $this->contextParams = $this->setContextParams(); - } - - /** - * Returns an associative array of the HTTP attribute of the operation: - * - * - method: HTTP method of the operation - * - requestUri: URI of the request (can include URI template placeholders) - * - * @return array - */ - public function getHttp() - { - return $this->definition['http']; - } - - /** - * Get the input shape of the operation. - * - * @return StructureShape - */ - public function getInput() - { - if (!$this->input) { - if ($input = $this['input']) { - $this->input = $this->shapeFor($input); - } else { - $this->input = new StructureShape([], $this->shapeMap); - } - } - - return $this->input; - } - - /** - * Get the output shape of the operation. - * - * @return StructureShape - */ - public function getOutput() - { - if (!$this->output) { - if ($output = $this['output']) { - $this->output = $this->shapeFor($output); - } else { - $this->output = new StructureShape([], $this->shapeMap); - } - } - - return $this->output; - } - - /** - * Get an array of operation error shapes. - * - * @return StructureShape[] - */ - public function getErrors() - { - if ($this->errors === null) { - if ($errors = $this['errors']) { - foreach ($errors as $key => $error) { - $errors[$key] = $this->shapeFor($error); - } - $this->errors = $errors; - } else { - $this->errors = []; - } - } - - return $this->errors; - } - - /** - * Gets static modeled static values used for - * endpoint resolution. - * - * @return array - */ - public function getStaticContextParams() - { - return $this->staticContextParams; - } - - /** - * Gets definition of modeled dynamic values used - * for endpoint resolution - * - * @return array - */ - public function getContextParams() - { - return $this->contextParams; - } - - /** - * Gets definition of modeled dynamic values used - * for endpoint resolution - * - * @return array - */ - public function getOperationContextParams(): array - { - return $this->operationContextParams; - } - - private function setContextParams() - { - $members = $this->getInput()->getMembers(); - $contextParams = []; - - foreach($members as $name => $shape) { - if (!empty($contextParam = $shape->getContextParam())) { - $contextParams[$contextParam['name']] = [ - 'shape' => $name, - 'type' => $shape->getType() - ]; - } - } - return $contextParams; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractParser.php deleted file mode 100644 index 296e1b23f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractParser.php +++ /dev/null @@ -1,70 +0,0 @@ -api = $api; - } - - /** - * @param CommandInterface $command Command that was executed. - * @param ResponseInterface $response Response that was received. - * - * @return ResultInterface - */ - abstract public function __invoke( - CommandInterface $command, - ResponseInterface $response - ); - - abstract public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ); - - public static function getBodyContents(ResponseInterface $response): string - { - $body = $response->getBody(); - if ($body->isSeekable()) { - $body->rewind(); - } - - return $body->getContents(); - } - - public static function getResponseWithCachingStream( - ResponseInterface $response - ): ResponseInterface - { - if (!$response->getBody()->isSeekable()) { - return $response->withBody( - new CachingStream($response->getBody()) - ); - } - - return $response; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractRestParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractRestParser.php deleted file mode 100644 index eae8e7b33..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractRestParser.php +++ /dev/null @@ -1,234 +0,0 @@ -api->getOperation($command->getName())->getOutput(); - $result = []; - - if ($payload = $output['payload']) { - $this->extractPayload($payload, $output, $response, $result); - } else { - $response = AbstractParser::getResponseWithCachingStream($response); - - if ($response->getBody()->getSize() === null) { - $rawBody = AbstractParser::getBodyContents($response); - $isEmpty = empty($rawBody); - } else { - $isEmpty = $response->getBody()->getSize() === 0; - } - - if (!$isEmpty && count($output->getMembers()) > 0 - ) { - // if no payload was found, then parse the contents of the body - $this->payload($response, $output, $result); - } - } - - foreach ($output->getMembers() as $name => $member) { - switch ($member['location']) { - case 'header': - $this->extractHeader($name, $member, $response, $result); - break; - case 'headers': - $this->extractHeaders($name, $member, $response, $result); - break; - case 'statusCode': - $this->extractStatus($name, $response, $result); - break; - } - } - - return new Result($result); - } - - private function extractPayload( - $payload, - StructureShape $output, - ResponseInterface $response, - array &$result - ) { - $member = $output->getMember($payload); - $body = $response->getBody(); - if (!empty($member['eventstream'])) { - $result[$payload] = new EventParsingIterator( - $body, - $member, - $this - ); - - return; - } - - $response = AbstractParser::getResponseWithCachingStream($response); - - if ($member instanceof StructureShape) { - //Unions must have at least one member set to a non-null value - // If the body is empty, we can assume it is unset - if ($response->getBody()->getSize() === null) { - $rawBody = AbstractParser::getBodyContents($response); - $isEmpty = empty($rawBody); - } else { - $isEmpty = $response->getBody()->getSize() === 0; - } - - if (!empty($member['union']) && $isEmpty) { - return; - } - - $result[$payload] = []; - $this->payload($response, $member, $result[$payload]); - } else { - // Always set the payload to the body stream, regardless of content - $result[$payload] = $body; - } - } - - /** - * Extract a single header from the response into the result. - */ - private function extractHeader( - $name, - Shape $shape, - ResponseInterface $response, - &$result - ) { - $value = $response->getHeaderLine($shape['locationName'] ?: $name); - // Empty headers should not be deserialized - if ($value === null || $value === '') { - return; - } - - switch ($shape->getType()) { - case 'float': - case 'double': - $value = match ($value) { - 'NaN', 'Infinity', '-Infinity' => $value, - default => (float) $value - }; - break; - case 'long': - case 'integer': - $value = (int) $value; - break; - case 'boolean': - $value = filter_var($value, FILTER_VALIDATE_BOOLEAN); - break; - case 'blob': - $value = base64_decode($value); - break; - case 'timestamp': - try { - $value = DateTimeResult::fromTimestamp( - $value, - !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null - ); - break; - } catch (\Exception $e) { - // If the value cannot be parsed, then do not add it to the - // output structure. - return; - } - case 'string': - try { - if ($shape['jsonvalue']) { - $value = $this->parseJson(base64_decode($value), $response); - } - - // If value is not set, do not add to output structure. - if (!isset($value)) { - return; - } - break; - } catch (\Exception $e) { - //If the value cannot be parsed, then do not add it to the - //output structure. - return; - } - case 'list': - $listMember = $shape->getMember(); - $type = $listMember->getType(); - - // Only boolean lists require special handling - // other types can be returned as-is - if ($type !== 'boolean') { - break; - } - - $items = array_map('trim', explode(',', $value)); - $value = array_map( - static fn($item) => filter_var($item, FILTER_VALIDATE_BOOLEAN), - $items - ); - - break; - } - - $result[$name] = $value; - } - - /** - * Extract a map of headers with an optional prefix from the response. - */ - private function extractHeaders( - $name, - Shape $shape, - ResponseInterface $response, - &$result - ) { - // Check if the headers are prefixed by a location name - $result[$name] = []; - $prefix = $shape['locationName']; - $prefixLen = $prefix !== null ? strlen($prefix) : 0; - - foreach ($response->getHeaders() as $k => $values) { - if (!$prefixLen) { - $result[$name][$k] = implode(', ', $values); - } elseif (stripos($k, $prefix) === 0) { - $result[$name][substr($k, $prefixLen)] = implode(', ', $values); - } - } - } - - /** - * Places the status code of the response into the result array. - */ - private function extractStatus( - $name, - ResponseInterface $response, - array &$result - ) { - $result[$name] = (int) $response->getStatusCode(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractRpcV2Parser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractRpcV2Parser.php deleted file mode 100644 index cef92fb03..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/AbstractRpcV2Parser.php +++ /dev/null @@ -1,83 +0,0 @@ - static::$smithyProtocol - * - * @internal - */ -abstract class AbstractRpcV2Parser extends AbstractParser -{ - private const HEADER_SMITHY_PROTOCOL = 'Smithy-Protocol'; - - /** @var string */ - protected static string $smithyProtocol; - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - $operation = $this->api->getOperation($command->getName()); - - return $this->parseResponse($response, $operation); - } - - /** - * Parses a response according to Smithy RPC V2 protocol standards. - * - * @param ResponseInterface $response the response to parse. - * @param Operation $operation the operation which holds information for - * parsing the response. - * - * @return Result - */ - private function parseResponse( - ResponseInterface $response, - Operation $operation - ): Result - { - $smithyProtocolHeader = $response->getHeaderLine(self::HEADER_SMITHY_PROTOCOL); - if ($smithyProtocolHeader !== static::$smithyProtocol) { - $statusCode = $response->getStatusCode(); - throw new ParserException( - "Malformed response: Smithy-Protocol header mismatch (HTTP {$statusCode}). " - . 'Expected ' . static::$smithyProtocol - ); - } - - if ($operation['output'] === null) { - return new Result([]); - } - - $outputShape = $operation->getOutput(); - foreach ($outputShape->getMembers() as $memberName => $memberProps) { - if (!empty($memberProps['eventstream'])) { - return new Result([ - $memberName => new EventParsingIterator( - $response->getBody(), - $outputShape->getMember($memberName), - $this - ) - ]); - } - } - - $result = $this->parseMemberFromStream( - $response->getBody(), - $outputShape, - $response - ); - - return new Result(is_null($result) ? [] : $result); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/Crc32ValidatingParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/Crc32ValidatingParser.php deleted file mode 100644 index 8e5d4f08e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/Crc32ValidatingParser.php +++ /dev/null @@ -1,54 +0,0 @@ -parser = $parser; - } - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - if ($expected = $response->getHeaderLine('x-amz-crc32')) { - $hash = hexdec(Psr7\Utils::hash($response->getBody(), 'crc32b')); - if ($expected != $hash) { - throw new AwsException( - "crc32 mismatch. Expected {$expected}, found {$hash}.", - $command, - [ - 'code' => 'ClientChecksumMismatch', - 'connection_error' => true, - 'response' => $response - ] - ); - } - } - - $fn = $this->parser; - return $fn($command, $response); - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - return $this->parser->parseMemberFromStream($stream, $member, $response); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/DecodingEventStreamIterator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/DecodingEventStreamIterator.php deleted file mode 100644 index b31cbd824..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/DecodingEventStreamIterator.php +++ /dev/null @@ -1,347 +0,0 @@ - 'decodeUint32', - self::LENGTH_HEADERS => 'decodeUint32', - self::CRC_PRELUDE => 'decodeUint32', - ]; - - private static $lengthFormatMap = [ - 1 => 'decodeUint8', - 2 => 'decodeUint16', - 4 => 'decodeUint32', - 8 => 'decodeUint64', - ]; - - private static $headerTypeMap = [ - 0 => 'decodeBooleanTrue', - 1 => 'decodeBooleanFalse', - 2 => 'decodeInt8', - 3 => 'decodeInt16', - 4 => 'decodeInt32', - 5 => 'decodeInt64', - 6 => 'decodeBytes', - 7 => 'decodeString', - 8 => 'decodeTimestamp', - 9 => 'decodeUuid', - ]; - - /** @var StreamInterface Stream of eventstream shape to parse. */ - protected $stream; - - /** @var array Currently parsed event. */ - protected $currentEvent; - - /** @var int Current in-order event key. */ - protected $key; - - /** @var resource|\HashContext CRC32 hash context for event validation */ - protected $hashContext; - - /** @var int $currentPosition */ - protected $currentPosition; - - /** - * DecodingEventStreamIterator constructor. - * - * @param StreamInterface $stream - */ - public function __construct(StreamInterface $stream) - { - $this->stream = $stream; - $this->rewind(); - } - - protected function parseHeaders($headerBytes) - { - $headers = []; - $bytesRead = 0; - - while ($bytesRead < $headerBytes) { - list($key, $numBytes) = $this->decodeString(1); - $bytesRead += $numBytes; - - list($type, $numBytes) = $this->decodeUint8(); - $bytesRead += $numBytes; - - $f = self::$headerTypeMap[$type]; - list($value, $numBytes) = $this->{$f}(); - $bytesRead += $numBytes; - - if (isset($headers[$key])) { - throw new ParserException('Duplicate key in event headers.'); - } - $headers[$key] = $value; - } - - return [$headers, $bytesRead]; - } - - protected function parsePrelude() - { - $prelude = []; - $bytesRead = 0; - - $calculatedCrc = null; - foreach (self::$preludeFormat as $key => $decodeFunction) { - if ($key === self::CRC_PRELUDE) { - $hashCopy = hash_copy($this->hashContext); - $calculatedCrc = hash_final($this->hashContext, true); - $this->hashContext = $hashCopy; - } - list($value, $numBytes) = $this->{$decodeFunction}(); - $bytesRead += $numBytes; - - $prelude[$key] = $value; - } - - if (unpack('N', $calculatedCrc)[1] !== $prelude[self::CRC_PRELUDE]) { - throw new ParserException('Prelude checksum mismatch.'); - } - - return [$prelude, $bytesRead]; - } - - /** - * This method decodes an event from the stream. - * - * @return array - */ - protected function parseEvent() - { - $event = []; - - if ($this->stream->tell() < $this->stream->getSize()) { - $this->hashContext = hash_init('crc32b'); - - $bytesLeft = $this->stream->getSize() - $this->stream->tell(); - list($prelude, $numBytes) = $this->parsePrelude(); - if ($prelude[self::LENGTH_TOTAL] > $bytesLeft) { - throw new ParserException('Message length too long.'); - } - $bytesLeft -= $numBytes; - - if ($prelude[self::LENGTH_HEADERS] > $bytesLeft) { - throw new ParserException('Headers length too long.'); - } - - list( - $event[self::HEADERS], - $numBytes - ) = $this->parseHeaders($prelude[self::LENGTH_HEADERS]); - - $event[self::PAYLOAD] = Psr7\Utils::streamFor( - $this->readAndHashBytes( - $prelude[self::LENGTH_TOTAL] - self::BYTES_PRELUDE - - $numBytes - self::BYTES_TRAILING - ) - ); - - $calculatedCrc = hash_final($this->hashContext, true); - $messageCrc = $this->stream->read(4); - if ($calculatedCrc !== $messageCrc) { - throw new ParserException('Message checksum mismatch.'); - } - } - - return $event; - } - - // Iterator Functionality - - /** - * @return array - */ - #[\ReturnTypeWillChange] - public function current() - { - return $this->currentEvent; - } - - /** - * @return int - */ - #[\ReturnTypeWillChange] - public function key() - { - return $this->key; - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function next() - { - $this->currentPosition = $this->stream->tell(); - if ($this->valid()) { - $this->key++; - $this->currentEvent = $this->parseEvent(); - } - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function rewind() - { - $this->stream->rewind(); - $this->key = 0; - $this->currentPosition = 0; - $this->currentEvent = $this->parseEvent(); - } - - /** - * @return bool - */ - #[\ReturnTypeWillChange] - public function valid() - { - return $this->currentPosition < $this->stream->getSize(); - } - - // Decoding Utilities - - protected function readAndHashBytes($num) - { - $bytes = $this->stream->read($num); - hash_update($this->hashContext, $bytes); - return $bytes; - } - - private function decodeBooleanTrue() - { - return [true, 0]; - } - - private function decodeBooleanFalse() - { - return [false, 0]; - } - - private function uintToInt($val, $size) - { - $signedCap = pow(2, $size - 1); - if ($val > $signedCap) { - $val -= (2 * $signedCap); - } - return $val; - } - - private function decodeInt8() - { - $val = (int)unpack('C', $this->readAndHashBytes(1))[1]; - return [$this->uintToInt($val, 8), 1]; - } - - private function decodeUint8() - { - return [unpack('C', $this->readAndHashBytes(1))[1], 1]; - } - - private function decodeInt16() - { - $val = (int)unpack('n', $this->readAndHashBytes(2))[1]; - return [$this->uintToInt($val, 16), 2]; - } - - private function decodeUint16() - { - return [unpack('n', $this->readAndHashBytes(2))[1], 2]; - } - - private function decodeInt32() - { - $val = (int)unpack('N', $this->readAndHashBytes(4))[1]; - return [$this->uintToInt($val, 32), 4]; - } - - private function decodeUint32() - { - return [unpack('N', $this->readAndHashBytes(4))[1], 4]; - } - - private function decodeInt64() - { - $val = $this->unpackInt64($this->readAndHashBytes(8))[1]; - return [$this->uintToInt($val, 64), 8]; - } - - private function decodeUint64() - { - return [$this->unpackInt64($this->readAndHashBytes(8))[1], 8]; - } - - private function unpackInt64($bytes) - { - return unpack('J', $bytes); - } - - private function decodeBytes($lengthBytes=2) - { - if (!isset(self::$lengthFormatMap[$lengthBytes])) { - throw new ParserException('Undefined variable length format.'); - } - $f = self::$lengthFormatMap[$lengthBytes]; - list($len, $bytes) = $this->{$f}(); - return [$this->readAndHashBytes($len), $len + $bytes]; - } - - private function decodeString($lengthBytes=2) - { - if (!isset(self::$lengthFormatMap[$lengthBytes])) { - throw new ParserException('Undefined variable length format.'); - } - $f = self::$lengthFormatMap[$lengthBytes]; - list($len, $bytes) = $this->{$f}(); - return [$this->readAndHashBytes($len), $len + $bytes]; - } - - private function decodeTimestamp() - { - list($val, $bytes) = $this->decodeInt64(); - return [ - DateTimeResult::createFromFormat('U.u', $val / 1000), - $bytes - ]; - } - - private function decodeUuid() - { - $val = unpack('H32', $this->readAndHashBytes(16))[1]; - return [ - substr($val, 0, 8) . '-' - . substr($val, 8, 4) . '-' - . substr($val, 12, 4) . '-' - . substr($val, 16, 4) . '-' - . substr($val, 20, 12), - 16 - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/EventParsingIterator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/EventParsingIterator.php deleted file mode 100644 index b14c5fcbe..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/EventParsingIterator.php +++ /dev/null @@ -1,211 +0,0 @@ -decodingIterator = $this->chooseDecodingIterator($stream); - $this->shape = $shape; - $this->parser = $parser; - } - - /** - * This method choose a decoding iterator implementation based on if the stream - * is seekable or not. - * - * @param $stream - * - * @return Iterator - */ - private function chooseDecodingIterator($stream) - { - if ($stream->isSeekable()) { - return new DecodingEventStreamIterator($stream); - } else { - return new NonSeekableStreamDecodingEventStreamIterator($stream); - } - } - - /** - * @return mixed - */ - #[\ReturnTypeWillChange] - public function current() - { - return $this->parseEvent($this->decodingIterator->current()); - } - - /** - * @return mixed - */ - #[\ReturnTypeWillChange] - public function key() - { - return $this->decodingIterator->key(); - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function next() - { - $this->decodingIterator->next(); - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function rewind() - { - $this->decodingIterator->rewind(); - } - - /** - * @return bool - */ - #[\ReturnTypeWillChange] - public function valid() - { - return $this->decodingIterator->valid(); - } - - private function parseEvent(array $event) - { - if (!empty($event['headers'][':message-type'])) { - if ($event['headers'][':message-type'] === 'error') { - return $this->parseError($event); - } - - if ($event['headers'][':message-type'] === 'exception') { - return $this->parseException($event); - } - - if ($event['headers'][':message-type'] !== 'event') { - throw new ParserException('Failed to parse unknown message type.'); - } - } - - $eventType = $event['headers'][':event-type'] ?? null; - if (empty($eventType)) { - throw new ParserException('Failed to parse without event type.'); - } - - $eventPayload = $event['payload']; - if ($eventType === 'initial-response') { - return $this->parseInitialResponseEvent($eventPayload); - } - - $eventShape = $this->shape->getMember($eventType); - - return [ - $eventType => array_merge( - $this->parseEventHeaders($event['headers'], $eventShape), - $this->parseEventPayload($eventPayload, $eventShape) - ) - ]; - } - - /** - * @param $headers - * @param $eventShape - * - * @return array - */ - private function parseEventHeaders($headers, $eventShape): array - { - $parsedHeaders = []; - foreach ($eventShape->getMembers() as $memberName => $memberProps) { - if (isset($memberProps['eventheader'])) { - $parsedHeaders[$memberName] = $headers[$memberName]; - } - } - - return $parsedHeaders; - } - - /** - * @param $payload - * @param $eventShape - * - * @return array - */ - private function parseEventPayload($payload, $eventShape): array - { - $parsedPayload = []; - foreach ($eventShape->getMembers() as $memberName => $memberProps) { - $memberShape = $eventShape->getMember($memberName); - if (isset($memberProps['eventpayload'])) { - if ($memberShape->getType() === 'blob') { - $parsedPayload[$memberName] = $payload; - } else { - $parsedPayload[$memberName] = $this->parser->parseMemberFromStream( - $payload, - $memberShape, - null - ); - } - - break; - } - } - - if (empty($parsedPayload) && !empty($payload->getContents())) { - /** - * If we did not find a member with an eventpayload trait, then we should deserialize the payload - * using the event's shape. - */ - $parsedPayload = $this->parser->parseMemberFromStream($payload, $eventShape, null); - } - - return $parsedPayload; - } - - private function parseError(array $event) - { - throw new EventStreamDataException( - $event['headers'][':error-code'], - $event['headers'][':error-message'] - ); - } - - private function parseException(array $event) { - $payload = $event['payload']?->getContents(); - $parsedPayload = json_decode($payload, true); - - throw new EventStreamDataException( - $event['headers'][':exception-type'] ?? 'Unknown', - $parsedPayload['message'] ?? $payload, - ); - } - - private function parseInitialResponseEvent($payload): array - { - return ['initial-response' => json_decode($payload, true)]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/Exception/ParserException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/Exception/ParserException.php deleted file mode 100644 index f5fd9ec9b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/Exception/ParserException.php +++ /dev/null @@ -1,56 +0,0 @@ -errorCode = isset($context['error_code']) ? $context['error_code'] : null; - $this->requestId = isset($context['request_id']) ? $context['request_id'] : null; - $this->response = isset($context['response']) ? $context['response'] : null; - parent::__construct($message, $code, $previous); - } - - /** - * Get the error code, if any. - * - * @return string|null - */ - public function getErrorCode() - { - return $this->errorCode; - } - - /** - * Get the request ID, if any. - * - * @return string|null - */ - public function getRequestId() - { - return $this->requestId; - } - - /** - * Get the received HTTP response if any. - * - * @return ResponseInterface|null - */ - public function getResponse() - { - return $this->response; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php deleted file mode 100644 index da11e31bd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php +++ /dev/null @@ -1,74 +0,0 @@ -getMembers() as $name => $member) { - $locationName = $member['locationName'] ?: $name; - if (isset($value[$locationName])) { - $target[$name] = $this->parse($member, $value[$locationName]); - } - } - if (isset($shape['union']) - && $shape['union'] - && is_array($value) - && empty($target) - ) { - foreach ($value as $key => $val) { - $target['Unknown'][$key] = $val; - } - } - return $target; - - case 'list': - $member = $shape->getMember(); - $target = []; - foreach ($value as $v) { - $target[] = $this->parse($member, $v); - } - return $target; - - case 'map': - $values = $shape->getValue(); - $target = []; - foreach ($value as $k => $v) { - // null map values should not be deserialized - if (!is_null($v)) { - $target[$k] = $this->parse($values, $v); - } - } - return $target; - - case 'timestamp': - return DateTimeResult::fromTimestamp( - $value, - !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null - ); - - case 'blob': - return base64_decode($value); - - default: - return $value; - } - } -} - diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/JsonRpcParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/JsonRpcParser.php deleted file mode 100644 index 93344b6c9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/JsonRpcParser.php +++ /dev/null @@ -1,87 +0,0 @@ -parser = $parser ?: new JsonParser(); - } - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - $operation = $this->api->getOperation($command->getName()); - - return $this->parseResponse($response, $operation); - } - - /** - * This method parses a response based on JSON RPC protocol. - * - * @param ResponseInterface $response the response to parse. - * @param Operation $operation the operation which holds information for - * parsing the response. - * - * @return Result - */ - private function parseResponse(ResponseInterface $response, Operation $operation) - { - if (null === $operation['output']) { - return new Result([]); - } - - $outputShape = $operation->getOutput(); - foreach ($outputShape->getMembers() as $memberName => $memberProps) { - if (!empty($memberProps['eventstream'])) { - return new Result([ - $memberName => new EventParsingIterator( - $response->getBody(), - $outputShape->getMember($memberName), - $this - ) - ]); - } - } - - $body = $response->getBody(); - if ($body->isSeekable()) { - $body->rewind(); - } - - $result = $this->parseMemberFromStream( - $body, - $operation->getOutput(), - $response - ); - - return new Result(is_null($result) ? [] : $result); - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - return $this->parser->parse($member, $this->parseJson($stream, $response)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php deleted file mode 100644 index b3bba9938..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php +++ /dev/null @@ -1,95 +0,0 @@ -getHeaderLine($shape['locationName'] ?: $name); - // Empty values should not be deserialized - if ($value === null || $value === '') { - return; - } - - switch ($shape->getType()) { - case 'float': - case 'double': - $value = (float) $value; - break; - case 'long': - case 'integer': - $value = (int) $value; - break; - case 'boolean': - $value = filter_var($value, FILTER_VALIDATE_BOOLEAN); - break; - case 'blob': - $value = base64_decode($value); - break; - case 'timestamp': - try { - $value = DateTimeResult::fromTimestamp( - $value, - !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null - ); - break; - } catch (\Exception $e) { - // If the value cannot be parsed, then do not add it to the - // output structure. - return; - } - case 'string': - if ($shape['jsonvalue']) { - $value = $this->parseJson(base64_decode($value), $response); - } - break; - } - - $result[$name] = $value; - } - - /** - * Extract a map of headers with an optional prefix from the response. - */ - protected function extractHeaders( - $name, - Shape $shape, - ResponseInterface $response, - &$result - ) { - // Check if the headers are prefixed by a location name - $result[$name] = []; - $prefix = $shape['locationName']; - $prefixLen = strlen($prefix); - - foreach ($response->getHeaders() as $k => $values) { - if (!$prefixLen) { - $result[$name][$k] = implode(', ', $values); - } elseif (stripos($k, $prefix) === 0) { - $result[$name][substr($k, $prefixLen)] = implode(', ', $values); - } - } - } - - /** - * Places the status code of the response into the result array. - */ - protected function extractStatus( - $name, - ResponseInterface $response, - array &$result - ) { - $result[$name] = (int) $response->getStatusCode(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/NonSeekableStreamDecodingEventStreamIterator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/NonSeekableStreamDecodingEventStreamIterator.php deleted file mode 100644 index d59f200e4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/NonSeekableStreamDecodingEventStreamIterator.php +++ /dev/null @@ -1,112 +0,0 @@ -stream = $stream; - if ($this->stream->isSeekable()) { - throw new \InvalidArgumentException('The stream provided must be not seekable.'); - } - - $this->tempBuffer = []; - } - - /** - * @inheritDoc - * - * @return array - */ - protected function parseEvent(): array - { - $event = []; - $this->hashContext = hash_init('crc32b'); - $prelude = $this->parsePrelude()[0]; - list( - $event[self::HEADERS], - $numBytes - ) = $this->parseHeaders($prelude[self::LENGTH_HEADERS]); - $event[self::PAYLOAD] = Psr7\Utils::streamFor( - $this->readAndHashBytes( - $prelude[self::LENGTH_TOTAL] - self::BYTES_PRELUDE - - $numBytes - self::BYTES_TRAILING - ) - ); - $calculatedCrc = hash_final($this->hashContext, true); - $messageCrc = $this->stream->read(4); - if ($calculatedCrc !== $messageCrc) { - throw new ParserException('Message checksum mismatch.'); - } - - return $event; - } - - protected function readAndHashBytes($num): string - { - $bytes = ''; - while (!empty($this->tempBuffer) && $num > 0) { - $byte = array_shift($this->tempBuffer); - $bytes .= $byte; - $num -= 1; - } - - // Loop until we've read the expected number of bytes - while ($num > 0 && !$this->stream->eof()) { - $chunk = $this->stream->read($num); - $chunkLen = strlen($chunk); - $bytes .= $chunk; - $num -= $chunkLen; - - if ($chunkLen === 0) { - break; // Prevent infinite loop on unexpected EOF - } - } - - hash_update($this->hashContext, $bytes); - - return $bytes; - } - - // Iterator Functionality - - #[\ReturnTypeWillChange] - public function rewind() - { - $this->currentEvent = $this->parseEvent(); - } - - public function next() - { - $this->tempBuffer[] = $this->stream->read(1); - if ($this->valid()) { - $this->key++; - $this->currentEvent = $this->parseEvent(); - } - } - - /** - * @return bool - */ - #[\ReturnTypeWillChange] - public function valid() - { - return !$this->stream->eof(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/PayloadParserTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/PayloadParserTrait.php deleted file mode 100644 index cc4872ebe..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/PayloadParserTrait.php +++ /dev/null @@ -1,60 +0,0 @@ - $response] - ); - } - - return $jsonPayload; - } - - /** - * @param string $xml - * - * @throws ParserException - * - * @return \SimpleXMLElement - */ - protected function parseXml($xml, $response) - { - $priorSetting = libxml_use_internal_errors(true); - try { - libxml_clear_errors(); - $xmlPayload = new \SimpleXMLElement($xml); - if ($error = libxml_get_last_error()) { - throw new \RuntimeException($error->message); - } - } catch (\Exception $e) { - throw new ParserException( - "Error parsing XML: {$e->getMessage()}", - 0, - $e, - ['response' => $response] - ); - } finally { - libxml_use_internal_errors($priorSetting); - } - - return $xmlPayload; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/QueryParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/QueryParser.php deleted file mode 100644 index 9910382b1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/QueryParser.php +++ /dev/null @@ -1,70 +0,0 @@ -parser = $xmlParser ?: new XmlParser(); - $this->honorResultWrapper = $honorResultWrapper; - } - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - $output = $this->api->getOperation($command->getName())->getOutput(); - // Read the full payload, even in non-seekable streams - $rawBody = AbstractParser::getBodyContents($response); - // Just parse when the body is not empty - $xml = !empty($rawBody) - ? $this->parseXml($rawBody, $response) - : null; - - // Empty request bodies should not be deserialized. - if (is_null($xml)) { - return new Result(); - } - - if ($this->honorResultWrapper && $output['resultWrapper']) { - $xml = $xml->{$output['resultWrapper']}; - } - - return new Result($this->parser->parse($output, $xml)); - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - $xml = $this->parseXml($stream, $response); - return $this->parser->parse($member, $xml); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RestJsonParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RestJsonParser.php deleted file mode 100644 index 156aa6dd2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RestJsonParser.php +++ /dev/null @@ -1,63 +0,0 @@ -parser = $parser ?: new JsonParser(); - } - - protected function payload( - ResponseInterface $response, - StructureShape $member, - array &$result - ) { - $rawBody = AbstractParser::getBodyContents($response); - - // Parse JSON if we have content - if (!empty($rawBody)) { - $parsedJson = $this->parseJson($rawBody, $response); - } else { - // An empty response body should be deserialized as null - $result = null; - return; - } - - $parsedBody = $this->parser->parse($member, $parsedJson); - if (is_string($parsedBody) && $member['document']) { - // Document types can be strings: replace entire result - $result = $parsedBody; - } else { - // Merge array/object results into existing result - $result = array_merge($result, (array) $parsedBody); - } - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - $jsonBody = $this->parseJson($stream, $response); - if ($jsonBody) { - return $this->parser->parse($member, $jsonBody); - } - return []; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RestXmlParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RestXmlParser.php deleted file mode 100644 index 506df5402..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RestXmlParser.php +++ /dev/null @@ -1,47 +0,0 @@ -parser = $parser ?: new XmlParser(); - } - - protected function payload( - ResponseInterface $response, - StructureShape $member, - array &$result - ) { - $body = $response->getBody(); - if ($body->isSeekable()) { - $body->rewind(); - } - - $result += $this->parseMemberFromStream($body, $member, $response); - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - $xml = $this->parseXml($stream, $response); - return $this->parser->parse($member, $xml); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RpcV2CborParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RpcV2CborParser.php deleted file mode 100644 index 21de0c3ed..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RpcV2CborParser.php +++ /dev/null @@ -1,50 +0,0 @@ -decoder = new CborDecoder(); - parent::__construct($api); - } - - /** - * @param StreamInterface $stream - * @param StructureShape $member - * @param $response - * - * @return mixed - */ - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ): mixed - { - return $this->resolveOutputShape($member, $this->parseCbor($stream, $response)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RpcV2ParserTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RpcV2ParserTrait.php deleted file mode 100644 index 585132a95..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/RpcV2ParserTrait.php +++ /dev/null @@ -1,105 +0,0 @@ -getMembers() as $name => $member) { - $locationName = $member['locationName'] ?: $name; - if (isset($value[$locationName])) { - $target[$name] = $this->resolveOutputShape($member, $value[$locationName]); - } - } - return $target; - - case 'list': - $target = []; - foreach ($value as $v) { - $target[] = $this->resolveOutputShape($shape->getMember(), $v); - } - return $target; - - case 'map': - $target = []; - foreach ($value as $k => $v) { - if ($v !== null) { - $target[$k] = $this->resolveOutputShape($shape->getValue(), $v); - } - } - return $target; - - case 'timestamp': - try { - $value = DateTimeResult::fromEpoch($value); - } catch (\Exception $e) { - trigger_error( - 'Unable to parse timestamp value for ' - . $shape->getName() - . ': ' . $e->getMessage(), - E_USER_WARNING - ); - } - - return $value; - - default: - return $value; - } - } - - /** - * Parses CBOR-encoded response data from RPC V2 CBOR services. - * - * @param StreamInterface $stream - * @param ResponseInterface $response - * - * @return mixed - */ - protected function parseCbor( - StreamInterface $stream, - ResponseInterface $response - ): mixed - { - try { - $cborString = (string) $stream; - return empty($cborString) - ? null - : $this->decoder->decode($cborString); - } catch (CborException $e) { - throw new ParserException( - "Malformed Response: error parsing CBOR: {$e->getMessage()}", - 0, - $e, - ['response' => $response] - ); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/XmlParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/XmlParser.php deleted file mode 100644 index c9d47d235..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Parser/XmlParser.php +++ /dev/null @@ -1,183 +0,0 @@ -dispatch($shape, $value); - } - - private function dispatch($shape, \SimpleXMLElement $value) - { - static $methods = [ - 'structure' => 'parse_structure', - 'list' => 'parse_list', - 'map' => 'parse_map', - 'blob' => 'parse_blob', - 'boolean' => 'parse_boolean', - 'integer' => 'parse_integer', - 'float' => 'parse_float', - 'double' => 'parse_float', - 'timestamp' => 'parse_timestamp', - ]; - - $type = $shape['type']; - if (isset($methods[$type])) { - return $this->{$methods[$type]}($shape, $value); - } - - return (string) $value; - } - - private function parse_structure( - StructureShape $shape, - \SimpleXMLElement $value - ) { - $target = []; - - foreach ($shape->getMembers() as $name => $member) { - // Extract the name of the XML node - $node = $this->memberKey($member, $name); - if (isset($value->{$node})) { - $target[$name] = $this->dispatch($member, $value->{$node}); - } else { - $memberShape = $shape->getMember($name); - if (!empty($memberShape['xmlAttribute'])) { - $target[$name] = $this->parse_xml_attribute( - $shape, - $memberShape, - $value - ); - } - } - } - if (isset($shape['union']) - && $shape['union'] - && empty($target) - ) { - foreach ($value as $key => $val) { - $name = $val->children()->getName(); - $target['Unknown'][$name] = $val->$name; - } - } - return $target; - } - - private function memberKey(Shape $shape, $name) - { - // Check if locationName came from shape definition - if ($shape instanceof StructureShape && isset($shape['locationName'])) { - $originalDef = $shape->getOriginalDefinition($shape->getName()); - - if ($originalDef && isset($originalDef['locationName']) - && $originalDef['locationName'] === $shape['locationName'] - ) { - return $name; - } - } - - return $shape['locationName'] ?? $name; - } - - private function parse_list(ListShape $shape, \SimpleXMLElement $value) - { - $target = []; - $member = $shape->getMember(); - - if (!$shape['flattened']) { - $value = $value->{$member['locationName'] ?: 'member'}; - } - - foreach ($value as $v) { - $target[] = $this->dispatch($member, $v); - } - - return $target; - } - - private function parse_map(MapShape $shape, \SimpleXMLElement $value) - { - $target = []; - - if (!$shape['flattened']) { - $value = $value->entry; - } - - $mapKey = $shape->getKey(); - $mapValue = $shape->getValue(); - $keyName = $shape->getKey()['locationName'] ?: 'key'; - $valueName = $shape->getValue()['locationName'] ?: 'value'; - - foreach ($value as $node) { - $key = $this->dispatch($mapKey, $node->{$keyName}); - $value = $this->dispatch($mapValue, $node->{$valueName}); - $target[$key] = $value; - } - - return $target; - } - - private function parse_blob(Shape $shape, $value) - { - return base64_decode((string) $value); - } - - private function parse_float(Shape $shape, $value) - { - $value = (string) $value; - - return match ($value) { - 'NaN', 'Infinity', '-Infinity' => $value, - default => (float) $value - }; - } - - private function parse_integer(Shape $shape, $value) - { - return (int) (string) $value; - } - - private function parse_boolean(Shape $shape, $value) - { - return $value == 'true'; - } - - private function parse_timestamp(Shape $shape, $value) - { - if (is_string($value) - || is_int($value) - || (is_object($value) - && method_exists($value, '__toString')) - ) { - return DateTimeResult::fromTimestamp( - (string) $value, - !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null - ); - } - throw new ParserException('Invalid timestamp value passed to XmlParser::parse_timestamp'); - } - - private function parse_xml_attribute(Shape $shape, Shape $memberShape, $value) - { - $namespace = $shape['xmlNamespace']['uri'] ?? ''; - $prefix = $shape['xmlNamespace']['prefix'] ?? ''; - if (!empty($prefix)) { - $prefix .= ':'; - } - $key = str_replace($prefix, '', $memberShape['locationName']); - - $attributes = $value->attributes($namespace); - return isset($attributes[$key]) ? (string) $attributes[$key] : null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/AbstractRpcV2Serializer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/AbstractRpcV2Serializer.php deleted file mode 100644 index 6a6636ba2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/AbstractRpcV2Serializer.php +++ /dev/null @@ -1,220 +0,0 @@ - static::SMITHY_PROTOCOL, - * self::HEADER_CONTENT_TYPE => static::DEFAULT_CONTENT_TYPE, - * self::HEADER_ACCEPT => static::DEFAULT_ACCEPT - * - * Implementers must also implement `serialize()`, `resolveBlob()`, and `resolveTimestamp() - * according to their respective protocol specifications. - * - * @internal - */ -abstract class AbstractRpcV2Serializer -{ - protected const HEADER_SMITHY_PROTOCOL = 'Smithy-Protocol'; - protected const HEADER_CONTENT_TYPE = 'Content-Type'; - protected const HEADER_ACCEPT = 'Accept'; - - /** @var array */ - protected static array $defaultHeaders; - - /** @var Service */ - private Service $api; - - /** @var string|Uri */ - private string|Uri $endpoint; - - /** @var bool */ - private bool $isUseEndpointV2; - - use EndpointV2SerializerTrait; - - /** - * @param Service $api Service API description - * @param string $endpoint Endpoint to connect to - */ - public function __construct(Service $api, string|Uri $endpoint) - { - $this->api = $api; - $this->endpoint = Psr7\Utils::uriFor($endpoint); - } - - /** - * @param CommandInterface $command Command to serialize into a request. - * @param mixed|null $endpoint - * - * @return RequestInterface - */ - public function __invoke( - CommandInterface $command, - mixed $endpoint = null - ) - { - $commandArgs = $command->toArray(); - $commandName = $command->getName(); - $operation = $this->api->getOperation($commandName); - $headers = static::$defaultHeaders; - - // Operations with no defined input type must not contain bodies - // Content-Type must not be set - if ($operation['input'] !== null) { - $body = $this->serialize($operation->getInput(), $commandArgs); - $headers['Content-Length'] = (string) strlen($body); - } else { - unset($headers['Content-Type']); - } - - if ($endpoint instanceof RulesetEndpoint) { - $this->isUseEndpointV2 = true; - $this->setEndpointV2RequestOptions($endpoint, $headers); - $this->endpoint = $endpoint->getUrl(); - } - - $requestTarget = $this->buildRequestTarget( - $commandName, - $operation['http']['requestUri'] ?? '' - ); - $uri = new Uri($this->endpoint . $requestTarget); - - return new Request( - $operation['http']['method'], - $uri, - $headers, - $body ?? null - ); - } - - /** - * @param StructureShape $inputShape - * @param array $commandArgs - * - * @return string - */ - abstract public function serialize( - StructureShape $inputShape, - array $commandArgs - ): string; - - /** - * Resolves arguments for blob shapes present in the request arguments - * into a protocol-specific format. - * - * @param mixed $value - * - * @return array - */ - abstract protected function resolveBlob(mixed $value): array; - - /** - * Resolves arguments for timestamp shapes present in the request arguments - * into a protocol-specific format. - * - * @param mixed $value - * - * @return array - */ - abstract protected function resolveTimestamp( - int|float|string|DateTimeInterface $value - ): array; - - /** - * Resolves input shape fields that are present in the request arguments - * - * @param Shape $shape - * @param mixed $value - * - * @return mixed - */ - protected function resolveInputShape(Shape $shape, mixed $value): mixed - { - switch ($shape->getType()) { - case 'structure': - $data = []; - foreach ($value as $k => $v) { - if ($v !== null && $shape->hasMember($k)) { - $valueShape = $shape->getMember($k); - $data[$valueShape['locationName'] ?: $k] - = $this->resolveInputShape($valueShape, $v); - } - } - - return $data; - - case 'list': - $items = $shape->getMember(); - foreach ($value as $k => $v) { - $value[$k] = $this->resolveInputShape($items, $v); - } - - return $value; - - case 'map': - $values = $shape->getValue(); - foreach ($value as $k => $v) { - $value[$k] = $this->resolveInputShape($values, $v); - } - - return $value; - - case 'timestamp': - return $this->resolveTimestamp($value); - - case 'string': - return (string) $value; - - case 'integer': - case 'long': - return (int) $value; - - case 'double': - case 'float': - return (float) $value; - - case 'blob': - return $this->resolveBlob($value); - - default: - return $value; - } - } - - /** - * Builds request URI absolute path - * - * @param string $commandName - * @param string $requestUri - * - * @return string - */ - private function buildRequestTarget( - string $commandName, - string $requestUri - ): string - { - $requestUri = str_ends_with($requestUri, '/') - ? $requestUri - : $requestUri . '/'; - $targetPrefix = $this->api->getMetadata('targetPrefix'); - - return "{$requestUri}service/{$targetPrefix}/operation/{$commandName}"; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/Ec2ParamBuilder.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/Ec2ParamBuilder.php deleted file mode 100644 index a3753cdfe..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/Ec2ParamBuilder.php +++ /dev/null @@ -1,38 +0,0 @@ -getMember(); - foreach ($value as $k => $v) { - $this->format($items, $v, $prefix . '.' . ($k + 1), $query); - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonBody.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonBody.php deleted file mode 100644 index 6ac2dd988..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonBody.php +++ /dev/null @@ -1,116 +0,0 @@ -api = $api; - } - - /** - * Gets the JSON Content-Type header for a service API - * - * @param Service $service - * - * @return string - */ - public static function getContentType(Service $service) - { - if ($service->getMetadata('protocol') === 'rest-json') { - return 'application/json'; - } - - $jsonVersion = $service->getMetadata('jsonVersion'); - if (empty($jsonVersion)) { - throw new \InvalidArgumentException('invalid json'); - } else { - return 'application/x-amz-json-' - . @number_format($service->getMetadata('jsonVersion'), 1); - } - } - - /** - * Builds the JSON body based on an array of arguments. - * - * @param Shape $shape Operation being constructed - * @param array|string $args Associative array of arguments, or a string. - * - * @return string - */ - public function build(Shape $shape, array|string $args) - { - try { - $result = json_encode($this->format($shape, $args), JSON_THROW_ON_ERROR); - } catch (\JsonException $e) { - throw new InvalidJsonException( - 'Unable to encode JSON document ' . $shape->getName() . ': ' . - $e->getMessage() . PHP_EOL - ); - } - - return $result === '[]' ? '{}' : $result; - } - - private function format(Shape $shape, $value) - { - switch ($shape['type']) { - case 'structure': - $data = []; - if ($shape['document'] ?? false) { - return $value; - } - foreach ($value as $k => $v) { - if ($v !== null && $shape->hasMember($k)) { - $valueShape = $shape->getMember($k); - $data[$valueShape['locationName'] ?: $k] - = $this->format($valueShape, $v); - } - } - if (empty($data)) { - return new \stdClass; - } - return $data; - - case 'list': - $items = $shape->getMember(); - foreach ($value as $k => $v) { - $value[$k] = $this->format($items, $v); - } - return $value; - - case 'map': - if (empty($value)) { - return new \stdClass; - } - $values = $shape->getValue(); - foreach ($value as $k => $v) { - $value[$k] = $this->format($values, $v); - } - return $value; - - case 'blob': - return base64_encode($value); - - case 'timestamp': - $timestampFormat = !empty($shape['timestampFormat']) - ? $shape['timestampFormat'] - : 'unixTimestamp'; - return TimestampShape::format($value, $timestampFormat); - - default: - return $value; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php deleted file mode 100644 index 72f733376..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php +++ /dev/null @@ -1,87 +0,0 @@ -endpoint = $endpoint; - $this->api = $api; - $this->jsonFormatter = $jsonFormatter ?: new JsonBody($this->api); - $this->contentType = JsonBody::getContentType($api); - } - - /** - * When invoked with an AWS command, returns a serialization array - * containing "method", "uri", "headers", and "body" key value pairs. - * - * @param CommandInterface $command Command to serialize into a request. - * @param $endpointProvider Provider used for dynamic endpoint resolution. - * @param $clientArgs Client arguments used for dynamic endpoint resolution. - * - * @return RequestInterface - */ - public function __invoke( - CommandInterface $command, - $endpoint = null - ) - { - $operationName = $command->getName(); - $operation = $this->api->getOperation($operationName); - $commandArgs = $command->toArray(); - $body = $this->jsonFormatter->build($operation->getInput(), $commandArgs); - $headers = [ - 'X-Amz-Target' => $this->api->getMetadata('targetPrefix') . '.' . $operationName, - 'Content-Type' => $this->contentType, - 'Content-Length' => (string) strlen($body) - ]; - - if ($endpoint instanceof RulesetEndpoint) { - $this->setEndpointV2RequestOptions($endpoint, $headers); - } - - $requestUri = $operation['http']['requestUri'] ?? null; - $absoluteUri = str_ends_with($this->endpoint, '/') - ? $this->endpoint : $this->endpoint . $requestUri; - - return new Request( - $operation['http']['method'], - $absoluteUri, - $headers, - $body - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/QueryParamBuilder.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/QueryParamBuilder.php deleted file mode 100644 index 29168da88..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/QueryParamBuilder.php +++ /dev/null @@ -1,158 +0,0 @@ -isFlat($shape) && !empty($shape['member']['locationName'])) { - return $shape['member']['locationName']; - } - - return $default; - } - - protected function isFlat(Shape $shape) - { - return $shape['flattened'] === true; - } - - public function __invoke(StructureShape $shape, array $params) - { - if (!$this->methods) { - $this->methods = array_fill_keys(get_class_methods($this), true); - } - - $query = []; - $this->format_structure($shape, $params, '', $query); - - return $query; - } - - protected function format(Shape $shape, $value, $prefix, array &$query) - { - $type = 'format_' . $shape['type']; - if (isset($this->methods[$type])) { - $this->{$type}($shape, $value, $prefix, $query); - } else { - $query[$prefix] = (string) $value; - } - } - - protected function format_structure( - StructureShape $shape, - array $value, - $prefix, - &$query - ) { - if ($prefix) { - $prefix .= '.'; - } - - foreach ($value as $k => $v) { - if ($shape->hasMember($k)) { - $member = $shape->getMember($k); - $this->format( - $member, - $v, - $prefix . $this->queryName($member, $k), - $query - ); - } - } - } - - protected function format_list( - ListShape $shape, - array $value, - $prefix, - &$query - ) { - // Handle empty list serialization - if (!$value) { - $query[$prefix] = ''; - return; - } - - $items = $shape->getMember(); - - if (!$this->isFlat($shape)) { - $locationName = $shape->getMember()['locationName'] ?: 'member'; - $prefix .= ".$locationName"; - // flattened lists can also model a `locationName` - } elseif ($name = $shape['locationName'] ?? $this->queryName($items)) { - $parts = explode('.', $prefix); - $parts[count($parts) - 1] = $name; - $prefix = implode('.', $parts); - } - - foreach ($value as $k => $v) { - $this->format($items, $v, $prefix . '.' . ($k + 1), $query); - } - } - - protected function format_map( - MapShape $shape, - array $value, - $prefix, - array &$query - ) { - $vals = $shape->getValue(); - $keys = $shape->getKey(); - - if (!$this->isFlat($shape)) { - $prefix .= '.entry'; - } - - $i = 0; - $keyName = '%s.%d.' . $this->queryName($keys, 'key'); - $valueName = '%s.%s.' . $this->queryName($vals, 'value'); - - foreach ($value as $k => $v) { - $i++; - $this->format($keys, $k, sprintf($keyName, $prefix, $i), $query); - $this->format($vals, $v, sprintf($valueName, $prefix, $i), $query); - } - } - - protected function format_blob(Shape $shape, $value, $prefix, array &$query) - { - $query[$prefix] = base64_encode($value); - } - - protected function format_timestamp( - TimestampShape $shape, - $value, - $prefix, - array &$query - ) { - $timestampFormat = !empty($shape['timestampFormat']) - ? $shape['timestampFormat'] - : 'iso8601'; - $query[$prefix] = TimestampShape::format($value, $timestampFormat); - } - - protected function format_boolean(Shape $shape, $value, $prefix, array &$query) - { - $query[$prefix] = ($value) ? 'true' : 'false'; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/QuerySerializer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/QuerySerializer.php deleted file mode 100644 index 8df75a12b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/QuerySerializer.php +++ /dev/null @@ -1,82 +0,0 @@ -api = $api; - $this->endpoint = $endpoint; - $this->paramBuilder = $paramBuilder ?: new QueryParamBuilder(); - } - - /** - * When invoked with an AWS command, returns a serialization array - * containing "method", "uri", "headers", and "body" key value pairs. - * - * @param CommandInterface $command Command to serialize into a request. - * @param null $endpoint Endpoint resolved using EndpointProviderV2 - * @return RequestInterface - */ - public function __invoke( - CommandInterface $command, - $endpoint = null - ) - { - $operation = $this->api->getOperation($command->getName()); - $body = [ - 'Action' => $command->getName(), - 'Version' => $this->api->getMetadata('apiVersion') - ]; - $commandArgs = $command->toArray(); - - // Only build up the parameters when there are parameters to build - if ($commandArgs) { - $body += call_user_func( - $this->paramBuilder, - $operation->getInput(), - $commandArgs - ); - } - $body = http_build_query($body, '', '&', PHP_QUERY_RFC3986); - $headers = [ - 'Content-Length' => (string) strlen($body), - 'Content-Type' => 'application/x-www-form-urlencoded' - ]; - $requestUri = $operation['http']['requestUri'] ?? null; - - if ($endpoint instanceof RulesetEndpoint) { - $this->setEndpointV2RequestOptions($endpoint, $headers); - } - $absoluteUri = str_ends_with($this->endpoint, '/') - ? $this->endpoint : $this->endpoint . $requestUri; - - return new Request( - 'POST', - $absoluteUri, - $headers, - $body - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestJsonSerializer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestJsonSerializer.php deleted file mode 100644 index a4c5d72f6..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestJsonSerializer.php +++ /dev/null @@ -1,41 +0,0 @@ -contentType = JsonBody::getContentType($api); - $this->jsonFormatter = $jsonFormatter ?: new JsonBody($api); - } - - protected function payload(StructureShape $member, array|string $value, array &$opts) - { - $opts['headers']['Content-Type'] = $this->contentType; - $body = $this->jsonFormatter->build($member, $value); - $opts['headers']['Content-Length'] = (string) strlen($body); - $opts['body'] = $body; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestSerializer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestSerializer.php deleted file mode 100644 index ce8d581d1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestSerializer.php +++ /dev/null @@ -1,540 +0,0 @@ - true, - 'glacier' => true - ]; - - /** @var Service */ - private Service $api; - - /** @var Uri */ - private $endpoint; - - /** @var bool */ - private $isUseEndpointV2; - - use EndpointV2SerializerTrait; - - /** - * @param Service $api Service API description - * @param string $endpoint Endpoint to connect to - */ - public function __construct(Service $api, $endpoint) - { - $this->api = $api; - $this->endpoint = Psr7\Utils::uriFor($endpoint); - } - - /** - * @param CommandInterface $command Command to serialize into a request. - * @param mixed|null $endpoint - * @return RequestInterface - */ - public function __invoke( - CommandInterface $command, - mixed $endpoint = null - ) - { - $operation = $this->api->getOperation($command->getName()); - $commandArgs = $command->toArray(); - $opts = $this->serialize($operation, $commandArgs); - $headers = $opts['headers'] ?? []; - - if ($endpoint instanceof RulesetEndpoint) { - $this->isUseEndpointV2 = true; - $this->setEndpointV2RequestOptions($endpoint, $headers); - } - - $uri = $this->buildEndpoint($operation, $commandArgs, $opts); - - return new Request( - $operation['http']['method'], - $uri, - $headers, - $opts['body'] ?? null - ); - } - - /** - * Modifies a hash of request options for a payload body. - * - * @param StructureShape $member Member to serialize - * @param array $value Value to serialize - * @param array $opts Request options to modify. - */ - abstract protected function payload( - StructureShape $member, - array $value, - array &$opts - ); - - private function serialize(Operation $operation, array $args) - { - $opts = []; - $input = $operation->getInput(); - - // Apply the payload trait if present - if ($payload = $input['payload']) { - $this->applyPayload($input, $payload, $args, $opts); - } - - foreach ($args as $name => $value) { - if ($input->hasMember($name)) { - $member = $input->getMember($name); - $location = $member['location']; - if (!$payload && !$location) { - $bodyMembers[$name] = $value; - } elseif ($location === 'header') { - $this->applyHeader($name, $member, $value, $opts); - } elseif ($location === 'querystring') { - $this->applyQuery($name, $member, $value, $opts); - } elseif ($location === 'headers') { - $this->applyHeaderMap($name, $member, $value, $opts); - } - } - } - - if (isset($bodyMembers)) { - $this->payload($input, $bodyMembers, $opts); - } else if (!isset($opts['body']) && $this->hasPayloadParam($input, $payload)) { - $this->payload($input, [], $opts); - } - - return $opts; - } - - private function applyPayload(StructureShape $input, $name, array $args, array &$opts) - { - if (!isset($args[$name])) { - return; - } - - $m = $input->getMember($name); - - $type = $m->getType(); - if ($m['streaming'] || - ($type === 'string' || $type === 'blob') - ) { - // This path skips setting the content-type header usually done in - // RestJsonSerializer and RestXmlSerializer.certain S3 and glacier - // operations determine content type in Middleware::ContentType() - if (!isset(self::$excludeContentType[$this->api->getServiceName() ?? ''])) { - switch ($type) { - case 'string': - $opts['headers']['Content-Type'] = 'text/plain'; - break; - case 'blob': - $opts['headers']['Content-Type'] = 'application/octet-stream'; - break; - } - } - - $body = $args[$name]; - if (!$m['streaming'] && is_string($body)) { - $opts['headers']['Content-Length'] = (string) strlen($body); - } - - // Streaming bodies or payloads that are strings are - // always just a stream of data. - $stream = Psr7\Utils::streamFor($body); - // User-owned resource which should be detached instead of closed - // during garbage-collection - if (is_resource($body)) { - $stream = \Aws\detach_on_close_stream($stream); - } - $opts['body'] = $stream; - return; - } - - $this->payload($m, $args[$name], $opts); - } - - private function applyHeader($name, Shape $member, $value, array &$opts) - { - if ($value === null) { - return; - } - - // Handle lists by applying header logic to each element - if ($member instanceof ListShape) { - if (!is_array($value)) { - throw new \InvalidArgumentException('Header values must be scalar or an array of scalars.'); - } - - $listMember = $member->getMember(); - $headerValues = []; - - foreach ($value as $listValue) { - if ($listValue === null) { - throw new \InvalidArgumentException('Header values must be scalar or an array of scalars.'); - } - - $tempOpts = ['headers' => []]; - $this->applyHeader('temp', $listMember, $listValue, $tempOpts); - if (!array_key_exists('temp', $tempOpts['headers'])) { - throw new \InvalidArgumentException('Header values must be scalar or an array of scalars.'); - } - - $convertedValue = $tempOpts['headers']['temp']; - $headerValues[] = $convertedValue; - } - - $value = $headerValues; - } else { - switch ($member->getType()) { - case 'timestamp': - $timestampFormat = $member['timestampFormat'] ?? 'rfc822'; - $value = $this->formatTimestamp($value, $timestampFormat); - break; - case 'boolean': - $value = $this->formatBoolean($value); - break; - } - } - - if ($member['jsonvalue']) { - $value = json_encode($value); - if (empty($value) && JSON_ERROR_NONE !== json_last_error()) { - throw new \InvalidArgumentException('Unable to encode the provided value' - . ' with \'json_encode\'. ' . json_last_error_msg()); - } - - $value = base64_encode($value); - } - - $opts['headers'][$member['locationName'] ?: $name] = self::prepareHeaderValue($value); - } - - /** - * Note: This is currently only present in the Amazon S3 model. - */ - private function applyHeaderMap($name, Shape $member, array $value, array &$opts) - { - $prefix = $member['locationName']; - foreach ($value as $k => $v) { - if ($v === null) { - continue; - } - - $opts['headers'][$prefix . $k] = self::prepareHeaderValue($v); - } - } - - /** - * @return string|string[] - */ - private static function prepareHeaderValue($value) - { - if (is_scalar($value)) { - return (string) $value; - } - - if (is_array($value)) { - if ($value === []) { - return ''; - } - - foreach ($value as $key => $item) { - if (!is_scalar($item)) { - throw new \InvalidArgumentException('Header values must be scalar or an array of scalars.'); - } - - $value[$key] = (string) $item; - } - - return $value; - } - - throw new \InvalidArgumentException('Header values must be scalar or an array of scalars.'); - } - - private function applyQuery($name, Shape $member, $value, array &$opts) - { - if ($member instanceof MapShape) { - $opts['query'] = isset($opts['query']) && is_array($opts['query']) - ? $opts['query'] + $value - : $value; - } elseif ($member instanceof ListShape) { - $listMember = $member->getMember(); - $paramName = $member['locationName'] ?: $name; - - foreach ($value as $listValue) { - // Recursively call applyQuery for each list element - $tempOpts = ['query' => []]; - $this->applyQuery('temp', $listMember, $listValue, $tempOpts); - $opts['query'][$paramName][] = $tempOpts['query']['temp']; - } - } elseif (!is_null($value)) { - switch ($member->getType()) { - case 'timestamp': - $timestampFormat = $member['timestampFormat'] ?? 'iso8601'; - $value = $this->formatTimestamp($value, $timestampFormat); - break; - case 'boolean': - $value = $this->formatBoolean($value); - break; - } - - $opts['query'][$member['locationName'] ?: $name] = $value; - } - } - - private function buildEndpoint( - Operation $operation, - array $args, - array $opts - ): UriInterface - { - // Expand `requestUri` field members - $relativeUri = $this->expandUriTemplate($operation, $args); - - // Add query members to relativeUri - if (!empty($opts['query'])) { - $relativeUri = $this->appendQuery($opts['query'], $relativeUri); - } - - // Special case - S3 keys that need path preservation - if ($this->api->getServiceName() === 's3' - && isset($args['Key']) - && $this->shouldPreservePath($args['Key']) - ) { - return new Uri($this->endpoint . $relativeUri); - } - - return $this->resolveUri($relativeUri, $opts); - } - - /** - * Expands `requestUri` members - * - * @param Operation $operation - * @param array $args - * - * @return string - */ - private function expandUriTemplate(Operation $operation, array $args): string - { - $varDefinitions = $this->getVarDefinitions($operation, $args); - - return preg_replace_callback( - self::TEMPLATE_STRING_REGEX, - static function (array $matches) use ($varDefinitions) { - $isGreedy = str_ends_with($matches[1], '+'); - $varName = $isGreedy ? substr($matches[1], 0, -1) : $matches[1]; - - if (!isset($varDefinitions[$varName])) { - return ''; - } - - $value = $varDefinitions[$varName]; - - if ($isGreedy) { - return str_replace('%2F', '/', rawurlencode($value)); - } - - return rawurlencode($value); - }, - $operation['http']['requestUri'] - ); - } - - /** - * Checks for path-like key names. If detected, traditional - * URI resolution is bypassed. - * - * @param string $key - * @return bool - */ - private function shouldPreservePath(string $key): bool - { - // Keys with dot segments - if (str_contains($key, '.')) { - $segments = explode('/', $key); - foreach ($segments as $segment) { - if ($segment === '.' || $segment === '..') { - return true; - } - } - } - - // Keys starting with slash - if (str_starts_with($key, '/')) { - return true; - } - - return false; - } - - /** - * @param string $relativeUri - * @param array $opts - * - * @return UriInterface - */ - private function resolveUri(string $relativeUri, array $opts): UriInterface - { - $basePath = $this->endpoint->getPath(); - - // Only process if we have a non-empty base path - if (!empty($basePath) && $basePath !== '/') { - // if relative is just '/', we want just the base path without trailing slash - if ($relativeUri === '/' || empty($relativeUri)) { - // Remove trailing slash if present - return $this->endpoint->withPath(rtrim($basePath, '/')); - } - - // if relative is '/?query', we want base path without trailing slash + query - // for now, this is only seen with S3 GetBucketLocation after processing the model - if (empty($opts['query']) - && str_starts_with($relativeUri, '/?') - ) { - $query = substr($relativeUri, 2); // Remove '/?' - return $this->endpoint->withQuery($query); - } - - // Ensure base path has trailing slash - if (!str_ends_with($basePath, '/')) { - $this->endpoint = $this->endpoint->withPath($basePath . '/'); - } - - // Remove leading slash from relative path to make it relative - if (str_starts_with($relativeUri, '/')) { - $relativeUri = substr($relativeUri, 1); - } - } - - return UriResolver::resolve($this->endpoint, new Uri($relativeUri)); - } - - /** - * @param StructureShape $input - * @param $payload - * - * @return bool - */ - private function hasPayloadParam(StructureShape $input, $payload) - { - if ($payload) { - $potentiallyEmptyTypes = ['blob','string']; - if ($this->api->getProtocol() === 'rest-xml') { - $potentiallyEmptyTypes[] = 'structure'; - } - - $payloadMember = $input->getMember($payload); - //unions may also be empty/unset - if (!empty($payloadMember['union']) - || in_array($payloadMember['type'], $potentiallyEmptyTypes) - ) { - return false; - } - } - - foreach ($input->getMembers() as $member) { - if (!isset($member['location'])) { - return true; - } - } - - return false; - } - - /** - * @param $query - * @param $relativeUri - * - * @return string - */ - private function appendQuery($query, $relativeUri): string - { - $append = Psr7\Query::build($query); - return $relativeUri - . (str_contains($relativeUri, '?') ? "&{$append}" : "?{$append}"); - } - - /** - * @param CommandInterface $command - * @param array $args - * - * @return array - */ - private function getVarDefinitions( - Operation $operation, - array $args - ): array - { - $varDefinitions = []; - - foreach ($operation->getInput()->getMembers() as $name => $member) { - if ($member['location'] === 'uri') { - $value = $args[$name] ?? null; - if (!is_null($value)) { - switch ($member->getType()) { - case 'timestamp': - $timestampFormat = $member['timestampFormat'] ?? 'iso8601'; - $value = $this->formatTimestamp($value, $timestampFormat); - break; - case 'boolean': - $value = $this->formatBoolean($value); - break; - } - } - - $varDefinitions[$member['locationName'] ?: $name] = $value; - } - } - - return $varDefinitions; - } - - /** - * @param DateTimeInterface|string|int $value - * @param string $timestampFormat - * - * @return string - */ - private function formatTimestamp( - DateTimeInterface|string|int $value, - string $timestampFormat - ): string - { - return TimestampShape::format($value, $timestampFormat); - } - - /** - * @param $value - * - * @return string - */ - private function formatBoolean($value): string - { - return $value ? 'true' : 'false'; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestXmlSerializer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestXmlSerializer.php deleted file mode 100644 index 493dd0f43..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RestXmlSerializer.php +++ /dev/null @@ -1,50 +0,0 @@ -xmlBody = $xmlBody ?: new XmlBody($api); - } - - protected function payload(StructureShape $member, array $value, array &$opts) - { - $opts['headers']['Content-Type'] = 'application/xml'; - $body = $this->getXmlBody($member, $value); - $opts['headers']['Content-Length'] = (string) strlen($body); - $opts['body'] = $body; - } - - /** - * @param StructureShape $member - * @param array $value - * @return string - */ - private function getXmlBody(StructureShape $member, array $value) - { - $xmlBody = $this->xmlBody->build($member, $value); - $xmlBody = str_replace("'", "'", $xmlBody); - $xmlBody = str_replace('\r', " ", $xmlBody); - $xmlBody = str_replace('\n', " ", $xmlBody); - return $xmlBody; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RpcV2CborSerializer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RpcV2CborSerializer.php deleted file mode 100644 index 4cdad6d28..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/RpcV2CborSerializer.php +++ /dev/null @@ -1,124 +0,0 @@ - 'rpc-v2-cbor', - self::HEADER_CONTENT_TYPE => 'application/cbor', - self::HEADER_ACCEPT => 'application/cbor', - ]; - - /** @var CborEncoder */ - private CborEncoder $encoder; - - /** - * @param Service $api Service API description - * @param string $endpoint Endpoint to connect to - */ - public function __construct(Service $api, string $endpoint) - { - $this->encoder = new CborEncoder(); - parent::__construct($api, $endpoint); - } - - /** - * @param StructureShape $inputShape - * @param array $commandArgs - * - * @return string - * @throws RpcV2CborException - */ - public function serialize( - StructureShape $inputShape, - array $commandArgs - ): string - { - try { - $resolvedInput = $this->resolveInputShape($inputShape, $commandArgs); - return !empty($resolvedInput) - ? $this->encoder->encode($resolvedInput) - : $this->encoder->encodeEmptyIndefiniteMap(); - } catch (CborException $e) { - throw new RpcV2CborException( - 'Unable to encode CBOR document ' . $inputShape->getName() . ': ' . - $e->getMessage() . PHP_EOL - ); - } - } - - /** - * Wraps blob values in order to be encoded properly into - * byte strings. - * - * @param mixed $value - * - * @return string[] - * @throws RpcV2CborException - */ - protected function resolveBlob(mixed $value): array - { - if (is_resource($value)) { - $value = stream_get_contents($value); - if ($value === false) { - throw new RpcV2CborException( - 'Failed to read resource stream value during serialization', - ); - } - } - - // Wrapper to differentiate byte string values during encoding - return ['__cbor_bytes' => (string) $value]; - } - - /** - * Wraps timestamp values in order to be encoded properly into - * value tag 1. - * - * @param mixed $value - * - * @return string[] - * @throws RpcV2CborException - */ - protected function resolveTimestamp( - int|float|string|DateTimeInterface $value - ): array - { - if (is_numeric($value)) { - return ['__cbor_timestamp' => $value]; - } - - if ($value instanceof DateTimeInterface) { - // Preserve milliseconds - $micro = (int) $value->format('u'); - $value = $value->getTimestamp() + $micro / 1e6; - } else { - $timestamp = strtotime($value); - if ($timestamp === false) { - throw new RpcV2CborException( - 'Request serialization failed: Invalid date/time: ' . $value, - ); - } - - $value = $timestamp; - } - - // Wrapper to differentiate timestamp values during encoding - return ['__cbor_timestamp' => $value]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/XmlBody.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/XmlBody.php deleted file mode 100644 index 28393bbf2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Serializer/XmlBody.php +++ /dev/null @@ -1,254 +0,0 @@ -api = $api; - } - - /** - * Builds the XML body based on an array of arguments. - * - * @param Shape $shape Operation being constructed - * @param array $args Associative array of arguments - * - * @return string - */ - public function build(Shape $shape, array $args) - { - $xml = new XMLWriter(); - $xml->openMemory(); - $xml->startDocument('1.0', 'UTF-8'); - - $rootElementName = $this->determineRootElementName($shape); - - $this->format($shape, $rootElementName, $args, $xml); - $xml->endDocument(); - - return $xml->outputMemory(); - } - - private function startElement(Shape $shape, $name, XMLWriter $xml) - { - $xml->startElement($name); - - if ($ns = $shape['xmlNamespace']) { - $xml->writeAttribute( - isset($ns['prefix']) ? "xmlns:{$ns['prefix']}" : 'xmlns', - $ns['uri'] - ); - } - } - - private function format(Shape $shape, $name, $value, XMLWriter $xml) - { - // Any method mentioned here has a custom serialization handler. - static $methods = [ - 'add_structure' => true, - 'add_list' => true, - 'add_blob' => true, - 'add_timestamp' => true, - 'add_boolean' => true, - 'add_map' => true, - 'add_string' => true - ]; - - $type = 'add_' . $shape['type']; - if (isset($methods[$type])) { - $this->{$type}($shape, $name, $value, $xml); - } else { - $this->defaultShape($shape, $name, $value, $xml); - } - } - - private function defaultShape(Shape $shape, $name, $value, XMLWriter $xml) - { - $this->startElement($shape, $name, $xml); - $xml->text($value); - $xml->endElement(); - } - - private function add_structure( - StructureShape $shape, - $name, - array $value, - \XMLWriter $xml - ) { - $this->startElement($shape, $name, $xml); - - foreach ($this->getStructureMembers($shape, $value) as $k => $definition) { - // Default to member name - $elementName = $k; - - if ($definition['member']['locationName'] - && !isset($definition['member']['locationNameAtStructureLevel'])) { - $elementName = $definition['member']['locationName']; - } - - $this->format( - $definition['member'], - $elementName, - $definition['value'], - $xml - ); - } - - $xml->endElement(); - } - - private function getStructureMembers(StructureShape $shape, array $value) - { - $members = []; - - foreach ($value as $k => $v) { - if ($v !== null && $shape->hasMember($k)) { - $definition = [ - 'member' => $shape->getMember($k), - 'value' => $v, - ]; - - if ($definition['member']['xmlAttribute']) { - // array_unshift_associative - $members = [$k => $definition] + $members; - } else { - $members[$k] = $definition; - } - } - } - - return $members; - } - - private function add_list( - ListShape $shape, - $name, - array $value, - XMLWriter $xml - ) { - $items = $shape->getMember(); - - if ($shape['flattened']) { - $elementName = $name; - } else { - $this->startElement($shape, $name, $xml); - $elementName = $items['locationName'] ?: 'member'; - } - - foreach ($value as $v) { - $this->format($items, $elementName, $v, $xml); - } - - if (!$shape['flattened']) { - $xml->endElement(); - } - } - - private function add_map( - MapShape $shape, - $name, - array $value, - XMLWriter $xml - ) { - $xmlEntry = $shape['flattened'] ? $name : 'entry'; - $xmlKey = $shape->getKey()['locationName'] ?: 'key'; - $xmlValue = $shape->getValue()['locationName'] ?: 'value'; - - if (!$shape['flattened']) { - $this->startElement($shape, $name, $xml); - } - - foreach ($value as $key => $v) { - $this->startElement($shape, $xmlEntry, $xml); - $this->format($shape->getKey(), $xmlKey, $key, $xml); - $this->format($shape->getValue(), $xmlValue, $v, $xml); - $xml->endElement(); - } - - if (!$shape['flattened']) { - $xml->endElement(); - } - } - - private function add_blob(Shape $shape, $name, $value, XMLWriter $xml) - { - $this->startElement($shape, $name, $xml); - $xml->writeRaw(base64_encode($value)); - $xml->endElement(); - } - - private function add_timestamp( - TimestampShape $shape, - $name, - $value, - XMLWriter $xml - ) { - $this->startElement($shape, $name, $xml); - $timestampFormat = !empty($shape['timestampFormat']) - ? $shape['timestampFormat'] - : 'iso8601'; - $xml->writeRaw(TimestampShape::format($value, $timestampFormat)); - $xml->endElement(); - } - - private function add_boolean( - Shape $shape, - $name, - $value, - XMLWriter $xml - ) { - $this->startElement($shape, $name, $xml); - $xml->writeRaw($value ? 'true' : 'false'); - $xml->endElement(); - } - - private function add_string( - Shape $shape, - $name, - $value, - XMLWriter $xml - ) { - if ($shape['xmlAttribute']) { - $xml->writeAttribute($shape['locationName'] ?: $name, $value); - } else { - $this->defaultShape($shape, $name, $value, $xml); - } - } - - private function determineRootElementName(Shape $shape): string - { - $shapeName = $shape->getName(); - - // Look up the shape definition first - if ($shapeName && $shapeMap = $shape->getShapeMap()) { - if (isset($shapeMap[$shapeName]['locationName'])) { - return $shapeMap[$shapeName]['locationName']; - } - } - - // Fall back to shape's current locationName - if ($shape['locationName']) { - return $shape['locationName']; - } - - return $shapeName; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Service.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Service.php deleted file mode 100644 index 2d080755c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Service.php +++ /dev/null @@ -1,567 +0,0 @@ - [], - 'shapes' => [], - 'metadata' => [], - 'clientContextParams' => [] - ], $defaultMeta = [ - 'apiVersion' => null, - 'serviceFullName' => null, - 'serviceId' => null, - 'endpointPrefix' => null, - 'signingName' => null, - 'signatureVersion' => null, - 'protocol' => null, - 'uid' => null - ]; - - $definition += $defaults; - $definition['metadata'] += $defaultMeta; - $this->definition = $definition; - $this->apiProvider = $provider; - parent::__construct($definition, new ShapeMap($definition['shapes'])); - - if (isset($definition['metadata']['serviceIdentifier'])) { - $this->serviceName = $this->getServiceName(); - } else { - $this->serviceName = $this->getEndpointPrefix(); - } - $this->apiVersion = $this->getApiVersion(); - if (isset($definition['clientContextParams'])) { - $this->clientContextParams = $definition['clientContextParams']; - } - - $this->protocol = $this->selectProtocol($definition); - } - - /** - * Creates a request serializer for the provided API object. - * - * @param Service $api API that contains a protocol. - * @param string $endpoint Endpoint to send requests to. - * - * @return callable - * @throws \UnexpectedValueException - */ - public static function createSerializer(Service $api, $endpoint) - { - static $mapping = [ - 'json' => Serializer\JsonRpcSerializer::class, - 'query' => Serializer\QuerySerializer::class, - 'rest-json' => Serializer\RestJsonSerializer::class, - 'rest-xml' => Serializer\RestXmlSerializer::class, - 'smithy-rpc-v2-cbor' => Serializer\RpcV2CborSerializer::class - ]; - - $proto = $api->getProtocol(); - - if (isset($mapping[$proto])) { - return new $mapping[$proto]($api, $endpoint); - } - - if ($proto == 'ec2') { - return new Serializer\QuerySerializer($api, $endpoint, new Serializer\Ec2ParamBuilder()); - } - - throw new \UnexpectedValueException( - 'Unknown protocol: ' . $api->getProtocol() - ); - } - - /** - * Creates an error parser for the given protocol. - * - * Redundant method signature to preserve backwards compatibility. - * - * @param string $protocol Protocol to parse (e.g., query, json, etc.) - * - * @return callable - * @throws \UnexpectedValueException - */ - public static function createErrorParser($protocol, ?Service $api = null) - { - static $mapping = [ - 'json' => ErrorParser\JsonRpcErrorParser::class, - 'query' => ErrorParser\XmlErrorParser::class, - 'rest-json' => ErrorParser\RestJsonErrorParser::class, - 'rest-xml' => ErrorParser\XmlErrorParser::class, - 'ec2' => ErrorParser\XmlErrorParser::class, - 'smithy-rpc-v2-cbor' => ErrorParser\RpcV2CborErrorParser::class - ]; - - if (isset($mapping[$protocol])) { - return new $mapping[$protocol]($api); - } - - throw new \UnexpectedValueException("Unknown protocol: $protocol"); - } - - /** - * Applies the listeners needed to parse client models. - * - * @param Service $api API to create a parser for - * @return callable - * @throws \UnexpectedValueException - */ - public static function createParser(Service $api) - { - static $mapping = [ - 'json' => Parser\JsonRpcParser::class, - 'query' => Parser\QueryParser::class, - 'rest-json' => Parser\RestJsonParser::class, - 'rest-xml' => Parser\RestXmlParser::class, - 'smithy-rpc-v2-cbor' => Parser\RpcV2CborParser::class - ]; - - $proto = $api->getProtocol(); - if (isset($mapping[$proto])) { - return new $mapping[$proto]($api); - } - - if ($proto == 'ec2') { - return new Parser\QueryParser($api, null, false); - } - - throw new \UnexpectedValueException( - 'Unknown protocol: ' . $api->getProtocol() - ); - } - - /** - * Get the full name of the service - * - * @return string - */ - public function getServiceFullName() - { - return $this->definition['metadata']['serviceFullName']; - } - - /** - * Get the service id - * - * @return string - */ - public function getServiceId() - { - return $this->definition['metadata']['serviceId']; - } - - /** - * Get the API version of the service - * - * @return string - */ - public function getApiVersion() - { - return $this->definition['metadata']['apiVersion']; - } - - /** - * Get the API version of the service - * - * @return string - */ - public function getEndpointPrefix() - { - return $this->definition['metadata']['endpointPrefix']; - } - - /** - * Get the signing name used by the service. - * - * @return string - */ - public function getSigningName() - { - return $this->definition['metadata']['signingName'] - ?: $this->definition['metadata']['endpointPrefix']; - } - - /** - * Get the service name. - * - * @return string - */ - public function getServiceName() - { - return $this->definition['metadata']['serviceIdentifier'] ?? null; - } - - /** - * Get the default signature version of the service. - * - * Note: this method assumes "v4" when not specified in the model. - * - * @return string - */ - public function getSignatureVersion() - { - return $this->definition['metadata']['signatureVersion'] ?: 'v4'; - } - - /** - * Get the protocol used by the service. - * - * @return string - */ - public function getProtocol() - { - return $this->protocol; - } - - /** - * Get the uid string used by the service - * - * @return string - */ - public function getUid() - { - return $this->definition['metadata']['uid']; - } - - /** - * Check if the description has a specific operation by name. - * - * @param string $name Operation to check by name - * - * @return bool - */ - public function hasOperation($name) - { - return isset($this['operations'][$name]); - } - - /** - * Get an operation by name. - * - * @param string $name Operation to retrieve by name - * - * @return Operation - * @throws \InvalidArgumentException If the operation is not found - */ - public function getOperation($name) - { - if (!isset($this->operations[$name])) { - if (!isset($this->definition['operations'][$name])) { - throw new \InvalidArgumentException("Unknown operation: $name"); - } - $this->operations[$name] = new Operation( - $this->definition['operations'][$name], - $this->shapeMap - ); - } elseif ($this->modifiedModel) { - $this->operations[$name] = new Operation( - $this->definition['operations'][$name], - $this->shapeMap - ); - } - - return $this->operations[$name]; - } - - /** - * Get all of the operations of the description. - * - * @return Operation[] - */ - public function getOperations() - { - $result = []; - foreach ($this->definition['operations'] as $name => $definition) { - $result[$name] = $this->getOperation($name); - } - - return $result; - } - - /** - * Get all of the error shapes of the service - * - * @return array - */ - public function getErrorShapes() - { - $result = []; - foreach ($this->definition['shapes'] as $name => $definition) { - if (!empty($definition['exception'])) { - $definition['name'] = $name; - $result[] = new StructureShape($definition, $this->getShapeMap()); - } - } - - return $result; - } - - /** - * Get all of the service metadata or a specific metadata key value. - * - * @param string|null $key Key to retrieve or null to retrieve all metadata - * - * @return mixed Returns the result or null if the key is not found - */ - public function getMetadata($key = null) - { - if (!$key) { - return $this['metadata']; - } - - if (isset($this->definition['metadata'][$key])) { - return $this->definition['metadata'][$key]; - } - - return null; - } - - /** - * Gets an associative array of available paginator configurations where - * the key is the name of the paginator, and the value is the paginator - * configuration. - * - * @return array - * @unstable The configuration format of paginators may change in the future - */ - public function getPaginators() - { - if (!isset($this->paginators)) { - $res = call_user_func( - $this->apiProvider, - 'paginator', - $this->serviceName, - $this->apiVersion - ); - $this->paginators = isset($res['pagination']) - ? $res['pagination'] - : []; - } - - return $this->paginators; - } - - /** - * Determines if the service has a paginator by name. - * - * @param string $name Name of the paginator. - * - * @return bool - */ - public function hasPaginator($name) - { - return isset($this->getPaginators()[$name]); - } - - /** - * Retrieve a paginator by name. - * - * @param string $name Paginator to retrieve by name. This argument is - * typically the operation name. - * @return array - * @throws \UnexpectedValueException if the paginator does not exist. - * @unstable The configuration format of paginators may change in the future - */ - public function getPaginatorConfig($name) - { - static $defaults = [ - 'input_token' => null, - 'output_token' => null, - 'limit_key' => null, - 'result_key' => null, - 'more_results' => null, - ]; - - if ($this->hasPaginator($name)) { - return $this->paginators[$name] + $defaults; - } - - throw new \UnexpectedValueException("There is no {$name} " - . "paginator defined for the {$this->serviceName} service."); - } - - /** - * Gets an associative array of available waiter configurations where the - * key is the name of the waiter, and the value is the waiter - * configuration. - * - * @return array - */ - public function getWaiters() - { - if (!isset($this->waiters)) { - $res = call_user_func( - $this->apiProvider, - 'waiter', - $this->serviceName, - $this->apiVersion - ); - $this->waiters = isset($res['waiters']) - ? $res['waiters'] - : []; - } - - return $this->waiters; - } - - /** - * Determines if the service has a waiter by name. - * - * @param string $name Name of the waiter. - * - * @return bool - */ - public function hasWaiter($name) - { - return isset($this->getWaiters()[$name]); - } - - /** - * Get a waiter configuration by name. - * - * @param string $name Name of the waiter by name. - * - * @return array - * @throws \UnexpectedValueException if the waiter does not exist. - */ - public function getWaiterConfig($name) - { - // Error if the waiter is not defined - if ($this->hasWaiter($name)) { - return $this->waiters[$name]; - } - - throw new \UnexpectedValueException("There is no {$name} waiter " - . "defined for the {$this->serviceName} service."); - } - - /** - * Get the shape map used by the API. - * - * @return ShapeMap - */ - public function getShapeMap() - { - return $this->shapeMap; - } - - /** - * Get all the context params of the description. - * - * @return array - */ - public function getClientContextParams() - { - return $this->clientContextParams; - } - - /** - * Get the service's api provider. - * - * @return callable - */ - public function getProvider() - { - return $this->apiProvider; - } - - /** - * Get the service's definition. - * - * @return callable - */ - public function getDefinition() - { - return $this->definition; - } - - /** - * Sets the service's api definition. - * Intended for internal use only. - * - * @return void - * - * @internal - */ - public function setDefinition($definition) - { - $this->definition = $definition; - $this->shapeMap = new ShapeMap($definition['shapes']); - $this->modifiedModel = true; - } - - /** - * Denotes whether or not a service's definition has - * been modified. Intended for internal use only. - * - * @return bool - * - * @internal - */ - public function isModifiedModel() - { - return $this->modifiedModel; - } - - /** - * Accepts a list of protocols derived from the service model. - * Returns the highest priority compatible auth scheme if the `protocols` trait is present. - * Otherwise, returns the value of the `protocol` field, if set, or null. - * - * @param array $definition - * - * @return string|null - */ - private function selectProtocol(array $definition): string | null - { - $modeledProtocols = $definition['metadata']['protocols'] ?? null; - if (!empty($modeledProtocols)) { - foreach(SupportedProtocols::cases() as $protocol) { - if (in_array($protocol->value, $modeledProtocols)) { - return $protocol->value; - } - } - } - - return $definition['metadata']['protocol'] ?? null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Shape.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Shape.php deleted file mode 100644 index 765efc035..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Shape.php +++ /dev/null @@ -1,77 +0,0 @@ - StructureShape::class, - 'map' => MapShape::class, - 'list' => ListShape::class, - 'timestamp' => TimestampShape::class, - 'integer' => Shape::class, - 'double' => Shape::class, - 'float' => Shape::class, - 'long' => Shape::class, - 'string' => Shape::class, - 'byte' => Shape::class, - 'character' => Shape::class, - 'blob' => Shape::class, - 'boolean' => Shape::class - ]; - - if (isset($definition['shape'])) { - return $shapeMap->resolve($definition); - } - - if (!isset($map[$definition['type']])) { - throw new \RuntimeException('Invalid type: ' - . print_r($definition, true)); - } - - $type = $map[$definition['type']]; - - return new $type($definition, $shapeMap); - } - - /** - * Get the type of the shape - * - * @return string - */ - public function getType() - { - return $this->definition['type']; - } - - /** - * Get the name of the shape - * - * @return string - */ - public function getName() - { - return $this->definition['name']; - } - - /** - * Get a context param definition. - */ - public function getContextParam() - { - return $this->contextParam; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ShapeMap.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ShapeMap.php deleted file mode 100644 index 1593c2e32..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/ShapeMap.php +++ /dev/null @@ -1,116 +0,0 @@ -definitions = $shapeModels; - } - - /** - * Get an array of shape names. - * - * @return array - */ - public function getShapeNames() - { - return array_keys($this->definitions); - } - - /** - * Resolve a shape reference - * - * @param array $shapeRef Shape reference shape - * - * @return Shape - * @throws \InvalidArgumentException - */ - public function resolve(array $shapeRef) - { - $shape = $shapeRef['shape']; - - if (!isset($this->definitions[$shape])) { - throw new \InvalidArgumentException('Shape not found: ' . $shape); - } - - $isSimple = count($shapeRef) == 1; - if ($isSimple && isset($this->simple[$shape])) { - return $this->simple[$shape]; - } - - $shapeDefinition = $this->definitions[$shape]; - $definition = $shapeRef + $shapeDefinition; - // Property to know whether the locationName was set at member level - // or the structure level. - if (isset($shapeDefinition['locationName'])) { - $definition['locationNameAtStructureLevel'] = true; - } - - $definition['name'] = $definition['shape']; - if (isset($definition['shape'])) { - unset($definition['shape']); - } - - $result = Shape::create($definition, $this); - - if ($isSimple) { - $this->simple[$shape] = $result; - } - - return $result; - } - - /** - * @param mixed $offset - * @return bool - */ - public function offsetExists(mixed $offset): bool - { - return isset($this->definitions[$offset]); - } - - /** - * @param mixed $offset - * @return mixed - */ - public function offsetGet(mixed $offset): mixed - { - return $this->definitions[$offset] ?? null; - } - - /** - * @param mixed $offset - * @param mixed $value - * @throws \BadMethodCallException - */ - public function offsetSet(mixed $offset, mixed $value): void - { - throw new \BadMethodCallException( - 'ShapeMap is read-only and cannot be modified.' - ); - } - - /** - * @param mixed $offset - * @throws \BadMethodCallException - */ - public function offsetUnset(mixed $offset): void - { - throw new \BadMethodCallException( - 'ShapeMap is read-only and cannot be modified.' - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/StructureShape.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/StructureShape.php deleted file mode 100644 index 2cfe7702e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/StructureShape.php +++ /dev/null @@ -1,105 +0,0 @@ -members)) { - $this->generateMembersHash(); - } - - return $this->members; - } - - /** - * Check if a specific member exists by name. - * - * @param string $name Name of the member to check - * - * @return bool - */ - public function hasMember($name) - { - return isset($this->definition['members'][$name]); - } - - /** - * Retrieve a member by name. - * - * @param string $name Name of the member to retrieve - * - * @return Shape - * @throws \InvalidArgumentException if the member is not found. - */ - public function getMember($name) - { - $members = $this->getMembers(); - - if (!isset($members[$name])) { - throw new \InvalidArgumentException('Unknown member ' . $name); - } - - return $members[$name]; - } - - /** - * Used to look up the shape's original definition. - * ShapeMap::resolve() merges properties from both - * member and target shape definitions, causing certain - * properties like `locationName` to be overwritten. - * - * @return ShapeMap - * @internal This method is for internal use only and should not be used - * by external code. It may be changed or removed without notice. - */ - public function getShapeMap(): ShapeMap - { - return $this->shapeMap; - } - - /** - * Used to look up a shape's original definition. - * - * @param string $name - * - * @return array|null - */ - public function getOriginalDefinition(string $name): ?array - { - return $this->shapeMap[$name] ?? null; - } - - private function generateMembersHash() - { - $this->members = []; - - foreach ($this->definition['members'] as $name => $definition) { - $this->members[$name] = $this->shapeFor($definition); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/SupportedProtocols.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/SupportedProtocols.php deleted file mode 100644 index 3620b97dd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/SupportedProtocols.php +++ /dev/null @@ -1,27 +0,0 @@ -getTimestamp(); - } elseif (is_string($value)) { - $value = strtotime($value); - } elseif (!is_int($value) && !is_float($value)) { - throw new \InvalidArgumentException('Unable to handle the provided' - . ' timestamp type: ' . gettype($value)); - } - - switch ($format) { - case 'iso8601': - return gmdate('Y-m-d\TH:i:s\Z', (int) $value); - case 'rfc822': - return gmdate('D, d M Y H:i:s \G\M\T', (int) $value); - case 'unixTimestamp': - return $value; - default: - throw new \UnexpectedValueException('Unknown timestamp format: ' - . $format); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Validator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Validator.php deleted file mode 100644 index 818bdbee4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Api/Validator.php +++ /dev/null @@ -1,343 +0,0 @@ - true, - 'min' => true, - 'max' => false, - 'pattern' => false - ]; - - /** - * @param array $constraints Associative array of constraints to enforce. - * Accepts the following keys: "required", "min", - * "max", and "pattern". If a key is not - * provided, the constraint will assume false. - */ - public function __construct(?array $constraints = null) - { - static $assumedFalseValues = [ - 'required' => false, - 'min' => false, - 'max' => false, - 'pattern' => false - ]; - $this->constraints = empty($constraints) - ? self::$defaultConstraints - : $constraints + $assumedFalseValues; - } - - /** - * Validates the given input against the schema. - * - * @param string $name Operation name - * @param Shape $shape Shape to validate - * @param array $input Input to validate - * - * @throws \InvalidArgumentException if the input is invalid. - */ - public function validate($name, Shape $shape, array $input) - { - $this->dispatch($shape, $input); - - if ($this->errors) { - $message = sprintf( - "Found %d error%s while validating the input provided for the " - . "%s operation:\n%s", - count($this->errors), - count($this->errors) > 1 ? 's' : '', - $name, - implode("\n", $this->errors) - ); - $this->errors = []; - - throw new \InvalidArgumentException($message); - } - } - - private function dispatch(Shape $shape, $value) - { - static $methods = [ - 'structure' => 'check_structure', - 'list' => 'check_list', - 'map' => 'check_map', - 'blob' => 'check_blob', - 'boolean' => 'check_boolean', - 'integer' => 'check_numeric', - 'float' => 'check_numeric', - 'long' => 'check_numeric', - 'string' => 'check_string', - 'byte' => 'check_string', - 'char' => 'check_string' - ]; - - $type = $shape->getType(); - if (isset($methods[$type])) { - $this->{$methods[$type]}($shape, $value); - } - } - - private function check_structure(StructureShape $shape, $value) - { - $isDocument = (isset($shape['document']) && $shape['document']); - $isUnion = (isset($shape['union']) && $shape['union']); - if ($isDocument) { - if (!$this->checkDocumentType($value)) { - $this->addError("is not a valid document type"); - return; - } - } elseif ($isUnion) { - if (!$this->checkUnion($value)) { - $this->addError("is a union type and must have exactly one non null value"); - return; - } - } elseif (!$this->checkAssociativeArray($value)) { - return; - } - - if ($this->constraints['required'] && $shape['required']) { - foreach ($shape['required'] as $req) { - if (!isset($value[$req])) { - $this->path[] = $req; - $this->addError('is missing and is a required parameter'); - array_pop($this->path); - } - } - } - if (!$isDocument) { - foreach ($value as $name => $v) { - if ($shape->hasMember($name)) { - $this->path[] = $name; - $this->dispatch( - $shape->getMember($name), - isset($value[$name]) ? $value[$name] : null - ); - array_pop($this->path); - } - } - } - } - - private function check_list(ListShape $shape, $value) - { - if (!is_array($value)) { - $this->addError('must be an array. Found ' - . Aws\describe_type($value)); - return; - } - - $this->validateRange($shape, count($value), "list element count"); - - $items = $shape->getMember(); - foreach ($value as $index => $v) { - $this->path[] = $index; - $this->dispatch($items, $v); - array_pop($this->path); - } - } - - private function check_map(MapShape $shape, $value) - { - if (!$this->checkAssociativeArray($value)) { - return; - } - - $values = $shape->getValue(); - foreach ($value as $key => $v) { - $this->path[] = $key; - $this->dispatch($values, $v); - array_pop($this->path); - } - } - - private function check_blob(Shape $shape, $value) - { - static $valid = [ - 'string' => true, - 'integer' => true, - 'double' => true, - 'resource' => true - ]; - - $type = gettype($value); - if (!isset($valid[$type])) { - if ($type != 'object' || !method_exists($value, '__toString')) { - $this->addError('must be an fopen resource, a ' - . 'GuzzleHttp\Stream\StreamInterface object, or something ' - . 'that can be cast to a string. Found ' - . Aws\describe_type($value)); - } - } - } - - private function check_numeric(Shape $shape, $value) - { - if (!is_numeric($value)) { - $this->addError('must be numeric. Found ' - . Aws\describe_type($value)); - return; - } - - $this->validateRange($shape, $value, "numeric value"); - } - - private function check_boolean(Shape $shape, $value) - { - if (!is_bool($value)) { - $this->addError('must be a boolean. Found ' - . Aws\describe_type($value)); - } - } - - private function check_string(Shape $shape, $value) - { - if ($shape['jsonvalue']) { - if (!self::canJsonEncode($value)) { - $this->addError('must be a value encodable with \'json_encode\'.' - . ' Found ' . Aws\describe_type($value)); - } - return; - } - - if (!$this->checkCanString($value)) { - $this->addError('must be a string or an object that implements ' - . '__toString(). Found ' . Aws\describe_type($value)); - return; - } - - $value = isset($value) ? $value : ''; - $this->validateRange($shape, strlen($value), "string length"); - - if ($this->constraints['pattern']) { - $pattern = $shape['pattern']; - if ($pattern && !preg_match("/$pattern/", $value)) { - $this->addError("Pattern /$pattern/ failed to match '$value'"); - } - } - } - - private function validateRange(Shape $shape, $length, $descriptor) - { - if ($this->constraints['min']) { - $min = $shape['min']; - if ($min && $length < $min) { - $this->addError("expected $descriptor to be >= $min, but " - . "found $descriptor of $length"); - } - } - - if ($this->constraints['max']) { - $max = $shape['max']; - if ($max && $length > $max) { - $this->addError("expected $descriptor to be <= $max, but " - . "found $descriptor of $length"); - } - } - } - - private function checkArray($arr) - { - return array_is_list($arr) || Aws\is_associative($arr); - } - - private function checkCanString($value) - { - static $valid = [ - 'string' => true, - 'integer' => true, - 'double' => true, - 'NULL' => true, - ]; - - $type = gettype($value); - - return isset($valid[$type]) || - ($type == 'object' && method_exists($value, '__toString')); - } - - private function checkAssociativeArray($value) - { - $isAssociative = false; - - if (is_array($value)) { - $expectedIndex = 0; - $key = key($value); - - do { - $isAssociative = $key !== $expectedIndex++; - next($value); - $key = key($value); - } while (!$isAssociative && null !== $key); - } - - if (!$isAssociative) { - $this->addError('must be an associative array. Found ' - . Aws\describe_type($value)); - return false; - } - - return true; - } - - private function checkDocumentType($value) - { - // To allow objects like value, which - // can be used within a member which type is `Document` - if ($value instanceof stdClass) { - $value = (array) $value; - } - - if (is_array($value)) { - $typeOfFirstKey = gettype(key($value)); - foreach ($value as $key => $val) { - if (!$this->checkDocumentType($val) || gettype($key) != $typeOfFirstKey) { - return false; - } - } - return $this->checkArray($value); - } - return is_null($value) - || is_numeric($value) - || is_string($value) - || is_bool($value); - } - - private function checkUnion($value) - { - if (is_array($value)) { - $nonNullCount = 0; - foreach ($value as $key => $val) { - if (!is_null($val) && !(strpos($key, "@") === 0)) { - $nonNullCount++; - } - } - return $nonNullCount == 1; - } - return !is_null($value); - } - - private function addError($message) - { - $this->errors[] = - implode('', array_map(function ($s) { return "[{$s}]"; }, $this->path)) - . ' ' - . $message; - } - - private function canJsonEncode($data) - { - return !is_resource($data); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/AccessPointArn.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/AccessPointArn.php deleted file mode 100644 index e7b88eed5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/AccessPointArn.php +++ /dev/null @@ -1,66 +0,0 @@ -data); - } - - public static function parse($string) - { - $data = parent::parse($string); - $data = self::parseResourceTypeAndId($data); - $data['accesspoint_name'] = $data['resource_id']; - return $data; - } - - public function getAccesspointName() - { - return $this->data['accesspoint_name']; - } - - /** - * Validation specific to AccessPointArn - * - * @param array $data - */ - protected static function validate(array $data) - { - self::validateRegion($data, 'access point ARN'); - self::validateAccountId($data, 'access point ARN'); - - if ($data['resource_type'] !== 'accesspoint') { - throw new InvalidArnException("The 6th component of an access point ARN" - . " represents the resource type and must be 'accesspoint'."); - } - - if (empty($data['resource_id'])) { - throw new InvalidArnException("The 7th component of an access point ARN" - . " represents the resource ID and must not be empty."); - } - if (strpos($data['resource_id'], ':') !== false) { - throw new InvalidArnException("The resource ID component of an access" - . " point ARN must not contain additional components" - . " (delimited by ':')."); - } - if (!self::isValidHostLabel($data['resource_id'])) { - throw new InvalidArnException("The resource ID in an access point ARN" - . " must be a valid host label value."); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php deleted file mode 100644 index 9eb5f2bf9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php +++ /dev/null @@ -1,10 +0,0 @@ - null, - 'partition' => null, - 'service' => null, - 'region' => null, - 'account_id' => null, - 'resource' => null, - ]; - - $length = strlen($string); - $lastDelim = 0; - $numComponents = 0; - for ($i = 0; $i < $length; $i++) { - - if (($numComponents < 5 && $string[$i] === ':')) { - // Split components between delimiters - $data[key($data)] = substr($string, $lastDelim, $i - $lastDelim); - - // Do not include delimiter character itself - $lastDelim = $i + 1; - next($data); - $numComponents++; - } - - if ($i === $length - 1) { - // Put the remainder in the last component. - if (in_array($numComponents, [5])) { - $data['resource'] = substr($string, $lastDelim); - } else { - // If there are < 5 components, put remainder in current - // component. - $data[key($data)] = substr($string, $lastDelim); - } - } - } - - return $data; - } - - public function __construct($data) - { - if (is_array($data)) { - $this->data = $data; - } elseif (is_string($data)) { - $this->data = static::parse($data); - } else { - throw new InvalidArnException('Constructor accepts a string or an' - . ' array as an argument.'); - } - - static::validate($this->data); - } - - public function __toString() - { - if (!isset($this->string)) { - $components = [ - $this->getPrefix(), - $this->getPartition(), - $this->getService(), - $this->getRegion(), - $this->getAccountId(), - $this->getResource(), - ]; - - $this->string = implode(':', $components); - } - return $this->string; - } - - public function getPrefix() - { - return $this->data['arn']; - } - - public function getPartition() - { - return $this->data['partition']; - } - - public function getService() - { - return $this->data['service']; - } - - public function getRegion() - { - return $this->data['region']; - } - - public function getAccountId() - { - return $this->data['account_id']; - } - - public function getResource() - { - return $this->data['resource']; - } - - public function toArray() - { - return $this->data; - } - - /** - * Minimally restrictive generic ARN validation - * - * @param array $data - */ - protected static function validate(array $data) - { - if ($data['arn'] !== 'arn') { - throw new InvalidArnException("The 1st component of an ARN must be" - . " 'arn'."); - } - - if (empty($data['partition'])) { - throw new InvalidArnException("The 2nd component of an ARN" - . " represents the partition and must not be empty."); - } - - if (empty($data['service'])) { - throw new InvalidArnException("The 3rd component of an ARN" - . " represents the service and must not be empty."); - } - - if (empty($data['resource'])) { - throw new InvalidArnException("The 6th component of an ARN" - . " represents the resource information and must not be empty." - . " Individual service ARNs may include additional delimiters" - . " to further qualify resources."); - } - } - - protected static function validateAccountId($data, $arnName) - { - if (!self::isValidHostLabel($data['account_id'])) { - throw new InvalidArnException("The 5th component of a {$arnName}" - . " is required, represents the account ID, and" - . " must be a valid host label."); - } - } - - protected static function validateRegion($data, $arnName) - { - if (empty($data['region'])) { - throw new InvalidArnException("The 4th component of a {$arnName}" - . " represents the region and must not be empty."); - } - } - - /** - * Validates whether a string component is a valid host label - * - * @param $string - * @return bool - */ - protected static function isValidHostLabel($string) - { - if (empty($string) || strlen($string) > 63) { - return false; - } - if ($value = preg_match("/^[a-zA-Z0-9-]+$/", $string)) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/ArnInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/ArnInterface.php deleted file mode 100644 index c30c6ccd9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/ArnInterface.php +++ /dev/null @@ -1,37 +0,0 @@ -data['resource_type']; - } - - public function getResourceId() - { - return $this->data['resource_id']; - } - - protected static function parseResourceTypeAndId(array $data) - { - $resourceData = preg_split("/[\/:]/", $data['resource'], 2); - $data['resource_type'] = isset($resourceData[0]) - ? $resourceData[0] - : null; - $data['resource_id'] = isset($resourceData[1]) - ? $resourceData[1] - : null; - return $data; - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php deleted file mode 100644 index 5841d904d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php +++ /dev/null @@ -1,27 +0,0 @@ -data['outpost_id']; - } - - public function getAccesspointName() - { - return $this->data['accesspoint_name']; - } - - private static function parseOutpostData(array $data) - { - $resourceData = preg_split("/[\/:]/", $data['resource_id']); - - $data['outpost_id'] = isset($resourceData[0]) - ? $resourceData[0] - : null; - $data['accesspoint_type'] = isset($resourceData[1]) - ? $resourceData[1] - : null; - $data['accesspoint_name'] = isset($resourceData[2]) - ? $resourceData[2] - : null; - if (isset($resourceData[3])) { - $data['resource_extra'] = implode(':', array_slice($resourceData, 3)); - } - - return $data; - } - - /** - * Validation specific to OutpostsAccessPointArn. Note this uses the base Arn - * class validation instead of the direct parent due to it having slightly - * differing requirements from its parent. - * - * @param array $data - */ - public static function validate(array $data) - { - Arn::validate($data); - - if (($data['service'] !== 's3-outposts')) { - throw new InvalidArnException("The 3rd component of an S3 Outposts" - . " access point ARN represents the service and must be" - . " 's3-outposts'."); - } - - self::validateRegion($data, 'S3 Outposts access point ARN'); - self::validateAccountId($data, 'S3 Outposts access point ARN'); - - if (($data['resource_type'] !== 'outpost')) { - throw new InvalidArnException("The 6th component of an S3 Outposts" - . " access point ARN represents the resource type and must be" - . " 'outpost'."); - } - - if (!self::isValidHostLabel($data['outpost_id'])) { - throw new InvalidArnException("The 7th component of an S3 Outposts" - . " access point ARN is required, represents the outpost ID, and" - . " must be a valid host label."); - } - - if ($data['accesspoint_type'] !== 'accesspoint') { - throw new InvalidArnException("The 8th component of an S3 Outposts" - . " access point ARN must be 'accesspoint'"); - } - - if (!self::isValidHostLabel($data['accesspoint_name'])) { - throw new InvalidArnException("The 9th component of an S3 Outposts" - . " access point ARN is required, represents the accesspoint name," - . " and must be a valid host label."); - } - - if (!empty($data['resource_extra'])) { - throw new InvalidArnException("An S3 Outposts access point ARN" - . " should only have 9 components, delimited by the characters" - . " ':' and '/'. '{$data['resource_extra']}' was found after the" - . " 9th component."); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php deleted file mode 100644 index 20285e0ca..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -data['bucket_name']; - } - - public function getOutpostId() - { - return $this->data['outpost_id']; - } - - private static function parseOutpostData(array $data) - { - $resourceData = preg_split("/[\/:]/", $data['resource_id'], 3); - - $data['outpost_id'] = isset($resourceData[0]) - ? $resourceData[0] - : null; - $data['bucket_label'] = isset($resourceData[1]) - ? $resourceData[1] - : null; - $data['bucket_name'] = isset($resourceData[2]) - ? $resourceData[2] - : null; - - return $data; - } - - /** - * - * @param array $data - */ - public static function validate(array $data) - { - Arn::validate($data); - - if (($data['service'] !== 's3-outposts')) { - throw new InvalidArnException("The 3rd component of an S3 Outposts" - . " bucket ARN represents the service and must be 's3-outposts'."); - } - - self::validateRegion($data, 'S3 Outposts bucket ARN'); - self::validateAccountId($data, 'S3 Outposts bucket ARN'); - - if (($data['resource_type'] !== 'outpost')) { - throw new InvalidArnException("The 6th component of an S3 Outposts" - . " bucket ARN represents the resource type and must be" - . " 'outpost'."); - } - - if (!self::isValidHostLabel($data['outpost_id'])) { - throw new InvalidArnException("The 7th component of an S3 Outposts" - . " bucket ARN is required, represents the outpost ID, and" - . " must be a valid host label."); - } - - if ($data['bucket_label'] !== 'bucket') { - throw new InvalidArnException("The 8th component of an S3 Outposts" - . " bucket ARN must be 'bucket'"); - } - - if (empty($data['bucket_name'])) { - throw new InvalidArnException("The 9th component of an S3 Outposts" - . " bucket ARN represents the bucket name and must not be empty."); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/AuthSchemeResolver.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/AuthSchemeResolver.php deleted file mode 100644 index ea7847ac4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/AuthSchemeResolver.php +++ /dev/null @@ -1,181 +0,0 @@ - 'v4', - 'aws.auth#sigv4a' => 'v4a', - 'smithy.api#httpBearerAuth' => 'bearer', - 'smithy.api#noAuth' => 'anonymous' - ]; - - /** - * @var array Mapping of auth schemes to signature versions used in - * resolving a signature version. - */ - private $authSchemeMap; - private $tokenProvider; - private $credentialProvider; - - - public function __construct( - callable $credentialProvider, - ?callable $tokenProvider = null, - array $authSchemeMap = [] - ){ - $this->credentialProvider = $credentialProvider; - $this->tokenProvider = $tokenProvider; - $this->authSchemeMap = empty($authSchemeMap) - ? self::$defaultAuthSchemeMap - : $authSchemeMap; - } - - /** - * Accepts a priority-ordered list of auth schemes and an Identity - * and selects the first compatible auth schemes, returning a normalized - * signature version. For example, based on the default auth scheme mapping, - * if `aws.auth#sigv4` is selected, `v4` will be returned. - * - * @param array $authSchemes - * @param $identity - * - * @return string - * @throws UnresolvedAuthSchemeException - */ - public function selectAuthScheme( - array $authSchemes, - array $args = [] - ): string - { - $failureReasons = []; - - foreach($authSchemes as $authScheme) { - $normalizedAuthScheme = $this->authSchemeMap[$authScheme] ?? $authScheme; - - if ($this->isCompatibleAuthScheme($normalizedAuthScheme)) { - if ($normalizedAuthScheme === 'v4' && !empty($args['unsigned_payload'])) { - return $normalizedAuthScheme . self::UNSIGNED_BODY; - } - - return $normalizedAuthScheme; - } else { - $failureReasons[] = $this->getIncompatibilityMessage($normalizedAuthScheme); - } - } - - throw new UnresolvedAuthSchemeException( - 'Could not resolve an authentication scheme: ' - . implode('; ', $failureReasons) - ); - } - - /** - * Determines compatibility based on either Identity or the availability - * of the CRT extension. - * - * @param $authScheme - * - * @return bool - */ - private function isCompatibleAuthScheme($authScheme): bool - { - switch ($authScheme) { - case 'v4': - case 'anonymous': - return $this->hasAwsCredentialIdentity(); - case 'v4a': - return extension_loaded('awscrt') && $this->hasAwsCredentialIdentity(); - case 'bearer': - return $this->hasBearerTokenIdentity(); - default: - return false; - } - } - - /** - * Provides incompatibility messages in the event an incompatible auth scheme - * is encountered. - * - * @param $authScheme - * - * @return string - */ - private function getIncompatibilityMessage($authScheme): string - { - switch ($authScheme) { - case 'v4': - return 'Signature V4 requires AWS credentials for request signing'; - case 'anonymous': - return 'Anonymous signatures require AWS credentials for request signing'; - case 'v4a': - return 'The aws-crt-php extension and AWS credentials are required to use Signature V4A'; - case 'bearer': - return 'Bearer token credentials must be provided to use Bearer authentication'; - default: - return "The service does not support `{$authScheme}` authentication."; - } - } - - /** - * @return bool - */ - private function hasAwsCredentialIdentity(): bool - { - $fn = $this->credentialProvider; - $result = $fn(); - - if ($result instanceof PromiseInterface) { - try { - $resolved = $result->wait(); - return $resolved instanceof AwsCredentialIdentity; - } catch (CredentialsException $e) { - return false; - } - } - - return $result instanceof AwsCredentialIdentity; - } - - /** - * @return bool - */ - private function hasBearerTokenIdentity(): bool - { - if ($this->tokenProvider) { - $fn = $this->tokenProvider; - $result = $fn(); - - if ($result instanceof PromiseInterface) { - try { - $resolved = $result->wait(); - return $resolved instanceof BearerTokenIdentity; - } catch (TokenException $e) { - return false; - } - } - - return $result instanceof BearerTokenIdentity; - } - - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/AuthSchemeResolverInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/AuthSchemeResolverInterface.php deleted file mode 100644 index 22f1311e8..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/AuthSchemeResolverInterface.php +++ /dev/null @@ -1,24 +0,0 @@ -nextHandler = $nextHandler; - $this->authResolver = $authResolver; - $this->api = $api; - $this->configuredAuthSchemes = $configuredAuthSchemes; - } - - /** - * @param CommandInterface $command - * - * @return Promise - */ - public function __invoke(CommandInterface $command) - { - $nextHandler = $this->nextHandler; - $serviceAuth = $this->api->getMetadata('auth') ?: []; - $operation = $this->api->getOperation($command->getName()); - $operationAuth = $operation['auth'] ?? []; - $unsignedPayload = $operation['unsignedpayload'] ?? false; - $resolvableAuth = $operationAuth ?: $serviceAuth; - - if (!empty($resolvableAuth)) { - if (isset($command['@context']['auth_scheme_resolver']) - && $command['@context']['auth_scheme_resolver'] instanceof AuthSchemeResolverInterface - ){ - $resolver = $command['@context']['auth_scheme_resolver']; - } else { - $resolver = $this->authResolver; - } - - try { - $authSchemeList = $this->buildAuthSchemeList( - $resolvableAuth, - $command['@context']['auth_scheme_preference'] - ?? null, - ); - $selectedAuthScheme = $resolver->selectAuthScheme( - $authSchemeList, - ['unsigned_payload' => $unsignedPayload] - ); - - if (!empty($selectedAuthScheme)) { - $command['@context']['signature_version'] = $selectedAuthScheme; - } - } catch (UnresolvedAuthSchemeException $ignored) { - // There was an error resolving auth - // The signature version will fall back to the modeled `signatureVersion` - // or auth schemes resolved during endpoint resolution - } - } - - return $nextHandler($command); - } - - /** - * Prioritizes auth schemes according to user preference order. - * User-preferred schemes that are available will be placed first, - * followed by remaining available schemes. - * - * @param array $resolvableAuthSchemeList Available auth schemes - * @param array|null $commandConfiguredAuthSchemes Command-level preferences (overrides config) - * - * @return array Reordered auth schemes with user preferences first - */ - private function buildAuthSchemeList( - array $resolvableAuthSchemeList, - ?array $commandConfiguredAuthSchemes, - ): array - { - $userConfiguredAuthSchemes = $commandConfiguredAuthSchemes - ?? $this->configuredAuthSchemes; - - if (empty($userConfiguredAuthSchemes)) { - return $resolvableAuthSchemeList; - } - - $prioritizedAuthSchemes = array_intersect( - $userConfiguredAuthSchemes, - $resolvableAuthSchemeList - ); - - // Get remaining schemes not in user preferences - $remainingAuthSchemes = array_diff( - $resolvableAuthSchemeList, - $prioritizedAuthSchemes - ); - - return array_merge($prioritizedAuthSchemes, $remainingAuthSchemes); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/Exception/UnresolvedAuthSchemeException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/Exception/UnresolvedAuthSchemeException.php deleted file mode 100644 index 98f33f4d1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Auth/Exception/UnresolvedAuthSchemeException.php +++ /dev/null @@ -1,15 +0,0 @@ -parseClass(); - if (!isset($args['service'])) { - $args['service'] = manifest($service)['endpoint']; - } - if (!isset($args['exception_class'])) { - $args['exception_class'] = $exceptionClass; - } - $this->handlerList = new HandlerList(); - $resolver = new ClientResolver(static::getArguments()); - $config = $resolver->resolve($args, $this->handlerList); - $this->api = $config['api']; - $this->signatureProvider = $config['signature_provider']; - $this->authSchemeResolver = $config['auth_scheme_resolver']; - $this->endpoint = new Uri($config['endpoint']); - $this->credentialProvider = $config['credentials']; - $this->tokenProvider = $config['token']; - $this->region = $config['region'] ?? null; - $this->signingRegionSet = $config['sigv4a_signing_region_set'] ?? null; - $this->config = $config['config']; - $this->setClientBuiltIns($args, $config); - $this->clientContextParams = $this->setClientContextParams($args); - $this->defaultRequestOptions = $config['http']; - $this->endpointProvider = $config['endpoint_provider']; - $this->serializer = $config['serializer']; - $this->addSignatureMiddleware($args); - $this->addInvocationId(); - $this->addEndpointParameterMiddleware($args); - $this->addEndpointDiscoveryMiddleware($config, $args); - $this->addRequestCompressionMiddleware($config); - $this->loadAliases(); - $this->addStreamRequestPayload(); - $this->addRecursionDetection(); - if ($this->isUseEndpointV2()) { - $this->addEndpointV2Middleware(); - } - $this->addAuthSelectionMiddleware($config['config']); - - if (!is_null($this->api->getMetadata('awsQueryCompatible'))) { - $this->addQueryCompatibleInputMiddleware($this->api); - $this->addQueryModeHeader(); - } - - if (isset($args['with_resolved'])) { - $args['with_resolved']($config); - } - $this->addUserAgentMiddleware($config); - $this->addEventStreamHttpFlagMiddleware(); - } - - public function getHandlerList() - { - return $this->handlerList; - } - - public function getConfig($option = null) - { - return $option === null - ? $this->config - : $this->config[$option] ?? null; - } - - public function getCredentials() - { - $fn = $this->credentialProvider; - return $fn(); - } - - public function getToken() - { - $fn = $this->tokenProvider; - return $fn(); - } - - - public function getEndpoint() - { - return $this->endpoint; - } - - public function getRegion() - { - return $this->region; - } - - public function getApi() - { - return $this->api; - } - - public function getCommand($name, array $args = []) - { - // Fail fast if the command cannot be found in the description. - if (!isset($this->getApi()['operations'][$name])) { - $name = ucfirst($name); - if (!isset($this->getApi()['operations'][$name])) { - throw new \InvalidArgumentException("Operation not found: $name"); - } - } - - if (!isset($args['@http'])) { - $args['@http'] = $this->defaultRequestOptions; - } else { - $args['@http'] += $this->defaultRequestOptions; - } - - return new Command($name, $args, clone $this->getHandlerList()); - } - - public function getEndpointProvider() - { - return $this->endpointProvider; - } - - /** - * Provides the set of service context parameter - * key-value pairs used for endpoint resolution. - * - * @return array - */ - public function getClientContextParams() - { - return $this->clientContextParams; - } - - /** - * Provides the set of built-in keys and values - * used for endpoint resolution - * - * @return array - */ - public function getClientBuiltIns() - { - return $this->clientBuiltIns; - } - - public function __sleep() - { - throw new \RuntimeException('Instances of ' . static::class - . ' cannot be serialized'); - } - - /** - * Get the signature_provider function of the client. - * - * @return callable - */ - final public function getSignatureProvider() - { - return $this->signatureProvider; - } - - /** - * Parse the class name and setup the custom exception class of the client - * and return the "service" name of the client and "exception_class". - * - * @return array - */ - private function parseClass() - { - $klass = get_class($this); - - if ($klass === __CLASS__) { - return ['', AwsException::class]; - } - - $service = substr($klass, strrpos($klass, '\\') + 1, -6); - - return [ - strtolower($service), - "Aws\\{$service}\\Exception\\{$service}Exception" - ]; - } - - private function addEndpointParameterMiddleware($args) - { - if (empty($args['disable_host_prefix_injection'])) { - $list = $this->getHandlerList(); - $list->appendBuild( - EndpointParameterMiddleware::wrap( - $this->api - ), - 'endpoint_parameter' - ); - } - } - - private function addEndpointDiscoveryMiddleware($config, $args) - { - $list = $this->getHandlerList(); - - if (!isset($args['endpoint'])) { - $list->appendBuild( - EndpointDiscoveryMiddleware::wrap( - $this, - $args, - $config['endpoint_discovery'] - ), - 'EndpointDiscoveryMiddleware' - ); - } - } - - private function addSignatureMiddleware(array $args) - { - $api = $this->getApi(); - $provider = $this->signatureProvider; - $signatureVersion = $this->config['signature_version']; - $name = $this->config['signing_name']; - $region = $this->config['signing_region']; - $signingRegionSet = $this->signingRegionSet; - - if (isset($args['signature_version']) - || isset($this->config['configured_signature_version']) - ) { - $configuredSignatureVersion = true; - } else { - $configuredSignatureVersion = false; - } - - $resolver = static function ( - CommandInterface $command - ) use ( - $api, - $provider, - $name, - $region, - $signatureVersion, - $configuredSignatureVersion, - $signingRegionSet - ) { - if (!$configuredSignatureVersion) { - if (!empty($command['@context']['signing_region'])) { - $region = $command['@context']['signing_region']; - } - if (!empty($command['@context']['signing_service'])) { - $name = $command['@context']['signing_service']; - } - if (!empty($command['@context']['signature_version'])) { - $signatureVersion = $command['@context']['signature_version']; - } - - $authType = $api->getOperation($command->getName())['authtype']; - switch ($authType){ - case 'none': - $signatureVersion = 'anonymous'; - break; - case 'v4-unsigned-body': - $signatureVersion = 'v4-unsigned-body'; - break; - case 'bearer': - $signatureVersion = 'bearer'; - break; - } - } - - if ($signatureVersion === 'v4a') { - $commandSigningRegionSet = !empty($command['@context']['signing_region_set']) - ? implode(', ', $command['@context']['signing_region_set']) - : null; - - $region = $signingRegionSet - ?? $commandSigningRegionSet - ?? $region; - } - - // Capture signature metric - $command->getMetricsBuilder()->identifyMetricByValueAndAppend( - 'signature', - $signatureVersion - ); - - return SignatureProvider::resolve($provider, $signatureVersion, $name, $region); - }; - $this->handlerList->appendSign( - Middleware::signer($this->credentialProvider, - $resolver, - $this->tokenProvider, - $this->getConfig() - ), - 'signer' - ); - } - - private function addRequestCompressionMiddleware($config) - { - if (empty($config['disable_request_compression'])) { - $list = $this->getHandlerList(); - $list->appendBuild( - RequestCompressionMiddleware::wrap($config), - 'request-compression' - ); - } - } - - private function addQueryCompatibleInputMiddleware(Service $api) - { - $list = $this->getHandlerList(); - $list->appendValidate( - QueryCompatibleInputMiddleware::wrap($api), - 'query-compatible-input' - ); - } - - private function addQueryModeHeader(): void - { - $list = $this->getHandlerList(); - $list->appendBuild( - Middleware::mapRequest(static function (RequestInterface $r) { - return $r->withHeader( - 'x-amzn-query-mode', - "true" - ); - }), - 'x-amzn-query-mode-header' - ); - } - - private function addInvocationId() - { - // Add invocation id to each request - $this->handlerList->prependSign(Middleware::invocationId(), 'invocation-id'); - } - - private function loadAliases($file = null) - { - if (!isset($this->aliases)) { - if (is_null($file)) { - $file = __DIR__ . '/data/aliases.json'; - } - $aliases = \Aws\load_compiled_json($file); - $serviceId = $this->api->getServiceId(); - $version = $this->getApi()->getApiVersion(); - $serviceAliases = null; - - if (!is_null($serviceId) && isset($aliases['operations'][$serviceId])) { - $serviceAliases = $aliases['operations'][$serviceId]; - } - - if ($serviceAliases && isset($serviceAliases[$version])) { - $this->aliases = array_flip($serviceAliases[$version]); - } - } - } - - private function addStreamRequestPayload() - { - $streamRequestPayloadMiddleware = StreamRequestPayloadMiddleware::wrap( - $this->api - ); - - $this->handlerList->prependSign( - $streamRequestPayloadMiddleware, - 'StreamRequestPayloadMiddleware' - ); - } - - private function addRecursionDetection() - { - // Add recursion detection header to requests - // originating in supported Lambda runtimes - $this->handlerList->appendBuild( - Middleware::recursionDetection(), 'recursion-detection' - ); - } - - private function addAuthSelectionMiddleware(array $args) - { - $list = $this->getHandlerList(); - - $list->prependBuild( - AuthSelectionMiddleware::wrap( - $this->authSchemeResolver, - $this->getApi(), - $args['auth_scheme_preference'] ?? null - ), - 'auth-selection' - ); - } - - private function addEndpointV2Middleware() - { - $list = $this->getHandlerList(); - $endpointArgs = $this->getEndpointProviderArgs(); - - $list->prependBuild( - EndpointV2Middleware::wrap( - $this->endpointProvider, - $this->getApi(), - $endpointArgs, - $this->credentialProvider - ), - 'endpoint-resolution' - ); - } - - /** - * Appends the user agent middleware. - * This middleware MUST be appended after the - * signature middleware `addSignatureMiddleware`, - * so that metrics around signatures are properly - * captured. - * - * @param $args - * @return void - */ - private function addUserAgentMiddleware($args) - { - $this->getHandlerList()->appendSign( - UserAgentMiddleware::wrap($args), - 'user-agent' - ); - } - - /** - * Enables streaming the response by using the stream flag. - * - * @return void - */ - private function addEventStreamHttpFlagMiddleware(): void - { - $api = $this->getApi(); - $this->getHandlerList() - -> appendInit( - static function (callable $handler) use ($api) { - return static function (CommandInterface $command, $request = null) use ($handler, $api) { - $operation = $api->getOperation($command->getName()); - $output = $operation->getOutput(); - foreach ($output->getMembers() as $memberProps) { - if (!empty($memberProps['eventstream'])) { - $command['@http']['stream'] = true; - break; - } - } - - return $handler($command, $request); - }; - }, - 'event-streaming-flag-middleware' - ); - } - - /** - * Retrieves client context param definition from service model, - * creates mapping of client context param names with client-provided - * values. - * - * @return array - */ - private function setClientContextParams($args) - { - $api = $this->getApi(); - $resolvedParams = []; - if (!empty($paramDefinitions = $api->getClientContextParams())) { - foreach($paramDefinitions as $paramName => $paramValue) { - if (isset($args[$paramName])) { - $resolvedParams[$paramName] = $args[$paramName]; - } - } - } - return $resolvedParams; - } - - /** - * Retrieves and sets default values used for endpoint resolution. - */ - private function setClientBuiltIns($args, $resolvedConfig) - { - $builtIns = []; - $config = $resolvedConfig['config']; - $service = $args['service']; - - $builtIns['SDK::Endpoint'] = null; - if (!empty($args['endpoint'])) { - $builtIns['SDK::Endpoint'] = $args['endpoint']; - } elseif (isset($config['configured_endpoint_url'])) { - $builtIns['SDK::Endpoint'] = (string) $this->getEndpoint(); - } - $builtIns['AWS::Region'] = $this->getRegion(); - $builtIns['AWS::UseFIPS'] = $config['use_fips_endpoint']->isUseFipsEndpoint(); - $builtIns['AWS::UseDualStack'] = $config['use_dual_stack_endpoint']->isUseDualstackEndpoint(); - if ($service === 's3' || $service === 's3control'){ - $builtIns['AWS::S3::UseArnRegion'] = $config['use_arn_region']->isUseArnRegion(); - } - if ($service === 's3') { - $builtIns['AWS::S3::UseArnRegion'] = $config['use_arn_region']->isUseArnRegion(); - $builtIns['AWS::S3::Accelerate'] = $config['use_accelerate_endpoint']; - $builtIns['AWS::S3::ForcePathStyle'] = $config['use_path_style_endpoint']; - $builtIns['AWS::S3::DisableMultiRegionAccessPoints'] = $config['disable_multiregion_access_points']; - } - $builtIns['AWS::Auth::AccountIdEndpointMode'] = $resolvedConfig['account_id_endpoint_mode']; - - $this->clientBuiltIns += $builtIns; - } - - /** - * Retrieves arguments to be used in endpoint resolution. - * - * @return array - */ - public function getEndpointProviderArgs() - { - return $this->normalizeEndpointProviderArgs(); - } - - /** - * Combines built-in and client context parameter values in - * order of specificity. Client context parameter values supersede - * built-in values. - * - * @return array - */ - private function normalizeEndpointProviderArgs() - { - $normalizedBuiltIns = []; - - foreach($this->clientBuiltIns as $name => $value) { - $normalizedName = explode('::', $name); - $normalizedName = $normalizedName[count($normalizedName) - 1]; - $normalizedBuiltIns[$normalizedName] = $value; - } - - return array_merge($normalizedBuiltIns, $this->getClientContextParams()); - } - - protected function isUseEndpointV2() - { - return $this->endpointProvider instanceof EndpointProviderV2; - } - - - /** - * Returns a service model and doc model with any necessary changes - * applied. - * - * @param array $api Array of service data being documented. - * @param array $docs Array of doc model data. - * - * @return array Tuple containing a [Service, DocModel] - * - * @internal This should only used to document the service API. - * @codeCoverageIgnore - */ - public static function applyDocFilters(array $api, array $docs) - { - $aliases = \Aws\load_compiled_json(__DIR__ . '/data/aliases.json'); - $serviceId = $api['metadata']['serviceId'] ?? ''; - $version = $api['metadata']['apiVersion']; - - // Replace names for any operations with SDK aliases - if (!empty($aliases['operations'][$serviceId][$version])) { - foreach ($aliases['operations'][$serviceId][$version] as $op => $alias) { - $api['operations'][$alias] = $api['operations'][$op]; - $docs['operations'][$alias] = $docs['operations'][$op]; - unset($api['operations'][$op], $docs['operations'][$op]); - } - } - ksort($api['operations']); - - return [ - new Service($api, ApiProvider::defaultProvider()), - new DocModel($docs) - ]; - } - - /** - * @deprecated - * @return static - */ - public static function factory(array $config = []) - { - return new static($config); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AwsClientInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AwsClientInterface.php deleted file mode 100644 index 12a570181..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AwsClientInterface.php +++ /dev/null @@ -1,169 +0,0 @@ -getWaiter('foo', ['bar' => 'baz']); - * $waiter->promise()->then(function () { echo 'Done!'; }); - * - * @param string|callable $name Name of the waiter that defines the wait - * configuration and conditions. - * @param array $args Args to be used with each command executed - * by the waiter. Waiter configuration options - * can be provided in an associative array in - * the @waiter key. - * @return \Aws\Waiter - * @throws \UnexpectedValueException if the waiter is invalid. - */ - public function getWaiter($name, array $args = []); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AwsClientTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AwsClientTrait.php deleted file mode 100644 index ff39534c4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/AwsClientTrait.php +++ /dev/null @@ -1,101 +0,0 @@ -getApi()->getPaginatorConfig($name); - - return new ResultPaginator($this, $name, $args, $config); - } - - public function getIterator($name, array $args = []) - { - $config = $this->getApi()->getPaginatorConfig($name); - if (!$config['result_key']) { - throw new \UnexpectedValueException(sprintf( - 'There are no resources to iterate for the %s operation of %s', - $name, $this->getApi()['serviceFullName'] - )); - } - - $key = is_array($config['result_key']) - ? $config['result_key'][0] - : $config['result_key']; - - if ($config['output_token'] && $config['input_token']) { - return $this->getPaginator($name, $args)->search($key); - } - - $result = $this->execute($this->getCommand($name, $args))->search($key); - - return new \ArrayIterator((array) $result); - } - - public function waitUntil($name, array $args = []) - { - return $this->getWaiter($name, $args)->promise()->wait(); - } - - public function getWaiter($name, array $args = []) - { - $config = isset($args['@waiter']) ? $args['@waiter'] : []; - $config += $this->getApi()->getWaiterConfig($name); - - return new Waiter($this, $name, $args, $config); - } - - public function execute(CommandInterface $command) - { - return $this->executeAsync($command)->wait(); - } - - public function executeAsync(CommandInterface $command) - { - $handler = $command->getHandlerList()->resolve(); - return $handler($command); - } - - public function __call($name, array $args) - { - if (substr($name, -5) === 'Async') { - $name = substr($name, 0, -5); - $isAsync = true; - } - - if (!empty($this->aliases[ucfirst($name)])) { - $name = $this->aliases[ucfirst($name)]; - } - - $params = $args['args'] ?? $args[0] ?? []; - - if (!empty($isAsync)) { - return $this->executeAsync( - $this->getCommand($name, $params) - ); - } - - return $this->execute($this->getCommand($name, $params)); - } - - /** - * @param string $name - * @param array $args - * - * @return CommandInterface - */ - abstract public function getCommand($name, array $args = []); - - /** - * @return Service - */ - abstract public function getApi(); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/CacheInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/CacheInterface.php deleted file mode 100644 index e77f18b14..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/CacheInterface.php +++ /dev/null @@ -1,34 +0,0 @@ -offset = 0; - $this->length = strlen($data); - - return $this->decodeValue($data); - } - - /** - * Decode multiple CBOR values from sequential binary data - * - * @param string $data The CBOR-encoded binary data containing multiple values - * - * @return array Array of decoded PHP values in the order they appear in the data - * @throws CborException If data is malformed CBOR - */ - public function decodeAll(string $data): array - { - $this->length = strlen($data); - $this->offset = 0; - $values = []; - - while ($this->offset < $this->length) { - $values[] = $this->decodeValue($data); - } - - return $values; - } - - /** - * Decodes a single CBOR value at the current offset - * - * @param string $data Reference to the CBOR data being decoded - * - * @return mixed The decoded value - * @throws CborException If unexpected end of data or invalid CBOR format - */ - private function decodeValue(string &$data): mixed - { - $offset = $this->offset; - $length = $this->length; - - if ($offset >= $length) { - throw new CborException("Unexpected end of data"); - } - - $byte = ord($data[$offset++]); - $majorType = $byte >> 5; - $info = $byte & 0x1F; - - switch ($majorType) { - case 0: // Unsigned integer - if ($info < 24) { - $this->offset = $offset; - - return $info; - } - - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 1; - - return ord($data[$offset]); - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 2; - - return (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 4; - - return unpack('N', $data, $offset)[1]; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 8; - - return unpack('J', $data, $offset)[1]; - - default: - throw new CborException("Invalid additional info for integer: $info"); - } - - case 1: // Negative integer - if ($info < 24) { - $this->offset = $offset; - - return -1 - $info; - } - - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 1; - - return -1 - ord($data[$offset]); - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 2; - - return -1 - ((ord($data[$offset]) << 8) | ord($data[$offset + 1])); - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 4; - - return -1 - unpack('N', $data, $offset)[1]; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 8; - $unsigned = unpack('J', $data, $offset)[1]; - - return ($unsigned === 9223372036854775807) ? PHP_INT_MIN : -1 - $unsigned; - - default: - throw new CborException("Invalid additional info for integer: $info"); - } - - case 2: // Byte string - if ($info < 24) { - $len = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $len = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $len = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteString($data, 0x40); - - default: - throw new CborException("Invalid additional info for byte string: $info"); - } - } - - if ($offset + $len > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + $len; - - return substr($data, $offset, $len); - - case 3: // Text string - if ($info < 24) { - $len = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $len = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $len = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteString($data, 0x60); - - default: - throw new CborException("Invalid additional info for text string: $info"); - } - } - - if ($offset + $len > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + $len; - - return substr($data, $offset, $len); - - case 4: // Array - if ($info < 24) { - $count = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $count = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $count = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteArray($data); - - default: - throw new CborException("Invalid additional info for array: $info"); - } - } - - $this->offset = $offset; - $arr = []; - - for ($i = 0; $i < $count; $i++) { - $arr[] = $this->decodeValue($data); - } - - return $arr; - - case 5: // Map - if ($info < 24) { - $count = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $count = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $count = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $count = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - case 31: - $this->offset = $offset; - - return $this->decodeIndefiniteMap($data); - - default: - throw new CborException("Invalid additional info for map: $info"); - } - } - - $this->offset = $offset; - $map = []; - - for ($i = 0; $i < $count; $i++) { - $key = $this->decodeValue($data); - $map[$key] = $this->decodeValue($data); - } - - return $map; - - case 6: // Tag - switch ($info) { - case 24: - $offset++; - break; - - case 25: - $offset += 2; - break; - - case 26: - $offset += 4; - break; - - case 27: - $offset += 8; - break; - } - - $this->offset = $offset; - - return $this->decodeValue($data); - - case 7: // Simple/float - switch ($info) { - case 20: - $this->offset = $offset; - - return false; - - case 21: - $this->offset = $offset; - - return true; - - case 22: - case 23: - $this->offset = $offset; - - return null; - - case 25: // Half-precision float - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 2; - $half = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $sign = ($half >> 15) & 0x01; - $exp = ($half >> 10) & 0x1F; - $mant = $half & 0x3FF; - - if ($exp === 0) { - return $mant === 0 - ? ($sign ? -0.0 : 0.0) - : ($sign ? -1 : 1) * pow(2, -14) * ($mant / 1024); - } - - if ($exp === 31) { - return $mant === 0 ? ($sign ? -INF : INF) : NAN; - } - - return (float) (($sign ? -1 : 1) * pow(2, $exp - 15) * (1 + $mant / 1024)); - - case 26: // Single-precision float - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 4; - - return unpack('G', $data, $offset)[1]; - - case 27: // Double-precision float - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $this->offset = $offset + 8; - - return unpack('E', $data, $offset)[1]; - - case 31: - throw new CborException("Unexpected break"); - - default: - throw new CborException("Unknown simple value: $info"); - } - - default: - throw new CborException("Unknown major type: $majorType"); - } - } - - /** - * Decode indefinite-length string (byte or text) - * - * @param string $data Reference to the CBOR data being decoded - * @param int $expectedMajor Expected major type (0x40 for byte string, 0x60 for text string) - * - * @return string The concatenated string from all chunks - * @throws CborException If invalid chunk format or unexpected end of data - */ - private function decodeIndefiniteString(string &$data, int $expectedMajor): string - { - $chunks = []; - - while (true) { - $offset = $this->offset; - $length = $this->length; - - if ($offset >= $length) { - throw new CborException("Unexpected end of data"); - } - - $byte = ord($data[$offset++]); - - if ($byte === 0xFF) { - $this->offset = $offset; - - return implode('', $chunks); - } - - if (($byte & 0xE0) !== $expectedMajor) { - throw new CborException("Invalid chunk in indefinite string"); - } - - $info = $byte & 0x1F; - - if ($info === 31) { - throw new CborException("Nested indefinite string"); - } - - if ($info < 24) { - $len = $info; - } else { - switch ($info) { - case 24: - if ($offset >= $length) { - throw new CborException("Not enough data"); - } - - $len = ord($data[$offset++]); - break; - - case 25: - if ($offset + 2 > $length) { - throw new CborException("Not enough data"); - } - - $len = (ord($data[$offset]) << 8) | ord($data[$offset + 1]); - $offset += 2; - break; - - case 26: - if ($offset + 4 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('N', $data, $offset)[1]; - $offset += 4; - break; - - case 27: - if ($offset + 8 > $length) { - throw new CborException("Not enough data"); - } - - $len = unpack('J', $data, $offset)[1]; - $offset += 8; - break; - - default: - throw new CborException("Invalid chunk length info: $info"); - } - } - - if ($offset + $len > $length) { - throw new CborException("Not enough data for chunk"); - } - - $chunks[] = substr($data, $offset, $len); - $this->offset = $offset + $len; - } - } - - /** - * Decode indefinite-length array - * - * @param string $data Reference to the CBOR data being decoded - * - * @return array The decoded array elements - * @throws CborException If unexpected end of data - */ - private function decodeIndefiniteArray(string &$data): array - { - $result = []; - - while (true) { - if ($this->offset >= $this->length) { - throw new CborException("Unexpected end of data"); - } - - if (ord($data[$this->offset]) === 0xFF) { - $this->offset++; - - return $result; - } - - $result[] = $this->decodeValue($data); - } - } - - /** - * Decode indefinite-length map - * - * @param string $data Reference to the CBOR data being decoded - * - * @return array The decoded map as associative array - * @throws CborException If unexpected end of data or odd number of items - */ - private function decodeIndefiniteMap(string &$data): array - { - $result = []; - - while (true) { - if ($this->offset >= $this->length) { - throw new CborException("Unexpected end of data"); - } - - if (ord($data[$this->offset]) === 0xFF) { - $this->offset++; - - return $result; - } - - $key = $this->decodeValue($data); - $result[$key] = $this->decodeValue($data); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Cbor/CborEncoder.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Cbor/CborEncoder.php deleted file mode 100644 index 3addad740..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Cbor/CborEncoder.php +++ /dev/null @@ -1,357 +0,0 @@ - $data] wrappers) - * - Type 3: Text strings (UTF-8) - * - Type 4: Arrays - * - Type 5: Maps - * - Type 6: Tagged values (timestamps) - * - Type 7: Simple values (null, bool, float) - * - * @internal - */ -final class CborEncoder -{ - /** - * Pre-encoded integers 0-23 (single byte) and common larger values - * CBOR major type 0 (unsigned integer) - */ - private const INT_CACHE = [ - 0 => "\x00", 1 => "\x01", 2 => "\x02", 3 => "\x03", - 4 => "\x04", 5 => "\x05", 6 => "\x06", 7 => "\x07", - 8 => "\x08", 9 => "\x09", 10 => "\x0A", 11 => "\x0B", - 12 => "\x0C", 13 => "\x0D", 14 => "\x0E", 15 => "\x0F", - 16 => "\x10", 17 => "\x11", 18 => "\x12", 19 => "\x13", - 20 => "\x14", 21 => "\x15", 22 => "\x16", 23 => "\x17", - 24 => "\x18\x18", 25 => "\x18\x19", 26 => "\x18\x1A", - 32 => "\x18\x20", 50 => "\x18\x32", 64 => "\x18\x40", - 100 => "\x18\x64", 128 => "\x18\x80", 200 => "\x18\xC8", - 255 => "\x18\xFF", 256 => "\x19\x01\x00", 500 => "\x19\x01\xF4", - 1000 => "\x19\x03\xE8", 1023 => "\x19\x03\xFF", - ]; - - /** - * Pre-encoded negative integers -1 to -24 and common larger values - * CBOR major type 1 (negative integer) - */ - private const NEG_CACHE = [ - -1 => "\x20", -2 => "\x21", -3 => "\x22", -4 => "\x23", - -5 => "\x24", -10 => "\x29", -20 => "\x33", -24 => "\x37", - -25 => "\x38\x18", -50 => "\x38\x31", -100 => "\x38\x63", - ]; - - /** - * Encode a PHP value to CBOR binary string - * - * @param mixed $value The value to encode - * - * @return string - */ - public function encode(mixed $value): string - { - return $this->encodeValue($value); - } - - /** - * Recursively encode a value to CBOR - * - * @param mixed $value Value to encode - * @return string Encoded CBOR bytes - */ - private function encodeValue(mixed $value): string - { - switch (gettype($value)) { - case 'string': - $len = strlen($value); - if ($len < 24) { - return chr(0x60 | $len) . $value; - } - - if ($len < 0x100) { - return "\x78" . chr($len) . $value; - } - - return $this->encodeTextString($value); - - case 'array': - // Encode a byte string (major type 2) - if (isset($value['__cbor_bytes'])) { - $bytes = $value['__cbor_bytes']; - $len = strlen($bytes); - if ($len < 24) { - return chr(0x40 | $len) . $bytes; - } - - if ($len < 0x100) { - return "\x58" . chr($len) . $bytes; - } - - if ($len < 0x10000) { - return "\x59" . pack('n', $len) . $bytes; - } - - return "\x5A" . pack('N', $len) . $bytes; - } - - if (array_is_list($value)) { - return $this->encodeArray($value); - } - - return $this->encodeMap($value); - - case 'integer': - if (isset(self::INT_CACHE[$value])) { - return self::INT_CACHE[$value]; - } - - if (isset(self::NEG_CACHE[$value])) { - return self::NEG_CACHE[$value]; - } - - // Fast path for positive integers - // Major type 0: unsigned integer - if ($value >= 0) { - if ($value < 24) { - return chr($value); - } - - if ($value < 0x100) { - return "\x18" . chr($value); - } - - if ($value < 0x10000) { - return "\x19" . pack('n', $value); - } - - if ($value < 0x100000000) { - return "\x1A" . pack('N', $value); - } - - return "\x1B" . pack('J', $value); - } - - return $this->encodeInteger($value); - - case 'double': - // Encode a float (major type 7, float 64) - return "\xFB" . pack('E', $value); - - case 'boolean': - // Encode a boolean (major type 7, simple) - return $value ? "\xF5" : "\xF4"; - - case 'NULL': - // Encode null (major type 7, simple) - return "\xF6"; - - case 'object': - // Encode timestamp (major type 6, tag 1) - if ($value instanceof DateTimeInterface) { - $timestamp = $value->getTimestamp(); - $micro = (int) $value->format('u'); - if ($micro === 0) { - if ($timestamp >= 0 && $timestamp < 0x100000000) { - return "\xC1\x1A" . pack('N', $timestamp); - } - - return "\xC1" . $this->encodeInteger($timestamp); - } - - return "\xC1\xFB" . pack('E', $timestamp + $micro / 1e6); - } - - throw new CborException("Cannot encode object of type: " . get_class($value)); - - default: - throw new CborException("Cannot encode value of type: " . gettype($value)); - } - } - - /** - * Encode an integer (major type 0 or 1) - * - * @param int $value - * @return string - */ - private function encodeInteger(int $value): string - { - if (isset(self::INT_CACHE[$value])) { - return self::INT_CACHE[$value]; - } - - if (isset(self::NEG_CACHE[$value])) { - return self::NEG_CACHE[$value]; - } - - if ($value >= 0) { - // Major type 0: unsigned integer - if ($value < 24) { - return chr($value); - } - - if ($value < 0x100) { - return "\x18" . chr($value); - } - - if ($value < 0x10000) { - return "\x19" . pack('n', $value); - } - - if ($value < 0x100000000) { - return "\x1A" . pack('N', $value); - } - - return "\x1B" . pack('J', $value); - } - - // Major type 1: negative integer (-1 - n) - $value = -1 - $value; - if ($value < 24) { - return chr(0x20 | $value); - } - - if ($value < 0x100) { - return "\x38" . chr($value); - } - - if ($value < 0x10000) { - return "\x39" . pack('n', $value); - } - - if ($value < 0x100000000) { - return "\x3A" . pack('N', $value); - } - - return "\x3B" . pack('J', $value); - } - - /** - * Encode a text string (major type 3) - * - * @param string $value - * @return string - */ - private function encodeTextString(string $value): string - { - $len = strlen($value); - - if ($len < 24) { - return chr(0x60 | $len) . $value; - } - - if ($len < 0x100) { - return "\x78" . chr($len) . $value; - } - - if ($len < 0x10000) { - return "\x79" . pack('n', $len) . $value; - } - - if ($len < 0x100000000) { - return "\x7A" . pack('N', $len) . $value; - } - - return "\x7B" . pack('J', $len) . $value; - } - - /** - * Encode an array (major type 4) - * - * @param array $value - * @return string - */ - private function encodeArray(array $value): string - { - $count = count($value); - - if ($count < 24) { - $result = chr(0x80 | $count); - } elseif ($count < 0x100) { - $result = "\x98" . chr($count); - } elseif ($count < 0x10000) { - $result = "\x99" . pack('n', $count); - } elseif ($count < 0x100000000) { - $result = "\x9A" . pack('N', $count); - } else { - $result = "\x9B" . pack('J', $count); - } - - foreach ($value as $item) { - $result .= $this->encodeValue($item); - } - - return $result; - } - - /** - * Encode a map (major type 5) - * - * @param array $value - * @return string - */ - private function encodeMap(array $value): string - { - $count = count($value); - - if ($count < 24) { - $result = chr(0xA0 | $count); - } elseif ($count < 0x100) { - $result = "\xB8" . chr($count); - } elseif ($count < 0x10000) { - $result = "\xB9" . pack('n', $count); - } elseif ($count < 0x100000000) { - $result = "\xBA" . pack('N', $count); - } else { - $result = "\xBB" . pack('J', $count); - } - - foreach ($value as $k => $v) { - if (is_int($k)) { - $result .= $this->encodeInteger($k); - } else { - $len = strlen($k); - if ($len < 24) { - $result .= chr(0x60 | $len) . $k; - } elseif ($len < 0x100) { - $result .= "\x78" . chr($len) . $k; - } else { - $result .= "\x79" . pack('n', $len) . $k; - } - } - - $result .= $this->encodeValue($v); - } - - return $result; - } - - /** - * Create an empty map (major type 5 with 0 elements) - * - * @return string - */ - public function encodeEmptyMap(): string - { - return "\xA0"; - } - - /** - * Create an empty indefinite map (major type 5 indefinite length) - * - * @return string - */ - public function encodeEmptyIndefiniteMap(): string - { - return "\xBF\xFF"; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Cbor/Exception/CborException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Cbor/Exception/CborException.php deleted file mode 100644 index abbcec5df..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Cbor/Exception/CborException.php +++ /dev/null @@ -1,6 +0,0 @@ - 'is_resource', - 'callable' => 'is_callable', - 'int' => 'is_int', - 'bool' => 'is_bool', - 'boolean' => 'is_bool', - 'string' => 'is_string', - 'object' => 'is_object', - 'array' => 'is_array', - ]; - - private static $defaultArgs = [ - 'service' => [ - 'type' => 'value', - 'valid' => ['string'], - 'doc' => 'Name of the service to utilize. This value will be supplied by default when using one of the SDK clients (e.g., Aws\\S3\\S3Client).', - 'required' => true, - 'internal' => true - ], - 'exception_class' => [ - 'type' => 'value', - 'valid' => ['string'], - 'doc' => 'Exception class to create when an error occurs.', - 'default' => AwsException::class, - 'internal' => true - ], - 'scheme' => [ - 'type' => 'value', - 'valid' => ['string'], - 'default' => 'https', - 'doc' => 'URI scheme to use when connecting connect. The SDK will utilize "https" endpoints (i.e., utilize SSL/TLS connections) by default. You can attempt to connect to a service over an unencrypted "http" endpoint by setting ``scheme`` to "http".', - ], - 'disable_host_prefix_injection' => [ - 'type' => 'value', - 'valid' => ['bool'], - 'doc' => 'Set to true to disable host prefix injection logic for services that use it. This disables the entire prefix injection, including the portions supplied by user-defined parameters. Setting this flag will have no effect on services that do not use host prefix injection.', - 'default' => false, - ], - 'ignore_configured_endpoint_urls' => [ - 'type' => 'value', - 'valid' => ['bool'], - 'doc' => 'Set to true to disable endpoint urls configured using `AWS_ENDPOINT_URL` and `endpoint_url` shared config option.', - 'fn' => [__CLASS__, '_apply_ignore_configured_endpoint_urls'], - 'default' => self::DEFAULT_FROM_ENV_INI, - ], - 'endpoint' => [ - 'type' => 'value', - 'valid' => ['string'], - 'doc' => 'The full URI of the webservice. This is only required when connecting to a custom endpoint (e.g., a local version of S3).', - 'fn' => [__CLASS__, '_apply_endpoint'], - 'default' => [__CLASS__, '_default_endpoint'] - ], - 'region' => [ - 'type' => 'value', - 'valid' => ['string'], - 'doc' => 'Region to connect to. See http://docs.aws.amazon.com/general/latest/gr/rande.html for a list of available regions.', - 'fn' => [__CLASS__, '_apply_region'], - 'default' => self::DEFAULT_FROM_ENV_INI - ], - 'version' => [ - 'type' => 'value', - 'valid' => ['string'], - 'doc' => 'The version of the webservice to utilize (e.g., 2006-03-01).', - 'default' => 'latest', - ], - 'signature_provider' => [ - 'type' => 'value', - 'valid' => ['callable'], - 'doc' => 'A callable that accepts a signature version name (e.g., "v4"), a service name, and region, and returns a SignatureInterface object or null. This provider is used to create signers utilized by the client. See Aws\\Signature\\SignatureProvider for a list of built-in providers', - 'default' => [__CLASS__, '_default_signature_provider'], - ], - 'api_provider' => [ - 'type' => 'value', - 'valid' => ['callable'], - 'doc' => 'An optional PHP callable that accepts a type, service, and version argument, and returns an array of corresponding configuration data. The type value can be one of api, waiter, or paginator.', - 'fn' => [__CLASS__, '_apply_api_provider'], - 'default' => [ApiProvider::class, 'defaultProvider'], - ], - 'configuration_mode' => [ - 'type' => 'value', - 'valid' => [ConfigModeInterface::class, CacheInterface::class, 'string', 'closure'], - 'doc' => "Sets the default configuration mode. Otherwise provide an instance of Aws\DefaultsMode\ConfigurationInterface, an instance of Aws\CacheInterface, or a string containing a valid mode", - 'fn' => [__CLASS__, '_apply_defaults'], - 'default' => [ConfigModeProvider::class, 'defaultProvider'] - ], - 'use_fips_endpoint' => [ - 'type' => 'value', - 'valid' => ['bool', UseFipsEndpointConfiguration::class, CacheInterface::class, 'callable'], - 'doc' => 'Set to true to enable the use of FIPS pseudo regions', - 'fn' => [__CLASS__, '_apply_use_fips_endpoint'], - 'default' => [__CLASS__, '_default_use_fips_endpoint'], - ], - 'use_dual_stack_endpoint' => [ - 'type' => 'value', - 'valid' => ['bool', UseDualStackEndpointConfiguration::class, CacheInterface::class, 'callable'], - 'doc' => 'Set to true to enable the use of dual-stack endpoints', - 'fn' => [__CLASS__, '_apply_use_dual_stack_endpoint'], - 'default' => [__CLASS__, '_default_use_dual_stack_endpoint'], - ], - 'endpoint_provider' => [ - 'type' => 'value', - 'valid' => ['callable', EndpointV2\EndpointProviderV2::class], - 'fn' => [__CLASS__, '_apply_endpoint_provider'], - 'doc' => 'An optional PHP callable that accepts a hash of options including a "service" and "region" key and returns NULL or a hash of endpoint data, of which the "endpoint" key is required. See Aws\\Endpoint\\EndpointProvider for a list of built-in providers.', - 'default' => [__CLASS__, '_default_endpoint_provider'], - ], - 'serializer' => [ - 'default' => [__CLASS__, '_default_serializer'], - 'fn' => [__CLASS__, '_apply_serializer'], - 'internal' => true, - 'type' => 'value', - 'valid' => ['callable'], - ], - 'signature_version' => [ - 'type' => 'config', - 'valid' => ['string'], - 'doc' => 'A string representing a custom signature version to use with a service (e.g., v4). Note that per/operation signature version MAY override this requested signature version.', - 'default' => [__CLASS__, '_default_signature_version'], - ], - 'signing_name' => [ - 'type' => 'config', - 'valid' => ['string'], - 'doc' => 'A string representing a custom service name to be used when calculating a request signature.', - 'default' => [__CLASS__, '_default_signing_name'], - ], - 'signing_region' => [ - 'type' => 'config', - 'valid' => ['string'], - 'doc' => 'A string representing a custom region name to be used when calculating a request signature.', - 'default' => [__CLASS__, '_default_signing_region'], - ], - 'profile' => [ - 'type' => 'config', - 'valid' => ['string'], - 'doc' => 'Allows you to specify which profile to use when credentials are created from the AWS credentials file in your HOME directory. This setting overrides the AWS_PROFILE environment variable. Note: Specifying "profile" will cause the "credentials" and "use_aws_shared_config_files" keys to be ignored.', - 'fn' => [__CLASS__, '_apply_profile'], - ], - 'credentials' => [ - 'type' => 'value', - 'valid' => [CredentialsInterface::class, CacheInterface::class, 'array', 'bool', 'callable'], - 'doc' => 'Specifies the credentials used to sign requests. Provide an Aws\Credentials\CredentialsInterface object, an associative array of "key", "secret", and an optional "token" key, `false` to use null credentials, or a callable credentials provider used to create credentials or return null. See Aws\\Credentials\\CredentialProvider for a list of built-in credentials providers. If no credentials are provided, the SDK will attempt to load them from the environment.', - 'fn' => [__CLASS__, '_apply_credentials'], - 'default' => [__CLASS__, '_default_credential_provider'], - ], - 'auth_scheme_preference' => [ - 'type' => 'value', - 'valid' => ['string', 'array'], - 'doc' => 'Comma-separated list of authentication scheme preferences in priority order. Configure via environment variable `AWS_AUTH_SCHEME_PREFERENCE`, INI config file `auth_scheme_preference`, or client constructor parameter `auth_scheme_preference` (string or array).\nExample: `AWS_AUTH_SCHEME_PREFERENCE=aws.auth#sigv4a,aws.auth#sigv4,smithy.api#httpBearerAuth`', - 'default' => self::DEFAULT_FROM_ENV_INI, - 'fn' => [__CLASS__, '_apply_auth_scheme_preference'], - ], - 'token' => [ - 'type' => 'value', - 'valid' => [TokenInterface::class, CacheInterface::class, 'array', 'bool', 'callable'], - 'doc' => 'Specifies the token used to authorize requests. Provide an Aws\Token\TokenInterface object, an associative array of "token", and an optional "expiration" key, `false` to use a null token, or a callable token provider used to fetch a token or return null. See Aws\\Token\\TokenProvider for a list of built-in credentials providers. If no token is provided, the SDK will attempt to load one from the environment.', - 'fn' => [__CLASS__, '_apply_token'], - 'default' => [__CLASS__, '_default_token_provider'], - ], - 'auth_scheme_resolver' => [ - 'type' => 'value', - 'valid' => [AuthSchemeResolverInterface::class], - 'doc' => 'An instance of Aws\Auth\AuthSchemeResolverInterface which selects a modeled auth scheme and returns a signature version', - 'default' => [__CLASS__, '_default_auth_scheme_resolver'], - ], - 'endpoint_discovery' => [ - 'type' => 'value', - 'valid' => [ConfigurationInterface::class, CacheInterface::class, 'array', 'callable'], - 'doc' => 'Specifies settings for endpoint discovery. Provide an instance of Aws\EndpointDiscovery\ConfigurationInterface, an instance Aws\CacheInterface, a callable that provides a promise for a Configuration object, or an associative array with the following keys: enabled: (bool) Set to true to enable endpoint discovery, false to explicitly disable it. Defaults to false; cache_limit: (int) The maximum number of keys in the endpoints cache. Defaults to 1000.', - 'fn' => [__CLASS__, '_apply_endpoint_discovery'], - 'default' => [__CLASS__, '_default_endpoint_discovery_provider'] - ], - 'stats' => [ - 'type' => 'value', - 'valid' => ['bool', 'array'], - 'default' => false, - 'doc' => 'Set to true to gather transfer statistics on requests sent. Alternatively, you can provide an associative array with the following keys: retries: (bool) Set to false to disable reporting on retries attempted; http: (bool) Set to true to enable collecting statistics from lower level HTTP adapters (e.g., values returned in GuzzleHttp\TransferStats). HTTP handlers must support an http_stats_receiver option for this to have an effect; timer: (bool) Set to true to enable a command timer that reports the total wall clock time spent on an operation in seconds.', - 'fn' => [__CLASS__, '_apply_stats'], - ], - 'retries' => [ - 'type' => 'value', - 'valid' => ['int', RetryConfigInterface::class, CacheInterface::class, 'callable', 'array'], - 'doc' => "Configures the retry mode and maximum number of allowed retries for a client (pass 0 to disable retries). Provide an integer for 'legacy' mode with the specified number of retries. Otherwise provide an instance of Aws\Retry\ConfigurationInterface, an instance of Aws\CacheInterface, a callable function, or an array with the following keys: mode: (string) Set to 'legacy', 'standard' (uses retry quota management), or 'adapative' (an experimental mode that adds client-side rate limiting to standard mode); max_attempts: (int) The maximum number of attempts for a given request. ", - 'fn' => [__CLASS__, '_apply_retries'], - 'default' => [RetryConfigProvider::class, 'defaultProvider'] - ], - 'validate' => [ - 'type' => 'value', - 'valid' => ['bool', 'array'], - 'default' => true, - 'doc' => 'Set to false to disable client-side parameter validation. Set to true to utilize default validation constraints. Set to an associative array of validation options to enable specific validation constraints.', - 'fn' => [__CLASS__, '_apply_validate'], - ], - 'debug' => [ - 'type' => 'value', - 'valid' => ['bool', 'array'], - 'doc' => 'Set to true to display debug information when sending requests. Alternatively, you can provide an associative array with the following keys: logfn: (callable) Function that is invoked with log messages; stream_size: (int) When the size of a stream is greater than this number, the stream data will not be logged (set to "0" to not log any stream data); scrub_auth: (bool) Set to false to disable the scrubbing of auth data from the logged messages; http: (bool) Set to false to disable the "debug" feature of lower level HTTP adapters (e.g., verbose curl output).', - 'fn' => [__CLASS__, '_apply_debug'], - ], - 'disable_request_compression' => [ - 'type' => 'value', - 'valid' => ['bool', 'callable'], - 'doc' => 'Set to true to disable request compression for supported operations', - 'fn' => [__CLASS__, '_apply_disable_request_compression'], - 'default' => self::DEFAULT_FROM_ENV_INI, - ], - 'request_min_compression_size_bytes' => [ - 'type' => 'value', - 'valid' => ['int', 'callable'], - 'doc' => 'Set to a value between between 0 and 10485760 bytes, inclusive. This value will be ignored if `disable_request_compression` is set to `true`', - 'fn' => [__CLASS__, '_apply_min_compression_size'], - 'default' => [__CLASS__, '_default_min_compression_size'], - ], - 'csm' => [ - 'type' => 'value', - 'valid' => [\Aws\ClientSideMonitoring\ConfigurationInterface::class, 'callable', 'array', 'bool'], - 'doc' => 'CSM options for the client. Provides a callable wrapping a promise, a boolean "false", an instance of ConfigurationInterface, or an associative array of "enabled", "host", "port", and "client_id".', - 'fn' => [__CLASS__, '_apply_csm'], - 'default' => [\Aws\ClientSideMonitoring\ConfigurationProvider::class, 'defaultProvider'] - ], - 'http' => [ - 'type' => 'value', - 'valid' => ['array'], - 'default' => [], - 'doc' => 'Set to an array of SDK request options to apply to each request (e.g., proxy, verify, etc.).', - ], - 'http_handler' => [ - 'type' => 'value', - 'valid' => ['callable'], - 'doc' => 'An HTTP handler is a function that accepts a PSR-7 request object and returns a promise that is fulfilled with a PSR-7 response object or rejected with an array of exception data. NOTE: This option supersedes any provided "handler" option.', - 'fn' => [__CLASS__, '_apply_http_handler'] - ], - 'handler' => [ - 'type' => 'value', - 'valid' => ['callable'], - 'doc' => 'A handler that accepts a command object, request object and returns a promise that is fulfilled with an Aws\ResultInterface object or rejected with an Aws\Exception\AwsException. A handler does not accept a next handler as it is terminal and expected to fulfill a command. If no handler is provided, a default Guzzle handler will be utilized.', - 'fn' => [__CLASS__, '_apply_handler'], - 'default' => [__CLASS__, '_default_handler'] - ], - 'app_id' => [ - 'type' => 'value', - 'valid' => ['string'], - 'doc' => 'app_id(AppId) is an optional application specific identifier that can be set. - When set it will be appended to the User-Agent header of every request in the form of App/{AppId}. - This value is also sourced from environment variable AWS_SDK_UA_APP_ID or the shared config profile attribute sdk_ua_app_id.', - 'fn' => [__CLASS__, '_apply_app_id'], - 'default' => [__CLASS__, '_default_app_id'] - ], - 'ua_append' => [ - 'type' => 'value', - 'valid' => ['string', 'array'], - 'doc' => 'Provide a string or array of strings to send in the User-Agent header.', - 'fn' => [__CLASS__, '_apply_user_agent'], - 'default' => [], - ], - 'idempotency_auto_fill' => [ - 'type' => 'value', - 'valid' => ['bool', 'callable'], - 'doc' => 'Set to false to disable SDK to populate parameters that enabled \'idempotencyToken\' trait with a random UUID v4 value on your behalf. Using default value \'true\' still allows parameter value to be overwritten when provided. Note: auto-fill only works when cryptographically secure random bytes generator functions(random_bytes, openssl_random_pseudo_bytes or mcrypt_create_iv) can be found. You may also provide a callable source of random bytes.', - 'default' => true, - 'fn' => [__CLASS__, '_apply_idempotency_auto_fill'] - ], - 'use_aws_shared_config_files' => [ - 'type' => 'value', - 'valid' => ['bool'], - 'doc' => 'Set to false to disable checking for shared aws config files usually located in \'~/.aws/config\' and \'~/.aws/credentials\'. This will be ignored if you set the \'profile\' setting.', - 'default' => true, - ], - 'suppress_php_deprecation_warning' => [ - 'type' => 'value', - 'valid' => ['bool'], - 'doc' => 'Set to true to suppress PHP runtime deprecation warnings. The current deprecation campaign is PHP versions 8.0.x and below, taking effect on 1/13/2025.', - 'default' => false, - 'fn' => [__CLASS__, '_apply_suppress_php_deprecation_warning'] - ], - 'account_id_endpoint_mode' => [ - 'type' => 'value', - 'valid' => ['string'], - 'doc' => 'Decides whether account_id must a be a required resolved credentials property. If this configuration is set to disabled, then account_id is not required. If set to preferred a warning will be logged when account_id is not resolved, and when set to required an exception will be thrown if account_id is not resolved.', - 'default' => [__CLASS__, '_default_account_id_endpoint_mode'], - 'fn' => [__CLASS__, '_apply_account_id_endpoint_mode'] - ], - 'sigv4a_signing_region_set' => [ - 'type' => 'value', - 'valid' => ['string', 'array'], - 'doc' => 'A comma-delimited list of supported regions sent in sigv4a requests.', - 'fn' => [__CLASS__, '_apply_sigv4a_signing_region_set'], - 'default' => self::DEFAULT_FROM_ENV_INI - ] - ]; - - /** - * Gets an array of default client arguments, each argument containing a - * hash of the following: - * - * - type: (string, required) option type described as follows: - * - value: The default option type. - * - config: The provided value is made available in the client's - * getConfig() method. - * - valid: (array, required) Valid PHP types or class names. Note: null - * is not an allowed type. - * - required: (bool, callable) Whether or not the argument is required. - * Provide a function that accepts an array of arguments and returns a - * string to provide a custom error message. - * - default: (mixed) The default value of the argument if not provided. If - * a function is provided, then it will be invoked to provide a default - * value. The function is provided the array of options and is expected - * to return the default value of the option. The default value can be a - * closure and can not be a callable string that is not part of the - * defaultArgs array. - * - doc: (string) The argument documentation string. - * - fn: (callable) Function used to apply the argument. The function - * accepts the provided value, array of arguments by reference, and an - * event emitter. - * - * Note: Order is honored and important when applying arguments. - * - * @return array - */ - public static function getDefaultArguments() - { - return self::$defaultArgs; - } - - /** - * @param array $argDefinitions Client arguments. - */ - public function __construct(array $argDefinitions) - { - $this->argDefinitions = $argDefinitions; - } - - /** - * Resolves client configuration options and attached event listeners. - * Check for missing keys in passed arguments - * - * @param array $args Provided constructor arguments. - * @param HandlerList $list Handler list to augment. - * - * @return array Returns the array of provided options. - * @throws \InvalidArgumentException - * @see Aws\AwsClient::__construct for a list of available options. - */ - public function resolve(array $args, HandlerList $list) - { - $args['config'] = []; - foreach ($this->argDefinitions as $key => $a) { - // Add defaults, validate required values, and skip if not set. - if (!isset($args[$key])) { - if (isset($a['default'])) { - // Merge defaults in when not present. - if (is_callable($a['default']) - && ( - is_array($a['default']) - || $a['default'] instanceof \Closure - ) - ) { - if ($a['default'] === self::DEFAULT_FROM_ENV_INI) { - $args[$key] = $a['default']( - $key, - $a['valid'][0] ?? 'string', - $args - ); - } else { - $args[$key] = $a['default']($args); - } - } else { - $args[$key] = $a['default']; - } - } elseif (empty($a['required'])) { - continue; - } else { - $this->throwRequired($args); - } - } - - // Validate the types against the provided value. - foreach ($a['valid'] as $check) { - if (isset(self::$typeMap[$check])) { - $fn = self::$typeMap[$check]; - if ($fn($args[$key])) { - goto is_valid; - } - } elseif ($args[$key] instanceof $check) { - goto is_valid; - } - } - - $this->invalidType($key, $args[$key]); - - // Apply the value - is_valid: - if (isset($a['fn'])) { - $a['fn']($args[$key], $args, $list); - } - - if ($a['type'] === 'config') { - $args['config'][$key] = $args[$key]; - } - } - $this->_apply_client_context_params($args); - - return $args; - } - - /** - * Creates a verbose error message for an invalid argument. - * - * @param string $name Name of the argument that is missing. - * @param array $args Provided arguments - * @param bool $useRequired Set to true to show the required fn text if - * available instead of the documentation. - * @return string - */ - private function getArgMessage($name, $args = [], $useRequired = false) - { - $arg = $this->argDefinitions[$name]; - $msg = ''; - $modifiers = []; - if (isset($arg['valid'])) { - $modifiers[] = implode('|', $arg['valid']); - } - if (isset($arg['choice'])) { - $modifiers[] = 'One of ' . implode(', ', $arg['choice']); - } - if ($modifiers) { - $msg .= '(' . implode('; ', $modifiers) . ')'; - } - $msg = wordwrap("{$name}: {$msg}", 75, "\n "); - - if ($useRequired && is_callable($arg['required'])) { - $msg .= "\n\n "; - $msg .= str_replace("\n", "\n ", call_user_func($arg['required'], $args)); - } elseif (isset($arg['doc'])) { - $msg .= wordwrap("\n\n {$arg['doc']}", 75, "\n "); - } - - return $msg; - } - - /** - * Throw when an invalid type is encountered. - * - * @param string $name Name of the value being validated. - * @param mixed $provided The provided value. - * @throws \InvalidArgumentException - */ - private function invalidType($name, $provided) - { - $expected = implode('|', $this->argDefinitions[$name]['valid']); - $msg = "Invalid configuration value " - . "provided for \"{$name}\". Expected {$expected}, but got " - . describe_type($provided) . "\n\n" - . $this->getArgMessage($name); - throw new IAE($msg); - } - - /** - * Throws an exception for missing required arguments. - * - * @param array $args Passed in arguments. - * @throws \InvalidArgumentException - */ - private function throwRequired(array $args) - { - $missing = []; - foreach ($this->argDefinitions as $k => $a) { - if (empty($a['required']) - || isset($a['default']) - || isset($args[$k]) - ) { - continue; - } - $missing[] = $this->getArgMessage($k, $args, true); - } - $msg = "Missing required client configuration options: \n\n"; - $msg .= implode("\n\n", $missing); - throw new IAE($msg); - } - - public static function _apply_retries($value, array &$args, HandlerList $list) - { - // A value of 0 for the config option disables retries - if (!$value) { - return; - } - - $config = RetryConfigProvider::unwrap($value); - - if ($config->getMode() === 'legacy') { - // # of retries is 1 less than # of attempts - $decider = RetryMiddleware::createDefaultDecider( - $config->getMaxAttempts() - 1 - ); - $list->appendSign( - Middleware::retry($decider, null, $args['stats']['retries']), - 'retry' - ); - return; - } - - if (NewRetriesOptIn::isEnabled()) { - $list->appendSign( - RetryV3Middleware::wrap($config, [ - 'collect_stats' => $args['stats']['retries'], - 'service' => $args['service'], - ]), - 'retry' - ); - return; - } - - $list->appendSign( - RetryMiddlewareV2::wrap( - $config, - ['collect_stats' => $args['stats']['retries']] - ), - 'retry' - ); - } - - public static function _apply_defaults($value, array &$args, HandlerList $list) - { - $config = ConfigModeProvider::unwrap($value); - if ($config->getMode() !== 'legacy') { - if (!isset($args['retries']) && !is_null($config->getRetryMode())) { - $args['retries'] = ['mode' => $config->getRetryMode()]; - } - if ( - !isset($args['sts_regional_endpoints']) - && !is_null($config->getStsRegionalEndpoints()) - ) { - $args['sts_regional_endpoints'] = ['mode' => $config->getStsRegionalEndpoints()]; - } - if ( - !isset($args['s3_us_east_1_regional_endpoint']) - && !is_null($config->getS3UsEast1RegionalEndpoints()) - ) { - $args['s3_us_east_1_regional_endpoint'] = ['mode' => $config->getS3UsEast1RegionalEndpoints()]; - } - - if (!isset($args['http'])) { - $args['http'] = []; - } - if ( - !isset($args['http']['connect_timeout']) - && !is_null($config->getConnectTimeoutInMillis()) - ) { - $args['http']['connect_timeout'] = $config->getConnectTimeoutInMillis() / 1000; - } - if ( - !isset($args['http']['timeout']) - && !is_null($config->getHttpRequestTimeoutInMillis()) - ) { - $args['http']['timeout'] = $config->getHttpRequestTimeoutInMillis() / 1000; - } - } - } - - public static function _apply_disable_request_compression($value, array &$args) { - if (is_callable($value)) { - $value = $value(); - } - if (!is_bool($value)) { - throw new IAE( - "Invalid configuration value provided for 'disable_request_compression'." - . " value must be a bool." - ); - } - $args['config']['disable_request_compression'] = $value; - } - - public static function _apply_min_compression_size($value, array &$args) { - if (is_callable($value)) { - $value = $value(); - } - if (!is_int($value) - || (is_int($value) - && ($value < 0 || $value > 10485760)) - ) { - throw new IAE(" Invalid configuration value provided for 'min_compression_size_bytes'." - . " value must be an integer between 0 and 10485760, inclusive."); - } - $args['config']['request_min_compression_size_bytes'] = $value; - } - - public static function _default_min_compression_size(array &$args) { - return ConfigurationResolver::resolve( - 'request_min_compression_size_bytes', - 10240, - 'int', - $args - ); - } - - public static function _apply_credentials($value, array &$args) - { - if (is_callable($value)) { - return; - } - - if ($value instanceof CredentialsInterface) { - $args['credentials'] = CredentialProvider::fromCredentials($value); - } elseif (is_array($value) - && isset($value['key']) - && isset($value['secret']) - ) { - $args['credentials'] = CredentialProvider::fromCredentials( - new Credentials( - $value['key'], - $value['secret'], - $value['token'] ?? null, - $value['expires'] ?? null, - $value['accountId'] ?? null - ) - ); - } elseif ($value === false) { - $args['credentials'] = CredentialProvider::fromCredentials( - new Credentials('', '') - ); - if ($args['config']['signature_version'] !== self::DPOP_SIGNATURE) { - $args['config']['signature_version'] = self::ANONYMOUS_SIGNATURE; - } - - $args['config']['configured_signature_version'] = true; - } elseif ($value instanceof CacheInterface) { - $args['credentials'] = CredentialProvider::defaultProvider($args); - } else { - throw new IAE('Credentials must be an instance of ' - . "'" . CredentialsInterface::class . ', an associative ' - . 'array that contains "key", "secret", and an optional "token" ' - . 'key-value pairs, a credentials provider function, or false.'); - } - } - - public static function _default_credential_provider(array $args) - { - return CredentialProvider::defaultProvider($args); - } - - public static function _apply_token($value, array &$args) - { - if (is_callable($value)) { - return; - } - - if ($value instanceof Token) { - $args['token'] = TokenProvider::fromToken($value); - } elseif (is_array($value) - && isset($value['token']) - ) { - $args['token'] = TokenProvider::fromToken( - new Token( - $value['token'], - $value['expires'] ?? null - ) - ); - } elseif ($value instanceof CacheInterface) { - $args['token'] = TokenProvider::defaultProvider($args); - } else { - throw new IAE('Token must be an instance of ' - . TokenInterface::class . ', an associative ' - . 'array that contains "token" and an optional "expires" ' - . 'key-value pairs, a token provider function, or false.'); - } - } - - public static function _default_token_provider(array &$args) - { - if (($args['config']['signing_name'] ?? '') === 'bedrock') { - // Checks for env value, if present, sets auth_scheme_preference - // to bearer auth and returns a provider - $provider = BedrockTokenProvider::createIfAvailable($args); - if (!is_null($provider)) { - return $provider; - } - } - - return TokenProvider::defaultProvider($args); - } - - public static function _apply_csm($value, array &$args, HandlerList $list) - { - if ($value === false) { - $value = new Configuration( - false, - \Aws\ClientSideMonitoring\ConfigurationProvider::DEFAULT_HOST, - \Aws\ClientSideMonitoring\ConfigurationProvider::DEFAULT_PORT, - \Aws\ClientSideMonitoring\ConfigurationProvider::DEFAULT_CLIENT_ID - ); - $args['csm'] = $value; - } - - $list->appendBuild( - ApiCallMonitoringMiddleware::wrap( - $args['credentials'], - $value, - $args['region'], - $args['api']->getServiceId() - ), - 'ApiCallMonitoringMiddleware' - ); - - $list->appendAttempt( - ApiCallAttemptMonitoringMiddleware::wrap( - $args['credentials'], - $value, - $args['region'], - $args['api']->getServiceId() - ), - 'ApiCallAttemptMonitoringMiddleware' - ); - } - - public static function _apply_api_provider(callable $value, array &$args) - { - $api = new Service( - ApiProvider::resolve( - $value, - 'api', - $args['service'], - $args['version'] - ), - $value - ); - - if ( - empty($args['config']['signing_name']) - && isset($api['metadata']['signingName']) - ) { - $args['config']['signing_name'] = $api['metadata']['signingName']; - } - - $args['api'] = $api; - $args['parser'] = Service::createParser($api); - $args['error_parser'] = Service::createErrorParser($api->getProtocol(), $api); - } - - public static function _apply_endpoint_provider($value, array &$args) - { - if (!isset($args['endpoint'])) { - if ($value instanceof EndpointProviderV2) { - $options = self::getEndpointProviderOptions($args); - $value = PartitionEndpointProvider::defaultProvider($options) - ->getPartition($args['region'], $args['service']); - } - - $endpointPrefix = $args['api']['metadata']['endpointPrefix'] ?? $args['service']; - - // Check region is a valid host label when it is being used to - // generate an endpoint - if (!self::isValidRegion($args['region'])) { - throw new InvalidRegionException('Region must be a valid RFC' - . ' host label.'); - } - $serviceEndpoints = - is_array($value) && isset($value['services'][$args['service']]['endpoints']) - ? $value['services'][$args['service']]['endpoints'] - : null; - if (isset($serviceEndpoints[$args['region']]['deprecated'])) { - trigger_error("The service " . $args['service'] . "has " - . " deprecated the region " . $args['region'] . ".", - E_USER_WARNING - ); - } - - $args['region'] = \Aws\strip_fips_pseudo_regions($args['region']); - - // Invoke the endpoint provider and throw if it does not resolve. - $result = EndpointProvider::resolve($value, [ - 'service' => $endpointPrefix, - 'region' => $args['region'], - 'scheme' => $args['scheme'], - 'options' => self::getEndpointProviderOptions($args), - ]); - - $args['endpoint'] = $result['endpoint']; - - if (empty($args['config']['signature_version'])) { - if ( - isset($args['api']) - && $args['api']->getSignatureVersion() == 'bearer' - ) { - $args['config']['signature_version'] = 'bearer'; - } elseif (isset($result['signatureVersion'])) { - $args['config']['signature_version'] = $result['signatureVersion']; - } - } - - if ( - empty($args['config']['signing_region']) - && isset($result['signingRegion']) - ) { - $args['config']['signing_region'] = $result['signingRegion']; - } - - if ( - empty($args['config']['signing_name']) - && isset($result['signingName']) - ) { - $args['config']['signing_name'] = $result['signingName']; - } - } - } - - public static function _apply_endpoint_discovery($value, array &$args) { - $args['endpoint_discovery'] = $value; - } - - public static function _default_endpoint_discovery_provider(array $args) - { - return ConfigurationProvider::defaultProvider($args); - } - - public static function _apply_use_fips_endpoint($value, array &$args) { - if ($value instanceof CacheInterface) { - $value = UseFipsConfigProvider::defaultProvider($args); - } - if (is_callable($value)) { - $value = $value(); - } - if ($value instanceof PromiseInterface) { - $value = $value->wait(); - } - if ($value instanceof UseFipsEndpointConfigurationInterface) { - $args['config']['use_fips_endpoint'] = $value; - } else { - // The Configuration class itself will validate other inputs - $args['config']['use_fips_endpoint'] = new UseFipsEndpointConfiguration($value); - } - } - - public static function _default_use_fips_endpoint(array &$args) { - return UseFipsConfigProvider::defaultProvider($args); - } - - public static function _apply_use_dual_stack_endpoint($value, array &$args) { - if ($value instanceof CacheInterface) { - $value = UseDualStackConfigProvider::defaultProvider($args); - } - if (is_callable($value)) { - $value = $value(); - } - if ($value instanceof PromiseInterface) { - $value = $value->wait(); - } - if ($value instanceof UseDualStackEndpointConfigurationInterface) { - $args['config']['use_dual_stack_endpoint'] = $value; - } else { - // The Configuration class itself will validate other inputs - $args['config']['use_dual_stack_endpoint'] = - new UseDualStackEndpointConfiguration($value, $args['region']); - } - } - - public static function _default_use_dual_stack_endpoint(array &$args) { - return UseDualStackConfigProvider::defaultProvider($args); - } - - public static function _apply_serializer($value, array &$args, HandlerList $list) - { - $list->prependBuild(Middleware::requestBuilder($value), 'builder'); - } - - public static function _apply_debug($value, array &$args, HandlerList $list) - { - if ($value !== false) { - $list->interpose( - new TraceMiddleware( - $value === true ? [] : $value, - $args['api']) - ); - } - } - - public static function _apply_stats($value, array &$args, HandlerList $list) - { - // Create an array of stat collectors that are disabled (set to false) - // by default. If the user has passed in true, enable all stat - // collectors. - $defaults = array_fill_keys( - ['http', 'retries', 'timer'], - $value === true - ); - $args['stats'] = is_array($value) - ? array_replace($defaults, $value) - : $defaults; - - if ($args['stats']['timer']) { - $list->prependInit(Middleware::timer(), 'timer'); - } - } - - public static function _apply_profile($_, array &$args) - { - $args['credentials'] = CredentialProvider::ini($args['profile']); - } - - public static function _apply_validate($value, array &$args, HandlerList $list) - { - if ($value === false) { - return; - } - - $validator = $value === true - ? new Validator() - : new Validator($value); - $list->appendValidate( - Middleware::validation($args['api'], $validator), - 'validation' - ); - } - - public static function _apply_handler($value, array &$args, HandlerList $list) - { - $list->setHandler($value); - } - - public static function _default_handler(array &$args) - { - return new WrappedHttpHandler( - default_http_handler(), - $args['parser'], - $args['error_parser'], - $args['exception_class'], - $args['stats']['http'] - ); - } - - public static function _apply_http_handler($value, array &$args, HandlerList $list) - { - $args['handler'] = new WrappedHttpHandler( - $value, - $args['parser'], - $args['error_parser'], - $args['exception_class'], - $args['stats']['http'] - ); - } - - public static function _apply_app_id($value, array &$args) - { - // AppId should not be longer than 50 chars - static $MAX_APP_ID_LENGTH = 50; - if (strlen($value) > $MAX_APP_ID_LENGTH) { - trigger_error("The provided or configured value for `AppId`, " - ."which is an user agent parameter, exceeds the maximum length of " - ."$MAX_APP_ID_LENGTH characters.", E_USER_WARNING); - } - - $args['app_id'] = $value; - } - - public static function _default_app_id(array $args) - { - return ConfigurationResolver::resolve( - 'sdk_ua_app_id', - '', - 'string', - $args - ); - } - - public static function _apply_user_agent( - $inputUserAgent, - array &$args, - HandlerList $list - ): void - { - // Add endpoint discovery if set - $userAgent = []; - // Add the input to the end - if ($inputUserAgent){ - if (!is_array($inputUserAgent)) { - $inputUserAgent = [$inputUserAgent]; - } - $inputUserAgent = array_map('strval', $inputUserAgent); - $userAgent = array_merge($userAgent, $inputUserAgent); - } - - $args['ua_append'] = $userAgent; - - $list->appendBuild( - Middleware::mapRequest(function (RequestInterface $request) use ($userAgent) { - return $request->withHeader( - 'X-Amz-User-Agent', - implode(' ', array_merge( - $userAgent, - $request->getHeader('X-Amz-User-Agent') - )) - ); - }) - ); - } - - public static function _apply_endpoint($value, array &$args, HandlerList $list) - { - if (empty($value)) { - unset($args['endpoint']); - return; - } - - $args['endpoint_override'] = true; - $args['endpoint'] = $value; - } - - public static function _apply_idempotency_auto_fill( - $value, - array &$args, - HandlerList $list - ) { - $enabled = false; - $generator = null; - - - if (is_bool($value)) { - $enabled = $value; - } elseif (is_callable($value)) { - $enabled = true; - $generator = $value; - } - - if ($enabled) { - $list->prependInit( - IdempotencyTokenMiddleware::wrap($args['api'], $generator), - 'idempotency_auto_fill' - ); - } - } - - public static function _default_account_id_endpoint_mode($args) - { - return ConfigurationResolver::resolve( - 'account_id_endpoint_mode', - 'preferred', - 'string', - $args - ); - } - - public static function _apply_account_id_endpoint_mode($value, array &$args) - { - static $accountIdEndpointModes = ['disabled', 'required', 'preferred']; - if (!in_array($value, $accountIdEndpointModes)) { - throw new IAE( - "The value provided for the config account_id_endpoint_mode is invalid." - ."Valid values are: " . implode(", ", $accountIdEndpointModes) - ); - } - - $args['account_id_endpoint_mode'] = $value; - } - - public static function _default_endpoint_provider(array $args) - { - $service = $args['api'] ?? null; - $serviceName = isset($service) ? $service->getServiceName() : null; - $apiVersion = isset($service) ? $service->getApiVersion() : null; - - if (self::isValidService($serviceName) - && self::isValidApiVersion($serviceName, $apiVersion) - ) { - $partitions = EndpointDefinitionProvider::getPartitions(); - $parsed = EndpointDefinitionProvider::getParsedRuleset( - $service->getServiceName(), - $service->getApiVersion(), - $partitions - ); - return new EndpointProviderV2($parsed, $partitions); - } - $options = self::getEndpointProviderOptions($args); - return PartitionEndpointProvider::defaultProvider($options) - ->getPartition($args['region'], $args['service']); - } - - public static function _default_serializer(array $args) - { - return Service::createSerializer( - $args['api'], - $args['endpoint'] - ); - } - - public static function _default_signature_provider() - { - return SignatureProvider::defaultProvider(); - } - - public static function _default_auth_scheme_resolver(array $args) - { - return new AuthSchemeResolver($args['credentials'], $args['token']); - } - - public static function _apply_auth_scheme_preference( - string|array|null &$value, - array &$args - ): void - { - // Not provided user's preference auth scheme list - if (empty($value)) { - $value = null; - $args['config']['auth_scheme_preference'] = $value; - return; - } - - // Normalize it as an array - if (is_string($value)) { - $value = explode(',', $value); - } - - // Let`s trim each value to remove break lines, spaces and/or tabs - foreach ($value as &$val) { - $val = trim($val); - } - - // Assign user's preferred auth scheme list - $args['config']['auth_scheme_preference'] = $value; - } - - public static function _default_signature_version(array &$args) - { - if (isset($args['config']['signature_version'])) { - return $args['config']['signature_version']; - } - - $args['__partition_result'] = isset($args['__partition_result']) - ? isset($args['__partition_result']) - : call_user_func(PartitionEndpointProvider::defaultProvider(), [ - 'service' => $args['service'], - 'region' => $args['region'], - ]); - - return isset($args['__partition_result']['signatureVersion']) - ? $args['__partition_result']['signatureVersion'] - : $args['api']->getSignatureVersion(); - } - - public static function _default_signing_name(array &$args) - { - if (isset($args['config']['signing_name'])) { - return $args['config']['signing_name']; - } - - $args['__partition_result'] = isset($args['__partition_result']) - ? isset($args['__partition_result']) - : call_user_func(PartitionEndpointProvider::defaultProvider(), [ - 'service' => $args['service'], - 'region' => $args['region'], - ]); - - if (isset($args['__partition_result']['signingName'])) { - return $args['__partition_result']['signingName']; - } - - if ($signingName = $args['api']->getSigningName()) { - return $signingName; - } - - return $args['service']; - } - - public static function _default_signing_region(array &$args) - { - if (isset($args['config']['signing_region'])) { - return $args['config']['signing_region']; - } - - $args['__partition_result'] = isset($args['__partition_result']) - ? isset($args['__partition_result']) - : call_user_func(PartitionEndpointProvider::defaultProvider(), [ - 'service' => $args['service'], - 'region' => $args['region'], - ]); - - return $args['__partition_result']['signingRegion'] ?? $args['region']; - } - - public static function _apply_ignore_configured_endpoint_urls($value, array &$args) - { - $args['config']['ignore_configured_endpoint_urls'] = $value; - } - - public static function _apply_suppress_php_deprecation_warning($value, &$args) - { - if ($value) { - $args['suppress_php_deprecation_warning'] = true; - } elseif (!empty(getenv("AWS_SUPPRESS_PHP_DEPRECATION_WARNING"))) { - $args['suppress_php_deprecation_warning'] - = \Aws\boolean_value(getenv("AWS_SUPPRESS_PHP_DEPRECATION_WARNING")); - } elseif (!empty($_SERVER["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"])) { - $args['suppress_php_deprecation_warning'] = - \Aws\boolean_value($_SERVER["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"]); - } elseif (!empty($_ENV["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"])) { - $args['suppress_php_deprecation_warning'] = - \Aws\boolean_value($_ENV["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"]); - } - } - - public static function _default_endpoint(array &$args) - { - if ($args['config']['ignore_configured_endpoint_urls'] - || !self::isValidService($args['service']) - ) { - return ''; - } - - $serviceIdentifier = \Aws\manifest($args['service'])['serviceIdentifier']; - $value = ConfigurationResolver::resolve( - 'endpoint_url_' . $serviceIdentifier, - '', - 'string', - $args + [ - 'ini_resolver_options' => [ - 'section' => 'services', - 'subsection' => $serviceIdentifier, - 'key' => 'endpoint_url' - ] - ] - ); - - if (empty($value)) { - $value = ConfigurationResolver::resolve( - 'endpoint_url', - '', - 'string', - $args - ); - } - - if (!empty($value)) { - $args['config']['configured_endpoint_url'] = true; - } - - return $value; - } - - public static function _apply_sigv4a_signing_region_set($value, array &$args) - { - if (empty($value)) { - $args['sigv4a_signing_region_set'] = null; - } elseif (is_array($value)) { - $args['sigv4a_signing_region_set'] = implode(', ', $value); - } else { - $args['sigv4a_signing_region_set'] = $value; - } - } - - public static function _apply_region($value, array &$args) - { - if (empty($value)) { - self::_missing_region($args); - } - $args['region'] = $value; - } - - public static function _missing_region(array $args) - { - $service = $args['service'] ?? ''; - - $msg = << 0, - 'bool' => false, - 'boolean' => false, - 'string' => '', - ]; - - return ConfigurationResolver::resolve( - $key, - $typeDefaultMap[$expectedType] ?? '', - $expectedType, - $args - ); - } - - /** - * Extracts client options for the endpoint provider to its own array - * - * @param array $args - * @return array - */ - private static function getEndpointProviderOptions(array $args) - { - $options = []; - $optionKeys = [ - 'sts_regional_endpoints', - 's3_us_east_1_regional_endpoint', - ]; - $configKeys = [ - 'use_dual_stack_endpoint', - 'use_fips_endpoint', - ]; - foreach ($optionKeys as $key) { - if (isset($args[$key])) { - $options[$key] = $args[$key]; - } - } - foreach ($configKeys as $key) { - if (isset($args['config'][$key])) { - $options[$key] = $args['config'][$key]; - } - } - return $options; - } - - /** - * Validates a region to be used for endpoint construction - * - * @param $region - * @return bool - */ - private static function isValidRegion($region) - { - return is_valid_hostlabel($region); - } - - private function _apply_client_context_params(array $args) - { - if (isset($args['api']) - && !empty($args['api']->getClientContextParams())) - { - $clientContextParams = $args['api']->getClientContextParams(); - foreach($clientContextParams as $paramName => $paramDefinition) { - $definition = [ - 'type' => 'value', - 'valid' => [$paramDefinition['type']], - 'doc' => $paramDefinition['documentation'] ?? null - ]; - $this->argDefinitions[$paramName] = $definition; - - if (isset($args[$paramName])) { - $fn = self::$typeMap[$paramDefinition['type']]; - if (!$fn($args[$paramName])) { - $this->invalidType($paramName, $args[$paramName]); - } - } - } - } - } - - private static function isValidService($service) - { - if (is_null($service)) { - return false; - } - $services = \Aws\manifest(); - return isset($services[$service]); - } - - private static function isValidApiVersion($service, $apiVersion) - { - if (is_null($apiVersion)) { - return false; - } - return is_dir( - __DIR__ . "/data/{$service}/$apiVersion" - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/AbstractMonitoringMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/AbstractMonitoringMiddleware.php deleted file mode 100644 index d514e8355..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/AbstractMonitoringMiddleware.php +++ /dev/null @@ -1,309 +0,0 @@ -getResponse(); - if ($response !== null) { - $header = $response->getHeader($headerName); - if (!empty($header[0])) { - return $header[0]; - } - } - return null; - } - - protected static function getResultHeader(ResultInterface $result, $headerName) - { - if (isset($result['@metadata']['headers'][$headerName])) { - return $result['@metadata']['headers'][$headerName]; - } - return null; - } - - protected static function getExceptionHeader(\Exception $e, $headerName) - { - if ($e instanceof ResponseContainerInterface) { - $response = $e->getResponse(); - if ($response instanceof ResponseInterface) { - $header = $response->getHeader($headerName); - if (!empty($header[0])) { - return $header[0]; - } - } - } - return null; - } - - /** - * Constructor stores the passed in handler and options. - * - * @param callable $handler - * @param callable $credentialProvider - * @param $options - * @param $region - * @param $service - */ - public function __construct( - callable $handler, - callable $credentialProvider, - $options, - $region, - $service - ) { - $this->nextHandler = $handler; - $this->credentialProvider = $credentialProvider; - $this->options = $options; - $this->region = $region; - $this->service = $service; - } - - /** - * Standard invoke pattern for middleware execution to be implemented by - * child classes. - * - * @param CommandInterface $cmd - * @param RequestInterface $request - * @return Promise\PromiseInterface - */ - public function __invoke(CommandInterface $cmd, RequestInterface $request) - { - $handler = $this->nextHandler; - $eventData = null; - $enabled = $this->isEnabled(); - - if ($enabled) { - $cmd['@http']['collect_stats'] = true; - $eventData = $this->populateRequestEventData( - $cmd, - $request, - $this->getNewEvent($cmd, $request) - ); - } - - $g = function ($value) use ($eventData, $enabled) { - if ($enabled) { - $eventData = $this->populateResultEventData( - $value, - $eventData - ); - $this->sendEventData($eventData); - - if ($value instanceof MonitoringEventsInterface) { - $value->appendMonitoringEvent($eventData); - } - } - if ($value instanceof \Exception || $value instanceof \Throwable) { - return Promise\Create::rejectionFor($value); - } - return $value; - }; - - return Promise\Create::promiseFor($handler($cmd, $request))->then($g, $g); - } - - private function getClientId() - { - return $this->unwrappedOptions()->getClientId(); - } - - private function getNewEvent( - CommandInterface $cmd, - RequestInterface $request - ) { - $event = [ - 'Api' => $cmd->getName(), - 'ClientId' => $this->getClientId(), - 'Region' => $this->getRegion(), - 'Service' => $this->getService(), - 'Timestamp' => (int) floor(microtime(true) * 1000), - 'UserAgent' => substr( - $request->getHeaderLine('User-Agent') . ' ' . \Aws\default_user_agent(), - 0, - 256 - ), - 'Version' => 1 - ]; - return $event; - } - - private function getHost() - { - return $this->unwrappedOptions()->getHost(); - } - - private function getPort() - { - return $this->unwrappedOptions()->getPort(); - } - - private function getRegion() - { - return $this->region; - } - - private function getService() - { - return $this->service; - } - - /** - * Returns enabled flag from options, unwrapping options if necessary. - * - * @return bool - */ - private function isEnabled() - { - return $this->unwrappedOptions()->isEnabled(); - } - - /** - * Returns $eventData array with information from the request and command. - * - * @param CommandInterface $cmd - * @param RequestInterface $request - * @param array $event - * @return array - */ - protected function populateRequestEventData( - CommandInterface $cmd, - RequestInterface $request, - array $event - ) { - $dataFormat = static::getRequestData($request); - foreach ($dataFormat as $eventKey => $value) { - if ($value !== null) { - $event[$eventKey] = $value; - } - } - return $event; - } - - /** - * Returns $eventData array with information from the response, including - * the calculation for attempt latency. - * - * @param ResultInterface|\Exception $result - * @param array $event - * @return array - */ - protected function populateResultEventData( - $result, - array $event - ) { - $dataFormat = static::getResponseData($result); - foreach ($dataFormat as $eventKey => $value) { - if ($value !== null) { - $event[$eventKey] = $value; - } - } - return $event; - } - - - /** - * Checks if the socket is created. If PHP version is greater or equals to 8 then, - * it will check if the var is instance of \Socket otherwise it will check if is - * a resource. - * - * @return bool Returns true if the socket is created, false otherwise. - */ - private function isSocketCreated(): bool - { - // Before version 8, sockets are resources - // After version 8, sockets are instances of Socket - if (PHP_MAJOR_VERSION >= 8) { - $socketClass = '\Socket'; - return self::$socket instanceof $socketClass; - } else { - return is_resource(self::$socket); - } - } - - /** - * Creates a UDP socket resource and stores it with the class, or retrieves - * it if already instantiated and connected. Handles error-checking and - * re-connecting if necessary. If $forceNewConnection is set to true, a new - * socket will be created. - * - * @param bool $forceNewConnection - * @return Resource - */ - private function prepareSocket($forceNewConnection = false) - { - if (!$this->isSocketCreated() - || $forceNewConnection - || socket_last_error(self::$socket) - ) { - self::$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); - socket_clear_error(self::$socket); - socket_connect(self::$socket, $this->getHost(), $this->getPort()); - } - - return self::$socket; - } - - /** - * Sends formatted monitoring event data via the UDP socket connection to - * the CSM agent endpoint. - * - * @param array $eventData - * @return int - */ - private function sendEventData(array $eventData) - { - $socket = $this->prepareSocket(); - $datagram = json_encode($eventData); - $result = socket_write($socket, $datagram, strlen($datagram)); - if ($result === false) { - $this->prepareSocket(true); - } - return $result; - } - - /** - * Unwraps options, if needed, and returns them. - * - * @return ConfigurationInterface - */ - private function unwrappedOptions() - { - if (!($this->options instanceof ConfigurationInterface)) { - try { - $this->options = ConfigurationProvider::unwrap($this->options); - } catch (\Exception $e) { - // Errors unwrapping CSM config defaults to disabling it - $this->options = new Configuration( - false, - ConfigurationProvider::DEFAULT_HOST, - ConfigurationProvider::DEFAULT_PORT - ); - } - } - return $this->options; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php deleted file mode 100644 index 91810bb9c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php +++ /dev/null @@ -1,262 +0,0 @@ - $request->getUri()->getHost(), - ]; - } - - /** - * {@inheritdoc} - */ - public static function getResponseData($klass) - { - if ($klass instanceof ResultInterface) { - return [ - 'AttemptLatency' => self::getResultAttemptLatency($klass), - 'DestinationIp' => self::getResultDestinationIp($klass), - 'DnsLatency' => self::getResultDnsLatency($klass), - 'HttpStatusCode' => self::getResultHttpStatusCode($klass), - 'XAmzId2' => self::getResultHeader($klass, 'x-amz-id-2'), - 'XAmzRequestId' => self::getResultHeader($klass, 'x-amz-request-id'), - 'XAmznRequestId' => self::getResultHeader($klass, 'x-amzn-RequestId'), - ]; - } - if ($klass instanceof AwsException) { - return [ - 'AttemptLatency' => self::getAwsExceptionAttemptLatency($klass), - 'AwsException' => substr( - self::getAwsExceptionErrorCode($klass), - 0, - 128 - ), - 'AwsExceptionMessage' => substr( - self::getAwsExceptionMessage($klass), - 0, - 512 - ), - 'DestinationIp' => self::getAwsExceptionDestinationIp($klass), - 'DnsLatency' => self::getAwsExceptionDnsLatency($klass), - 'HttpStatusCode' => self::getAwsExceptionHttpStatusCode($klass), - 'XAmzId2' => self::getAwsExceptionHeader($klass, 'x-amz-id-2'), - 'XAmzRequestId' => self::getAwsExceptionHeader( - $klass, - 'x-amz-request-id' - ), - 'XAmznRequestId' => self::getAwsExceptionHeader( - $klass, - 'x-amzn-RequestId' - ), - ]; - } - if ($klass instanceof \Exception) { - return [ - 'HttpStatusCode' => self::getExceptionHttpStatusCode($klass), - 'SdkException' => substr( - self::getExceptionCode($klass), - 0, - 128 - ), - 'SdkExceptionMessage' => substr( - self::getExceptionMessage($klass), - 0, - 512 - ), - 'XAmzId2' => self::getExceptionHeader($klass, 'x-amz-id-2'), - 'XAmzRequestId' => self::getExceptionHeader($klass, 'x-amz-request-id'), - 'XAmznRequestId' => self::getExceptionHeader($klass, 'x-amzn-RequestId'), - ]; - } - - throw new \InvalidArgumentException('Parameter must be an instance of ResultInterface, AwsException or Exception.'); - } - - private static function getResultAttemptLatency(ResultInterface $result) - { - if (isset($result['@metadata']['transferStats']['http'])) { - $attempt = end($result['@metadata']['transferStats']['http']); - if (isset($attempt['total_time'])) { - return (int) floor($attempt['total_time'] * 1000); - } - } - return null; - } - - private static function getResultDestinationIp(ResultInterface $result) - { - if (isset($result['@metadata']['transferStats']['http'])) { - $attempt = end($result['@metadata']['transferStats']['http']); - if (isset($attempt['primary_ip'])) { - return $attempt['primary_ip']; - } - } - return null; - } - - private static function getResultDnsLatency(ResultInterface $result) - { - if (isset($result['@metadata']['transferStats']['http'])) { - $attempt = end($result['@metadata']['transferStats']['http']); - if (isset($attempt['namelookup_time'])) { - return (int) floor($attempt['namelookup_time'] * 1000); - } - } - return null; - } - - private static function getResultHttpStatusCode(ResultInterface $result) - { - return $result['@metadata']['statusCode']; - } - - private static function getAwsExceptionAttemptLatency(AwsException $e) { - $attempt = $e->getTransferInfo(); - if (isset($attempt['total_time'])) { - return (int) floor($attempt['total_time'] * 1000); - } - return null; - } - - private static function getAwsExceptionErrorCode(AwsException $e) { - return $e->getAwsErrorCode(); - } - - private static function getAwsExceptionMessage(AwsException $e) { - return $e->getAwsErrorMessage(); - } - - private static function getAwsExceptionDestinationIp(AwsException $e) { - $attempt = $e->getTransferInfo(); - if (isset($attempt['primary_ip'])) { - return $attempt['primary_ip']; - } - return null; - } - - private static function getAwsExceptionDnsLatency(AwsException $e) { - $attempt = $e->getTransferInfo(); - if (isset($attempt['namelookup_time'])) { - return (int) floor($attempt['namelookup_time'] * 1000); - } - return null; - } - - private static function getAwsExceptionHttpStatusCode(AwsException $e) { - $response = $e->getResponse(); - if ($response !== null) { - return $response->getStatusCode(); - } - return null; - } - - private static function getExceptionHttpStatusCode(\Exception $e) { - if ($e instanceof ResponseContainerInterface) { - $response = $e->getResponse(); - if ($response instanceof ResponseInterface) { - return $response->getStatusCode(); - } - } - return null; - } - - private static function getExceptionCode(\Exception $e) { - if (!($e instanceof AwsException)) { - return get_class($e); - } - return null; - } - - private static function getExceptionMessage(\Exception $e) { - if (!($e instanceof AwsException)) { - return $e->getMessage(); - } - return null; - } - - /** - * {@inheritdoc} - */ - protected function populateRequestEventData( - CommandInterface $cmd, - RequestInterface $request, - array $event - ) { - $event = parent::populateRequestEventData($cmd, $request, $event); - $event['Type'] = 'ApiCallAttempt'; - return $event; - } - - /** - * {@inheritdoc} - */ - protected function populateResultEventData( - $result, - array $event - ) { - $event = parent::populateResultEventData($result, $event); - - $provider = $this->credentialProvider; - /** @var CredentialsInterface $credentials */ - $credentials = $provider()->wait(); - $event['AccessKey'] = $credentials->getAccessKeyId(); - $sessionToken = $credentials->getSecurityToken(); - if ($sessionToken !== null) { - $event['SessionToken'] = $sessionToken; - } - if (empty($event['AttemptLatency'])) { - $event['AttemptLatency'] = (int) (floor(microtime(true) * 1000) - $event['Timestamp']); - } - return $event; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallMonitoringMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallMonitoringMiddleware.php deleted file mode 100644 index 420807384..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallMonitoringMiddleware.php +++ /dev/null @@ -1,175 +0,0 @@ - 'AwsException', - 'FinalAwsExceptionMessage' => 'AwsExceptionMessage', - 'FinalSdkException' => 'SdkException', - 'FinalSdkExceptionMessage' => 'SdkExceptionMessage', - 'FinalHttpStatusCode' => 'HttpStatusCode', - ]; - - /** - * Standard middleware wrapper function with CSM options passed in. - * - * @param callable $credentialProvider - * @param mixed $options - * @param string $region - * @param string $service - * @return callable - */ - public static function wrap( - callable $credentialProvider, - $options, - $region, - $service - ) { - return function (callable $handler) use ( - $credentialProvider, - $options, - $region, - $service - ) { - return new static( - $handler, - $credentialProvider, - $options, - $region, - $service - ); - }; - } - - /** - * {@inheritdoc} - */ - public static function getRequestData(RequestInterface $request) - { - return []; - } - - /** - * {@inheritdoc} - */ - public static function getResponseData($klass) - { - if ($klass instanceof ResultInterface) { - $data = [ - 'AttemptCount' => self::getResultAttemptCount($klass), - 'MaxRetriesExceeded' => 0, - ]; - } elseif ($klass instanceof \Exception) { - $data = [ - 'AttemptCount' => self::getExceptionAttemptCount($klass), - 'MaxRetriesExceeded' => self::getMaxRetriesExceeded($klass), - ]; - } else { - throw new \InvalidArgumentException('Parameter must be an instance of ResultInterface or Exception.'); - } - - return $data + self::getFinalAttemptData($klass); - } - - private static function getResultAttemptCount(ResultInterface $result) { - if (isset($result['@metadata']['transferStats']['http'])) { - return count($result['@metadata']['transferStats']['http']); - } - return 1; - } - - private static function getExceptionAttemptCount(\Exception $e) { - $attemptCount = 0; - if ($e instanceof MonitoringEventsInterface) { - foreach ($e->getMonitoringEvents() as $event) { - if (isset($event['Type']) && - $event['Type'] === 'ApiCallAttempt') { - $attemptCount++; - } - } - - } - return $attemptCount; - } - - private static function getFinalAttemptData($klass) - { - $data = []; - if ($klass instanceof MonitoringEventsInterface) { - $finalAttempt = self::getFinalAttempt($klass->getMonitoringEvents()); - - if (!empty($finalAttempt)) { - foreach (self::$eventKeys as $callKey => $attemptKey) { - if (isset($finalAttempt[$attemptKey])) { - $data[$callKey] = $finalAttempt[$attemptKey]; - } - } - } - } - - return $data; - } - - private static function getFinalAttempt(array $events) - { - for (end($events); key($events) !== null; prev($events)) { - $current = current($events); - if (isset($current['Type']) - && $current['Type'] === 'ApiCallAttempt' - ) { - return $current; - } - } - - return null; - } - - private static function getMaxRetriesExceeded($klass) - { - if ($klass instanceof AwsException && $klass->isMaxRetriesExceeded()) { - return 1; - } - return 0; - } - - /** - * {@inheritdoc} - */ - protected function populateRequestEventData( - CommandInterface $cmd, - RequestInterface $request, - array $event - ) { - $event = parent::populateRequestEventData($cmd, $request, $event); - $event['Type'] = 'ApiCall'; - return $event; - } - - /** - * {@inheritdoc} - */ - protected function populateResultEventData( - $result, - array $event - ) { - $event = parent::populateResultEventData($result, $event); - $event['Latency'] = (int) (floor(microtime(true) * 1000) - $event['Timestamp']); - return $event; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/Configuration.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/Configuration.php deleted file mode 100644 index b875274b8..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/Configuration.php +++ /dev/null @@ -1,77 +0,0 @@ -host = $host; - $this->port = filter_var($port, FILTER_VALIDATE_INT); - if ($this->port === false) { - throw new \InvalidArgumentException( - "CSM 'port' value must be an integer!"); - } - - // Unparsable $enabled flag errors on the side of disabling CSM - $this->enabled = filter_var($enabled, FILTER_VALIDATE_BOOLEAN); - $this->clientId = trim($clientId); - } - - /** - * {@inheritdoc} - */ - public function isEnabled() - { - return $this->enabled; - } - - /** - * {@inheritdoc} - */ - public function getClientId() - { - return $this->clientId; - } - - /** - * /{@inheritdoc} - */ - public function getHost() - { - return $this->host; - } - - /** - * {@inheritdoc} - */ - public function getPort() - { - return $this->port; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'client_id' => $this->getClientId(), - 'enabled' => $this->isEnabled(), - 'host' => $this->getHost(), - 'port' => $this->getPort() - ]; - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationInterface.php deleted file mode 100644 index 9a548279c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationInterface.php +++ /dev/null @@ -1,44 +0,0 @@ - - * use Aws\ClientSideMonitoring\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see Aws\ClientSideMonitoring\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const DEFAULT_CLIENT_ID = ''; - const DEFAULT_ENABLED = false; - const DEFAULT_HOST = '127.0.0.1'; - const DEFAULT_PORT = 31000; - const ENV_CLIENT_ID = 'AWS_CSM_CLIENT_ID'; - const ENV_ENABLED = 'AWS_CSM_ENABLED'; - const ENV_HOST = 'AWS_CSM_HOST'; - const ENV_PORT = 'AWS_CSM_PORT'; - const ENV_PROFILE = 'AWS_PROFILE'; - - public static $cacheKey = 'aws_cached_csm_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback(); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['csm']) && $config['csm'] instanceof CacheInterface) { - return self::cache($memo, $config['csm'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates CSM config from environment variables. - * - * @return callable - */ - public static function env() - { - return function () { - // Use credentials from environment variables, if available - $enabled = getenv(self::ENV_ENABLED); - if ($enabled !== false) { - return Promise\Create::promiseFor( - new Configuration( - $enabled, - getenv(self::ENV_HOST) ?: self::DEFAULT_HOST, - getenv(self::ENV_PORT) ?: self::DEFAULT_PORT, - getenv(self:: ENV_CLIENT_ID) ?: self::DEFAULT_CLIENT_ID - ) - ); - } - - return self::reject('Could not find environment variable CSM config' - . ' in ' . self::ENV_ENABLED. '/' . self::ENV_HOST . '/' - . self::ENV_PORT . '/' . self::ENV_CLIENT_ID); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback() - { - return function() { - return Promise\Create::promiseFor( - new Configuration( - self::DEFAULT_ENABLED, - self::DEFAULT_HOST, - self::DEFAULT_PORT, - self::DEFAULT_CLIENT_ID - ) - ); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini($profile = null, $filename = null) - { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'aws_csm'); - - return function () use ($profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read CSM config from $filename"); - } - $data = \Aws\parse_ini_file($filename, true); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile]['csm_enabled'])) { - return self::reject("Required CSM config values not present in - INI profile '{$profile}' ({$filename})"); - } - - // host is optional - if (empty($data[$profile]['csm_host'])) { - $data[$profile]['csm_host'] = self::DEFAULT_HOST; - } - - // port is optional - if (!filter_var($data[$profile]['csm_port'] ?? null, FILTER_VALIDATE_INT)) { - $data[$profile]['csm_port'] = self::DEFAULT_PORT; - } - - // client_id is optional - if (empty($data[$profile]['csm_client_id'])) { - $data[$profile]['csm_client_id'] = self::DEFAULT_CLIENT_ID; - } - - return Promise\Create::promiseFor( - new Configuration( - $data[$profile]['csm_enabled'], - $data[$profile]['csm_host'], - $data[$profile]['csm_port'], - $data[$profile]['csm_client_id'] - ) - ); - }; - } - - /** - * Unwraps a configuration object in whatever valid form it is in, - * always returning a ConfigurationInterface object. - * - * @param mixed $config - * @return ConfigurationInterface - * @throws \InvalidArgumentException - */ - public static function unwrap($config) - { - if (is_callable($config)) { - $config = $config(); - } - if ($config instanceof PromiseInterface) { - $config = $config->wait(); - } - if ($config instanceof ConfigurationInterface) { - return $config; - } elseif (is_array($config) && isset($config['enabled'])) { - $client_id = isset($config['client_id']) ? $config['client_id'] - : self::DEFAULT_CLIENT_ID; - $host = isset($config['host']) ? $config['host'] - : self::DEFAULT_HOST; - $port = isset($config['port']) ? $config['port'] - : self::DEFAULT_PORT; - return new Configuration($config['enabled'], $host, $port, $client_id); - } - - throw new \InvalidArgumentException('Not a valid CSM configuration ' - . 'argument.'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/Exception/ConfigurationException.php deleted file mode 100644 index 827743e26..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/Exception/ConfigurationException.php +++ /dev/null @@ -1,15 +0,0 @@ -name = $name; - $this->data = $args; - $this->handlerList = $list ?: new HandlerList(); - - if (!isset($this->data['@http'])) { - $this->data['@http'] = []; - } - if (!isset($this->data['@context'])) { - $this->data['@context'] = []; - } - $this->metricsBuilder = $metricsBuilder ?: new MetricsBuilder(); - } - - public function __clone() - { - $this->handlerList = clone $this->handlerList; - } - - public function getName() - { - return $this->name; - } - - public function hasParam($name) - { - return array_key_exists($name, $this->data); - } - - public function getHandlerList() - { - return $this->handlerList; - } - - /** - * For overriding auth schemes on a per endpoint basis when using - * EndpointV2 provider. Intended for internal use only. - * - * @param array $authSchemes - * - * @deprecated In favor of using the @context property bag. - * Auth Schemes are now accessible via the `signature_version` key - * in a Command's context, if applicable. Auth Schemes set using - * This method are no longer consumed. - * - * @internal - */ - public function setAuthSchemes(array $authSchemes) - { - trigger_error(__METHOD__ . ' is deprecated. Auth schemes ' - . 'resolved using the service `auth` trait or via endpoint resolution ' - . 'are now set in the command `@context` property.`' - , E_USER_WARNING - ); - - $this->authSchemes = $authSchemes; - } - - /** - * Get auth schemes added to command as required - * for endpoint resolution - * - * @returns array - * - * @deprecated In favor of using the @context property bag. - * Auth schemes are now accessible via the `signature_version` key - * in a Command's context, if applicable. - */ - public function getAuthSchemes() - { - trigger_error(__METHOD__ . ' is deprecated. Auth schemes ' - . 'resolved using the service `auth` trait or via endpoint resolution ' - . 'can now be found in the command `@context` property.`' - , E_USER_WARNING - ); - - return $this->authSchemes ?: []; - } - - /** @deprecated */ - public function get($name) - { - return $this[$name]; - } - - /** - * Returns the metrics builder instance tied up to this command. - * - * @internal - * - * @return MetricsBuilder - */ - public function getMetricsBuilder(): MetricsBuilder - { - return $this->metricsBuilder; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/CommandInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/CommandInterface.php deleted file mode 100644 index b35c75d37..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/CommandInterface.php +++ /dev/null @@ -1,42 +0,0 @@ -getBefore($config); - $mapFn = function ($commands) use ($client, $before, $config) { - foreach ($commands as $key => $command) { - if (!($command instanceof CommandInterface)) { - throw new \InvalidArgumentException('Each value yielded by ' - . 'the iterator must be an Aws\CommandInterface.'); - } - if ($before) { - $before($command, $key); - } - if (!empty($config['preserve_iterator_keys'])) { - yield $key => $client->executeAsync($command); - } else { - yield $client->executeAsync($command); - } - } - }; - - $this->each = new EachPromise($mapFn($commands), $config); - } - - /** - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - return $this->each->promise(); - } - - /** - * Executes a pool synchronously and aggregates the results of the pool - * into an indexed array in the same order as the passed in array. - * - * @param AwsClientInterface $client Client used to execute commands. - * @param mixed $commands Iterable that yields commands. - * @param array $config Configuration options. - * - * @return array - * @see \Aws\CommandPool::__construct for available configuration options. - */ - public static function batch( - AwsClientInterface $client, - $commands, - array $config = [] - ) { - $results = []; - self::cmpCallback($config, 'fulfilled', $results); - self::cmpCallback($config, 'rejected', $results); - - return (new self($client, $commands, $config)) - ->promise() - ->then(static function () use (&$results) { - ksort($results); - return $results; - }) - ->wait(); - } - - /** - * @return callable - */ - private function getBefore(array $config) - { - if (!isset($config['before'])) { - return null; - } - - if (is_callable($config['before'])) { - return $config['before']; - } - - throw new \InvalidArgumentException('before must be callable'); - } - - /** - * Adds an onFulfilled or onRejected callback that aggregates results into - * an array. If a callback is already present, it is replaced with the - * composed function. - * - * @param array $config - * @param $name - * @param array $results - */ - private static function cmpCallback(array &$config, $name, array &$results) - { - if (!isset($config[$name])) { - $config[$name] = function ($v, $k) use (&$results) { - $results[$k] = $v; - }; - } else { - $currentFn = $config[$name]; - $config[$name] = function ($v, $k) use (&$results, $currentFn) { - $currentFn($v, $k); - $results[$k] = $v; - }; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Configuration/ConfigurationResolver.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Configuration/ConfigurationResolver.php deleted file mode 100644 index cd1375982..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Configuration/ConfigurationResolver.php +++ /dev/null @@ -1,297 +0,0 @@ - variable is unset; '' => set but empty. Both resolve to null. - // A literal "0" is a valid value and must NOT be treated as empty. - if ($envValue === false || $envValue === '') { - return null; - } - - return $expectedType - ? self::convertType($envValue, $expectedType) - : $envValue; - } - - /** - * Resolves a value from the shared config file. - * - * @param string $key - * @param string $expectedType - * @param string|null $profile Profile to read. Defaults to AWS_PROFILE, - * then "default". - * @param string|null $filename Config file path. Defaults to AWS_CONFIG_FILE, - * then ~/.aws/config. - * @param array $options Subsection lookup options - * ('section', 'subsection', 'key'). - * - * @return mixed|null - */ - public static function ini( - $key, - $expectedType, - $profile = null, - $filename = null, - $options = [] - ) { - $filename = $filename ?: self::getDefaultConfigFilename(); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: self::DEFAULT_PROFILE); - - if (!@is_readable($filename)) { - return null; - } - - // INI_SCANNER_TYPED coerces bool/int/float/null at parse time; a value - // left empty (key =) still comes back as an empty string. convertType() - // normalizes both these typed values and the raw strings from env(). - $data = @\Aws\parse_ini_file($filename, true, INI_SCANNER_TYPED); - if ($data === false) { - return null; - } - - if (isset($options['section'], $options['subsection'], $options['key'])) { - return self::retrieveValueFromIniSubsection( - $data, - $profile, - $filename, - $expectedType, - $options - ); - } - - $section = self::getProfileSection($data, $profile); - if ($section === null || !isset($section[$key])) { - return null; - } - - return self::convertType($section[$key], $expectedType); - } - - /** - * Returns the config-file section for a profile, accounting for the - * "profile " prefix AWS applies to every non-default profile. - * - * For a non-default profile "foo" the lookup order is: - * 1. [profile foo] (canonical AWS form) - * 2. [foo] (lenient fallback for hand-written files) - * - * The default profile is conventionally written as [default], with - * [profile default] tolerated as a fallback. - * - * @param array $data - * @param string $profile - * - * @return array|null - */ - private static function getProfileSection(array $data, $profile) - { - if ($profile === self::DEFAULT_PROFILE) { - return $data[self::DEFAULT_PROFILE] - ?? $data[self::PROFILE_PREFIX . self::DEFAULT_PROFILE] - ?? null; - } - - return $data[self::PROFILE_PREFIX . $profile] - ?? $data[$profile] - ?? null; - } - - /** - * Resolves a value nested in a referenced section (e.g. a profile that - * points at a "services" section via `services = my-services`). - * - * @param array $data - * @param string $profile - * @param string $filename - * @param string $expectedType - * @param array $options - * - * @return mixed|null - */ - private static function retrieveValueFromIniSubsection( - array $data, - $profile, - $filename, - $expectedType, - array $options - ) { - $profileData = self::getProfileSection($data, $profile); - $section = $options['section']; - - // The profile must name a referenced section, and that section must exist. - if ($profileData === null || !isset($profileData[$section])) { - return null; - } - - $referencedSection = "{$section} {$profileData[$section]}"; - if (!isset($data[$referencedSection])) { - return null; - } - - $subsections = \Aws\parse_ini_section_with_subsections( - $filename, - $referencedSection - ); - - $subsection = $options['subsection']; - $subKey = $options['key']; - if (!isset($subsections[$subsection][$subKey])) { - return null; - } - - return self::convertType($subsections[$subsection][$subKey], $expectedType); - } - - /** - * Gets the environment's HOME directory if available. - * - * @return string|null - */ - private static function getHomeDir() - { - // Linux / Unix-like systems. - if ($homeDir = getenv('HOME')) { - return $homeDir; - } - - // Windows hosts. - $homeDrive = getenv('HOMEDRIVE'); - $homePath = getenv('HOMEPATH'); - - return ($homeDrive && $homePath) ? $homeDrive . $homePath : null; - } - - /** - * Gets the config file location from the environment, falling back to the - * AWS default location. - * - * @return string - */ - private static function getDefaultConfigFilename() - { - return getenv(self::ENV_CONFIG_FILE) - ?: self::getHomeDir() . '/.aws/config'; - } - - /** - * Coerces a value to the expected type. The value may be a raw string - * (from env()) or already typed by INI_SCANNER_TYPED (from ini()). - * Unrecognized values are returned unchanged. - * - * @param mixed $value - * @param string $type - * - * @return mixed - */ - private static function convertType(mixed $value, string $type): mixed - { - // INI_SCANNER_TYPED may already yield a bool/int for keyword or numeric - // values; env() always passes a string. Each arm fast-paths the - // already-typed case and delegates conversion otherwise. TYPED may also - // return int/float/bool for numeric or keyword 'string' values, so the - // string arm casts those back to string as it did under NORMAL. - return match ($type) { - 'bool' => is_bool($value) ? $value : self::toBool($value), - 'int' => is_int($value) ? $value : self::toInt($value), - 'string' => is_string($value) ? $value : (string) $value, - default => $value, - }; - } - - /** - * Coerces a non-bool value (typically a string from env()) to bool. - * \Aws\boolean_value() returns null when it can't interpret the value. - * - * @param mixed $value - * - * @return mixed - */ - private static function toBool(mixed $value): mixed - { - if ($value === '') { - return false; - } - return \Aws\boolean_value($value) ?? $value; - } - - /** - * Coerces a non-int value (typically a string from env()) to int. Uses - * !== false on filter_var() so a valid "0" is not dropped; if the value - * is not a valid int, the original is returned unchanged. - * - * @param mixed $value - * - * @return mixed - */ - private static function toInt(mixed $value): mixed - { - if ($value === '') { - return 0; - } - $int = filter_var($value, FILTER_VALIDATE_INT); - return $int !== false ? $int : $value; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ConfigurationProviderInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ConfigurationProviderInterface.php deleted file mode 100644 index f1322618f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ConfigurationProviderInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -client = $config['client']; - $this->assumeRoleParams = $config['assume_role_params']; - } - - /** - * Loads assume role credentials. - * - * @return PromiseInterface - */ - public function __invoke() - { - $client = $this->client; - return $client->assumeRoleAsync($this->assumeRoleParams) - ->then(function (Result $result) { - return $this->client->createCredentials( - $result, - CredentialSources::STS_ASSUME_ROLE - ); - })->otherwise(function (\RuntimeException $exception) { - throw new CredentialsException( - "Error in retrieving assume role credentials.", - 0, - $exception - ); - }); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/AssumeRoleWithWebIdentityCredentialProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/AssumeRoleWithWebIdentityCredentialProvider.php deleted file mode 100644 index 2c862c0c9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/AssumeRoleWithWebIdentityCredentialProvider.php +++ /dev/null @@ -1,201 +0,0 @@ -arn = $config['RoleArn']; - - if (!isset($config['WebIdentityTokenFile'])) { - throw new \InvalidArgumentException(self::ERROR_MSG . "'WebIdentityTokenFile'."); - } - $this->tokenFile = $config['WebIdentityTokenFile']; - - if (!preg_match("/^\w\:|^\/|^\\\/", $this->tokenFile)) { - throw new \InvalidArgumentException("'WebIdentityTokenFile' must be an absolute path."); - } - - $this->retries = (int) getenv(self::ENV_RETRIES) ?: (isset($config['retries']) ? $config['retries'] : 3); - $this->authenticationAttempts = 0; - $this->tokenFileReadAttempts = 0; - $this->session = $config['SessionName'] - ?? 'aws-sdk-php-' . round(microtime(true) * 1000); - - if (isset($config['client'])) { - $this->client = $config['client']; - } else { - $region = $config['region'] - ?? getEnv(CredentialProvider::ENV_REGION) - ?: null; - - $this->client = $this->createDefaultStsClient($region); - } - - $this->source = $config['source'] - ?? CredentialSources::STS_WEB_ID_TOKEN; - } - - /** - * Loads assume role with web identity credentials. - * - * @return Promise\PromiseInterface - */ - public function __invoke() - { - return Promise\Coroutine::of(function () { - $client = $this->client; - $result = null; - while ($result == null) { - try { - $token = @file_get_contents($this->tokenFile); - if (false === $token) { - clearstatcache(true, dirname($this->tokenFile) . "/" . readlink($this->tokenFile)); - clearstatcache(true, dirname($this->tokenFile) . "/" . dirname(readlink($this->tokenFile))); - clearstatcache(true, $this->tokenFile); - if (!@is_readable($this->tokenFile)) { - throw new CredentialsException( - "Unreadable tokenfile at location {$this->tokenFile}" - ); - } - - $token = @file_get_contents($this->tokenFile); - } - if (empty($token)) { - if ($this->tokenFileReadAttempts < $this->retries) { - sleep((int) pow(1.2, $this->tokenFileReadAttempts)); - $this->tokenFileReadAttempts++; - continue; - } - throw new CredentialsException("InvalidIdentityToken from file: {$this->tokenFile}"); - } - } catch (\Exception $exception) { - throw new CredentialsException( - "Error reading WebIdentityTokenFile from " . $this->tokenFile, - 0, - $exception - ); - } - - $assumeParams = [ - 'RoleArn' => $this->arn, - 'RoleSessionName' => $this->session, - 'WebIdentityToken' => $token - ]; - - try { - $result = $client->assumeRoleWithWebIdentity($assumeParams); - } catch (AwsException $e) { - if ($e->getAwsErrorCode() == 'InvalidIdentityToken') { - if ($this->authenticationAttempts < $this->retries) { - sleep((int) pow(1.2, $this->authenticationAttempts)); - } else { - throw new CredentialsException( - "InvalidIdentityToken, retries exhausted" - ); - } - } else { - throw new CredentialsException( - "Error assuming role from web identity credentials", - 0, - $e - ); - } - } catch (\Exception $e) { - throw new CredentialsException( - "Error retrieving web identity credentials: " . $e->getMessage() - . " (" . $e->getCode() . ")" - ); - } - $this->authenticationAttempts++; - } - - yield $this->client->createCredentials( - $result, - $this->source - ); - }); - } - - /** - * @param string|null $region - * - * @return StsClient - */ - private function createDefaultStsClient( - ?string $region - ): StsClient - { - if (empty($region)) { - $region = CredentialProvider::FALLBACK_REGION; - trigger_error( - 'NOTICE: STS client created without explicit `region` configuration.' . PHP_EOL - . "Defaulting to {$region}. This fallback behavior may be removed." . PHP_EOL - . 'To avoid potential disruptions, configure a region using one of the following methods:' . PHP_EOL - . '(1) Pass `region` in the `$config` array when calling the provider,' . PHP_EOL - . '(2) Set the `AWS_REGION` environment variable.' . PHP_EOL - . 'OR provide an STS client in the `$config` array when creating the provider as `client`.' . PHP_EOL - . 'See: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/assume-role-with-web-identity-provider.html' - . PHP_EOL, - E_USER_NOTICE - ); - } - - return new StsClient([ - 'credentials' => false, - 'region' => $region - ]); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php deleted file mode 100644 index b0c54bc28..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php +++ /dev/null @@ -1,1113 +0,0 @@ - - * use Aws\Credentials\CredentialProvider; - * $provider = CredentialProvider::defaultProvider(); - * // Returns a CredentialsInterface or throws. - * $creds = $provider()->wait(); - * - * - * Credential providers can be composed to create credentials using conditional - * logic that can create different credentials in different environments. You - * can compose multiple providers into a single provider using - * {@see Aws\Credentials\CredentialProvider::chain}. This function accepts - * providers as variadic arguments and returns a new function that will invoke - * each provider until a successful set of credentials is returned. - * - * - * // First try an INI file at this location. - * $a = CredentialProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = CredentialProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = CredentialProvider::env(); - * // Combine the three providers together. - * $composed = CredentialProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with credentials or throws. - * $promise = $composed(); - * // Wait on the credentials to resolve. - * $creds = $promise->wait(); - * - */ -class CredentialProvider -{ - public const ENV_ARN = 'AWS_ROLE_ARN'; - public const ENV_KEY = 'AWS_ACCESS_KEY_ID'; - public const ENV_PROFILE = 'AWS_PROFILE'; - public const ENV_ROLE_SESSION_NAME = 'AWS_ROLE_SESSION_NAME'; - public const ENV_SECRET = 'AWS_SECRET_ACCESS_KEY'; - public const ENV_ACCOUNT_ID = 'AWS_ACCOUNT_ID'; - public const ENV_SESSION = 'AWS_SESSION_TOKEN'; - public const ENV_TOKEN_FILE = 'AWS_WEB_IDENTITY_TOKEN_FILE'; - public const ENV_SHARED_CREDENTIALS_FILE = 'AWS_SHARED_CREDENTIALS_FILE'; - public const ENV_CONFIG_FILE = 'AWS_CONFIG_FILE'; - public const ENV_REGION = 'AWS_REGION'; - public const FALLBACK_REGION = 'us-east-1'; - public const REFRESH_WINDOW = 60; - - /** - * Create a default credential provider that - * first checks for environment variables, - * then checks for assumed role via web identity, - * then checks for cached SSO credentials from the CLI, - * then check for credential_process in the "default" profile in ~/.aws/credentials, - * then checks for the "default" profile in ~/.aws/credentials, - * then for credential_process in the "default profile" profile in ~/.aws/config, - * then checks for "profile default" profile in ~/.aws/config (which is - * the default profile of AWS CLI), - * then tries to make a GET Request to fetch credentials if ECS environment variable is presented, - * finally checks for EC2 instance profile credentials. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided credentials. - * - * @param array $config Optional array of ecs/instance profile credentials - * provider options. - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $cacheable = [ - 'web_identity', - 'sso', - 'login', - 'process_credentials', - 'process_config', - 'ecs', - 'instance' - ]; - - $profileName = getenv(self::ENV_PROFILE) ?: 'default'; - - $defaultChain = [ - 'env' => self::env(), - 'web_identity' => self::assumeRoleWithWebIdentityCredentialProvider($config), - ]; - if (!isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] !== false - ) { - $defaultChain['sso'] = self::sso( - $profileName, - self::getConfigFileName(), - $config - ); - $defaultChain['login'] = self::login($profileName, $config); - $defaultChain['process_credentials'] = self::process(); - $defaultChain['ini'] = self::ini(null, null, $config); - $defaultChain['process_config'] = self::process( - 'profile ' . $profileName, - self::getConfigFileName() - ); - $defaultChain['ini_config'] = self::ini( - 'profile '. $profileName, - self::getConfigFileName() - ); - } - - if (self::shouldUseEcs()) { - $defaultChain['ecs'] = self::ecsCredentials($config); - } else { - $defaultChain['instance'] = self::instanceProfile($config); - } - - if (isset($config['credentials']) - && $config['credentials'] instanceof CacheInterface - ) { - foreach ($cacheable as $provider) { - if (isset($defaultChain[$provider])) { - $defaultChain[$provider] = self::cache( - $defaultChain[$provider], - $config['credentials'], - 'aws_cached_' . $provider . '_credentials' - ); - } - } - } - - return self::memoize( - call_user_func_array( - [CredentialProvider::class, 'chain'], - array_values($defaultChain) - ) - ); - } - - /** - * Create a credential provider function from a set of static credentials. - * - * @param CredentialsInterface $creds - * - * @return callable - */ - public static function fromCredentials(CredentialsInterface $creds) - { - $promise = Promise\Create::promiseFor($creds); - - return function () use ($promise) { - return $promise; - }; - } - - /** - * Creates an aggregate credentials provider that invokes the provided - * variadic providers one after the other until a provider returns - * credentials. - * - * @return callable - */ - public static function chain() - { - $links = func_get_args(); - if (empty($links)) { - throw new \InvalidArgumentException('No providers in chain'); - } - - return function ($previousCreds = null) use ($links) { - /** @var callable $parent */ - $parent = array_shift($links); - $promise = $parent(); - while ($next = array_shift($links)) { - if ($next instanceof InstanceProfileProvider - && $previousCreds instanceof Credentials - ) { - $promise = $promise->otherwise( - function () use ($next, $previousCreds) {return $next($previousCreds);} - ); - } else { - $promise = $promise->otherwise($next); - } - } - return $promise; - }; - } - - /** - * Wraps a credential provider and caches previously provided credentials. - * - * Ensures that cached credentials are refreshed when they expire. - * - * @param callable $provider Credentials provider function to wrap. - * - * @return callable - */ - public static function memoize(callable $provider) - { - return function () use ($provider) { - static $result; - static $isConstant; - - // Constant credentials will be returned constantly. - if ($isConstant) { - return $result; - } - - // Create the initial promise that will be used as the cached value - // until it expires. - if (null === $result) { - $result = $provider(); - } - - // Return credentials that could expire and refresh when needed. - return $result - ->then(function (CredentialsInterface $creds) use ($provider, &$isConstant, &$result) { - // Determine if these are constant credentials. - if (!$creds->getExpiration()) { - $isConstant = true; - return $creds; - } - - // Check if credentials are expired or will expire in 1 minute - $needsRefresh = $creds->getExpiration() - time() <= self::REFRESH_WINDOW; - - // Refresh if expired or expiring soon - if (!$needsRefresh && !$creds->isExpired()) { - return $creds; - } - - // Refresh the result and forward the promise. - return $result = $provider($creds); - }) - ->otherwise(function($reason) use (&$result) { - // Cleanup rejected promise. - $result = null; - return new Promise\RejectedPromise($reason); - }); - }; - } - - /** - * Wraps a credential provider and saves provided credentials in an - * instance of Aws\CacheInterface. Forwards calls when no credentials found - * in cache and updates cache with the results. - * - * @param callable $provider Credentials provider function to wrap - * @param CacheInterface $cache Cache to store credentials - * @param string|null $cacheKey (optional) Cache key to use - * - * @return callable - */ - public static function cache( - callable $provider, - CacheInterface $cache, - $cacheKey = null - ) { - $cacheKey = $cacheKey ?: 'aws_cached_credentials'; - - return function () use ($provider, $cache, $cacheKey) { - $found = $cache->get($cacheKey); - if ($found instanceof CredentialsInterface && !$found->isExpired()) { - return Promise\Create::promiseFor($found); - } - - return $provider() - ->then(function (CredentialsInterface $creds) use ( - $cache, - $cacheKey - ) { - $cache->set( - $cacheKey, - $creds, - null === $creds->getExpiration() ? - 0 : $creds->getExpiration() - time() - ); - - return $creds; - }); - }; - } - - /** - * Provider that creates credentials from environment variables - * AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_SESSION_TOKEN. - * - * @return callable - */ - public static function env() - { - return function () { - // Use credentials from environment variables, if available - $key = getenv(self::ENV_KEY); - $secret = getenv(self::ENV_SECRET); - $accountId = getenv(self::ENV_ACCOUNT_ID) ?: null; - $token = getenv(self::ENV_SESSION) ?: null; - - if ($key && $secret) { - return Promise\Create::promiseFor( - new Credentials( - $key, - $secret, - $token, - null, - $accountId, - CredentialSources::ENVIRONMENT - ) - ); - } - - return self::reject('Could not find environment variable ' - . 'credentials in ' . self::ENV_KEY . '/' . self::ENV_SECRET); - }; - } - - /** - * Credential provider that creates credentials using instance profile - * credentials. - * - * @param array $config Array of configuration data. - * - * @return InstanceProfileProvider - * @see Aws\Credentials\InstanceProfileProvider for $config details. - */ - public static function instanceProfile(array $config = []) - { - return new InstanceProfileProvider($config); - } - - /** - * Credential provider that retrieves cached SSO credentials from the CLI - * - * @return callable - */ - public static function sso( - $ssoProfileName = 'default', - $filename = null, - $config = [] - ) { - $filename = $filename ?? self::getConfigFileName(); - - return function () use ($ssoProfileName, $filename, $config) { - if (!@is_readable($filename)) { - return self::reject("Cannot read credentials from $filename"); - } - $profiles = self::loadProfiles($filename); - - if (isset($profiles[$ssoProfileName])) { - $ssoProfile = $profiles[$ssoProfileName]; - } elseif (isset($profiles['profile ' . $ssoProfileName])) { - $ssoProfileName = 'profile ' . $ssoProfileName; - $ssoProfile = $profiles[$ssoProfileName]; - } else { - return self::reject("Profile {$ssoProfileName} does not exist in {$filename}."); - } - - if (!empty($ssoProfile['sso_session'])) { - return CredentialProvider::getSsoCredentials($profiles, $ssoProfileName, $filename, $config); - } else { - return CredentialProvider::getSsoCredentialsLegacy($profiles, $ssoProfileName, $filename, $config); - } - }; - } - - /** - * Credential provider that creates credentials using - * ecs credentials by a GET request, whose uri is specified - * by environment variable - * - * @param array $config Array of configuration data. - * - * @return EcsCredentialProvider - * @see Aws\Credentials\EcsCredentialProvider for $config details. - */ - public static function ecsCredentials(array $config = []) - { - return new EcsCredentialProvider($config); - } - - /** - * Credential provider that creates credentials using assume role - * - * @param array $config Array of configuration data - * @return callable - * @see Aws\Credentials\AssumeRoleCredentialProvider for $config details. - */ - public static function assumeRole(array $config=[]) - { - return new AssumeRoleCredentialProvider($config); - } - - /** - * Credential provider that creates credentials by assuming role from a - * Web Identity Token - * - * @param array $config Array of configuration data - * @return callable - * @see Aws\Credentials\AssumeRoleWithWebIdentityCredentialProvider for - * $config details. - */ - public static function assumeRoleWithWebIdentityCredentialProvider(array $config = []) - { - return function () use ($config) { - $arnFromEnv = getenv(self::ENV_ARN); - $tokenFromEnv = getenv(self::ENV_TOKEN_FILE); - $stsClient = isset($config['stsClient']) - ? $config['stsClient'] - : null; - $region = isset($config['region']) - ? $config['region'] - : null; - - if ($tokenFromEnv && $arnFromEnv) { - $sessionName = getenv(self::ENV_ROLE_SESSION_NAME) - ? getenv(self::ENV_ROLE_SESSION_NAME) - : null; - $provider = new AssumeRoleWithWebIdentityCredentialProvider([ - 'RoleArn' => $arnFromEnv, - 'WebIdentityTokenFile' => $tokenFromEnv, - 'SessionName' => $sessionName, - 'client' => $stsClient, - 'region' => $region, - 'source' => CredentialSources::ENVIRONMENT_STS_WEB_ID_TOKEN - ]); - - return $provider(); - } - - $profileName = getenv(self::ENV_PROFILE) ?: 'default'; - if (isset($config['filename'])) { - $profiles = self::loadProfiles($config['filename']); - } else { - $profiles = self::loadDefaultProfiles(); - } - - if (isset($profiles[$profileName])) { - $profile = $profiles[$profileName]; - if (isset($profile['region'])) { - $region = $profile['region']; - } - if (isset($profile['web_identity_token_file']) - && isset($profile['role_arn']) - ) { - $sessionName = isset($profile['role_session_name']) - ? $profile['role_session_name'] - : null; - $provider = new AssumeRoleWithWebIdentityCredentialProvider([ - 'RoleArn' => $profile['role_arn'], - 'WebIdentityTokenFile' => $profile['web_identity_token_file'], - 'SessionName' => $sessionName, - 'client' => $stsClient, - 'region' => $region, - 'source' => CredentialSources::PROFILE_STS_WEB_ID_TOKEN - ]); - - return $provider(); - } - } else { - return self::reject("Unknown profile: $profileName"); - } - return self::reject("No RoleArn or WebIdentityTokenFile specified"); - }; - } - - /** - * Credentials provider that creates credentials using an ini file stored - * in the current user's home directory. A source can be provided - * in this file for assuming a role using the credential_source config option. - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile in "~/.aws/credentials". - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the home directory. - * @param array|null $config If provided, may contain the following: - * preferStaticCredentials: If true, prefer static - * credentials to role_arn if both are present - * disableAssumeRole: If true, disable support for - * roles that assume an IAM role. If true and role profile - * is selected, an error is raised. - * stsClient: StsClient used to assume role specified in profile - * - * @return callable - */ - public static function ini($profile = null, $filename = null, array $config = []) - { - $filename = self::getCredentialsFileName($filename); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename, $config) { - $preferStaticCredentials = $config['preferStaticCredentials'] ?? false; - $disableAssumeRole = $config['disableAssumeRole'] ?? false; - $stsClient = $config['stsClient'] ?? null; - - if (!@is_readable($filename)) { - return self::reject("Cannot read credentials from $filename"); - } - $data = self::loadProfiles($filename); - if ($data === false) { - return self::reject("Invalid credentials file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in credentials file"); - } - - /* - In the CLI, the presence of both a role_arn and static credentials have - different meanings depending on how many profiles have been visited. For - the first profile processed, role_arn takes precedence over any static - credentials, but for all subsequent profiles, static credentials are - used if present, and only in their absence will the profile's - source_profile and role_arn keys be used to load another set of - credentials. This bool is intended to yield compatible behaviour in this - sdk. - */ - $preferStaticCredentialsToRoleArn = ($preferStaticCredentials - && isset($data[$profile]['aws_access_key_id']) - && isset($data[$profile]['aws_secret_access_key'])); - - if (isset($data[$profile]['role_arn']) - && !$preferStaticCredentialsToRoleArn - ) { - if ($disableAssumeRole) { - return self::reject( - "Role assumption profiles are disabled. " - . "Failed to load profile " . $profile); - } - return self::loadRoleProfile( - $data, - $profile, - $filename, - $stsClient, - $config - ); - } - - if (!isset($data[$profile]['aws_access_key_id']) - || !isset($data[$profile]['aws_secret_access_key']) - ) { - return self::reject("No credentials present in INI profile " - . "'$profile' ($filename)"); - } - - if (empty($data[$profile]['aws_session_token'])) { - $data[$profile]['aws_session_token'] - = isset($data[$profile]['aws_security_token']) - ? $data[$profile]['aws_security_token'] - : null; - } - - return Promise\Create::promiseFor( - new Credentials( - $data[$profile]['aws_access_key_id'], - $data[$profile]['aws_secret_access_key'], - $data[$profile]['aws_session_token'], - null, - $data[$profile]['aws_account_id'] ?? null, - CredentialSources::PROFILE - ) - ); - }; - } - - /** - * Credentials provider that creates credentials using a process configured in - * ini file stored in the current user's home directory. - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile in "~/.aws/credentials". - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the home directory. - * - * @return callable - */ - public static function process($profile = null, $filename = null) - { - $filename = self::getCredentialsFileName($filename); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read process credentials from $filename"); - } - $data = \Aws\parse_ini_file($filename, true, INI_SCANNER_RAW); - if ($data === false) { - return self::reject("Invalid credentials file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in credentials file"); - } - if (!isset($data[$profile]['credential_process'])) { - return self::reject("No credential_process present in INI profile " - . "'$profile' ($filename)"); - } - - $credentialProcess = $data[$profile]['credential_process']; - $json = shell_exec($credentialProcess); - - $processData = json_decode($json, true); - - // Only support version 1 - if (isset($processData['Version'])) { - if ($processData['Version'] !== 1) { - return self::reject("credential_process does not return Version == 1"); - } - } - - if (!isset($processData['AccessKeyId']) - || !isset($processData['SecretAccessKey'])) - { - return self::reject("credential_process does not return valid credentials"); - } - - if (isset($processData['Expiration'])) { - try { - $expiration = new DateTimeResult($processData['Expiration']); - } catch (\Exception $e) { - return self::reject("credential_process returned invalid expiration"); - } - $now = new DateTimeResult(); - if ($expiration < $now) { - return self::reject("credential_process returned expired credentials"); - } - $expires = $expiration->getTimestamp(); - } else { - $expires = null; - } - - if (empty($processData['SessionToken'])) { - $processData['SessionToken'] = null; - } - - $accountId = null; - if (!empty($processData['AccountId'])) { - $accountId = $processData['AccountId']; - } elseif (!empty($data[$profile]['aws_account_id'])) { - $accountId = $data[$profile]['aws_account_id']; - } - - return Promise\Create::promiseFor( - new Credentials( - $processData['AccessKeyId'], - $processData['SecretAccessKey'], - $processData['SessionToken'], - $expires, - $accountId, - CredentialSources::PROFILE_PROCESS - ) - ); - }; - } - - /** - * Login credential provider for AWS local development using console credentials - * - * @param string|null $profileName profile containing your console login session information - * @param array $config region used for refresh requests. - * pass `'region' => ` to configure a region, - * otherwise, provider construction falls back to AWS_REGION, - * then the profile specified for `login` - * - * @return callable - */ - public static function login( - ?string $profileName = null, - array $config = [], - ): callable - { - $resolvedProfile = $profileName ?? getenv(self::ENV_PROFILE) ?: 'default'; - - return static function () use ($resolvedProfile, $config) { - try { - $provider = new LoginCredentialProvider( - $resolvedProfile, - $config['region'] ?? null - ); - } catch (\Exception $e) { - return self::reject( - "Failed to initialize login credential provider for profile '{$resolvedProfile}': " - . $e->getMessage() - ); - } - - return $provider(); - }; - } - - /** - * Assumes role for profile that includes role_arn - * - * @return callable - */ - private static function loadRoleProfile( - $profiles, - $profileName, - $filename, - $stsClient, - $config = [] - ) { - $roleProfile = $profiles[$profileName]; - $roleArn = $roleProfile['role_arn'] ?? ''; - $roleSessionName = $roleProfile['role_session_name'] - ?? 'aws-sdk-php-' . round(microtime(true) * 1000); - - if (empty($roleProfile['source_profile']) - == empty($roleProfile['credential_source']) - ) { - return self::reject("Either source_profile or credential_source must be set " . - "using profile " . $profileName . ", but not both." - ); - } - - $sourceProfileName = ""; - if (!empty($roleProfile['source_profile'])) { - $sourceProfileName = $roleProfile['source_profile']; - if (!isset($profiles[$sourceProfileName])) { - return self::reject("source_profile " . $sourceProfileName - . " using profile " . $profileName . " does not exist" - ); - } - if (isset($config['visited_profiles']) && - in_array($roleProfile['source_profile'], $config['visited_profiles']) - ) { - return self::reject("Circular source_profile reference found."); - } - $config['visited_profiles'] [] = $roleProfile['source_profile']; - } else { - if (empty($roleArn)) { - return self::reject( - "A role_arn must be provided with credential_source in " . - "file {$filename} under profile {$profileName} " - ); - } - } - - if (empty($stsClient)) { - $config['preferStaticCredentials'] = true; - $sourceCredentials = null; - if (!empty($roleProfile['source_profile'])){ - $sourceCredentials = call_user_func( - CredentialProvider::ini($sourceProfileName, $filename, $config) - )->wait(); - } else { - $sourceCredentials = self::getCredentialsFromSource( - $profileName, - $filename - ); - } - - $region = $profiles[$sourceProfileName]['region'] - ?? $config['region'] - ?? getEnv(self::ENV_REGION) - ?: null; - - $stsClient = self::createDefaultStsClient($sourceCredentials, $region); - } - - $result = $stsClient->assumeRole([ - 'RoleArn' => $roleArn, - 'RoleSessionName' => $roleSessionName - ]); - $credentials = $stsClient->createCredentials( - $result, - CredentialSources::STS_ASSUME_ROLE - ); - - return Promise\Create::promiseFor($credentials); - } - - /** - * Gets the environment's HOME directory if available. - * - * @return null|string - */ - public static function getHomeDir() - { - // On Linux/Unix-like systems, use the HOME environment variable - if ($homeDir = getenv('HOME')) { - return $homeDir; - } - - // Get the HOMEDRIVE and HOMEPATH values for Windows hosts - $homeDrive = getenv('HOMEDRIVE'); - $homePath = getenv('HOMEPATH'); - - return ($homeDrive && $homePath) ? $homeDrive . $homePath : null; - } - - /** - * Gets profiles from specified $filename, or default ini files. - */ - public static function loadProfiles($filename) - { - $profileData = \Aws\parse_ini_file($filename, true, INI_SCANNER_RAW); - - // If loading .aws/credentials, also load .aws/config when AWS_SDK_LOAD_NONDEFAULT_CONFIG is set - if ($filename === self::getHomeDir() . '/.aws/credentials' - && getenv('AWS_SDK_LOAD_NONDEFAULT_CONFIG') - ) { - $configFilename = self::getConfigFileName(); - $configProfileData = \Aws\parse_ini_file($configFilename, true, INI_SCANNER_RAW); - foreach ($configProfileData as $name => $profile) { - // standardize config profile names - $name = str_replace('profile ', '', $name); - if (!isset($profileData[$name])) { - $profileData[$name] = $profile; - } - } - } - - return $profileData; - } - - /** - * Gets profiles from ~/.aws/credentials and ~/.aws/config ini files - */ - private static function loadDefaultProfiles() - { - $profiles = []; - $credFile = self::getHomeDir() . '/.aws/credentials'; - $configFile = self::getHomeDir() . '/.aws/config'; - if (file_exists($credFile)) { - $profiles = \Aws\parse_ini_file($credFile, true, INI_SCANNER_RAW); - } - - if (file_exists($configFile)) { - $configProfileData = \Aws\parse_ini_file($configFile, true, INI_SCANNER_RAW); - foreach ($configProfileData as $name => $profile) { - // standardize config profile names - $name = str_replace('profile ', '', $name); - if (!isset($profiles[$name])) { - $profiles[$name] = $profile; - } - } - } - - return $profiles; - } - - public static function getCredentialsFromSource( - $profileName = '', - $filename = '', - $config = [] - ) { - $data = self::loadProfiles($filename); - $credentialSource = !empty($data[$profileName]['credential_source']) - ? $data[$profileName]['credential_source'] - : null; - $credentialsPromise = null; - - switch ($credentialSource) { - case 'Environment': - $credentialsPromise = self::env(); - break; - case 'Ec2InstanceMetadata': - $credentialsPromise = self::instanceProfile($config); - break; - case 'EcsContainer': - $credentialsPromise = self::ecsCredentials($config); - break; - default: - throw new CredentialsException( - "Invalid credential_source found in config file: {$credentialSource}. Valid inputs " - . "include Environment, Ec2InstanceMetadata, and EcsContainer." - ); - } - - $credentialsResult = null; - try { - $credentialsResult = $credentialsPromise()->wait(); - } catch (\Exception $reason) { - return self::reject( - "Unable to successfully retrieve credentials from the source specified in the" - . " credentials file: {$credentialSource}; failure message was: " - . $reason->getMessage() - ); - } - return function () use ($credentialsResult) { - return Promise\Create::promiseFor($credentialsResult); - }; - } - - private static function reject($msg) - { - return new Promise\RejectedPromise(new CredentialsException($msg)); - } - - /** - * Locates shared configuration file by first checking for AWS_CONFIG, - * then falling back to the default location. Returns the path of the - * resolved configuration file. - * - * @return string - */ - public static function getConfigFileName(): string - { - return getenv(self::ENV_CONFIG_FILE) ?: self::getHomeDir() . '/.aws/config'; - } - - /** - * Locates credentials file by first checking for AWS_SHARED_CREDENTIALS_FILE, - * then falling back to the default location. Returns the path of the - * resolved credentials file. - * - * @param $filename - * @return string - */ - public static function getCredentialsFileName($filename): string - { - if (!isset($filename)) { - $filename = getenv(self::ENV_SHARED_CREDENTIALS_FILE) ?: - (self::getHomeDir() . '/.aws/credentials'); - } - - return $filename; - } - - /** - * @return boolean - */ - public static function shouldUseEcs() - { - //Check for relative uri. if not, then full uri. - //fall back to server for each as getenv is not thread-safe. - return !empty(getenv(EcsCredentialProvider::ENV_URI)) - || !empty($_SERVER[EcsCredentialProvider::ENV_URI]) - || !empty(getenv(EcsCredentialProvider::ENV_FULL_URI)) - || !empty($_SERVER[EcsCredentialProvider::ENV_FULL_URI]); - } - - /** - * @param $profiles - * @param $ssoProfileName - * @param $filename - * @param $config - * @return Promise\PromiseInterface - */ - private static function getSsoCredentials($profiles, $ssoProfileName, $filename, $config) - { - if (empty($config['ssoOidcClient'])) { - $ssoProfile = $profiles[$ssoProfileName]; - $sessionName = $ssoProfile['sso_session']; - if (empty($profiles['sso-session ' . $sessionName])) { - return self::reject( - "Could not find sso-session {$sessionName} in {$filename}" - ); - } - $ssoSession = $profiles['sso-session ' . $ssoProfile['sso_session']]; - $ssoOidcClient = new Aws\SSOOIDC\SSOOIDCClient([ - 'region' => $ssoSession['sso_region'], - 'version' => '2019-06-10', - 'credentials' => false - ]); - } else { - $ssoOidcClient = $config['ssoClient']; - } - - $tokenPromise = new Aws\Token\SsoTokenProvider( - $ssoProfileName, - $filename, - $ssoOidcClient - ); - $token = $tokenPromise()->wait(); - $ssoCredentials = CredentialProvider::getCredentialsFromSsoService( - $ssoProfile, - $ssoSession['sso_region'], - $token->getToken(), - $config - ); - - //Expiration value is returned in epoch milliseconds. Conversion to seconds - $expiration = intdiv($ssoCredentials['expiration'], 1000); - return Promise\Create::promiseFor( - new Credentials( - $ssoCredentials['accessKeyId'], - $ssoCredentials['secretAccessKey'], - $ssoCredentials['sessionToken'], - $expiration, - $ssoProfile['sso_account_id'], - CredentialSources::PROFILE_SSO - ) - ); - } - - /** - * @param $profiles - * @param $ssoProfileName - * @param $filename - * @param $config - * @return Promise\PromiseInterface - */ - private static function getSsoCredentialsLegacy($profiles, $ssoProfileName, $filename, $config) - { - $ssoProfile = $profiles[$ssoProfileName]; - if (empty($ssoProfile['sso_start_url']) - || empty($ssoProfile['sso_region']) - || empty($ssoProfile['sso_account_id']) - || empty($ssoProfile['sso_role_name']) - ) { - return self::reject( - "Profile {$ssoProfileName} in {$filename} must contain the following keys: " - . "sso_start_url, sso_region, sso_account_id, and sso_role_name." - ); - } - $tokenLocation = self::getHomeDir() - . '/.aws/sso/cache/' - . sha1($ssoProfile['sso_start_url']) - . ".json"; - - if (!@is_readable($tokenLocation)) { - return self::reject("Unable to read token file at $tokenLocation"); - } - $tokenData = json_decode(file_get_contents($tokenLocation), true); - if (empty($tokenData['accessToken']) || empty($tokenData['expiresAt'])) { - return self::reject( - "Token file at {$tokenLocation} must contain an access token and an expiration" - ); - } - try { - $expiration = (new DateTimeResult($tokenData['expiresAt']))->getTimestamp(); - } catch (\Exception $e) { - return self::reject("Cached SSO credentials returned an invalid expiration"); - } - $now = time(); - if ($expiration < $now) { - return self::reject("Cached SSO credentials returned expired credentials"); - } - $ssoCredentials = CredentialProvider::getCredentialsFromSsoService( - $ssoProfile, - $ssoProfile['sso_region'], - $tokenData['accessToken'], - $config - ); - return Promise\Create::promiseFor( - new Credentials( - $ssoCredentials['accessKeyId'], - $ssoCredentials['secretAccessKey'], - $ssoCredentials['sessionToken'], - $expiration, - $ssoProfile['sso_account_id'], - CredentialSources::PROFILE_SSO_LEGACY - ) - ); - } - /** - * @param array $ssoProfile - * @param string $clientRegion - * @param string $accessToken - * @param array $config - * @return array|null - */ - private static function getCredentialsFromSsoService($ssoProfile, $clientRegion, $accessToken, $config) - { - if (empty($config['ssoClient'])) { - $ssoClient = new Aws\SSO\SSOClient([ - 'region' => $clientRegion, - 'version' => '2019-06-10', - 'credentials' => false - ]); - } else { - $ssoClient = $config['ssoClient']; - } - $ssoResponse = $ssoClient->getRoleCredentials([ - 'accessToken' => $accessToken, - 'accountId' => $ssoProfile['sso_account_id'], - 'roleName' => $ssoProfile['sso_role_name'] - ]); - - $ssoCredentials = $ssoResponse['roleCredentials']; - return $ssoCredentials; - } - - /** - * @param CredentialsInterface $credentials - * @param string|null $region - * - * @return StsClient - */ - private static function createDefaultStsClient( - CredentialsInterface|callable $credentials, - ?string $region - ): StsClient - { - if (empty($region)) { - $region = self::FALLBACK_REGION; - trigger_error( - 'NOTICE: STS client created without explicit `region` configuration.' . PHP_EOL - . "Defaulting to `{$region}`. This fallback behavior may be removed." . PHP_EOL - . 'To avoid potential disruptions, configure a `region` using one of the following methods:' . PHP_EOL - . '(1) Add `region` to your source profile in ~/.aws/credentials,' . PHP_EOL - . '(2) Pass `region` in the `$config` array when calling the provider,' . PHP_EOL - . '(3) Set the `AWS_REGION` environment variable.' . PHP_EOL - . 'See: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_assume_role.html#assume-role-with-profile' - . PHP_EOL, - E_USER_NOTICE - ); - } - - return new StsClient([ - 'credentials' => $credentials, - 'region' => $region - ]); - } -} - diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/CredentialSources.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/CredentialSources.php deleted file mode 100644 index de8a765dd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/CredentialSources.php +++ /dev/null @@ -1,23 +0,0 @@ -key = trim((string) $key); - $this->secret = trim((string) $secret); - $this->token = $token; - $this->expires = $expires; - $this->accountId = $accountId; - $this->source = $source ?? CredentialSources::STATIC; - } - - public static function __set_state(array $state) - { - return new self( - $state['key'], - $state['secret'], - $state['token'], - $state['expires'], - $state['accountId'], - $state['source'] ?? null - ); - } - - public function getAccessKeyId() - { - return $this->key; - } - - public function getSecretKey() - { - return $this->secret; - } - - public function getSecurityToken() - { - return $this->token; - } - - public function getExpiration() - { - return $this->expires; - } - - public function isExpired() - { - return $this->expires !== null && time() >= $this->expires; - } - - public function getAccountId() - { - return $this->accountId; - } - - public function getSource() - { - return $this->source; - } - - public function toArray() - { - return [ - 'key' => $this->key, - 'secret' => $this->secret, - 'token' => $this->token, - 'expires' => $this->expires, - 'accountId' => $this->accountId, - 'source' => $this->source - ]; - } - - public function serialize() - { - return json_encode($this->__serialize()); - } - - public function unserialize($serialized) - { - $data = json_decode($serialized, true); - - $this->__unserialize($data); - } - - public function __serialize() - { - return $this->toArray(); - } - - public function __unserialize($data) - { - $this->key = $data['key']; - $this->secret = $data['secret']; - $this->token = $data['token']; - $this->expires = $data['expires']; - $this->accountId = $data['accountId'] ?? null; - $this->source = $data['source'] ?? null; - } - - /** - * Internal-only. Used when IMDS is unreachable - * or returns expires credentials. - * - * @internal - */ - public function extendExpiration() { - $extension = mt_rand(5, 10); - $this->expires = time() + $extension * 60; - - $message = <<= $loopbackStart && $ipLong <= $loopbackEnd); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/EcsCredentialProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/EcsCredentialProvider.php deleted file mode 100644 index b6aa8177d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/EcsCredentialProvider.php +++ /dev/null @@ -1,262 +0,0 @@ -timeout = is_string($timeout) && is_numeric($timeout) ? (float) $timeout : $timeout; - $this->retries = (int) isset($config['retries']) - ? $config['retries'] - : ((int) getenv(self::ENV_RETRIES) ?: self::DEFAULT_ENV_RETRIES); - - $this->client = $config['client'] ?? \Aws\default_http_handler(); - } - - /** - * Load container credentials. - * - * @return PromiseInterface - * @throws GuzzleException - */ - public function __invoke() - { - $this->attempts = 0; - $uri = $this->getEcsUri(); - if ($this->isCompatibleUri($uri)) { - return Promise\Coroutine::of(function () { - $client = $this->client; - $request = new Request('GET', $this->getEcsUri()); - $headers = $this->getHeadersForAuthToken(); - $credentials = null; - while ($credentials === null) { - $credentials = (yield $client( - $request, - [ - 'timeout' => $this->timeout, - 'proxy' => '', - 'headers' => $headers, - ] - )->then(function (ResponseInterface $response) { - $result = $this->decodeResult((string)$response->getBody()); - if (!isset($result['AccountId']) && isset($result['RoleArn'])) { - try { - $parsedArn = new Arn($result['RoleArn']); - $result['AccountId'] = $parsedArn->getAccountId(); - } catch (\Exception $e) { - // AccountId will be null - } - } - - return new Credentials( - $result['AccessKeyId'], - $result['SecretAccessKey'], - $result['Token'], - strtotime($result['Expiration']), - $result['AccountId'] ?? null, - CredentialSources::ECS - ); - })->otherwise(function ($reason) { - $connectionError = is_array($reason) && !empty($reason['connection_error']); - $exception = is_array($reason) ? ($reason['exception'] ?? null) : $reason; - $isRetryable = $connectionError || ($exception instanceof \Throwable && HttpHandlerError::isConnectionError($exception)); - - if ($isRetryable && ($this->attempts < $this->retries)) { - sleep((int)pow(1.2, $this->attempts)); - } else { - $msg = $exception instanceof \Throwable ? $exception->getMessage() : \Aws\describe_type($reason); - throw new CredentialsException( - sprintf('Error retrieving credentials from container metadata after attempt %d/%d (%s)', $this->attempts, $this->retries, $msg) - ); - } - })); - $this->attempts++; - } - - yield $credentials; - }); - } - - throw new CredentialsException("Uri '{$uri}' contains an unsupported host."); - } - - /** - * Returns the number of attempts that have been done. - * - * @return int - */ - public function getAttempts(): int - { - return $this->attempts; - } - - /** - * Retrieves authorization token. - * - * @return array|false|string - */ - private function getEcsAuthToken() - { - if (!empty($path = getenv(self::ENV_AUTH_TOKEN_FILE))) { - $token = @file_get_contents($path); - if (false === $token) { - clearstatcache(true, dirname($path) . DIRECTORY_SEPARATOR . @readlink($path)); - clearstatcache(true, dirname($path) . DIRECTORY_SEPARATOR . dirname(@readlink($path))); - clearstatcache(true, $path); - } - - if (!is_readable($path)) { - throw new CredentialsException("Failed to read authorization token from '{$path}': no such file or directory."); - } - - $token = @file_get_contents($path); - - if (empty($token)) { - throw new CredentialsException("Invalid authorization token read from `$path`. Token file is empty!"); - } - - return $token; - } - - return getenv(self::ENV_AUTH_TOKEN); - } - - /** - * Provides headers for credential metadata request. - * - * @return array|array[]|string[] - */ - private function getHeadersForAuthToken() - { - $authToken = self::getEcsAuthToken(); - $headers = []; - - if (!empty($authToken)) - $headers = ['Authorization' => $authToken]; - - return $headers; - } - - /** @deprecated */ - public function setHeaderForAuthToken() - { - $authToken = self::getEcsAuthToken(); - $headers = []; - if (!empty($authToken)) - $headers = ['Authorization' => $authToken]; - - return $headers; - } - - /** - * Fetch container metadata URI from container environment variable. - * - * @return string Returns container metadata URI - */ - private function getEcsUri() - { - $credsUri = getenv(self::ENV_URI); - - if ($credsUri === false) { - $credsUri = $_SERVER[self::ENV_URI] ?? ''; - } - - if (empty($credsUri)){ - $credFullUri = getenv(self::ENV_FULL_URI); - if ($credFullUri === false){ - $credFullUri = $_SERVER[self::ENV_FULL_URI] ?? ''; - } - - if (!empty($credFullUri)) - return $credFullUri; - } - - return self::SERVER_URI . $credsUri; - } - - private function decodeResult($response) - { - $result = json_decode($response, true); - - if (!isset($result['AccessKeyId'])) { - throw new CredentialsException('Unexpected container metadata credentials value'); - } - return $result; - } - - /** - * Determines whether or not a given request URI is a valid - * container credential request URI. - * - * @param $uri - * - * @return bool - */ - private function isCompatibleUri($uri) - { - $parsed = parse_url($uri); - - if ($parsed['scheme'] !== 'https') { - $host = trim($parsed['host'], '[]'); - $ecsHost = parse_url(self::SERVER_URI)['host']; - $eksHost = self::EKS_SERVER_HOST_IPV4; - - if ($host !== $ecsHost - && $host !== $eksHost - && $host !== self::EKS_SERVER_HOST_IPV6 - && !CredentialsUtils::isLoopBackAddress(gethostbyname($host)) - ) { - return false; - } - } - - return true; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php deleted file mode 100644 index 47b08bb99..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php +++ /dev/null @@ -1,469 +0,0 @@ -timeout = is_string($timeout) && is_numeric($timeout) ? (float) $timeout : $timeout; - $this->profile = $config['profile'] ?? null; - $this->retries = (int) getenv(self::ENV_RETRIES) ?: ($config['retries'] ?? self::DEFAULT_RETRIES); - $this->client = $config['client'] ?? \Aws\default_http_handler(); - $this->ec2MetadataV1Disabled = $config[self::CFG_EC2_METADATA_V1_DISABLED] ?? null; - $this->endpoint = $config[self::CFG_EC2_METADATA_SERVICE_ENDPOINT] ?? null; - if (!empty($this->endpoint) && !$this->isValidEndpoint($this->endpoint)) { - throw new \InvalidArgumentException('The provided URI "' . $this->endpoint . '" is invalid, or contains an unsupported host'); - } - - $this->endpointMode = $config[self::CFG_EC2_METADATA_SERVICE_ENDPOINT_MODE] ?? null; - $this->config = $config; - } - - /** - * Loads instance profile credentials. - * - * @return PromiseInterface - */ - public function __invoke($previousCredentials = null) - { - $this->attempts = 0; - return Promise\Coroutine::of(function () use ($previousCredentials) { - - // Retrieve token or switch out of secure mode - $token = null; - while ($this->secureMode && is_null($token)) { - try { - $token = (yield $this->request( - self::TOKEN_PATH, - 'PUT', - [ - 'x-aws-ec2-metadata-token-ttl-seconds' => self::DEFAULT_TOKEN_TTL_SECONDS - ] - )); - } catch (TransferException $e) { - if ($this->getExceptionStatusCode($e) === 500 - && $previousCredentials instanceof Credentials - ) { - goto generateCredentials; - } elseif ($this->shouldFallbackToIMDSv1() - && (!method_exists($e, 'getResponse') - || empty($e->getResponse()) - || !in_array( - $e->getResponse()->getStatusCode(), - [400, 500, 502, 503, 504] - )) - ) { - $this->secureMode = false; - } else { - $this->handleRetryableException( - $e, - [], - $this->createErrorMessage( - 'Error retrieving metadata token' - ) - ); - } - } - $this->attempts++; - } - - // Set token header only for secure mode - $headers = []; - if ($this->secureMode) { - $headers = [ - 'x-aws-ec2-metadata-token' => $token - ]; - } - - // Retrieve profile - while (!$this->profile) { - try { - $this->profile = (yield $this->request( - self::CRED_PATH, - 'GET', - $headers - )); - } catch (TransferException $e) { - // 401 indicates insecure flow not supported, switch to - // attempting secure mode for subsequent calls - if (!empty($this->getExceptionStatusCode($e)) - && $this->getExceptionStatusCode($e) === 401 - ) { - $this->secureMode = true; - } - $this->handleRetryableException( - $e, - [ 'blacklist' => [401, 403] ], - $this->createErrorMessage($e->getMessage()) - ); - } - - $this->attempts++; - } - - // Retrieve credentials - $result = null; - while ($result == null) { - try { - $json = (yield $this->request( - self::CRED_PATH . $this->profile, - 'GET', - $headers - )); - $result = $this->decodeResult($json); - } catch (InvalidJsonException $e) { - $this->handleRetryableException( - $e, - [ 'blacklist' => [401, 403] ], - $this->createErrorMessage( - 'Invalid JSON response, retries exhausted' - ) - ); - } catch (TransferException $e) { - // 401 indicates insecure flow not supported, switch to - // attempting secure mode for subsequent calls - if (($this->getExceptionStatusCode($e) === 500 - || strpos($e->getMessage(), "cURL error 28") !== false) - && $previousCredentials instanceof Credentials - ) { - goto generateCredentials; - } elseif (!empty($this->getExceptionStatusCode($e)) - && $this->getExceptionStatusCode($e) === 401 - ) { - $this->secureMode = true; - } - $this->handleRetryableException( - $e, - [ 'blacklist' => [401, 403] ], - $this->createErrorMessage($e->getMessage()) - ); - } - $this->attempts++; - } - generateCredentials: - - if (!isset($result)) { - $credentials = $previousCredentials; - } else { - $credentials = new Credentials( - $result['AccessKeyId'], - $result['SecretAccessKey'], - $result['Token'], - strtotime($result['Expiration']), - $result['AccountId'] ?? null, - CredentialSources::IMDS - ); - } - - if ($credentials->isExpired()) { - $credentials->extendExpiration(); - } - - yield $credentials; - }); - } - - /** - * @param string $url - * @param string $method - * @param array $headers - * @return PromiseInterface Returns a promise that is fulfilled with the - * body of the response as a string. - */ - private function request($url, $method = 'GET', $headers = []) - { - $disabled = getenv(self::ENV_DISABLE) ?: false; - if (strcasecmp($disabled, 'true') === 0) { - throw new CredentialsException( - $this->createErrorMessage('EC2 metadata service access disabled') - ); - } - - $fn = $this->client; - $request = new Request($method, $this->resolveEndpoint() . $url); - $userAgent = 'aws-sdk-php/' . Sdk::VERSION; - if (defined('HHVM_VERSION')) { - $userAgent .= ' HHVM/' . HHVM_VERSION; - } - $userAgent .= ' ' . \Aws\default_user_agent(); - $request = $request->withHeader('User-Agent', $userAgent); - foreach ($headers as $key => $value) { - $request = $request->withHeader($key, (string) $value); - } - - return $fn($request, ['timeout' => $this->timeout]) - ->then(function (ResponseInterface $response) { - return (string) $response->getBody(); - })->otherwise(function (array $reason) { - $reason = $reason['exception']; - if ($reason instanceof TransferException) { - throw $reason; - } - $msg = $reason->getMessage(); - throw new CredentialsException( - $this->createErrorMessage($msg) - ); - }); - } - - private function handleRetryableException( - \Exception $e, - $retryOptions, - $message - ) { - $isRetryable = true; - if (!empty($status = $this->getExceptionStatusCode($e)) - && isset($retryOptions['blacklist']) - && in_array($status, $retryOptions['blacklist']) - ) { - $isRetryable = false; - } - if ($isRetryable && $this->attempts < $this->retries) { - sleep((int) pow(1.2, $this->attempts)); - } else { - throw new CredentialsException($message); - } - } - - private function getExceptionStatusCode(\Exception $e) - { - if (method_exists($e, 'getResponse') - && !empty($e->getResponse()) - ) { - return $e->getResponse()->getStatusCode(); - } - return null; - } - - private function createErrorMessage($previous) - { - return "Error retrieving credentials from the instance profile " - . "metadata service. ({$previous})"; - } - - private function decodeResult($response) - { - $result = json_decode($response, true); - - if (json_last_error() > 0) { - throw new InvalidJsonException(); - } - - if ($result['Code'] !== 'Success') { - throw new CredentialsException('Unexpected instance profile ' - . 'response code: ' . $result['Code']); - } - - return $result; - } - - /** - * This functions checks for whether we should fall back to IMDSv1 or not. - * If $ec2MetadataV1Disabled is null then we will try to resolve this value from - * the following sources: - * - From environment: "AWS_EC2_METADATA_V1_DISABLED". - * - From config file: aws_ec2_metadata_v1_disabled - * - Defaulted to false - * - * @return bool - */ - private function shouldFallbackToIMDSv1(): bool - { - $isImdsV1Disabled = \Aws\boolean_value($this->ec2MetadataV1Disabled) - ?? \Aws\boolean_value( - ConfigurationResolver::resolve( - self::CFG_EC2_METADATA_V1_DISABLED, - self::DEFAULT_AWS_EC2_METADATA_V1_DISABLED, - 'bool', - $this->config - ) - ) - ?? self::DEFAULT_AWS_EC2_METADATA_V1_DISABLED; - - return !$isImdsV1Disabled; - } - - /** - * Resolves the metadata service endpoint. If the endpoint is not provided - * or configured then, the default endpoint, based on the endpoint mode resolved, - * will be used. - * Example: if endpoint_mode is resolved to be IPv4 and the endpoint is not provided - * then, the endpoint to be used will be http://169.254.169.254. - * - * @return string - */ - private function resolveEndpoint(): string - { - $endpoint = $this->endpoint; - if (is_null($endpoint)) { - $endpoint = ConfigurationResolver::resolve( - self::CFG_EC2_METADATA_SERVICE_ENDPOINT, - $this->getDefaultEndpoint(), - 'string', - $this->config - ); - } - - if (!$this->isValidEndpoint($endpoint)) { - throw new CredentialsException('The provided URI "' . $endpoint . '" is invalid, or contains an unsupported host'); - } - - if (substr($endpoint, strlen($endpoint) - 1) !== '/') { - $endpoint = $endpoint . '/'; - } - - return $endpoint . 'latest/'; - } - - /** - * Resolves the default metadata service endpoint. - * If endpoint_mode is resolved as IPv4 then: - * - endpoint = http://169.254.169.254 - * If endpoint_mode is resolved as IPv6 then: - * - endpoint = http://[fd00:ec2::254] - * - * @return string - */ - private function getDefaultEndpoint(): string - { - $endpointMode = $this->resolveEndpointMode(); - switch ($endpointMode) { - case self::ENDPOINT_MODE_IPv4: - return self::DEFAULT_METADATA_SERVICE_IPv4_ENDPOINT; - case self::ENDPOINT_MODE_IPv6: - return self::DEFAULT_METADATA_SERVICE_IPv6_ENDPOINT; - } - - throw new CredentialsException("Invalid endpoint mode '$endpointMode' resolved"); - } - - /** - * Resolves the endpoint mode to be considered when resolving the default - * metadata service endpoint. - * - * @return string - */ - private function resolveEndpointMode(): string - { - $endpointMode = $this->endpointMode; - if (is_null($endpointMode)) { - $endpointMode = ConfigurationResolver::resolve( - self::CFG_EC2_METADATA_SERVICE_ENDPOINT_MODE, - self::ENDPOINT_MODE_IPv4, - 'string', - $this->config - ); - } - - return $endpointMode; - } - - /** - * This method checks for whether a provide URI is valid. - * @param string $uri this parameter is the uri to do the validation against to. - * - * @return string|null - */ - private function isValidEndpoint( - $uri - ): bool - { - // We make sure first the provided uri is a valid URL - $isValidURL = filter_var($uri, FILTER_VALIDATE_URL) !== false; - if (!$isValidURL) { - return false; - } - - // We make sure that if is a no secure host then it must be a loop back address. - $parsedUri = parse_url($uri); - if ($parsedUri['scheme'] !== 'https') { - $host = trim($parsedUri['host'], '[]'); - - return CredentialsUtils::isLoopBackAddress(gethostbyname($host)) - || in_array( - $uri, - [self::DEFAULT_METADATA_SERVICE_IPv4_ENDPOINT, self::DEFAULT_METADATA_SERVICE_IPv6_ENDPOINT] - ); - } - - return true; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/LoginCredentialProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/LoginCredentialProvider.php deleted file mode 100644 index 21c188dde..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Credentials/LoginCredentialProvider.php +++ /dev/null @@ -1,527 +0,0 @@ -profileName = $profileName; - $this->client = $this->createSigninClient($profileName, $region); - $this->tokenLocation = $this->resolveTokenLocation($profileName); - } - - /** - * Returns a promise that resolves to AWS credentials - * - * This method loads the cached token, refreshes it if necessary, - * and returns AWS credentials sourced from the access token. - * - * @return Promise\PromiseInterface A promise that resolves to a Credentials object - * @throws CredentialsException If re-authentication is required or credentials cannot be loaded - * @throws SigninException If the token refresh fails with a SigninException - */ - public function __invoke(): Promise\PromiseInterface - { - return Promise\Coroutine::of(function () { - $this->token ??= $this->loadToken(); - $credentials = $this->token[self::KEY_ACCESS_TOKEN]; - - if ($this->shouldRefresh($credentials)) { - try { - $credentials = yield from $this->refresh($credentials); - } catch (CredentialsException $e) { - // For specific re-authentication errors, re-throw - throw $e; - } catch (SigninException $e) { - // For SigninException not handled by refresh(), re-throw - throw new CredentialsException( - 'Unable to refresh login credentials: ' . $e->getAwsErrorMessage(), - $e->getCode(), - $e - ); - } catch (\Exception $e) { - // For other refresh failures, log and continue with existing token - trigger_error( - 'Continuing with existing token after refresh failure: ' . $e->getMessage(), - E_USER_NOTICE - ); - } - } - - yield $credentials; - }); - } - - /** - * Refreshes the access token using the refresh token and returns new credentials, - * or, if refreshed from another source, returns the externally refreshed credentials. - * - * @param Credentials $currentCredentials The current credentials to refresh - * - * @return \Generator Generator that yields and returns refreshed credentials - * @throws CredentialsException If re-authentication is required due to expired or changed credentials - * @throws SigninException If the token refresh fails with a SigninException - * @throws \Exception For unexpected errors during refresh - */ - private function refresh(Credentials $currentCredentials): \Generator - { - // Check for external refresh - if ($refreshedToken = $this->getExternalRefresh($currentCredentials)) { - $this->token = $refreshedToken; - - return $refreshedToken[self::KEY_ACCESS_TOKEN]; - } - - try { - $refreshed = (yield $this->client->createOAuth2TokenAsync([ - self::REQUEST_KEY_TOKEN_INPUT => [ - self::REQUEST_KEY_CLIENT_ID => $this->token[self::REQUEST_KEY_CLIENT_ID], - self::REQUEST_KEY_GRANT_TYPE => self::GRANT_TYPE, - self::REQUEST_KEY_REFRESH_TOKEN => $this->token[self::REQUEST_KEY_REFRESH_TOKEN] - ], - self::KEY_DPOP_KEY => $this->token[self::KEY_DPOP_KEY] - ]))->get(self::RESULT_TOKEN_OUTPUT); - - $newCredentials = self::createCredentials( - $refreshed[self::KEY_ACCESS_TOKEN], - time() + $refreshed[self::RESULT_EXPIRES_IN], - $currentCredentials->getAccountId() - ); - - $this->token[self::KEY_ACCESS_TOKEN] = $newCredentials; - $this->token[self::REQUEST_KEY_REFRESH_TOKEN] = $refreshed[self::REQUEST_KEY_REFRESH_TOKEN]; - } catch (\Exception $e) { - throw $this->handleRefreshException($e); - } - - try { - $this->writeToCache(); - } catch (\JsonException|\RuntimeException $e) { - trigger_error( - 'Failed to update credential cache during refresh: ' . $e->getMessage() - . '. Using refreshed credentials in memory.', - E_USER_NOTICE - ); - } - - return $newCredentials; - } - - /** - * Gets externally refreshed token if token has been refreshed from another source. - * If the new token does not need refreshing, returns it. - * - * @param Credentials $currentCredentials Current credentials to compare against - * @return array|null Returns the updated token array if externally refreshed, null otherwise - */ - private function getExternalRefresh(Credentials $currentCredentials): ?array - { - try { - $latestToken = $this->loadToken(); - $latestCredentials = $latestToken[self::KEY_ACCESS_TOKEN]; - - // Refresh token must be different - if ($latestToken[self::REQUEST_KEY_REFRESH_TOKEN] - === $this->token[self::REQUEST_KEY_REFRESH_TOKEN] - ) { - return null; - } - - // Expiration must be newer - if ($latestCredentials->getExpiration() - <= $currentCredentials->getExpiration() - ) { - return null; - } - - // New token should not need refresh itself - if ($this->shouldRefresh($latestCredentials)) { - return null; - } - - return $latestToken; - } catch (\Exception $e) { - return null; - } - } - - /** - * Writes the updated access token and refresh token to the cache file - * - * @throws \JsonException|\RuntimeException - */ - private function writeToCache(): void - { - $credentials = $this->token[self::KEY_ACCESS_TOKEN]; - $updates = [ - self::KEY_ACCESS_TOKEN => [ - self::KEY_ACCESS_KEY_ID => $credentials->getAccessKeyId(), - self::KEY_SECRET_ACCESS_KEY => $credentials->getSecretKey(), - self::KEY_SESSION_TOKEN => $credentials->getSecurityToken(), - self::KEY_ACCOUNT_ID => $credentials->getAccountId(), - self::KEY_EXPIRES_AT => gmdate('Y-m-d\TH:i:s\Z', $credentials->getExpiration()) - ], - self::REQUEST_KEY_REFRESH_TOKEN => $this->token[self::REQUEST_KEY_REFRESH_TOKEN] - ]; - - $existing = json_decode( - file_get_contents($this->tokenLocation), true, 512, JSON_THROW_ON_ERROR - ); - $merged = array_merge($existing, $updates); - - $result = file_put_contents( - $this->tokenLocation, - json_encode($merged, JSON_THROW_ON_ERROR), - LOCK_EX - ); - - if (!$result) { - throw new \RuntimeException('Failed to write cache file'); - } - } - - /** - * Loads and validates the token from the cache file - * - * @return array The loaded token data with Credentials object, DPoP key, and other fields - * @throws CredentialsException If the cache file is invalid, missing required keys, - * or DPoP key cannot be loaded - */ - private function loadToken(): array - { - try { - $cached = json_decode( - file_get_contents($this->tokenLocation), - true, 512, JSON_THROW_ON_ERROR - ); - } catch (\JsonException $e) { - throw new CredentialsException( - 'Invalid JSON in cache file: ' . $e->getMessage(), - 0, - $e - ); - } - - if (self::hasAllRequiredKeys($cached, self::REQUIRED_CACHE_KEYS) - && self::hasAllRequiredKeys( - $cached[self::KEY_ACCESS_TOKEN] ?? [], - self::REQUIRED_ACCESS_TOKEN_KEYS - ) - ) { - // Convert expiresAt to Unix timestamp - $expiresAt = strtotime($cached[self::KEY_ACCESS_TOKEN][self::KEY_EXPIRES_AT]); - if ($expiresAt === false) { - throw new CredentialsException( - 'Invalid expiration date format in cached token `' - . self::KEY_EXPIRES_AT . '` field.' . self::REAUTHENTICATE_MSG - ); - } - - $cached[self::KEY_ACCESS_TOKEN] = self::createCredentials( - $cached[self::KEY_ACCESS_TOKEN], - $expiresAt, - $cached[self::KEY_ACCESS_TOKEN][self::KEY_ACCOUNT_ID] - ); - - // Load DPoP key - $cached[self::KEY_DPOP_KEY] = openssl_pkey_get_private($cached[self::KEY_DPOP_KEY]); - if ($cached[self::KEY_DPOP_KEY] === false) { - $error = openssl_error_string(); - throw new CredentialsException( - 'Failed to load DPoP private key from cached token for profile ' - . "{$this->profileName}: " . ($error ? ": {$error}" : '.') - . self::REAUTHENTICATE_MSG - ); - } - - return $cached; - } - - throw new CredentialsException( - 'Missing required keys in cached token for profile ' - . $this->profileName . '.' . self::REAUTHENTICATE_MSG - ); - } - - /** - * @param Credentials $credentials The credentials to check for expiration - * - * @return bool True if the token expires within the refresh threshold - */ - private function shouldRefresh(Credentials $credentials): bool - { - return ($credentials->getExpiration() - time()) <= self::DEFAULT_REFRESH_THRESHOLD; - } - - /** - * Handles exceptions thrown during token refresh - * - * @param \Exception $e The exception thrown during refresh - * - * @return \Exception The exception to be thrown (either transformed or original) - */ - private function handleRefreshException(\Exception $e): \Exception - { - if ($e instanceof SigninException) { - trigger_error( - 'Failed to refresh login credentials: ' . $e->getAwsErrorMessage(), - E_USER_NOTICE - ); - - if ($e->getAwsErrorCode() === 'AccessDeniedException') { - $error = strtolower($e->get('error')); - switch ($error) { - case 'token_expired': - return new CredentialsException( - 'Your session has expired.' . self::REAUTHENTICATE_MSG, - 0, - $e - ); - case 'user_credentials_changed': - return new CredentialsException( - 'Unable to refresh credentials because of a change in your password. ' - . 'Please reauthenticate with your new password.', - 0, - $e - ); - case 'insufficient_permissions': - return new CredentialsException( - 'Unable to refresh credentials due to insufficient permissions. ' - . 'You may be missing permission for the `CreateOAuth2Token` action.', - 0, - $e - ); - } - } - - return $e; - } - - // For all other exceptions - trigger_error( - 'Unexpected error refreshing login credentials: ' . $e->getMessage(), - E_USER_NOTICE - ); - - return $e; - } - - /** - * Resolves the cache file location for the given profile - * - * @param string $profileName The profile name to resolve the token location for - * - * @return string The full path to the cache file - * @throws CredentialsException If the profile doesn't exist, lacks login_session, - * or cache file is not readable - */ - private function resolveTokenLocation(string $profileName): string - { - $configFile = CredentialProvider::getConfigFileName(); - if (!is_readable($configFile)) { - throw new CredentialsException( - 'Unable to load configuration file at ' . $configFile - . '. Please ensure the file exists at the specified location.' - ); - } - - // Ensure profile and session are set - $profiles = CredentialProvider::loadProfiles($configFile); - if ($profileName === self::PROFILE_DEFAULT) { - $profileData = $profiles[self::PROFILE_DEFAULT] ?? null; - } elseif (str_starts_with($profileName, self::PROFILE_SECONDARY)) { - $profileData = $profiles[$profileName] ?? null; - } else { - // Try without prefix first, then with prefix - $profileData = $profiles[$profileName] - ?? $profiles[self::PROFILE_SECONDARY . $profileName] - ?? null; - } - - if (!$profileData) { - throw new CredentialsException( - "Profile '{$profileName}' does not exist. " - . "Please ensure the specified profile is set at {$configFile}." - ); - } - - if (empty($session = $profileData[self::KEY_PROFILE_LOGIN_SESSION] ?? null)) { - throw new CredentialsException( - "Profile '{$profileName}' did not contain a " - . self::KEY_PROFILE_LOGIN_SESSION . " value. " - . 're-authentication using `aws login` may be needed.' - ); - } - - // Resolve location and ensure it exists - $cacheDirectory = getenv(self::ENV_CACHE_DIRECTORY) - ?: CredentialProvider::getHomeDir() . self::DEFAULT_CACHE_DIRECTORY; - $cacheFile = $cacheDirectory . DIRECTORY_SEPARATOR . hash('sha256', trim($session)) . '.json'; - if (!@is_readable($cacheFile)) { - throw new CredentialsException( - "Failed to load cached credentials for profile " - . "'{$profileName}'." . self::REAUTHENTICATE_MSG - ); - } - - return $cacheFile; - } - - /** - * Creates a SigninClient configured for DPoP authentication - * - * @param string $profile - * @param string|null $region The AWS region for the Signin service - * - * @return SigninClient A configured SigninClient instance with DPoP signature version - */ - private function createSigninClient(string $profile, ?string $region): SigninClient - { - $resolvedRegion = $region - ?? ConfigurationResolver::env(self::KEY_CLIENT_REGION) - ?? ConfigurationResolver::ini(self::KEY_CLIENT_REGION, 'string', $profile) - ?? ConfigurationResolver::ini( - self::KEY_CLIENT_REGION, - 'string', - self::PROFILE_SECONDARY . $profile - ); - - if (empty($resolvedRegion)) { - throw new CredentialsException( - 'Unable to determine region for the Sign-In service client ' - . ' used for refreshing Login credentials. You can provide a region in-code ' - . 'when constructing the provider, by setting the AWS_REGION environment variable' - . ', or by setting a `region` in your specified profile.' - ); - } - - return new SigninClient([ - self::KEY_CLIENT_REGION => $resolvedRegion, - self::KEY_CLIENT_SIGNATURE_VERSION => self::CLIENT_SIGNATURE_DPOP, - self::KEY_CLIENT_CREDENTIALS => false - ]); - } - - /** - * Creates a Credentials object from token data - * - * @param array $tokenData The token data containing access key, secret, and session token - * @param int $expiration Unix timestamp for credential expiration - * @param string $accountId The AWS account ID - * - * @return Credentials The created Credentials object - */ - private static function createCredentials( - array $tokenData, - int $expiration, - string $accountId - ): Credentials - { - return new Credentials( - $tokenData[self::KEY_ACCESS_KEY_ID], - $tokenData[self::KEY_SECRET_ACCESS_KEY], - $tokenData[self::KEY_SESSION_TOKEN], - $expiration, - $accountId, - CredentialSources::PROFILE_LOGIN - ); - } - - /** - * Checks if all required keys are present and non-empty in the data array - * - * @param array $data The data array to check - * @param array $requiredKeys The list of keys that must be present and non-empty - * - * @return bool True if all required keys are present and non-empty, false otherwise - */ - private static function hasAllRequiredKeys( - array $data, - array $requiredKeys - ): bool - { - foreach ($requiredKeys as $key) { - if (empty($data[$key])) { - return false; - } - } - - return true; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AbstractCryptoClient.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AbstractCryptoClient.php deleted file mode 100644 index 823467b78..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AbstractCryptoClient.php +++ /dev/null @@ -1,121 +0,0 @@ -stream = $cipherText; - $this->key = $key; - $this->cipherMethod = clone $cipherMethod; - } - - public function getOpenSslName() - { - return $this->cipherMethod->getOpenSslName(); - } - - public function getAesName() - { - return $this->cipherMethod->getAesName(); - } - - public function getCurrentIv() - { - return $this->cipherMethod->getCurrentIv(); - } - - public function getSize(): ?int - { - $plainTextSize = $this->stream->getSize(); - - if ($this->cipherMethod->requiresPadding()) { - // PKCS7 padding requires that between 1 and self::BLOCK_SIZE be - // added to the plaintext to make it an even number of blocks. The - // plaintext is between strlen($cipherText) - self::BLOCK_SIZE and - // strlen($cipherText) - 1 - return null; - } - - return $plainTextSize; - } - - public function isWritable(): bool - { - return false; - } - - public function read($length): string - { - if ($length > strlen($this->buffer)) { - $this->buffer .= $this->decryptBlock( - (int) ( - self::BLOCK_SIZE * ceil(($length - strlen($this->buffer)) / self::BLOCK_SIZE) - ) - ); - } - - $data = substr($this->buffer, 0, $length); - $this->buffer = substr($this->buffer, $length); - - return $data ? $data : ''; - } - - public function seek($offset, $whence = SEEK_SET): void - { - if ($offset === 0 && $whence === SEEK_SET) { - $this->buffer = ''; - $this->cipherMethod->seek(0, SEEK_SET); - $this->stream->seek(0, SEEK_SET); - } else { - throw new LogicException('AES encryption streams only support being' - . ' rewound, not arbitrary seeking.'); - } - } - - private function decryptBlock($length) - { - if ($this->stream->eof()) { - return ''; - } - - $cipherText = ''; - do { - $cipherText .= $this->stream->read((int) ($length - strlen($cipherText))); - } while (strlen($cipherText) < $length && !$this->stream->eof()); - - $options = OPENSSL_RAW_DATA; - if (!$this->stream->eof() - && $this->stream->getSize() !== $this->stream->tell() - ) { - $options |= OPENSSL_ZERO_PADDING; - } - - $plaintext = openssl_decrypt( - $cipherText, - $this->cipherMethod->getOpenSslName(), - $this->key, - $options, - $this->cipherMethod->getCurrentIv() - ); - - $this->cipherMethod->update($cipherText); - - return $plaintext; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesEncryptingStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesEncryptingStream.php deleted file mode 100644 index 2cb5ab696..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesEncryptingStream.php +++ /dev/null @@ -1,151 +0,0 @@ -stream = $plainText; - $this->key = $key; - $this->cipherMethod = clone $cipherMethod; - } - - public function getOpenSslName() - { - return $this->cipherMethod->getOpenSslName(); - } - - public function getAesName() - { - return $this->cipherMethod->getAesName(); - } - - public function getCurrentIv() - { - return $this->cipherMethod->getCurrentIv(); - } - - public function getSize(): ?int - { - $plainTextSize = $this->stream->getSize(); - - if ($this->cipherMethod->requiresPadding() && $plainTextSize !== null) { - // PKCS7 padding requires that between 1 and self::BLOCK_SIZE be - // added to the plaintext to make it an even number of blocks. - $padding = self::BLOCK_SIZE - $plainTextSize % self::BLOCK_SIZE; - return $plainTextSize + $padding; - } - - return $plainTextSize; - } - - public function isWritable(): bool - { - return false; - } - - public function read($length): string - { - if ($length > strlen($this->buffer)) { - $this->buffer .= $this->encryptBlock( - (int) - self::BLOCK_SIZE * ceil(($length - strlen($this->buffer)) / self::BLOCK_SIZE) - ); - } - - $data = substr($this->buffer, 0, $length); - $this->buffer = substr($this->buffer, $length); - - return $data ? $data : ''; - } - - public function seek($offset, $whence = SEEK_SET): void - { - if ($whence === SEEK_CUR) { - $offset = $this->tell() + $offset; - $whence = SEEK_SET; - } - - if ($whence === SEEK_SET) { - $this->buffer = ''; - $wholeBlockOffset - = (int) ($offset / self::BLOCK_SIZE) * self::BLOCK_SIZE; - $this->stream->seek($wholeBlockOffset); - $this->cipherMethod->seek($wholeBlockOffset); - $this->read($offset - $wholeBlockOffset); - } else { - throw new LogicException('Unrecognized whence.'); - } - } - - private function encryptBlock($length) - { - if ($this->stream->eof()) { - return ''; - } - - $plainText = ''; - do { - $plainText .= $this->stream->read((int) ($length - strlen($plainText))); - } while (strlen($plainText) < $length && !$this->stream->eof()); - - $options = OPENSSL_RAW_DATA; - if (!$this->stream->eof() - || $this->stream->getSize() !== $this->stream->tell() - ) { - $options |= OPENSSL_ZERO_PADDING; - } - - $cipherText = openssl_encrypt( - $plainText, - $this->cipherMethod->getOpenSslName(), - $this->key, - $options, - $this->cipherMethod->getCurrentIv() - ); - - $this->cipherMethod->update($cipherText); - - return $cipherText; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesGcmDecryptingStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesGcmDecryptingStream.php deleted file mode 100644 index b5d4ea197..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesGcmDecryptingStream.php +++ /dev/null @@ -1,109 +0,0 @@ -cipherText = $cipherText; - $this->key = $key; - $this->initializationVector = $initializationVector; - $this->tag = $tag; - $this->aad = $aad; - $this->tagLength = $tagLength; - $this->keySize = $keySize; - // unsetting the property forces the first access to go through - // __get(). - unset($this->stream); - } - - public function getOpenSslName() - { - return "aes-{$this->keySize}-gcm"; - } - - public function getAesName() - { - return 'AES/GCM/NoPadding'; - } - - public function getCurrentIv() - { - return $this->initializationVector; - } - - public function createStream() - { - if (strlen($this->tag) !== 16) { - throw new CryptoException( - 'Unsupported GCM tag length; only 128-bit tags are supported.' - ); - } - - $result = \openssl_decrypt( - (string)$this->cipherText, - $this->getOpenSslName(), - $this->key, - OPENSSL_RAW_DATA, - $this->initializationVector, - $this->tag, - $this->aad - ); - if ($result === false) { - throw new CryptoException('The requested object could not be ' - . 'decrypted due to an invalid authentication tag.'); - } - return Psr7\Utils::streamFor($result); - - } - - public function isWritable(): bool - { - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php deleted file mode 100644 index ab2e5fad1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php +++ /dev/null @@ -1,119 +0,0 @@ -plaintext = $plaintext; - $this->key = $key; - $this->initializationVector = $initializationVector; - $this->aad = $aad; - $this->tagLength = $tagLength; - $this->keySize = $keySize; - // unsetting the property forces the first access to go through - // __get(). - unset($this->stream); - } - - public function getOpenSslName() - { - return "aes-{$this->keySize}-gcm"; - } - - /** - * Same as static method and retained for backwards compatibility - * - * @return string - */ - public function getAesName() - { - return self::getStaticAesName(); - } - - public function getCurrentIv() - { - return $this->initializationVector; - } - - public function createStream() - { - return Psr7\Utils::streamFor(\openssl_encrypt( - (string)$this->plaintext, - $this->getOpenSslName(), - $this->key, - OPENSSL_RAW_DATA, - $this->initializationVector, - $this->tag, - $this->aad, - $this->tagLength - )); - } - - /** - * @return string - */ - public function getTag() - { - return $this->tag; - } - - public function isWritable(): bool - { - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesStreamInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesStreamInterface.php deleted file mode 100644 index ce7b85d7e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/AesStreamInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -value; - } - - public function isLegacy(): bool - { - return match ($this) { - self::ALG_AES_256_CBC_IV16_NO_KDF => true, - default => false, - }; - } - - public function isKeyCommitting(): bool - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => true, - default => false, - }; - } - - public function getDataKeyAlgorithm(): string - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF, - self::ALG_AES_256_CBC_IV16_NO_KDF => "AES", - }; - } - - public function getDataKeyLengthBits(): string - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF, - self::ALG_AES_256_CBC_IV16_NO_KDF => "256", - }; - } - - public function getCipherName(): string - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => "gcm", - self::ALG_AES_256_CBC_IV16_NO_KDF => "cbc", - }; - } - - public function getCipherBlockSizeBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF, - self::ALG_AES_256_CBC_IV16_NO_KDF => 128, - }; - } - - public function getCipherBlockSizeBytes(): int - { - return $this->getCipherBlockSizeBits() / 8; - } - - public function getIvLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => 96, - self::ALG_AES_256_CBC_IV16_NO_KDF => 128, - }; - } - - public function getIvLengthBytes(): int - { - return $this->getIvLengthBits() / 8; - } - - public function getCipherTagLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => 128, - self::ALG_AES_256_CBC_IV16_NO_KDF => 0, - }; - } - - public function getCipherTagLengthInBytes(): int - { - return $this->getCipherTagLengthBits() / 8; - } - - public function getCipherMaxContentLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => AlgorithmConstants::GCM_MAX_CONTENT_LENGTH_BITS, - self::ALG_AES_256_CBC_IV16_NO_KDF => AlgorithmConstants::CBC_MAX_CONTENT_LENGTH_BYTES, - }; - } - - public function getCipherMaxContentLengthBytes(): int - { - return $this->getCipherMaxContentLengthBits() / 8; - } - - public function getHashingAlgorithm(): string - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => "sha512", - default => "", - }; - } - - public function getDerivationInputKeyLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256, - default => 0, - }; - } - - public function getDerivationInputKeyLengthBytes(): int - { - return $this->getDerivationInputKeyLengthBits() / 8; - } - - public function getDerivationOutputKeyLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256, - default => 0, - }; - } - - public function getDerivationOutputKeyLengthBytes(): int - { - return $this->getDerivationOutputKeyLengthBits() / 8; - } - - public function getCommitmentInputKeyLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256, - default => 0, - }; - } - - public function getCommitmentInputKeyLengthBytes(): int - { - return $this->getCommitmentInputKeyLengthBits() / 8; - } - - public function getCommitmentOutputKeyLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 224, - default => 0, - }; - } - - public function getCommitmentOutputKeyLengthBytes(): int - { - return $this->getCommitmentOutputKeyLengthBits() / 8; - } - - public function getKeyCommitmentSaltLengthBits(): int - { - return match ($this) { - self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 224, - default => 0, - }; - } - - //= ../specification/s3-encryption/client.md#key-commitment - //# The S3EC MUST validate the configured Encryption Algorithm against the provided key commitment policy. - public static function validateCommitmentPolicyOnEncrypt( - array $cipherOptions, - string $keyCommitmentPolicy - ): self { - $cipherOptions['Cipher'] = strtolower($cipherOptions['Cipher']); - //= ../specification/s3-encryption/client.md#encryption-algorithm - //# The S3EC MUST validate that the configured encryption algorithm is not legacy. - if (!S3EncryptionClientV3::isSupportedCipher($cipherOptions['Cipher'])) { - //= ../specification/s3-encryption/client.md#encryption-algorithm - //# If the configured encryption algorithm is legacy, then the S3EC MUST throw an exception. - throw new \InvalidArgumentException('The cipher requested is not' - . ' supported by the SDK.'); - } - - if (empty($cipherOptions['KeySize'])) { - $cipherOptions['KeySize'] = 256; - } - - if (!is_int($cipherOptions['KeySize'])) { - throw new \InvalidArgumentException('The cipher "KeySize" must be' - . ' an integer.'); - } - - if (!MaterialsProviderV3::isSupportedKeySize($cipherOptions['KeySize'])) { - throw new \InvalidArgumentException('The cipher "KeySize" requested' - . ' is not supported by AES (256).'); - } - - //= ../specification/s3-encryption/key-commitment.md#commitment-policy - //# When the commitment policy is FORBID_ENCRYPT_ALLOW_DECRYPT, the S3EC MUST NOT encrypt using an algorithm suite which supports key commitment. - if ($keyCommitmentPolicy === 'FORBID_ENCRYPT_ALLOW_DECRYPT') { - return self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF; - } else { - //= ../specification/s3-encryption/key-commitment.md#commitment-policy - //# When the commitment policy is REQUIRE_ENCRYPT_ALLOW_DECRYPT, the S3EC MUST only encrypt using an algorithm suite which supports key commitment. - - //= ../specification/s3-encryption/key-commitment.md#commitment-policy - //# When the commitment policy is REQUIRE_ENCRYPT_REQUIRE_DECRYPT, the S3EC MUST only encrypt using an algorithm suite which supports key commitment. - return self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php deleted file mode 100644 index 926f87c82..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php +++ /dev/null @@ -1,88 +0,0 @@ -baseIv = $this->iv = $iv; - $this->keySize = $keySize; - - if (strlen($iv) !== openssl_cipher_iv_length($this->getOpenSslName())) { - throw new InvalidArgumentException('Invalid initialization vector'); - } - } - - public function getOpenSslName() - { - return "aes-{$this->keySize}-cbc"; - } - - public function getAesName() - { - return 'AES/CBC/PKCS5Padding'; - } - - public function getCurrentIv() - { - return $this->iv; - } - - public function requiresPadding() - { - return true; - } - - public function seek($offset, $whence = SEEK_SET) - { - if ($offset === 0 && $whence === SEEK_SET) { - $this->iv = $this->baseIv; - } else { - throw new LogicException('CBC initialization only support being' - . ' rewound, not arbitrary seeking.'); - } - } - - public function update($cipherTextBlock) - { - $this->iv = substr($cipherTextBlock, self::BLOCK_SIZE * -1); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php deleted file mode 100644 index ed9feb9a5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php +++ /dev/null @@ -1,72 +0,0 @@ -decryptCek( - base64_decode( - $envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] - ), - json_decode( - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER], - true - ) - ); - $cipherOptions['KeySize'] = strlen($cek) * 8; - $cipherOptions['Cipher'] = $this->getCipherFromAesName( - $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] - ); - - $decryptionStream = $this->getDecryptingStream( - $cipherText, - $cek, - $cipherOptions - ); - unset($cek); - - return $decryptionStream; - } - - private function getTagFromCiphertextStream( - StreamInterface $cipherText, - $tagLength - ) { - $cipherTextSize = $cipherText->getSize(); - if ($cipherTextSize == null || $cipherTextSize <= 0) { - throw new \RuntimeException('Cannot decrypt a stream of unknown' - . ' size.'); - } - return (string) new LimitStream( - $cipherText, - $tagLength, - $cipherTextSize - $tagLength - ); - } - - private function getStrippedCiphertextStream( - StreamInterface $cipherText, - $tagLength - ) { - $cipherTextSize = $cipherText->getSize(); - if ($cipherTextSize == null || $cipherTextSize <= 0) { - throw new \RuntimeException('Cannot decrypt a stream of unknown' - . ' size.'); - } - return new LimitStream( - $cipherText, - $cipherTextSize - $tagLength, - 0 - ); - } - - /** - * Generates a stream that wraps the cipher text with the proper cipher and - * uses the content encryption key (CEK) to decrypt the data when read. - * - * @param string $cipherText Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * - * @return AesStreamInterface - * - * @internal - */ - protected function getDecryptingStream( - $cipherText, - $cek, - $cipherOptions - ) { - $cipherTextStream = Psr7\Utils::streamFor($cipherText); - switch ($cipherOptions['Cipher']) { - case 'gcm': - $cipherOptions['Tag'] = $this->getTagFromCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ); - - return new AesGcmDecryptingStream( - $this->getStrippedCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ), - $cek, - $cipherOptions['Iv'], - $cipherOptions['Tag'], - $cipherOptions['Aad'] = isset($cipherOptions['Aad']) - ? $cipherOptions['Aad'] - : '', - $cipherOptions['TagLength'] ?: null, - $cipherOptions['KeySize'] - ); - default: - $cipherMethod = $this->buildCipherMethod( - $cipherOptions['Cipher'], - $cipherOptions['Iv'], - $cipherOptions['KeySize'] - ); - return new AesDecryptingStream( - $cipherTextStream, - $cek, - $cipherMethod - ); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV2.php deleted file mode 100644 index 6e6d26e1f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV2.php +++ /dev/null @@ -1,442 +0,0 @@ -getKeyCommitmentPolicy($options); - unset($options['@CommitmentPolicy']); - if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) { - if ($commitmentPolicy !== "FORBID_ENCRYPT_ALLOW_DECRYPT") { - throw new CryptoException( - "The requested item is encrypted" - . " with Key Commitment. The current policy {$commitmentPolicy}" - . " conflicts with the object metadata. Select an appropriate" - . " '@CommitmentPolicy' to decrypt this item." - ); - } - $algorithmSuite = AlgorithmSuite::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY; - $options['@CipherOptions'] = $options['@CipherOptions'] ?? []; - $options['@CipherOptions']['Iv'] = str_repeat("\1", 12); - $options['@CipherOptions']['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes(); - $materialDescription = $this->decodeMaterialsDescription( - $envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3] - ); - - - $cek = $provider->decryptCek( - base64_decode($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]), - $materialDescription, - $options - ); - - $options['@CipherOptions']['KeySize'] = strlen($cek) * 8; - $options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName( - $this->numericalContenCipherToAesName($envelope) - ); - $this->validateOptionsAndEnvelope($options, $envelope); - - $messageId = base64_decode($envelope[MetadataEnvelope::MESSAGE_ID_V3]); - $commitmentKey = base64_decode($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]); - - if (strlen($messageId) !== ($algorithmSuite->getKeyCommitmentSaltLengthBits()) / 8) { - throw new CryptoException("Invalid MessageId length found in object envelope."); - } - - if (strlen($commitmentKey) !== $algorithmSuite->getCommitmentOutputKeyLengthBytes()) { - throw new CryptoException("Invalid Commitment Key length found in object envelope."); - } - - $decryptionStream = $this->getCommitingDecryptingStream( - $cipherText, - $cek, - $options['@CipherOptions'], - $messageId, - $commitmentKey, - $algorithmSuite - ); - unset($cek); - - return $decryptionStream; - } else { - $options['@CipherOptions'] = $options['@CipherOptions'] ?? []; - $options['@CipherOptions']['Iv'] = base64_decode( - $envelope[MetadataEnvelope::IV_HEADER] - ); - - $options['@CipherOptions']['TagLength'] = - $envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] / 8; - - $cek = $provider->decryptCek( - base64_decode( - $envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] - ), - $this->decodeMaterialsDescription( - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] - ), - $options - ); - $options['@CipherOptions']['KeySize'] = strlen($cek) * 8; - $options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName( - $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] - ); - - $this->validateOptionsAndEnvelope($options, $envelope); - - $decryptionStream = $this->getDecryptingStream( - $cipherText, - $cek, - $options['@CipherOptions'] - ); - unset($cek); - - return $decryptionStream; - } - } - - // Decodes the material description, rejecting a malformed value. - private function decodeMaterialsDescription($materialsDescription): array - { - if (!is_string($materialsDescription)) { - throw new CryptoException('Unable to decode the material description.'); - } - - $decoded = json_decode($materialsDescription, true); - if (json_last_error() !== JSON_ERROR_NONE) { - throw new CryptoException( - 'Unable to decode the material description: ' . json_last_error_msg() - ); - } - if (!is_array($decoded)) { - throw new CryptoException('Unable to decode the material description.'); - } - - return $decoded; - } - - private function buildMaterialDescription( - MetadataEnvelope $envelope - ): array - { - switch ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) { - case 12: - return ['aws:x-amz-cek-alg' => '115']; - default: - throw new CryptoException( - "Unknown Encrypted Data Key " - . "wrapping algorithm found: " - . "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}" - ); - } - } - - private function numericalContenCipherToAesName( - MetadataEnvelope $envelope - ): string - { - switch ($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) { - case 115: - return 'AES/GCM/NoPadding'; - default: - throw new CryptoException( - "Unknown Encrypted Data Key " - . "wrapping algorithm found: " - . "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}" - ); - } - - } - - private function getTagFromCiphertextStream( - StreamInterface $cipherText, - $tagLength - ) - { - $cipherTextSize = $cipherText->getSize(); - if ($cipherTextSize == null || $cipherTextSize <= 0) { - throw new \RuntimeException('Cannot decrypt a stream of unknown' - . ' size.'); - } - return (string) new LimitStream( - $cipherText, - $tagLength, - $cipherTextSize - $tagLength - ); - } - - private function getStrippedCiphertextStream( - StreamInterface $cipherText, - $tagLength - ) - { - $cipherTextSize = $cipherText->getSize(); - if ($cipherTextSize == null || $cipherTextSize <= 0) { - throw new \RuntimeException('Cannot decrypt a stream of unknown' - . ' size.'); - } - return new LimitStream( - $cipherText, - $cipherTextSize - $tagLength, - 0 - ); - } - - private function validateOptionsAndEnvelope($options, $envelope): void - { - $allowedCiphers = AbstractCryptoClientV2::$supportedCiphers; - $allowedKeywraps = AbstractCryptoClientV2::$supportedKeyWraps; - if ($options['@SecurityProfile'] == 'V2_AND_LEGACY') { - $allowedCiphers = array_unique(array_merge( - $allowedCiphers, - AbstractCryptoClient::$supportedCiphers - )); - $allowedKeywraps = array_unique(array_merge( - $allowedKeywraps, - AbstractCryptoClient::$supportedKeyWraps - )); - } - - $v1SchemaException = new CryptoException("The requested object is encrypted" - . " with V1 encryption schemas that have been disabled by" - . " client configuration @SecurityProfile=V2. Retry with" - . " V2_AND_LEGACY enabled or reencrypt the object."); - - if (!in_array($options['@CipherOptions']['Cipher'], $allowedCiphers)) { - if (in_array($options['@CipherOptions']['Cipher'], AbstractCryptoClient::$supportedCiphers)) { - throw $v1SchemaException; - } - throw new CryptoException("The requested object is encrypted with" - . " the cipher '{$options['@CipherOptions']['Cipher']}', which is not" - . " supported for decryption with the selected security profile." - . " This profile allows decryption with: " - . implode(", ", $allowedCiphers)); - } - - if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) { - if ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] !== '12') { - throw new CryptoException("The requested object is encrypted with" - . " the keywrap schema '{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}'," - . " which is not supported for decryption with the current security" - . " profile."); - } - } else { - if (!in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], $allowedKeywraps)) { - if (in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], AbstractCryptoClient::$supportedKeyWraps)) { - throw $v1SchemaException; - } - - throw new CryptoException("The requested object is encrypted with" - . " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}'," - . " which is not supported for decryption with the current security" - . " profile."); - } - $matdesc = json_decode( - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER], - true - ); - if (isset($matdesc['aws:x-amz-cek-alg']) - && ($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] - !== $matdesc['aws:x-amz-cek-alg']) - ) { - throw new CryptoException("There is a mismatch in specified content" - . " encryption algrithm between the materials description value" - . " and the metadata envelope value: {$matdesc['aws:x-amz-cek-alg']}" - . " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}."); - } - } - } - - /** - * Generates a stream that wraps the cipher text with the proper cipher and - * uses the content encryption key (CEK) to decrypt the data when read. - * - * @param string $cipherText Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * - * @return AesStreamInterface - * - * @internal - */ - protected function getDecryptingStream( - $cipherText, - $cek, - $cipherOptions - ) - { - $cipherTextStream = Psr7\Utils::streamFor($cipherText); - switch ($cipherOptions['Cipher']) { - case 'gcm': - $cipherOptions['Tag'] = $this->getTagFromCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ); - - return new AesGcmDecryptingStream( - $this->getStrippedCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ), - $cek, - $cipherOptions['Iv'], - $cipherOptions['Tag'], - $cipherOptions['Aad'] = $cipherOptions['Aad'] ?? '', - $cipherOptions['TagLength'] ?: null, - $cipherOptions['KeySize'] - ); - default: - $cipherMethod = $this->buildCipherMethod( - $cipherOptions['Cipher'], - $cipherOptions['Iv'], - $cipherOptions['KeySize'] - ); - return new AesDecryptingStream( - $cipherTextStream, - $cek, - $cipherMethod - ); - } - } - - /** - * Generates a stream that wraps the cipher text with the proper cipher and - * uses the content encryption key (CEK) to derive both a derived content encryption key - * and a commitment key to decrypt the data when read. - * - * @param string $cipherText Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * @param string $messageId a string value used to calculate both a commitment - * key and derived content encryption key - * @param string $commitmentKey a string value to compare with the calculated commitment - * key value, if the values don't match an exception is raised. - * - * @return AesStreamInterface | CryptoException - * - * @internal - */ - protected function getCommitingDecryptingStream( - string $cipherText, - string $cek, - array $cipherOptions, - string $messageId, - string $commitmentKey, - AlgorithmSuite $algorithmSuite - ): AesStreamInterface|CryptoException - { - $algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId()); - $derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY"; - $commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY"; - $derivedEncryptionKey = hash_hkdf( - $algorithmSuite->getHashingAlgorithm(), - $cek, - $algorithmSuite->getDerivationOutputKeyLengthBytes(), - $derivedEncryptionKeyInfo, - $messageId - ); - $calculatedCommitmentKey = hash_hkdf( - $algorithmSuite->getHashingAlgorithm(), - $cek, - $algorithmSuite->getCommitmentOutputKeyLengthBytes(), - $commitmentKeyInfo, - $messageId - ); - - if ($commitmentKey != $calculatedCommitmentKey) { - throw new CryptoException("Calculated commitment key does " - . "not match expected commitment key value "); - } - - $cipherTextStream = Psr7\Utils::streamFor($cipherText); - switch ($cipherOptions['Cipher']) { - case 'gcm': - $cipherOptions['Tag'] = $this->getTagFromCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ); - $cipherOptions['Aad'] = isset($cipherOptions['Aad']) - ? $cipherOptions['Aad'] . $algorithmSuiteIdAsBytes - : $algorithmSuiteIdAsBytes; - - return new AesGcmDecryptingStream( - $this->getStrippedCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ), - $derivedEncryptionKey, - $cipherOptions['Iv'], - $cipherOptions['Tag'], - $cipherOptions['Aad'], - $cipherOptions['TagLength'] ?: null, - $cipherOptions['KeySize'] - ); - default: - throw new CryptoException("Unsupported Cipher used for key commitment messages." - . " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported."); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV3.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV3.php deleted file mode 100644 index 3da0d067c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV3.php +++ /dev/null @@ -1,548 +0,0 @@ -checkEnvelopeForExclusiveMapKeys( - $envelope, - MetadataEnvelope::getV2Fields(), - "Expected V3 only fields but found V2 fields in header metadata." - ); - // PHP only supports one commiting algorithm suite - $algorithmSuite = AlgorithmSuite::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY; - $options['@CipherOptions'] = $options['@CipherOptions'] ?? []; - $options['@CipherOptions']['Iv'] = str_repeat("\1", 12); - $options['@CipherOptions']['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes(); - - //= ../specification/s3-encryption/data-format/content-metadata.md#v3-only - //= type=implication - //# - The wrapping algorithm value "12" MUST be translated to kms+context upon retrieval, and vice versa on write. - $materialDescription = $this->buildMaterialDescription($envelope); - - $cek = $provider->decryptCek( - base64_decode($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]), - $materialDescription, - $options - ); - - $options['@CipherOptions']['KeySize'] = strlen($cek) * 8; - $options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName( - $this->numericalContenCipherToAesName($envelope) - ); - $this->validateOptionsAndEnvelope($options, $envelope, $commitmentPolicy); - - $messageId = base64_decode($envelope[MetadataEnvelope::MESSAGE_ID_V3]); - $commitmentKey = base64_decode($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]); - - if (strlen($messageId) !== ($algorithmSuite->getKeyCommitmentSaltLengthBits()) / 8) { - throw new CryptoException("Invalid MessageId length found in object envelope."); - } - - if (strlen($commitmentKey) !== $algorithmSuite->getCommitmentOutputKeyLengthBytes()) { - throw new CryptoException("Invalid Commitment Key length found in object envelope."); - } - - $decryptionStream = $this->getCommitingDecryptingStream( - $cipherText, - $cek, - $options['@CipherOptions'], - $messageId, - $commitmentKey, - $algorithmSuite - ); - unset($cek); - - return $decryptionStream; - } else { - //= ../specification/s3-encryption/key-commitment.md#commitment-policy - //# When the commitment policy is REQUIRE_ENCRYPT_REQUIRE_DECRYPT, - //# the S3EC MUST NOT allow decryption using algorithm suites which do not support key commitment. - if ($commitmentPolicy == "REQUIRE_ENCRYPT_REQUIRE_DECRYPT") { - //= ../specification/s3-encryption/client.md#key-commitment - //# If the configured Encryption Algorithm is incompatible with - //# the key commitment policy, then it MUST throw an exception. - throw new CryptoException("Message is encrypted with a " - . "non commiting algorithm but commitment policy is set " - . "to {$commitmentPolicy}. Select a valid commitment " - . "policy to decrypt this object. "); - } - $this->checkEnvelopeForExclusiveMapKeys( - $envelope, - MetadataEnvelope::getV3Fields(), - "Expected V2 only fields but found V3 fields in header metadata." - ); - $options['@CipherOptions'] = $options['@CipherOptions'] ?? []; - $options['@CipherOptions']['Iv'] = base64_decode( - $envelope[MetadataEnvelope::IV_HEADER] - ); - - $options['@CipherOptions']['TagLength'] = - $envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] / 8; - - $cek = $provider->decryptCek( - base64_decode( - $envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] - ), - $this->decodeMaterialsDescription( - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] - ), - $options - ); - $options['@CipherOptions']['KeySize'] = strlen($cek) * 8; - $options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName( - $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] - ); - - //= ../specification/s3-encryption/decryption.md#key-commitment - //= type=implication - //# The S3EC MUST validate the algorithm suite used for decryption - //# against the key commitment policy before attempting to decrypt - //# the content ciphertext. - $this->validateOptionsAndEnvelope($options, $envelope, $commitmentPolicy); - - $decryptionStream = $this->getNonCommitingDecryptingStream( - $cipherText, - $cek, - $options['@CipherOptions'] - ); - unset($cek); - - return $decryptionStream; - } - } - - private function checkEnvelopeForExclusiveMapKeys( - MetadataEnvelope $envelope, - array $exclusiveKeys, - string $errorMessage - ): void - { - foreach ($exclusiveKeys as $exclusiveKey) { - //= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status - //# If there are multiple mapkeys which are meant to be exclusive, such as "x-amz-key", "x-amz-key-v2", and "x-amz-3" then the S3EC SHOULD throw an exception. - if (isset($envelope[$exclusiveKey])) { - throw new CryptoException($errorMessage); - } - } - } - - private function numericalContenCipherToAesName( - MetadataEnvelope $envelope - ): string - { - switch ($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) { - case 115: - return 'AES/GCM/NoPadding'; - default: - throw new CryptoException( - "Unknown Encrypted Data Key " - . "wrapping algorithm found: " - . "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}" - ); - } - - } - - // Decodes the material description, rejecting a malformed value. - private function decodeMaterialsDescription($materialsDescription): array - { - if (!is_string($materialsDescription)) { - throw new CryptoException('Unable to decode the material description.'); - } - - $decoded = json_decode($materialsDescription, true); - if (json_last_error() !== JSON_ERROR_NONE) { - throw new CryptoException( - 'Unable to decode the material description: ' . json_last_error_msg() - ); - } - if (!is_array($decoded)) { - throw new CryptoException('Unable to decode the material description.'); - } - - return $decoded; - } - - private function buildMaterialDescription( - MetadataEnvelope $envelope - ): array - { - switch ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) { - case 12: - return $this->decodeMaterialsDescription( - $envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3] - ); - default: - throw new CryptoException( - "Unknown Encrypted Data Key " - . "wrapping algorithm found: " - . "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}" - ); - } - } - - private function getTagFromCiphertextStream( - StreamInterface $cipherText, - $tagLength - ): string - { - $cipherTextSize = $cipherText->getSize(); - if ($cipherTextSize == null || $cipherTextSize <= 0) { - throw new \RuntimeException('Cannot decrypt a stream of unknown size'); - } - - return (string) new LimitStream( - $cipherText, - $tagLength, - $cipherTextSize - $tagLength - ); - } - - private function getStrippedCiphertextStream( - StreamInterface $cipherText, - $tagLength - ): LimitStream - { - $cipherTextSize = $cipherText->getSize(); - if ($cipherTextSize == null || $cipherTextSize <= 0) { - throw new \RuntimeException('Cannot decrypt a stream of unknown size'); - } - - return new LimitStream( - $cipherText, - $cipherTextSize - $tagLength, - 0 - ); - } - - private function validateOptionsAndEnvelope( - array $options, - MetadataEnvelope $envelope, - string $commitmentPolicy - ): void - { - //= ../specification/s3-encryption/key-commitment.md#commitment-policy - //# When the commitment policy is REQUIRE_ENCRYPT_ALLOW_DECRYPT, - //# the S3EC MUST allow decryption using algorithm suites which do not support key commitment. - - //= ../specification/s3-encryption/key-commitment.md#commitment-policy - //# When the commitment policy is FORBID_ENCRYPT_ALLOW_DECRYPT, - //# the S3EC MUST allow decryption using algorithm suites which do not support key commitment. - - $allowedCiphers = AbstractCryptoClientV3::$supportedCiphers; - $allowedKeywraps = AbstractCryptoClientV3::$supportedKeyWraps; - //= ../specification/s3-encryption/client.md#enable-legacy-wrapping-algorithms - //# When enabled, the S3EC MUST be able to decrypt objects encrypted with all - //# supported wrapping algorithms (both legacy and fully supported). - if ($options['@SecurityProfile'] == 'V3_AND_LEGACY') { - $allowedCiphers = array_unique(array_merge( - $allowedCiphers, - AbstractCryptoClient::$supportedCiphers - )); - $allowedKeywraps = array_unique(array_merge( - $allowedKeywraps, - AbstractCryptoClient::$supportedKeyWraps - )); - } - - $v1SchemaException = new CryptoException("The requested object is encrypted" - . " with V1 encryption schemas that have been disabled by" - . " client configuration @SecurityProfile=V3. Retry with" - . " V3_AND_LEGACY enabled or reencrypt the object."); - - if (!in_array($options['@CipherOptions']['Cipher'], $allowedCiphers)) { - //= ../specification/s3-encryption/client.md#enable-legacy-wrapping-algorithms - //= type=implication - //# When disabled, the S3EC MUST NOT decrypt objects encrypted using legacy wrapping algorithms; - //# it MUST throw an exception when attempting to decrypt an object encrypted with a legacy wrapping algorithm. - - //= ../specification/s3-encryption/decryption.md#legacy-decryption - //# The S3EC MUST NOT decrypt objects encrypted using legacy unauthenticated algorithm suites unless specifically configured to do so. - if (in_array($options['@CipherOptions']['Cipher'], AbstractCryptoClient::$supportedCiphers)) { - //= ../specification/s3-encryption/decryption.md#legacy-decryption - //# If the S3EC is not configured to enable legacy unauthenticated content decryption, the client MUST throw an exception when attempting to decrypt an object encrypted with a legacy unauthenticated algorithm suite. - throw $v1SchemaException; - } - - throw new CryptoException("The requested object is encrypted with" - . " the cipher '{$options['@CipherOptions']['Cipher']}', which is not" - . " supported for decryption with the selected security profile." - . " This profile allows decryption with: " - . implode(", ", $allowedCiphers)); - } - - if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) { - if ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] !== '12') { - throw new CryptoException("The requested object is encrypted with" - . " the keywrap schema '{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}'," - . " which is not supported for decryption with the current security" - . " profile."); - } - } else { - if (!in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], $allowedKeywraps)) { - if (in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], AbstractCryptoClient::$supportedKeyWraps)) { - throw $v1SchemaException; - } - - throw new CryptoException("The requested object is encrypted with" - . " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}'," - . " which is not supported for decryption with the current security" - . " profile."); - } - $matdesc = json_decode( - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER], - true - ); - if (isset($matdesc['aws:x-amz-cek-alg']) - && ($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] - !== $matdesc['aws:x-amz-cek-alg']) - ) { - throw new CryptoException("There is a mismatch in specified content" - . " encryption algrithm between the materials description value" - . " and the metadata envelope value: {$matdesc['aws:x-amz-cek-alg']}" - . " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}."); - } - } - //= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status - //= type=implication - //# - If the metadata contains "x-amz-3" and "x-amz-d" and "x-amz-i" then the object MUST be considered an S3EC-encrypted object using the V3 format. - if (!MetadataEnvelope::isV3Envelope($envelope) - && $commitmentPolicy == "REQUIRE_ENCRYPT_REQUIRE_DECRYPT" - ) { - //= ../specification/s3-encryption/decryption.md#key-commitment - //# If the commitment policy requires decryption using a committing algorithm suite - //# and the algorithm suite associated with the object does not support key commitment, - //# then the S3EC MUST throw an exception. - throw new CryptoException("There is a mismatch in specified" - . "commitment policy value {$commitmentPolicy} and" - . "Metadata Envelope found in object."); - } - - } - - /** - * Generates a stream that wraps the cipher text with the proper cipher and - * uses the content encryption key (CEK) to decrypt the data when read. - * - * @param string $cipherText Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * - * @return AesStreamInterface - * - * @internal - */ - protected function getNonCommitingDecryptingStream( - string $cipherText, - string $cek, - array $cipherOptions - ): AesStreamInterface - { - $cipherTextStream = Psr7\Utils::streamFor($cipherText); - switch ($cipherOptions['Cipher']) { - case 'gcm': - $cipherOptions['Tag'] = $this->getTagFromCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ); - - return new AesGcmDecryptingStream( - $this->getStrippedCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ), - $cek, - $cipherOptions['Iv'], - $cipherOptions['Tag'], - $cipherOptions['Aad'] = isset($cipherOptions['Aad']) - ? $cipherOptions['Aad'] - : '', - $cipherOptions['TagLength'] ?: null, - $cipherOptions['KeySize'] - ); - default: - $cipherMethod = $this->buildCipherMethod( - $cipherOptions['Cipher'], - $cipherOptions['Iv'], - $cipherOptions['KeySize'] - ); - - return new AesDecryptingStream( - $cipherTextStream, - $cek, - $cipherMethod - ); - } - } - - /** - * Generates a stream that wraps the cipher text with the proper cipher and - * uses the content encryption key (CEK) to derive both a derived content encryption key - * and a commitment key to decrypt the data when read. - * - * @param string $cipherText Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * @param string $messageId a string value used to calculate both a commitment - * key and derived content encryption key - * @param string $commitmentKey a string value to compare with the calculated commitment - * key value, if the values don't match an exception is raised. - * - * @return AesStreamInterface | CryptoException - * - * @internal - */ - protected function getCommitingDecryptingStream( - string $cipherText, - string $cek, - array $cipherOptions, - string $messageId, - string $commitmentKey, - AlgorithmSuite $algorithmSuite - ): AesStreamInterface|CryptoException - { - $algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId()); - $derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY"; - $commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY"; - $calculatedCommitmentKey = hash_hkdf( - $algorithmSuite->getHashingAlgorithm(), - $cek, - $algorithmSuite->getCommitmentOutputKeyLengthBytes(), - $commitmentKeyInfo, - $messageId - ); - //= ../specification/s3-encryption/decryption.md#decrypting-with-commitment - //= type=implication - //# When using an algorithm suite which supports key commitment, the client MUST verify that the [derived key commitment](./key-derivation.md#hkdf-operation) contains the same bytes as the stored key commitment retrieved from the stored object's metadata. - if ( - //= ../specification/s3-encryption/decryption.md#decrypting-with-commitment - //= type=implication - //# When using an algorithm suite which supports key commitment, - //# the verification of the derived key commitment value MUST be done in constant time. - !hash_equals($commitmentKey, $calculatedCommitmentKey) - ) { - //= ../specification/s3-encryption/decryption.md#decrypting-with-commitment - //= type=implication - //# When using an algorithm suite which supports key commitment, the client MUST - //# throw an exception when the derived key commitment value - //# and stored key commitment value do not match. - throw new CryptoException("Calculated commitment key does " - . "not match expected commitment key value "); - } - //= ../specification/s3-encryption/decryption.md#decrypting-with-commitment - //= type=implication - //# When using an algorithm suite which supports key commitment, - //# the client MUST verify the key commitment values match before - //# deriving the [derived encryption key](./key-derivation.md#hkdf-operation). - $derivedEncryptionKey = hash_hkdf( - $algorithmSuite->getHashingAlgorithm(), - $cek, - $algorithmSuite->getDerivationOutputKeyLengthBytes(), - $derivedEncryptionKeyInfo, - $messageId - ); - - $cipherTextStream = Psr7\Utils::streamFor($cipherText); - switch ($cipherOptions['Cipher']) { - case 'gcm': - $cipherOptions['Tag'] = $this->getTagFromCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ); - $cipherOptions['Aad'] = isset($cipherOptions['Aad']) - ? $cipherOptions['Aad'] . $algorithmSuiteIdAsBytes - : $algorithmSuiteIdAsBytes; - - return new AesGcmDecryptingStream( - $this->getStrippedCiphertextStream( - $cipherTextStream, - $cipherOptions['TagLength'] - ), - $derivedEncryptionKey, - $cipherOptions['Iv'], - $cipherOptions['Tag'], - $cipherOptions['Aad'], - $cipherOptions['TagLength'] ?: null, - $cipherOptions['KeySize'] - ); - default: - throw new CryptoException("Unsupported Cipher used for key commitment messages." - . " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported."); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTrait.php deleted file mode 100644 index 0abc861f9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTrait.php +++ /dev/null @@ -1,193 +0,0 @@ - true, - 'KeySize' => true, - 'Aad' => true, - ]; - - /** - * Dependency to generate a CipherMethod from a set of inputs for loading - * in to an AesEncryptingStream. - * - * @param string $cipherName Name of the cipher to generate for encrypting. - * @param string $iv Base Initialization Vector for the cipher. - * @param int $keySize Size of the encryption key, in bits, that will be - * used. - * - * @return Cipher\CipherMethod - * - * @internal - */ - abstract protected function buildCipherMethod($cipherName, $iv, $keySize); - - /** - * Builds an AesStreamInterface and populates encryption metadata into the - * supplied envelope. - * - * @param Stream $plaintext Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * @param MaterialsProvider $provider A provider to supply and encrypt - * materials used in encryption. - * @param MetadataEnvelope $envelope A storage envelope for encryption - * metadata to be added to. - * - * @return AesStreamInterface - * - * @throws \InvalidArgumentException Thrown when a value in $cipherOptions - * is not valid. - * - * @internal - */ - public function encrypt( - StreamInterface $plaintext, - array $cipherOptions, - MaterialsProvider $provider, - MetadataEnvelope $envelope - ) { - $materialsDescription = $provider->getMaterialsDescription(); - - $cipherOptions = array_intersect_key( - $cipherOptions, - self::$allowedOptions - ); - - if (empty($cipherOptions['Cipher'])) { - throw new \InvalidArgumentException('An encryption cipher must be' - . ' specified in the "cipher_options".'); - } - - if (!self::isSupportedCipher($cipherOptions['Cipher'])) { - throw new \InvalidArgumentException('The cipher requested is not' - . ' supported by the SDK.'); - } - - if (empty($cipherOptions['KeySize'])) { - $cipherOptions['KeySize'] = 256; - } - if (!is_int($cipherOptions['KeySize'])) { - throw new \InvalidArgumentException('The cipher "KeySize" must be' - . ' an integer.'); - } - - if (!MaterialsProvider::isSupportedKeySize( - $cipherOptions['KeySize'] - )) { - throw new \InvalidArgumentException('The cipher "KeySize" requested' - . ' is not supported by AES (128, 192, or 256).'); - } - - $cipherOptions['Iv'] = $provider->generateIv( - $this->getCipherOpenSslName( - $cipherOptions['Cipher'], - $cipherOptions['KeySize'] - ) - ); - - $cek = $provider->generateCek($cipherOptions['KeySize']); - - list($encryptingStream, $aesName) = $this->getEncryptingStream( - $plaintext, - $cek, - $cipherOptions - ); - - // Populate envelope data - $envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] = - $provider->encryptCek( - $cek, - $materialsDescription - ); - unset($cek); - - $envelope[MetadataEnvelope::IV_HEADER] = - base64_encode($cipherOptions['Iv']); - $envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER] = - $provider->getWrapAlgorithmName(); - $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName; - $envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] = - strlen($plaintext); - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] = - json_encode($materialsDescription); - if (!empty($cipherOptions['Tag'])) { - $envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] = - strlen($cipherOptions['Tag']) * 8; - } - - return $encryptingStream; - } - - /** - * Generates a stream that wraps the plaintext with the proper cipher and - * uses the content encryption key (CEK) to encrypt the data when read. - * - * @param Stream $plaintext Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * - * @return array returns an array with two elements as follows: [string, AesStreamInterface] - * - * @internal - */ - protected function getEncryptingStream( - StreamInterface $plaintext, - $cek, - &$cipherOptions - ) { - switch ($cipherOptions['Cipher']) { - case 'gcm': - $cipherOptions['TagLength'] = 16; - - $cipherTextStream = new AesGcmEncryptingStream( - $plaintext, - $cek, - $cipherOptions['Iv'], - $cipherOptions['Aad'] = isset($cipherOptions['Aad']) - ? $cipherOptions['Aad'] - : '', - $cipherOptions['TagLength'], - $cipherOptions['KeySize'] - ); - - if (!empty($cipherOptions['Aad'])) { - trigger_error("'Aad' has been supplied for content encryption" - . " with " . $cipherTextStream->getAesName() . ". The" - . " PHP SDK encryption client can decrypt an object" - . " encrypted in this way, but other AWS SDKs may not be" - . " able to.", E_USER_WARNING); - } - - $appendStream = new AppendStream([ - $cipherTextStream->createStream() - ]); - $cipherOptions['Tag'] = $cipherTextStream->getTag(); - $appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag'])); - return [$appendStream, $cipherTextStream->getAesName()]; - default: - $cipherMethod = $this->buildCipherMethod( - $cipherOptions['Cipher'], - $cipherOptions['Iv'], - $cipherOptions['KeySize'] - ); - $cipherTextStream = new AesEncryptingStream( - $plaintext, - $cek, - $cipherMethod - ); - return [$cipherTextStream, $cipherTextStream->getAesName()]; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV2.php deleted file mode 100644 index f89a08ebc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV2.php +++ /dev/null @@ -1,192 +0,0 @@ - true, - 'KeySize' => true, - 'Aad' => true, - ]; - - private static $encryptClasses = [ - 'gcm' => AesGcmEncryptingStream::class - ]; - - /** - * Dependency to generate a CipherMethod from a set of inputs for loading - * in to an AesEncryptingStream. - * - * @param string $cipherName Name of the cipher to generate for encrypting. - * @param string $iv Base Initialization Vector for the cipher. - * @param int $keySize Size of the encryption key, in bits, that will be - * used. - * - * @return Cipher\CipherMethod - * - * @internal - */ - abstract protected function buildCipherMethod($cipherName, $iv, $keySize); - - /** - * Builds an AesStreamInterface and populates encryption metadata into the - * supplied envelope. - * - * @param Stream $plaintext Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param array $options Options for use in encryption, including cipher - * options, and encryption context. - * @param MaterialsProviderV2 $provider A provider to supply and encrypt - * materials used in encryption. - * @param MetadataEnvelope $envelope A storage envelope for encryption - * metadata to be added to. - * - * @return StreamInterface - * - * @throws \InvalidArgumentException Thrown when a value in $options['@CipherOptions'] - * is not valid. - *s - * @internal - */ - public function encrypt( - StreamInterface $plaintext, - array $options, - MaterialsProviderV2 $provider, - MetadataEnvelope $envelope - ) { - $options = array_change_key_case($options); - $cipherOptions = array_intersect_key( - $options['@cipheroptions'], - self::$allowedOptions - ); - - if (empty($cipherOptions['Cipher'])) { - throw new \InvalidArgumentException('An encryption cipher must be' - . ' specified in @CipherOptions["Cipher"].'); - } - - $cipherOptions['Cipher'] = strtolower($cipherOptions['Cipher']); - - if (!self::isSupportedCipher($cipherOptions['Cipher'])) { - throw new \InvalidArgumentException('The cipher requested is not' - . ' supported by the SDK.'); - } - - if (empty($cipherOptions['KeySize'])) { - $cipherOptions['KeySize'] = 256; - } - if (!is_int($cipherOptions['KeySize'])) { - throw new \InvalidArgumentException('The cipher "KeySize" must be' - . ' an integer.'); - } - - if (!MaterialsProviderV2::isSupportedKeySize($cipherOptions['KeySize'])) { - throw new \InvalidArgumentException('The cipher "KeySize" requested' - . ' is not supported by AES (128 or 256).'); - } - - $cipherOptions['Iv'] = $provider->generateIv( - $this->getCipherOpenSslName( - $cipherOptions['Cipher'], - $cipherOptions['KeySize'] - ) - ); - - $encryptClass = self::$encryptClasses[$cipherOptions['Cipher']]; - $aesName = $encryptClass::getStaticAesName(); - $materialsDescription = ['aws:x-amz-cek-alg' => $aesName]; - - $keys = $provider->generateCek( - $cipherOptions['KeySize'], - $materialsDescription, - $options - ); - - // Some providers modify materials description based on options - if (isset($keys['UpdatedContext'])) { - $materialsDescription = $keys['UpdatedContext']; - } - - $encryptingStream = $this->getEncryptingStream( - $plaintext, - $keys['Plaintext'], - $cipherOptions - ); - - // Populate envelope data - $envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] = $keys['Ciphertext']; - unset($keys); - - $envelope[MetadataEnvelope::IV_HEADER] = - base64_encode($cipherOptions['Iv']); - $envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER] = - $provider->getWrapAlgorithmName(); - $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName; - $envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] = - (string) strlen($plaintext); - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] = - json_encode($materialsDescription); - if (!empty($cipherOptions['Tag'])) { - $envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] = - (string) (strlen($cipherOptions['Tag']) * 8); - } - - return $encryptingStream; - } - - /** - * Generates a stream that wraps the plaintext with the proper cipher and - * uses the content encryption key (CEK) to encrypt the data when read. - * - * @param Stream $plaintext Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * - * @return array returns an array with two elements as follows: [string, AesStreamInterface] - * - * @internal - */ - protected function getEncryptingStream( - StreamInterface $plaintext, - $cek, - &$cipherOptions - ) { - switch ($cipherOptions['Cipher']) { - // Only 'gcm' is supported for encryption currently - case 'gcm': - $cipherOptions['TagLength'] = 16; - $encryptClass = self::$encryptClasses['gcm']; - $cipherTextStream = new $encryptClass( - $plaintext, - $cek, - $cipherOptions['Iv'], - $cipherOptions['Aad'] = $cipherOptions['Aad'] ?? '', - $cipherOptions['TagLength'], - $cipherOptions['KeySize'] - ); - - if (!empty($cipherOptions['Aad'])) { - trigger_error("'Aad' has been supplied for content encryption" - . " with " . $cipherTextStream->getAesName() . ". The" - . " PHP SDK encryption client can decrypt an object" - . " encrypted in this way, but other AWS SDKs may not be" - . " able to.", E_USER_WARNING); - } - - $appendStream = new AppendStream([ - $cipherTextStream->createStream() - ]); - $cipherOptions['Tag'] = $cipherTextStream->getTag(); - $appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag'])); - return $appendStream; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV3.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV3.php deleted file mode 100644 index d414133e4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV3.php +++ /dev/null @@ -1,474 +0,0 @@ - true, - 'KeySize' => true, - 'Aad' => true, - ]; - - private static array $encryptClasses = [ - 'gcm' => AesGcmEncryptingStream::class - ]; - - /** - * Dependency to generate a CipherMethod from a set of inputs for loading - * in to an AesEncryptingStream. - * - * @param string $cipherName Name of the cipher to generate for encrypting. - * @param string $iv Base Initialization Vector for the cipher. - * @param int $keySize Size of the encryption key, in bits, that will be - * used. - * - * @return Cipher\CipherMethod - * - * @internal - */ - abstract protected function buildCipherMethod( - $cipherName, - $iv, - $keySize - ); - - /** - * Builds an AesStreamInterface and populates encryption metadata into the - * supplied envelope. - * - * @param StreamInterface $plaintext Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param AlgorithmSuite $algorithmSuite Algorithm Suite for use in encryption - * @param array $options Options for use in encryption, including cipher - * options, and encryption context. - * @param MaterialsProviderV3 $provider A provider to supply and encrypt - * materials used in encryption. - * @param MetadataEnvelope $envelope A storage envelope for encryption - * metadata to be added to. - * - * @return AppendStream - * - * @throws \InvalidArgumentException Thrown when a value in $options['@CipherOptions'] - * is not valid. - *s - * @internal - */ - public function encrypt( - StreamInterface $plaintext, - AlgorithmSuite $algorithmSuite, - array $options, - MaterialsProviderV3 $provider, - MetadataEnvelope $envelope - ): AppendStream - { - $options = array_change_key_case($options); - $cipherOptions = array_intersect_key( - $options['@cipheroptions'], - self::$allowedOptions - ); - //= ../specification/s3-encryption/encryption.md#content-encryption - //= type=implication - //# The client MUST validate that the length of the plaintext bytes does not exceed - //# the algorithm suite's cipher's maximum content length in bytes. - if (strlen($plaintext) > $algorithmSuite->getCipherMaxContentLengthBytes()) { - throw new \InvalidArgumentException("The contentLength of the object you are attempting" - . " to encrypt exceeds the maximum length allowed for GCM encryption."); - } - $cipherOptions['Cipher'] = strtolower($cipherOptions['Cipher']); - - if (!self::isSupportedCipher($cipherOptions['Cipher'])) { - throw new \InvalidArgumentException('The cipher requested is not' - . ' supported by the SDK.'); - } - - if (empty($cipherOptions['KeySize'])) { - $cipherOptions['KeySize'] = 256; - } - - if (!is_int($cipherOptions['KeySize'])) { - throw new \InvalidArgumentException('The cipher "KeySize" must be' - . ' an integer.'); - } - - if (!MaterialsProviderV3::isSupportedKeySize($cipherOptions['KeySize'])) { - throw new \InvalidArgumentException('The cipher "KeySize" requested' - . ' is not supported by AES (256).'); - } - - $encryptClass = self::$encryptClasses[$algorithmSuite->getCipherName()]; - $aesName = $encryptClass::getStaticAesName(); - $materialsDescription = $algorithmSuite->isKeyCommitting() - ? ['aws:x-amz-cek-alg' => '115'] - : ['aws:x-amz-cek-alg' => $aesName]; - - $keys = $provider->generateCek( - $algorithmSuite->getDataKeyLengthBits(), - $materialsDescription, - $options - ); - - // Some providers modify materials description based on options - if (isset($keys['UpdatedContext'])) { - $materialsDescription = $keys['UpdatedContext']; - } - - if ($algorithmSuite->isKeyCommitting()) { - return $this->encryptCommitingStream( - $plaintext, - $algorithmSuite, - $cipherOptions, - $keys, - $materialsDescription, - $provider, - $envelope - ); - } else { - return $this->encryptNonCommitingStream( - $plaintext, - $cipherOptions, - $keys, - $materialsDescription, - $aesName, - $provider, - $envelope - ); - } - } - - private function encryptNonCommitingStream( - StreamInterface $plaintext, - array &$cipherOptions, - array $keys, - array $materialsDescription, - string $aesName, - MaterialsProviderV3 $provider, - MetadataEnvelope $envelope - ): AppendStream - { - //= ../specification/s3-encryption/encryption.md#content-encryption - //# The generated IV or Message ID MUST be set or returned from the - //# encryption process such that it can be included in the content metadata. - //= ../specification/s3-encryption/encryption.md#content-encryption - //# The client MUST generate an IV or Message ID using the length of the IV or Message ID defined in the algorithm suite. - $cipherOptions['Iv'] = $provider->generateIv( - $this->getCipherOpenSslName( - $cipherOptions['Cipher'], - $cipherOptions['KeySize'] - ) - ); - // Some providers modify materials description based on options - if (isset($keys['UpdatedContext'])) { - $materialsDescription = $keys['UpdatedContext']; - } - - $encryptingStream = $this->getNonCommittingEncryptingStream( - $plaintext, - $keys['Plaintext'], - $cipherOptions - ); - - // Populate envelope data - //= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status - //# - If the metadata contains "x-amz-iv" and "x-amz-metadata-x-amz-key-v2" then the object MUST be considered as an S3EC-encrypted object using the V2 format. - $envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] = $keys['Ciphertext']; - unset($keys); - - $envelope[MetadataEnvelope::IV_HEADER] = - base64_encode($cipherOptions['Iv']); - $envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER] = - $provider->getWrapAlgorithmName(); - $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName; - $envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] = - (string) strlen($plaintext); - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] = - json_encode($materialsDescription); - if (!empty($cipherOptions['Tag'])) { - $envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] = - (string) (strlen($cipherOptions['Tag']) * 8); - } - if (!MetadataEnvelope::isV2Envelope($envelope)) { - throw new CryptoException("Error while writing metadata envelope." - . " Not all required fields were set."); - } - - return $encryptingStream; - } - - private function encryptCommitingStream( - StreamInterface $plaintext, - AlgorithmSuite $algorithmSuite, - array &$options, - array $keys, - array $materialsDescription, - MaterialsProviderV3 $provider, - MetadataEnvelope $envelope - ): AppendStream - { - //= ../specification/s3-encryption/encryption.md#content-encryption - //# The generated IV or Message ID MUST be set or returned from the - //# encryption process such that it can be included in the content metadata. - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# When encrypting or decrypting with ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, - //# the IV used in the AES-GCM content encryption/decryption - //# MUST consist entirely of bytes with the value 0x01. - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# The IV's total length MUST match the IV length defined by the algorithm suite. - $options['Iv'] = str_repeat("\1", $algorithmSuite->getIvLengthBytes()); - $messageId = $provider->generateIv( - $this->getCipherOpenSslName( - $algorithmSuite->getCipherName(), - //= ../specification/s3-encryption/encryption.md#content-encryption - //# The client MUST generate an IV or Message ID using the length of - //# the IV or Message ID defined in the algorithm suite. - $algorithmSuite->getKeyCommitmentSaltLengthBits() - ) - ); - // Some providers modify materials description based on options - if (isset($keys['UpdatedContext'])) { - $materialsDescription["aws:x-amz-cek-alg"] = (string) $algorithmSuite->getId(); - } - $commitingEncryptingArray = $this->getCommitingEncryptionStream( - $plaintext, - $keys['Plaintext'], - $options, - $messageId, - $algorithmSuite - ); - //= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key - //= type=implication - //# The derived key commitment value MUST be set or returned from the encryption process - //# such that it can be included in the content metadata. - $commitmentKey = $commitingEncryptingArray[0]; - $encryptionStream = $commitingEncryptingArray[1]; - - // Populate envelope data - $envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3] = $keys['Ciphertext']; - unset($keys); - - $envelope[MetadataEnvelope::CONTENT_CIPHER_V3] = $algorithmSuite->getId(); - // we are able to always set the encryption context in the envelope because PHP - // only supports a KMS Material Provider. - $envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3] = - json_encode($materialsDescription); - //= ../specification/s3-encryption/data-format/content-metadata.md#v3-only - //# The Encryption Context value MUST be used for wrapping algorithm `kms+context` or `12`. - $envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] = '12'; - $envelope[MetadataEnvelope::KEY_COMMITMENT_V3] = $commitmentKey; - $envelope[MetadataEnvelope::MESSAGE_ID_V3] = base64_encode($messageId); - if (!MetadataEnvelope::isV3Envelope($envelope)) { - throw new CryptoException("Error while writing metadata envelope." - . " Not all required fields were set."); - } - - return $encryptionStream; - } - - /** - * Generates a stream that wraps the plaintext with the proper cipher and - * uses the content encryption key (CEK) to encrypt the data when read. - * - * @param StreamInterface $plaintext Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * - * @return AppendStream returns an AppendStream - * - * @internal - */ - protected function getNonCommittingEncryptingStream( - StreamInterface $plaintext, - string $cek, - array &$cipherOptions - ): AppendStream - { - // Only 'gcm' is supported for encryption currently - switch ($cipherOptions['Cipher']) { - //= ../specification/s3-encryption/encryption.md#content-encryption - //= type=implication - //# The S3EC MUST use the encryption algorithm configured during [client](./client.md) initialization. - case 'gcm': - $cipherOptions['TagLength'] = 16; - $encryptClass = self::$encryptClasses['gcm']; - //= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-iv12-tag16-no-kdf - //= type=implication - //# The client MUST initialize the cipher, or call an AES-GCM encryption API, - //# with the plaintext data key, the generated IV, and the tag length defined - //# in the Algorithm Suite when encrypting with ALG_AES_256_GCM_IV12_TAG16_NO_KDF. - $cipherTextStream = new $encryptClass( - $plaintext, - $cek, - $cipherOptions['Iv'], - $cipherOptions['Aad'] = isset($cipherOptions['Aad']) - ? $cipherOptions['Aad'] - : '', - $cipherOptions['TagLength'], - $cipherOptions['KeySize'] - ); - - if (!empty($cipherOptions['Aad'])) { - trigger_error("'Aad' has been supplied for content encryption" - . " with " . $cipherTextStream->getAesName() . ". The" - . " PHP SDK encryption client can decrypt an object" - . " encrypted in this way, but other AWS SDKs may not be" - . " able to.", E_USER_WARNING); - } - - $appendStream = new AppendStream([ - $cipherTextStream->createStream() - ]); - //= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-iv12-tag16-no-kdf - //= type=implication - //# The client MUST append the GCM auth tag to the ciphertext if the underlying - //# crypto provider does not do so automatically. - $cipherOptions['Tag'] = $cipherTextStream->getTag(); - $appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag'])); - - return $appendStream; - default: - throw new CryptoException("Unsupported Cipher used for key commitment messages." - . " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported."); - } - } - - /** - * Generates a stream that wraps the plaintext with the proper cipher and - * uses the content encryption key (CEK) to encrypt the data when read. - * - * @param StreamInterface $plaintext Plain-text data to be encrypted using the - * materials, algorithm, and data provided. - * @param string $cek A content encryption key for use by the stream for - * encrypting the plaintext data. - * @param array $cipherOptions Options for use in determining the cipher to - * be used for encrypting data. - * @param string $messageId salt value used for key extraction step in the key - * derivation process. - * @param AlgorithmSuite $algorithmSuite options used for key commitment - * - * @return array returns an array with two elements as follows: [commitmentKey, AppendStream] - * - * @internal - */ - protected function getCommitingEncryptionStream( - StreamInterface $plaintext, - string $dek, - array &$cipherOptions, - string $messageId, - AlgorithmSuite $algorithmSuite - ): array - { - $algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId()); - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The input info MUST be a concatenation of the algorithm suite ID as bytes followed by the string DERIVEKEY as UTF8 encoded bytes. - $derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY"; - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The input info MUST be a concatenation of the algorithm suite ID as bytes followed by the string COMMITKEY as UTF8 encoded bytes. - $commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY"; - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The length of the input keying material MUST equal the key derivation - //# input length specified by the algorithm suite commit key derivation setting. - if (strlen($dek) !== $algorithmSuite->getDerivationInputKeyLengthBytes()) { - throw new CryptoException("Input Key Material length exceeds " - . "key derivation input length specified by the algorithm suite."); - } - //= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key - //= type=implication - //# The client MUST use HKDF to derive the key commitment value and - //# the derived encrypting key as described in [Key Derivation](key-derivation.md). - $cek = hash_hkdf( - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The hash function MUST be specified by the algorithm suite commitment settings. - $algorithmSuite->getHashingAlgorithm(), - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The input keying material MUST be the plaintext data key (PDK) generated by the key provider. - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The DEK input pseudorandom key MUST be the output from the extract step. - $dek, - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The length of the output keying material MUST equal the encryption key length specified by the algorithm suite encryption settings. - $algorithmSuite->getDerivationOutputKeyLengthBytes(), - $derivedEncryptionKeyInfo, - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The salt MUST be the Message ID with the length defined in the algorithm suite. - $messageId - ); - $commitmentKey = hash_hkdf( - $algorithmSuite->getHashingAlgorithm(), - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The CK input pseudorandom key MUST be the output from the extract step. - $dek, - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# - The length of the output keying material MUST equal the commit key length specified by the supported algorithm suites. - $algorithmSuite->getCommitmentOutputKeyLengthBytes(), - $commitmentKeyInfo, - $messageId - ); - - switch ($cipherOptions['Cipher']) { - // Only 'gcm' is supported for encryption currently - case 'gcm': - $cipherOptions['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes(); - $encryptClass = self::$encryptClasses[$algorithmSuite->getCipherName()]; - - if (!empty($cipherOptions['Aad'])) { - trigger_error("'Aad' has been supplied for content encryption" - . " with " . $encryptClass::getStaticAesName() . ". The" - . " PHP SDK encryption client can decrypt an object" - . " encrypted in this way, but other AWS SDKs may not be" - . " able to.", E_USER_NOTICE); - } - $cipherOptions['Aad'] = isset($cipherOptions['Aad']) - ? $cipherOptions['Aad'] . $algorithmSuiteIdAsBytes - : $algorithmSuiteIdAsBytes; - //= ../specification/s3-encryption/key-derivation.md#hkdf-operation - //= type=implication - //# The client MUST initialize the cipher, or call an AES-GCM encryption API, - //# with the derived encryption key, an IV containing only bytes with the value 0x01, - //# and the tag length defined in the Algorithm Suite when encrypting or - //# decrypting with ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY. - $cipherTextStream = new $encryptClass( - $plaintext, - $cek, - $cipherOptions['Iv'], - $cipherOptions['Aad'], - $cipherOptions['TagLength'], - $cipherOptions['KeySize'] - ); - - $appendStream = new AppendStream([ - $cipherTextStream->createStream() - ]); - //= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key - //= type=implication - //# The client MUST append the GCM auth tag to the ciphertext if the underlying - //# crypto provider does not do so automatically. - $cipherOptions['Tag'] = $cipherTextStream->getTag(); - $appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag'])); - - return [base64_encode($commitmentKey), $appendStream]; - default: - throw new CryptoException("Unsupported Cipher used for content encryption"); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProvider.php deleted file mode 100644 index fc75138b4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProvider.php +++ /dev/null @@ -1,121 +0,0 @@ -kmsClient = $kmsClient; - $this->kmsKeyId = $kmsKeyId; - } - - public function fromDecryptionEnvelope(MetadataEnvelope $envelope) - { - if (empty($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER])) { - throw new \RuntimeException('Not able to detect the materials description.'); - } - - $materialsDescription = json_decode( - $envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER], - true - ); - - if (empty($materialsDescription['kms_cmk_id']) - && empty($materialsDescription['aws:x-amz-cek-alg'])) { - throw new \RuntimeException('Not able to detect kms_cmk_id (legacy' - . ' implementation) or aws:x-amz-cek-alg (current implementation)' - . ' from kms materials description.'); - } - - return new self( - $this->kmsClient, - isset($materialsDescription['kms_cmk_id']) - ? $materialsDescription['kms_cmk_id'] - : null - ); - } - - /** - * The KMS key id for use in matching this Provider to its keys, - * consistently with other SDKs as 'kms_cmk_id'. - * - * @return array - */ - public function getMaterialsDescription() - { - return ['kms_cmk_id' => $this->kmsKeyId]; - } - - public function getWrapAlgorithmName() - { - return self::WRAP_ALGORITHM_NAME; - } - - /** - * Takes a content encryption key (CEK) and description to return an encrypted - * key by using KMS' Encrypt API. - * - * @param string $unencryptedCek Key for use in encrypting other data - * that itself needs to be encrypted by the - * Provider. - * @param string $materialDescription Material Description for use in - * encrypting the $cek. - * - * @return string - */ - public function encryptCek($unencryptedCek, $materialDescription) - { - $encryptedDataKey = $this->kmsClient->encrypt([ - 'Plaintext' => $unencryptedCek, - 'KeyId' => $this->kmsKeyId, - 'EncryptionContext' => $materialDescription - ]); - return base64_encode($encryptedDataKey['CiphertextBlob']); - } - - /** - * Takes an encrypted content encryption key (CEK) and material description - * for use decrypting the key by using KMS' Decrypt API. - * - * @param string $encryptedCek Encrypted key to be decrypted by the Provider - * for use decrypting other data. - * @param string $materialDescription Material Description for use in - * encrypting the $cek. - * - * @return string - */ - public function decryptCek($encryptedCek, $materialDescription) - { - $result = $this->kmsClient->decrypt([ - 'CiphertextBlob' => $encryptedCek, - 'EncryptionContext' => $materialDescription - ]); - - return $result['Plaintext']; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV2.php deleted file mode 100644 index e7da8b92e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV2.php +++ /dev/null @@ -1,100 +0,0 @@ -kmsClient = $kmsClient; - $this->kmsKeyId = $kmsKeyId; - } - - /** - * @inheritDoc - */ - public function getWrapAlgorithmName() - { - return self::WRAP_ALGORITHM_NAME; - } - - /** - * @inheritDoc - */ - public function decryptCek($encryptedCek, $materialDescription, $options) - { - $params = [ - 'CiphertextBlob' => $encryptedCek, - 'EncryptionContext' => $materialDescription - ]; - if (empty($options['@KmsAllowDecryptWithAnyCmk'])) { - if (empty($this->kmsKeyId)) { - throw new CryptoException('KMS CMK ID was not specified and the' - . ' operation is not opted-in to attempting to use any valid' - . ' CMK it discovers. Please specify a CMK ID, or explicitly' - . ' enable attempts to use any valid KMS CMK with the' - . ' @KmsAllowDecryptWithAnyCmk option.'); - } - $params['KeyId'] = $this->kmsKeyId; - } - - $result = $this->kmsClient->decrypt($params); - return $result['Plaintext']; - } - - /** - * @inheritDoc - */ - public function generateCek($keySize, $context, $options) - { - if (empty($this->kmsKeyId)) { - throw new CryptoException('A KMS key id is required for encryption' - . ' with KMS keywrap. Use a KmsMaterialsProviderV2 that has been' - . ' instantiated with a KMS key id.'); - } - $options = array_change_key_case($options); - if (!isset($options['@kmsencryptioncontext']) - || !is_array($options['@kmsencryptioncontext']) - ) { - throw new CryptoException("'@KmsEncryptionContext' is a" - . " required argument when using KmsMaterialsProviderV2, and" - . " must be an associative array (or empty array)."); - } - if (isset($options['@kmsencryptioncontext']['aws:x-amz-cek-alg'])) { - throw new CryptoException("Conflict in reserved @KmsEncryptionContext" - . " key aws:x-amz-cek-alg. This value is reserved for the S3" - . " Encryption Client and cannot be set by the user."); - } - $context = array_merge($options['@kmsencryptioncontext'], $context); - $result = $this->kmsClient->generateDataKey([ - 'KeyId' => $this->kmsKeyId, - 'KeySpec' => "AES_{$keySize}", - 'EncryptionContext' => $context - ]); - return [ - 'Plaintext' => $result['Plaintext'], - 'Ciphertext' => base64_encode($result['CiphertextBlob']), - 'UpdatedContext' => $context - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV3.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV3.php deleted file mode 100644 index 666585a36..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV3.php +++ /dev/null @@ -1,159 +0,0 @@ -kmsClient = $kmsClient; - $this->kmsKeyId = $kmsKeyId; - } - - /** - * @inheritDoc - */ - public function getWrapAlgorithmName(): string - { - return self::WRAP_ALGORITHM_NAME; - } - - /** - * @inheritDoc - */ - public function decryptCek( - string $encryptedCek, - array $materialDescription, - array $options - ): string - { - $options = array_change_key_case($options); - $encryptionContext = null; - - // no encryption context was provided we will use the one in the metadata - if (!isset($options['@kmsencryptioncontext'])) { - $encryptionContext = $materialDescription; - } else { - // encryption context was passed in, we have to make sure it is an array - // and that the reserved keywords were not used - if (!is_array($options['@kmsencryptioncontext'])) { - throw new CryptoException("'When using @KmsMaterialsProviderV3, it" - . " must be an associative array (or empty array)."); - } - - if (isset($options['@kmsencryptioncontext']['aws:x-amz-cek-alg'])) { - throw new CryptoException("Conflict in reserved @KmsEncryptionContext" - . " key aws:x-amz-cek-alg. This value is reserved for the S3" - . " Encryption Client and cannot be set by the user."); - } - - if (isset($options['@kmsencryptioncontext']['kms_cmk_id'])) { - throw new CryptoException("Conflict in reserved @KmsEncryptionContext" - . " key kms_cmk_id. This value is reserved for the S3" - . " Encryption Client and cannot be set by the user."); - } - //= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context - //= type=implication - //# When decrypting using Kms+Context mode, the KmsKeyring MUST validate the provided (request) encryption context with the stored (materials) encryption context. - // We are validating the encryption context to match S3EC V2 behavior - // Refer to KMSMaterialsHandler in the V2 client for details - $materialsDescriptionContextCopy = $materialDescription; - unset($materialsDescriptionContextCopy["aws:x-amz-cek-alg"]); - unset($materialsDescriptionContextCopy["kms_cmk_id"]); - - $requestEncryptionContext = $options['@kmsencryptioncontext']; - //= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context - //= type=implication - //# The stored encryption context with the two reserved keys removed MUST match the provided encryption context. - if ($materialsDescriptionContextCopy !== $requestEncryptionContext) { - //= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context - //= type=implication - //# If the stored encryption context with the two reserved keys removed does not match the provided encryption context, the KmsKeyring MUST throw an exception. - throw new CryptoException("Provided encryption context does not match information retrieved from S3"); - } - $encryptionContext = $materialDescription; - } - $params = [ - 'CiphertextBlob' => $encryptedCek, - 'EncryptionContext' => $encryptionContext - ]; - - if (empty($options['@kmsallowdecryptwithanycmk'])) { - if (empty($this->kmsKeyId)) { - throw new CryptoException('KMS CMK ID was not specified and the' - . ' operation is not opted-in to attempting to use any valid' - . ' CMK it discovers. Please specify a CMK ID, or explicitly' - . ' enable attempts to use any valid KMS CMK with the' - . ' @KmsAllowDecryptWithAnyCmk option.'); - } - $params['KeyId'] = $this->kmsKeyId; - } - - $result = $this->kmsClient->decrypt($params); - - return $result['Plaintext']; - } - - /** - * @inheritDoc - */ - public function generateCek($keySize, $context, $options): array - { - if (empty($this->kmsKeyId)) { - throw new CryptoException('A KMS key id is required for encryption' - . ' with KMS keywrap. Use a KmsMaterialsProviderV2 that has been' - . ' instantiated with a KMS key id.'); - } - $options = array_change_key_case($options); - if (!isset($options['@kmsencryptioncontext']) - || !is_array($options['@kmsencryptioncontext']) - ) { - throw new CryptoException("'@KmsEncryptionContext' is a" - . " required argument when using KmsMaterialsProviderV3, and" - . " must be an associative array (or empty array)."); - } - - if (isset($options['@kmsencryptioncontext']['aws:x-amz-cek-alg'])) { - throw new CryptoException("Conflict in reserved @KmsEncryptionContext" - . " key aws:x-amz-cek-alg. This value is reserved for the S3" - . " Encryption Client and cannot be set by the user."); - } - - if (isset($options['@kmsencryptioncontext']['kms_cmk_id'])) { - throw new CryptoException("Conflict in reserved @KmsEncryptionContext" - . " key kms_cmk_id. This value is reserved for the S3" - . " Encryption Client and cannot be set by the user."); - } - $context = array_merge($options['@kmsencryptioncontext'], $context); - $result = $this->kmsClient->generateDataKey([ - 'KeyId' => $this->kmsKeyId, - 'KeySpec' => "AES_{$keySize}", - 'EncryptionContext' => $context - ]); - - return [ - 'Plaintext' => $result['Plaintext'], - 'Ciphertext' => base64_encode($result['CiphertextBlob']), - 'UpdatedContext' => $context - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProvider.php deleted file mode 100644 index 1c6941c23..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProvider.php +++ /dev/null @@ -1,105 +0,0 @@ - true, - 192 => true, - 256 => true, - ]; - - /** - * Returns if the requested size is supported by AES. - * - * @param int $keySize Size of the requested key in bits. - * - * @return bool - */ - public static function isSupportedKeySize($keySize) - { - return isset(self::$supportedKeySizes[$keySize]); - } - - /** - * Performs further initialization of the MaterialsProvider based on the - * data inside the MetadataEnvelope. - * - * @param MetadataEnvelope $envelope A storage envelope for encryption - * metadata to be read from. - * - * @return MaterialsProvider - * - * @throws \RuntimeException Thrown when there is an empty or improperly - * formed materials description in the envelope. - * - * @internal - */ - abstract public function fromDecryptionEnvelope(MetadataEnvelope $envelope); - - /** - * Returns the material description for this Provider so it can be verified - * by encryption mechanisms. - * - * @return string - */ - abstract public function getMaterialsDescription(); - - /** - * Returns the wrap algorithm name for this Provider. - * - * @return string - */ - abstract public function getWrapAlgorithmName(); - - /** - * Takes a content encryption key (CEK) and description to return an - * encrypted key according to the Provider's specifications. - * - * @param string $unencryptedCek Key for use in encrypting other data - * that itself needs to be encrypted by the - * Provider. - * @param string $materialDescription Material Description for use in - * encrypting the $cek. - * - * @return string - */ - abstract public function encryptCek($unencryptedCek, $materialDescription); - - /** - * Takes an encrypted content encryption key (CEK) and material description - * for use decrypting the key according to the Provider's specifications. - * - * @param string $encryptedCek Encrypted key to be decrypted by the Provider - * for use decrypting other data. - * @param string $materialDescription Material Description for use in - * encrypting the $cek. - * - * @return string - */ - abstract public function decryptCek($encryptedCek, $materialDescription); - - /** - * @param string $keySize Length of a cipher key in bits for generating a - * random content encryption key (CEK). - * - * @return string - */ - public function generateCek($keySize) - { - return openssl_random_pseudo_bytes($keySize / 8); - } - - /** - * @param string $openSslName Cipher OpenSSL name to use for generating - * an initialization vector. - * - * @return string - */ - public function generateIv($openSslName) - { - return openssl_random_pseudo_bytes( - openssl_cipher_iv_length($openSslName) - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterface.php deleted file mode 100644 index a22016d63..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterface.php +++ /dev/null @@ -1,61 +0,0 @@ - true, - 256 => true, - ]; - - /** - * Returns if the requested size is supported by AES. - * - * @param int $keySize Size of the requested key in bits. - * - * @return bool - */ - public static function isSupportedKeySize($keySize) - { - return isset(self::$supportedKeySizes[$keySize]); - } - - /** - * Returns the wrap algorithm name for this Provider. - * - * @return string - */ - abstract public function getWrapAlgorithmName(); - - /** - * Takes an encrypted content encryption key (CEK) and material description - * for use decrypting the key according to the Provider's specifications. - * - * @param string $encryptedCek Encrypted key to be decrypted by the Provider - * for use decrypting other data. - * @param string $materialDescription Material Description for use in - * decrypting the CEK. - * @param string $options Options for use in decrypting the CEK. - * - * @return string - */ - abstract public function decryptCek($encryptedCek, $materialDescription, $options); - - /** - * @param string $keySize Length of a cipher key in bits for generating a - * random content encryption key (CEK). - * @param array $context Context map needed for key encryption - * @param array $options Additional options to be used in CEK generation - * - * @return array - */ - abstract public function generateCek($keySize, $context, $options); - - /** - * @param string $openSslName Cipher OpenSSL name to use for generating - * an initialization vector. - * - * @return string - */ - public function generateIv($openSslName) - { - return openssl_random_pseudo_bytes( - openssl_cipher_iv_length($openSslName) - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderV3.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderV3.php deleted file mode 100644 index 8f297ff7b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderV3.php +++ /dev/null @@ -1,90 +0,0 @@ - true - ]; - - /** - * Returns if the requested size is supported by AES. - * - * @param int $keySize Size of the requested key in bits. - * - * @return bool - */ - public static function isSupportedKeySize(int $keySize): bool - { - return isset(self::$supportedKeySizes[$keySize]); - } - - /** - * Returns the wrap algorithm name for this Provider. - * - * @return string - */ - abstract public function getWrapAlgorithmName(): string; - - /** - * Takes an encrypted content encryption key (CEK) and material description - * for use decrypting the key according to the Provider's specifications. - * - * @param string $encryptedCek Encrypted key to be decrypted by the Provider - * for use decrypting other data. - * @param array $materialDescription Material Description for use in - * decrypting the CEK. - * @param array $options Options for use in decrypting the CEK. - * - * @return string - */ - abstract public function decryptCek( - string $encryptedCek, - array $materialDescription, - array $options - ): string; - - /** - * @param string $keySize Length of a cipher key in bits for generating a - * random content encryption key (CEK). - * @param array $context Context map needed for key encryption - * @param array $options Additional options to be used in CEK generation - * - * @return array - */ - abstract public function generateCek( - string $keySize, - array $context, - array $options - ): array; - - /** - * @param string $openSslName Cipher OpenSSL name to use for generating - * an initialization vector. - * - * @return string - */ - public function generateIv(string $openSslName): string - { - $iv = null; - $cstrong = null; - - if ($openSslName === "aes-96-gcm") { - $iv = openssl_random_pseudo_bytes(12, $cstrong); - } else if ($openSslName === "aes-224-gcm") { - $iv = openssl_random_pseudo_bytes(28, $cstrong); - } else { - $iv = openssl_random_pseudo_bytes( - openssl_cipher_iv_length($openSslName), - $cstrong - ); - } - if (!$cstrong) { - throw new CryptoException("No strong cryptographic source available to generate a random IV."); - } - - return $iv; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MetadataEnvelope.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MetadataEnvelope.php deleted file mode 100644 index f24a8da49..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MetadataEnvelope.php +++ /dev/null @@ -1,207 +0,0 @@ -getConstants()) as $constant) { - self::$constants[$constant] = true; - } - } - - return array_keys(self::$constants); - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function offsetSet($name, $value) - { - $constants = self::getConstantValues(); - //= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status - //# In general, if there is any deviation from the above format, with the exception of additional unrelated mapkeys, then the S3EC SHOULD throw an exception. - if (is_null($name) || !in_array($name, $constants)) { - throw new InvalidArgumentException('MetadataEnvelope fields must' - . ' must match a predefined offset; use the header constants.'); - } - - $this->data[$name] = $value; - } - - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - return $this->data; - } - - public static function isV2Envelope(MetadataEnvelope $envelope): bool - { - if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER]) - || !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER]) - || !isset($envelope[MetadataEnvelope::IV_HEADER]) - || !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]) - || !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]) - || !isset($envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER]) - ) { - return false; - } - return true; - } - - public static function isV1Envelope(MetadataEnvelope $envelope): bool - { - if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //# - The mapkey "x-amz-matdesc" MUST be present for V1 format objects. - || !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //# - The mapkey "x-amz-iv" MUST be present for V1 format objects. - || !isset($envelope[MetadataEnvelope::IV_HEADER]) - || !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]) - || !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //# - The mapkey "x-amz-unencrypted-content-length" SHOULD be present for V1 format objects. - || !isset($envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER]) - ) { - return false; - } - return true; - } - - public static function isV3Envelope(MetadataEnvelope $envelope): bool - { - - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //= type=implication - //# - The mapkey "x-amz-3" MUST be present for V3 format objects. - if (!isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //= type=implication - //# - The mapkey "x-amz-c" MUST be present for V3 format objects. - || !isset($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //= type=implication - //# - The mapkey "x-amz-d" MUST be present for V3 format objects. - || !isset($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //= type=implication - //# - The mapkey "x-amz-i" MUST be present for V3 format objects. - || !isset($envelope[MetadataEnvelope::MESSAGE_ID_V3]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //= type=implication - //# - The mapkey "x-amz-w" MUST be present for V3 format objects. - || !isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //= type=implication - //# - The mapkey "x-amz-t" SHOULD be present for V3 format objects that use KMS Encryption Context. - || !isset($envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3]) - ) { - return false; - } - - return true; - } - - public static function getV2Fields(): array - { - return [ - MetadataEnvelope::CONTENT_KEY_V2_HEADER, - MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER, - MetadataEnvelope::IV_HEADER, - MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER, - MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER, - MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER - ]; - } - - public static function getV3Fields(): array - { - return [ - MetadataEnvelope::ENCRYPTED_DATA_KEY_V3, - MetadataEnvelope::CONTENT_CIPHER_V3, - MetadataEnvelope::KEY_COMMITMENT_V3, - MetadataEnvelope::MESSAGE_ID_V3, - MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3, - MetadataEnvelope::ENCRYPTION_CONTEXT_V3 - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MetadataStrategyInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MetadataStrategyInterface.php deleted file mode 100644 index 5270c7e8f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Crypto/MetadataStrategyInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -validModes)) { - throw new \InvalidArgumentException("'{$mode}' is not a valid mode." - . " The mode has to be 'legacy', 'standard', 'cross-region', 'in-region'," - . " 'mobile', or 'auto'."); - } - - $this->mode = $mode; - if ($this->mode == 'legacy') { - return; - } - - $data = \Aws\load_compiled_json( - __DIR__ . '/../data/sdk-default-configuration.json' - ); - - $this->retryMode = $data['base']['retryMode']; - $this->stsRegionalEndpoints = $data['base']['stsRegionalEndpoints']; - $this->s3UsEast1RegionalEndpoints = $data['base']['s3UsEast1RegionalEndpoints']; - $this->connectTimeoutInMillis = $data['base']['connectTimeoutInMillis']; - - if (isset($data['modes'][$mode])) { - $modeData = $data['modes'][$mode]; - foreach ($modeData as $settingName => $settingValue) { - if (isset($this->$settingName)) { - if (isset($settingValue['override'])) { - $this->$settingName = $settingValue['override']; - } else if (isset($settingValue['multiply'])) { - $this->$settingName *= $settingValue['multiply']; - } else if (isset($settingValue['add'])) { - $this->$settingName += $settingValue['add']; - } - } else { - if (isset($settingValue['override'])) { - if (property_exists($this, $settingName)) { - $this->$settingName = $settingValue['override']; - } - } - } - } - } - } - - /** - * {@inheritdoc} - */ - public function getMode() - { - return $this->mode; - } - - /** - * {@inheritdoc} - */ - public function getRetryMode() - { - return $this->retryMode; - } - - /** - * {@inheritdoc} - */ - public function getStsRegionalEndpoints() - { - return $this->stsRegionalEndpoints; - } - - /** - * {@inheritdoc} - */ - public function getS3UsEast1RegionalEndpoints() - { - return $this->s3UsEast1RegionalEndpoints; - } - - /** - * {@inheritdoc} - */ - public function getConnectTimeoutInMillis() - { - return $this->connectTimeoutInMillis; - } - - /** - * {@inheritdoc} - */ - public function getHttpRequestTimeoutInMillis() - { - return $this->httpRequestTimeoutInMillis; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'mode' => $this->getMode(), - 'retry_mode' => $this->getRetryMode(), - 'sts_regional_endpoints' => $this->getStsRegionalEndpoints(), - 's3_us_east_1_regional_endpoint' => $this->getS3UsEast1RegionalEndpoints(), - 'connect_timeout_in_milliseconds' => $this->getConnectTimeoutInMillis(), - 'http_request_timeout_in_milliseconds' => $this->getHttpRequestTimeoutInMillis(), - ]; - } - -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/DefaultsMode/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/DefaultsMode/ConfigurationInterface.php deleted file mode 100644 index 34c5a63f9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/DefaultsMode/ConfigurationInterface.php +++ /dev/null @@ -1,51 +0,0 @@ - - * use Aws\Sts\RegionalEndpoints\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see \Aws\DefaultsMode\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const DEFAULT_MODE = 'legacy'; - const ENV_MODE = 'AWS_DEFAULTS_MODE'; - const ENV_PROFILE = 'AWS_PROFILE'; - const INI_MODE = 'defaults_mode'; - - public static $cacheKey = 'aws_defaults_mode'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback(); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['defaultsMode']) - && $config['defaultsMode'] instanceof CacheInterface - ) { - return self::cache($memo, $config['defaultsMode'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates config from environment variables. - * - * @return callable - */ - public static function env() - { - return function () { - // Use config from environment variables, if available - $mode = getenv(self::ENV_MODE); - if (!empty($mode)) { - return Promise\Create::promiseFor( - new Configuration($mode) - ); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_MODE); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback() - { - return function () { - return Promise\Create::promiseFor( - new Configuration( self::DEFAULT_MODE) - ); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini( - $profile = null, - $filename = null - ) { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename) { - if (!is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - $data = \Aws\parse_ini_file($filename, true); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile][self::INI_MODE])) { - return self::reject("Required defaults mode config values - not present in INI profile '{$profile}' ({$filename})"); - } - return Promise\Create::promiseFor( - new Configuration( - $data[$profile][self::INI_MODE] - ) - ); - }; - } - - /** - * Unwraps a configuration object in whatever valid form it is in, - * always returning a ConfigurationInterface object. - * - * @param mixed $config - * @return ConfigurationInterface - * @throws \InvalidArgumentException - */ - public static function unwrap($config) - { - if (is_callable($config)) { - $config = $config(); - } - if ($config instanceof PromiseInterface) { - $config = $config->wait(); - } - if ($config instanceof ConfigurationInterface) { - return $config; - } - - if (is_string($config)) { - return new Configuration($config); - } - - throw new \InvalidArgumentException('Not a valid defaults mode configuration' - . ' argument.'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/DefaultsMode/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/DefaultsMode/Exception/ConfigurationException.php deleted file mode 100644 index b7186a5b8..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/DefaultsMode/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -cache = $cache; - } - - public function get($key) - { - return $this->cache->fetch($key); - } - - /** - * @return mixed - */ - public function fetch($key) - { - return $this->get($key); - } - - public function set($key, $value, $ttl = 0) - { - return $this->cache->save($key, $value, $ttl); - } - - /** - * @return bool - */ - public function save($key, $value, $ttl = 0) - { - return $this->set($key, $value, $ttl); - } - - public function remove($key) - { - return $this->cache->delete($key); - } - - /** - * @return bool - */ - public function delete($key) - { - return $this->remove($key); - } - - /** - * @return bool - */ - public function contains($key) - { - return $this->cache->contains($key); - } - - /** - * @return mixed[]|null - */ - public function getStats() - { - return $this->cache->getStats(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/EndpointProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/EndpointProvider.php deleted file mode 100644 index ba5357421..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/EndpointProvider.php +++ /dev/null @@ -1,96 +0,0 @@ - 'ec2', 'region' => 'us-west-2']); - * // Returns an endpoint array or throws. - * $endpoint = EndpointProvider::resolve($provider, [ - * 'service' => 'ec2', - * 'region' => 'us-west-2' - * ]); - * - * You can compose multiple providers into a single provider using - * {@see Aws\or_chain}. This function accepts providers as arguments and - * returns a new function that will invoke each provider until a non-null value - * is returned. - * - * $a = function (array $args) { - * if ($args['region'] === 'my-test-region') { - * return ['endpoint' => 'http://localhost:123/api']; - * } - * }; - * $b = EndpointProvider::defaultProvider(); - * $c = \Aws\or_chain($a, $b); - * $config = ['service' => 'ec2', 'region' => 'my-test-region']; - * $res = $c($config); // $a handles this. - * $config['region'] = 'us-west-2'; - * $res = $c($config); // $b handles this. - */ -class EndpointProvider -{ - /** - * Resolves and endpoint provider and ensures a non-null return value. - * - * @param callable $provider Provider function to invoke. - * @param array $args Endpoint arguments to pass to the provider. - * - * @return array - * @throws UnresolvedEndpointException - */ - public static function resolve(callable $provider, array $args = []) - { - $result = $provider($args); - if (is_array($result)) { - return $result; - } - - throw new UnresolvedEndpointException( - 'Unable to resolve an endpoint using the provider arguments: ' - . json_encode($args) . '. Note: you can provide an "endpoint" ' - . 'option to a client constructor to bypass invoking an endpoint ' - . 'provider.'); - } - - /** - * Creates and returns the default SDK endpoint provider. - * - * @deprecated Use an instance of \Aws\Endpoint\Partition instead. - * - * @return callable - */ - public static function defaultProvider() - { - return PartitionEndpointProvider::defaultProvider(); - } - - /** - * Creates and returns an endpoint provider that uses patterns from an - * array. - * - * @param array $patterns Endpoint patterns - * - * @return callable - */ - public static function patterns(array $patterns) - { - return new PatternEndpointProvider($patterns); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php deleted file mode 100644 index 46d23712f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php +++ /dev/null @@ -1,322 +0,0 @@ -data = $definition; - } - - public function getName() - { - return $this->data['partition']; - } - - /** - * @internal - * @return mixed - */ - public function getDnsSuffix() - { - return $this->data['dnsSuffix']; - } - - public function isRegionMatch($region, $service) - { - if (isset($this->data['regions'][$region]) - || isset($this->data['services'][$service]['endpoints'][$region]) - ) { - return true; - } - - if (isset($this->data['regionRegex'])) { - return (bool) preg_match( - "@{$this->data['regionRegex']}@", - $region - ); - } - - return false; - } - - public function getAvailableEndpoints( - $service, - $allowNonRegionalEndpoints = false - ) { - if ($this->isServicePartitionGlobal($service)) { - return [$this->getPartitionEndpoint($service)]; - } - - if (isset($this->data['services'][$service]['endpoints'])) { - $serviceRegions = array_keys( - $this->data['services'][$service]['endpoints'] - ); - - return $allowNonRegionalEndpoints - ? $serviceRegions - : array_intersect($serviceRegions, array_keys( - $this->data['regions'] - )); - } - - return []; - } - - public function __invoke(array $args = []) - { - $service = isset($args['service']) ? $args['service'] : ''; - $region = isset($args['region']) ? $args['region'] : ''; - $scheme = isset($args['scheme']) ? $args['scheme'] : 'https'; - $options = isset($args['options']) ? $args['options'] : []; - $data = $this->getEndpointData($service, $region, $options); - $variant = $this->getVariant($options, $data); - if (isset($variant['hostname'])) { - $template = $variant['hostname']; - } else { - $template = isset($data['hostname']) ? $data['hostname'] : ''; - } - $dnsSuffix = isset($variant['dnsSuffix']) - ? $variant['dnsSuffix'] - : $this->data['dnsSuffix']; - return [ - 'endpoint' => "{$scheme}://" . $this->formatEndpoint( - $template, - $service, - $region, - $dnsSuffix - ), - 'signatureVersion' => $this->getSignatureVersion($data), - 'signingRegion' => isset($data['credentialScope']['region']) - ? $data['credentialScope']['region'] - : $region, - 'signingName' => isset($data['credentialScope']['service']) - ? $data['credentialScope']['service'] - : $service, - ]; - } - - private function getEndpointData($service, $region, $options) - { - $defaultRegion = $this->resolveRegion($service, $region, $options); - $data = isset($this->data['services'][$service]['endpoints'][$defaultRegion]) - ? $this->data['services'][$service]['endpoints'][$defaultRegion] - : []; - $data += isset($this->data['services'][$service]['defaults']) - ? $this->data['services'][$service]['defaults'] - : []; - $data += isset($this->data['defaults']) - ? $this->data['defaults'] - : []; - - return $data; - } - - private function getSignatureVersion(array $data) - { - static $supportedBySdk = [ - 's3v4', - 'v4', - 'anonymous', - ]; - - $possibilities = array_intersect( - $supportedBySdk, - isset($data['signatureVersions']) - ? $data['signatureVersions'] - : ['v4'] - ); - - return array_shift($possibilities); - } - - private function resolveRegion($service, $region, $options) - { - if (isset($this->data['services'][$service]['endpoints'][$region]) - && $this->isFipsEndpointUsed($region) - ) { - return $region; - } - - if ($this->isServicePartitionGlobal($service) - || $this->isStsLegacyEndpointUsed($service, $region, $options) - || $this->isS3LegacyEndpointUsed($service, $region, $options) - ) { - return $this->getPartitionEndpoint($service); - } - - return $region; - } - - private function isServicePartitionGlobal($service) - { - return isset($this->data['services'][$service]['isRegionalized']) - && false === $this->data['services'][$service]['isRegionalized'] - && isset($this->data['services'][$service]['partitionEndpoint']); - } - - /** - * STS legacy endpoints used for valid regions unless option is explicitly - * set to 'regional' - * - * @param string $service - * @param string $region - * @param array $options - * @return bool - */ - private function isStsLegacyEndpointUsed($service, $region, $options) - { - return $service === 'sts' - && in_array($region, $this->stsLegacyGlobalRegions) - && (empty($options['sts_regional_endpoints']) - || ConfigurationProvider::unwrap( - $options['sts_regional_endpoints'] - )->getEndpointsType() !== 'regional' - ); - } - - /** - * S3 legacy us-east-1 endpoint used for valid regions unless option is explicitly - * set to 'regional' - * - * @param string $service - * @param string $region - * @param array $options - * @return bool - */ - private function isS3LegacyEndpointUsed($service, $region, $options) - { - return $service === 's3' - && $region === 'us-east-1' - && (empty($options['s3_us_east_1_regional_endpoint']) - || S3ConfigurationProvider::unwrap( - $options['s3_us_east_1_regional_endpoint'] - )->getEndpointsType() !== 'regional' - ); - } - - private function getPartitionEndpoint($service) - { - return $this->data['services'][$service]['partitionEndpoint']; - } - - private function formatEndpoint($template, $service, $region, $dnsSuffix) - { - return strtr($template, [ - '{service}' => $service, - '{region}' => $region, - '{dnsSuffix}' => $dnsSuffix, - ]); - } - - /** - * @param $region - * @return bool - */ - private function isFipsEndpointUsed($region) - { - return strpos($region, "fips") !== false; - } - - /** - * @param array $options - * @param array $data - * @return array - */ - private function getVariant(array $options, array $data) - { - $variantTags = []; - if (isset($options['use_fips_endpoint'])) { - $useFips = $options['use_fips_endpoint']; - if (is_bool($useFips)) { - $useFips && $variantTags[] = 'fips'; - } elseif ($useFips->isUseFipsEndpoint()) { - $variantTags[] = 'fips'; - } - } - if (isset($options['use_dual_stack_endpoint'])) { - $useDualStack = $options['use_dual_stack_endpoint']; - if (is_bool($useDualStack)) { - $useDualStack && $variantTags[] = 'dualstack'; - } elseif ($useDualStack->isUseDualStackEndpoint()) { - $variantTags[] = 'dualstack'; - } - } - if (!empty($variantTags)) { - if (isset($data['variants'])) { - foreach ($data['variants'] as $variant) { - if (array_count_values($variant['tags']) == array_count_values($variantTags)) { - return $variant; - } - } - } - if (isset($this->data['defaults']['variants'])) { - foreach ($this->data['defaults']['variants'] as $variant) { - if (array_count_values($variant['tags']) == array_count_values($variantTags)) { - return $variant; - } - } - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php deleted file mode 100644 index 21ca2c838..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php +++ /dev/null @@ -1,130 +0,0 @@ -partitions = array_map(function (array $definition) { - return new Partition($definition); - }, array_values($partitions)); - $this->defaultPartition = $defaultPartition; - $this->options = $options; - } - - public function __invoke(array $args = []) - { - $partition = $this->getPartition( - isset($args['region']) ? $args['region'] : '', - isset($args['service']) ? $args['service'] : '' - ); - $args['options'] = $this->options; - - return $partition($args); - } - - /** - * Returns the partition containing the provided region or the default - * partition if no match is found. - * - * @param string $region - * @param string $service - * - * @return Partition - */ - public function getPartition($region, $service) - { - foreach ($this->partitions as $partition) { - if ($partition->isRegionMatch($region, $service)) { - return $partition; - } - } - - return $this->getPartitionByName($this->defaultPartition); - } - - /** - * Returns the partition with the provided name or null if no partition with - * the provided name can be found. - * - * @param string $name - * - * @return Partition|null - */ - public function getPartitionByName($name) - { - foreach ($this->partitions as $partition) { - if ($name === $partition->getName()) { - return $partition; - } - } - } - - /** - * Creates and returns the default SDK partition provider. - * - * @param array $options - * @return PartitionEndpointProvider - */ - public static function defaultProvider($options = []) - { - $data = \Aws\load_compiled_json(__DIR__ . '/../data/endpoints.json'); - $prefixData = \Aws\load_compiled_json(__DIR__ . '/../data/endpoints_prefix_history.json'); - $mergedData = self::mergePrefixData($data, $prefixData); - - return new self($mergedData['partitions'], 'aws', $options); - } - - /** - * Copy endpoint data for other prefixes used by a given service - * - * @param $data - * @param $prefixData - * @return array - */ - public static function mergePrefixData($data, $prefixData) - { - $prefixGroups = $prefixData['prefix-groups']; - - foreach ($data["partitions"] as $index => $partition) { - foreach ($prefixGroups as $current => $old) { - $serviceData = Env::search("services.\"{$current}\"", $partition); - if (!empty($serviceData)) { - foreach ($old as $prefix) { - if (empty(Env::search("services.\"{$prefix}\"", $partition))) { - $data["partitions"][$index]["services"][$prefix] = $serviceData; - } - } - } - } - } - - return $data; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/PartitionInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/PartitionInterface.php deleted file mode 100644 index 0f2572d93..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/PartitionInterface.php +++ /dev/null @@ -1,56 +0,0 @@ -patterns = $patterns; - } - - public function __invoke(array $args = []) - { - $service = isset($args['service']) ? $args['service'] : ''; - $region = isset($args['region']) ? $args['region'] : ''; - $keys = ["{$region}/{$service}", "{$region}/*", "*/{$service}", "*/*"]; - - foreach ($keys as $key) { - if (isset($this->patterns[$key])) { - return $this->expand( - $this->patterns[$key], - isset($args['scheme']) ? $args['scheme'] : 'https', - $service, - $region - ); - } - } - - return null; - } - - private function expand(array $config, $scheme, $service, $region) - { - $config['endpoint'] = $scheme . '://' - . strtr($config['endpoint'], [ - '{service}' => $service, - '{region}' => $region - ]); - - return $config; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Configuration.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Configuration.php deleted file mode 100644 index 5506fca98..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Configuration.php +++ /dev/null @@ -1,41 +0,0 @@ -useDualstackEndpoint = Aws\boolean_value($useDualstackEndpoint); - if (is_null($this->useDualstackEndpoint)) { - throw new ConfigurationException("'use_dual_stack_endpoint' config option" - . " must be a boolean value."); - } - if ($this->useDualstackEndpoint == true - && (strpos($region, "iso-") !== false || strpos($region, "-iso") !== false) - ) { - throw new ConfigurationException("Dual-stack is not supported in ISO regions"); } - } - - /** - * {@inheritdoc} - */ - public function isUseDualstackEndpoint() - { - return $this->useDualstackEndpoint; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'use_dual_stack_endpoint' => $this->isUseDualstackEndpoint(), - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationInterface.php deleted file mode 100644 index e1c7d5e86..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationInterface.php +++ /dev/null @@ -1,19 +0,0 @@ - - * use Aws\Endpoint\UseDualstackEndpoint\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see Aws\Endpoint\UseDualstackEndpoint\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const ENV_USE_DUAL_STACK_ENDPOINT = 'AWS_USE_DUALSTACK_ENDPOINT'; - const INI_USE_DUAL_STACK_ENDPOINT = 'use_dualstack_endpoint'; - - public static $cacheKey = 'aws_cached_use_dualstack_endpoint_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $region = $config['region']; - $configProviders = [self::env($region)]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini($region); - } - $configProviders[] = self::fallback($region); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['use_dual_stack_endpoint']) - && $config['use_dual_stack_endpoint'] instanceof CacheInterface - ) { - return self::cache($memo, $config['use_dual_stack_endpoint'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates config from environment variables. - * - * @return callable - */ - public static function env($region) - { - return function () use ($region) { - // Use config from environment variables, if available - $useDualstackEndpoint = getenv(self::ENV_USE_DUAL_STACK_ENDPOINT); - if (!empty($useDualstackEndpoint)) { - return Promise\Create::promiseFor( - new Configuration($useDualstackEndpoint, $region) - ); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_USE_DUAL_STACK_ENDPOINT); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini($region, $profile = null, $filename = null) - { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($region, $profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - - // Use INI_SCANNER_NORMAL instead of INI_SCANNER_TYPED for PHP 5.5 compatibility - $data = \Aws\parse_ini_file($filename, true, INI_SCANNER_NORMAL); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile][self::INI_USE_DUAL_STACK_ENDPOINT])) { - return self::reject("Required use dualstack endpoint config values - not present in INI profile '{$profile}' ({$filename})"); - } - - // INI_SCANNER_NORMAL parses false-y values as an empty string - if ($data[$profile][self::INI_USE_DUAL_STACK_ENDPOINT] === "") { - $data[$profile][self::INI_USE_DUAL_STACK_ENDPOINT] = false; - } - - return Promise\Create::promiseFor( - new Configuration($data[$profile][self::INI_USE_DUAL_STACK_ENDPOINT], $region) - ); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback($region) - { - return function () use ($region) { - return Promise\Create::promiseFor(new Configuration(false, $region)); - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Exception/ConfigurationException.php deleted file mode 100644 index 796adc945..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -useFipsEndpoint = Aws\boolean_value($useFipsEndpoint); - if (is_null($this->useFipsEndpoint)) { - throw new ConfigurationException("'use_fips_endpoint' config option" - . " must be a boolean value."); - } - } - - /** - * {@inheritdoc} - */ - public function isUseFipsEndpoint() - { - return $this->useFipsEndpoint; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'use_fips_endpoint' => $this->isUseFipsEndpoint(), - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationInterface.php deleted file mode 100644 index da23f872f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationInterface.php +++ /dev/null @@ -1,19 +0,0 @@ - - * use Aws\Endpoint\UseFipsEndpoint\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see Aws\Endpoint\UseFipsEndpoint\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const ENV_USE_FIPS_ENDPOINT = 'AWS_USE_FIPS_ENDPOINT'; - const INI_USE_FIPS_ENDPOINT = 'use_fips_endpoint'; - - public static $cacheKey = 'aws_cached_use_fips_endpoint_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback($config['region']); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['use_fips_endpoint']) - && $config['use_fips_endpoint'] instanceof CacheInterface - ) { - return self::cache($memo, $config['use_fips_endpoint'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates config from environment variables. - * - * @return callable - */ - public static function env() - { - return function () { - // Use config from environment variables, if available - $useFipsEndpoint = getenv(self::ENV_USE_FIPS_ENDPOINT); - if (!empty($useFipsEndpoint)) { - return Promise\Create::promiseFor( - new Configuration($useFipsEndpoint) - ); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_USE_FIPS_ENDPOINT); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini($profile = null, $filename = null) - { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - - // Use INI_SCANNER_NORMAL instead of INI_SCANNER_TYPED for PHP 5.5 compatibility - $data = \Aws\parse_ini_file($filename, true, INI_SCANNER_NORMAL); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile][self::INI_USE_FIPS_ENDPOINT])) { - return self::reject("Required use fips endpoint config values - not present in INI profile '{$profile}' ({$filename})"); - } - - // INI_SCANNER_NORMAL parses false-y values as an empty string - if ($data[$profile][self::INI_USE_FIPS_ENDPOINT] === "") { - $data[$profile][self::INI_USE_FIPS_ENDPOINT] = false; - } - - return Promise\Create::promiseFor( - new Configuration($data[$profile][self::INI_USE_FIPS_ENDPOINT]) - ); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback($region) - { - return function () use ($region) { - $isFipsPseudoRegion = strpos($region, 'fips-') !== false - || strpos($region, '-fips') !== false; - if ($isFipsPseudoRegion){ - $configuration = new Configuration(true); - } else { - $configuration = new Configuration(false); - } - return Promise\Create::promiseFor($configuration); - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/Exception/ConfigurationException.php deleted file mode 100644 index 468aa650a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -cacheLimit = filter_var($cacheLimit, FILTER_VALIDATE_INT); - if ($this->cacheLimit == false || $this->cacheLimit < 1) { - throw new \InvalidArgumentException( - "'cache_limit' value must be a positive integer." - ); - } - - // Unparsable $enabled flag errs on the side of disabling endpoint discovery - $this->enabled = filter_var($enabled, FILTER_VALIDATE_BOOLEAN); - } - - /** - * {@inheritdoc} - */ - public function isEnabled() - { - return $this->enabled; - } - - /** - * {@inheritdoc} - */ - public function getCacheLimit() - { - return $this->cacheLimit; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'enabled' => $this->isEnabled(), - 'cache_limit' => $this->getCacheLimit() - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationInterface.php deleted file mode 100644 index 3228d1d86..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * use Aws\EndpointDiscovery\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see Aws\EndpointDiscovery\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const DEFAULT_ENABLED = false; - const DEFAULT_CACHE_LIMIT = 1000; - const ENV_ENABLED = 'AWS_ENDPOINT_DISCOVERY_ENABLED'; - const ENV_ENABLED_ALT = 'AWS_ENABLE_ENDPOINT_DISCOVERY'; - const ENV_PROFILE = 'AWS_PROFILE'; - - public static $cacheKey = 'aws_cached_endpoint_discovery_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback($config); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['endpoint_discovery']) - && $config['endpoint_discovery'] instanceof CacheInterface - ) { - return self::cache($memo, $config['endpoint_discovery'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates config from environment variables. - * - * @param $cacheLimit - * @return callable - */ - public static function env($cacheLimit = self::DEFAULT_CACHE_LIMIT) - { - return function () use ($cacheLimit) { - // Use config from environment variables, if available - $enabled = getenv(self::ENV_ENABLED); - if ($enabled === false || $enabled === '') { - $enabled = getenv(self::ENV_ENABLED_ALT); - } - if ($enabled !== false && $enabled !== '') { - return Promise\Create::promiseFor( - new Configuration($enabled, $cacheLimit) - ); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_ENABLED); - }; - } - - /** - * Fallback config options when other sources are not set. Will check the - * service model for any endpoint discovery required operations, and enable - * endpoint discovery in that case. If no required operations found, will use - * the class default values. - * - * @param array $config - * @return callable - */ - public static function fallback($config = []) - { - $enabled = self::DEFAULT_ENABLED; - if (!empty($config['api_provider']) - && !empty($config['service']) - && !empty($config['version']) - ) { - $provider = $config['api_provider']; - $apiData = $provider('api', $config['service'], $config['version']); - if (!empty($apiData['operations'])) { - foreach ($apiData['operations'] as $operation) { - if (!empty($operation['endpointdiscovery']['required'])) { - $enabled = true; - } - } - } - } - - return function () use ($enabled) { - return Promise\Create::promiseFor( - new Configuration( - $enabled, - self::DEFAULT_CACHE_LIMIT - ) - ); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * @param int $cacheLimit - * - * @return callable - */ - public static function ini( - $profile = null, - $filename = null, - $cacheLimit = self::DEFAULT_CACHE_LIMIT - ) { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename, $cacheLimit) { - if (!@is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - $data = \Aws\parse_ini_file($filename, true); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile]['endpoint_discovery_enabled'])) { - return self::reject("Required endpoint discovery config values - not present in INI profile '{$profile}' ({$filename})"); - } - - return Promise\Create::promiseFor( - new Configuration( - $data[$profile]['endpoint_discovery_enabled'], - $cacheLimit - ) - ); - }; - } - - /** - * Unwraps a configuration object in whatever valid form it is in, - * always returning a ConfigurationInterface object. - * - * @param mixed $config - * @return ConfigurationInterface - * @throws \InvalidArgumentException - */ - public static function unwrap($config) - { - if (is_callable($config)) { - $config = $config(); - } - if ($config instanceof PromiseInterface) { - $config = $config->wait(); - } - if ($config instanceof ConfigurationInterface) { - return $config; - } elseif (is_array($config) && isset($config['enabled'])) { - if (isset($config['cache_limit'])) { - return new Configuration( - $config['enabled'], - $config['cache_limit'] - ); - } - return new Configuration( - $config['enabled'], - self::DEFAULT_CACHE_LIMIT - ); - } - - throw new \InvalidArgumentException('Not a valid endpoint_discovery ' - . 'configuration argument.'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointDiscoveryMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointDiscoveryMiddleware.php deleted file mode 100644 index 2ec1eead3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointDiscoveryMiddleware.php +++ /dev/null @@ -1,423 +0,0 @@ -nextHandler = $handler; - $this->client = \WeakReference::create($client); - $this->args = $args; - $this->service = $client->getApi(); - $this->config = $config; - } - - public function __invoke(CommandInterface $cmd, RequestInterface $request) - { - $nextHandler = $this->nextHandler; - $op = $this->service->getOperation($cmd->getName())->toArray(); - - // Continue only if endpointdiscovery trait is set - if (isset($op['endpointdiscovery'])) { - $config = ConfigurationProvider::unwrap($this->config); - $isRequired = !empty($op['endpointdiscovery']['required']); - - if ($isRequired && !($config->isEnabled())) { - throw new UnresolvedEndpointException('This operation ' - . 'requires the use of endpoint discovery, but this has ' - . 'been disabled in the configuration. Enable endpoint ' - . 'discovery or use a different operation.'); - } - - // Continue only if enabled by config - if ($config->isEnabled()) { - if (isset($op['endpointoperation'])) { - throw new UnresolvedEndpointException('This operation is ' - . 'contradictorily marked both as using endpoint discovery ' - . 'and being the endpoint discovery operation. Please ' - . 'verify the accuracy of your model files.'); - } - - // Original endpoint may be used if discovery optional - $originalUri = $request->getUri(); - - $identifiers = $this->getIdentifiers($op); - - $cacheKey = $this->getCacheKey( - $this->client->get()->getCredentials()->wait(), - $cmd, - $identifiers - ); - - // Check/create cache - if (!isset(self::$cache)) { - self::$cache = new LruArrayCache($config->getCacheLimit()); - } - - if (empty($endpointList = self::$cache->get($cacheKey))) { - $endpointList = new EndpointList([]); - } - $endpoint = $endpointList->getActive(); - - // Retrieve endpoints if there is no active endpoint - if (empty($endpoint)) { - try { - $endpoint = $this->discoverEndpoint( - $cacheKey, - $cmd, - $identifiers - ); - } catch (\Exception $e) { - // Use cached endpoint, expired or active, if any remain - $endpoint = $endpointList->getEndpoint(); - - if (empty($endpoint)) { - return $this->handleDiscoveryException( - $isRequired, - $originalUri, - $e, - $cmd, - $request - ); - } - } - } - - $request = $this->modifyRequest($request, $endpoint); - - $g = function ($value) use ( - $cacheKey, - $cmd, - $identifiers, - $isRequired, - $originalUri, - $request, - &$endpoint, - &$g - ) { - if ($value instanceof AwsException - && ( - $value->getAwsErrorCode() == 'InvalidEndpointException' - || $value->getStatusCode() == 421 - ) - ) { - return $this->handleInvalidEndpoint( - $cacheKey, - $cmd, - $identifiers, - $isRequired, - $originalUri, - $request, - $value, - $endpoint, - $g - ); - } - - return $value; - }; - - return $nextHandler($cmd, $request)->otherwise($g); - } - } - - return $nextHandler($cmd, $request); - } - - private function discoverEndpoint( - $cacheKey, - CommandInterface $cmd, - array $identifiers - ) { - $discCmd = $this->getDiscoveryCommand($cmd, $identifiers); - $this->discoveryTimes[$cacheKey] = time(); - $result = $this->client->get()->execute($discCmd); - - if (isset($result['Endpoints'])) { - $endpointData = []; - foreach ($result['Endpoints'] as $datum) { - $endpointData[$datum['Address']] = time() - + ($datum['CachePeriodInMinutes'] * 60); - } - $endpointList = new EndpointList($endpointData); - self::$cache->set($cacheKey, $endpointList); - return $endpointList->getEndpoint(); - } - - throw new UnresolvedEndpointException('The endpoint discovery operation ' - . 'yielded a response that did not contain properly formatted ' - . 'endpoint data.'); - } - - private function getCacheKey( - CredentialsInterface $creds, - CommandInterface $cmd, - array $identifiers - ) { - $key = $this->service->getServiceName() . '_' . $creds->getAccessKeyId(); - if (!empty($identifiers)) { - $key .= '_' . $cmd->getName(); - foreach ($identifiers as $identifier) { - $key .= "_{$cmd[$identifier]}"; - } - } - - return $key; - } - - private function getDiscoveryCommand( - CommandInterface $cmd, - array $identifiers - ) { - foreach ($this->service->getOperations() as $op) { - if (isset($op['endpointoperation'])) { - $endpointOperation = $op->toArray()['name']; - break; - } - } - - if (!isset($endpointOperation)) { - throw new UnresolvedEndpointException('This command is set to use ' - . 'endpoint discovery, but no endpoint discovery operation was ' - . 'found. Please verify the accuracy of your model files.'); - } - - $params = []; - if (!empty($identifiers)) { - $params['Operation'] = $cmd->getName(); - $params['Identifiers'] = []; - foreach ($identifiers as $identifier) { - $params['Identifiers'][$identifier] = $cmd[$identifier]; - } - } - $command = $this->client->get()->getCommand($endpointOperation, $params); - $command->getHandlerList()->appendBuild( - Middleware::mapRequest(function (RequestInterface $r) { - return $r->withHeader( - 'x-amz-api-version', - $this->service->getApiVersion() - ); - }), - 'x-amz-api-version-header' - ); - - return $command; - } - - private function getIdentifiers(array $operation) - { - $inputShape = $this->service->getShapeMap() - ->resolve($operation['input']) - ->toArray(); - $identifiers = []; - foreach ($inputShape['members'] as $key => $member) { - if (!empty($member['endpointdiscoveryid'])) { - $identifiers[] = $key; - } - } - return $identifiers; - } - - private function handleDiscoveryException( - $isRequired, - $originalUri, - \Exception $e, - CommandInterface $cmd, - RequestInterface $request - ) { - // If no cached endpoints and discovery required, - // throw exception - if ($isRequired) { - $message = 'The endpoint required for this service is currently ' - . 'unable to be retrieved, and your request can not be fulfilled ' - . 'unless you manually specify an endpoint.'; - throw new AwsException( - $message, - $cmd, - [ - 'code' => 'EndpointDiscoveryException', - 'message' => $message - ], - $e - ); - } - - // If discovery isn't required, use original endpoint - return $this->useOriginalUri( - $originalUri, - $cmd, - $request - ); - } - - private function handleInvalidEndpoint( - $cacheKey, - $cmd, - $identifiers, - $isRequired, - $originalUri, - $request, - $value, - &$endpoint, - &$g - ) { - $nextHandler = $this->nextHandler; - $endpointList = self::$cache->get($cacheKey); - if ($endpointList instanceof EndpointList) { - - // Remove invalid endpoint from cached list - $endpointList->remove($endpoint); - - // If possible, get another cached endpoint - $newEndpoint = $endpointList->getEndpoint(); - } - if (empty($newEndpoint)) { - - // If no more cached endpoints, make discovery call - // if none made within cooldown for given key - if (isset($this->discoveryTimes[$cacheKey]) - && time() - $this->discoveryTimes[$cacheKey] < self::$discoveryCooldown - ) { - - // If no more cached endpoints and it's required, - // fail with original exception - if ($isRequired) { - return $value; - } - - // Use original endpoint if not required - return $this->useOriginalUri( - $originalUri, - $cmd, - $request - ); - } - - $newEndpoint = $this->discoverEndpoint( - $cacheKey, - $cmd, - $identifiers - ); - } - $endpoint = $newEndpoint; - $request = $this->modifyRequest($request, $endpoint); - return $nextHandler($cmd, $request)->otherwise($g); - } - - private function modifyRequest(RequestInterface $request, $endpoint) - { - $parsed = $this->parseEndpoint($endpoint); - if (!empty($request->getHeader('User-Agent'))) { - $userAgent = $request->getHeader('User-Agent')[0]; - if (strpos($userAgent, 'endpoint-discovery') === false) { - $userAgent = $userAgent . ' endpoint-discovery'; - } - } else { - $userAgent = 'endpoint-discovery'; - } - - return $request - ->withUri( - $request->getUri() - ->withHost($parsed['host']) - ->withPath($parsed['path']) - ) - ->withHeader('User-Agent', $userAgent); - } - - /** - * Parses an endpoint returned from the discovery API into an array with - * 'host' and 'path' keys. - * - * @param $endpoint - * @return array - */ - private function parseEndpoint($endpoint) - { - $parsed = parse_url($endpoint); - - // parse_url() will correctly parse full URIs with schemes - if (isset($parsed['host'])) { - return $parsed; - } - - // parse_url() will put host & path in 'path' if scheme is not provided - if (isset($parsed['path'])) { - $split = explode('/', $parsed['path'], 2); - $parsed['host'] = $split[0]; - if (isset($split[1])) { - if (substr($split[1], 0 , 1) !== '/') { - $split[1] = '/' . $split[1]; - } - $parsed['path'] = $split[1]; - } else { - $parsed['path'] = ''; - } - return $parsed; - } - - throw new UnresolvedEndpointException("The supplied endpoint '" - . "{$endpoint}' is invalid."); - } - - private function useOriginalUri( - UriInterface $uri, - CommandInterface $cmd, - RequestInterface $request - ) { - $nextHandler = $this->nextHandler; - $endpoint = $uri->getHost() . $uri->getPath(); - $request = $this->modifyRequest( - $request, - $endpoint - ); - return $nextHandler($cmd, $request); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php deleted file mode 100644 index 80ccc4729..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php +++ /dev/null @@ -1,85 +0,0 @@ -active = $endpoints; - reset($this->active); - } - - /** - * Gets an active (unexpired) endpoint. Returns null if none found. - * - * @return null|string - */ - public function getActive() - { - if (count($this->active) < 1) { - return null; - } - while (time() > current($this->active)) { - $key = key($this->active); - $this->expired[$key] = current($this->active); - $this->increment($this->active); - unset($this->active[$key]); - if (count($this->active) < 1) { - return null; - } - } - $active = key($this->active); - $this->increment($this->active); - return $active; - } - - /** - * Gets an active endpoint if possible, then an expired endpoint if possible. - * Returns null if no endpoints found. - * - * @return null|string - */ - public function getEndpoint() - { - if (!empty($active = $this->getActive())) { - return $active; - } - return $this->getExpired(); - } - - /** - * Removes an endpoint from both lists. - * - * @param string $key - */ - public function remove($key) - { - unset($this->active[$key]); - unset($this->expired[$key]); - } - - /** - * Get an expired endpoint. Returns null if none found. - * - * @return null|string - */ - private function getExpired() - { - if (count($this->expired) < 1) { - return null; - } - $expired = key($this->expired); - $this->increment($this->expired); - return $expired; - } - - private function increment(&$array) - { - if (next($array) === false) { - reset($array); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/Exception/ConfigurationException.php deleted file mode 100644 index f87cdbfa4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointDiscovery/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -nextHandler = $nextHandler; - $this->service = $service; - } - - public function __invoke(CommandInterface $command, RequestInterface $request) - { - $nextHandler = $this->nextHandler; - - $operation = $this->service->getOperation($command->getName()); - - if (!empty($operation['endpoint']['hostPrefix'])) { - $prefix = $operation['endpoint']['hostPrefix']; - - // Captures endpoint parameters stored in the modeled host. - // These are denoted by enclosure in braces, i.e. '{param}' - preg_match_all("/\{([a-zA-Z0-9]+)}/", $prefix, $parameters); - - if (!empty($parameters[1])) { - - // Captured parameters without braces stored in $parameters[1], - // which should correspond to members in the Command object - foreach ($parameters[1] as $index => $parameter) { - if (empty($command[$parameter])) { - throw new \InvalidArgumentException( - "The parameter '{$parameter}' must be set and not empty." - ); - } - - // Captured parameters with braces stored in $parameters[0], - // which are replaced by their corresponding Command value - $prefix = str_replace( - $parameters[0][$index], - $command[$parameter], - $prefix - ); - } - } - - $uri = $request->getUri(); - $host = $prefix . $uri->getHost(); - if (!\Aws\is_valid_hostname($host)) { - throw new \InvalidArgumentException( - "The supplied parameters result in an invalid hostname: '{$host}'." - ); - } - $request = $request->withUri($uri->withHost($host)); - } - - return $nextHandler($command, $request); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddEvaluator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddEvaluator.php deleted file mode 100644 index c1e34e1b7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddEvaluator.php +++ /dev/null @@ -1,79 +0,0 @@ -ruleset->applyParameterDefaults($inputParameters); - - $nodes = $this->ruleset->getNodes(); - $conditions = $this->ruleset->getConditions(); - $library = $this->ruleset->standardLibrary; - - $ref = $this->ruleset->getRoot(); - - while (true) { - if ($ref >= self::RESULT_OFFSET) { - return $this->resultResolver->resolve( - $ref - self::RESULT_OFFSET, - $inputParameters - ); - } - - if ($ref === self::TERMINAL_TRUE || $ref === self::TERMINAL_FALSE) { - // Throws exception - $this->resultResolver->resolveNoMatch($inputParameters); - } - - $isComplement = $ref < 0; - $base = ($isComplement ? -$ref : $ref) * 3 - 3; - - $condIndex = $nodes[$base]; - $value = $library->callFunction( - $conditions[$condIndex], - $inputParameters - ); - - $condResult = ($value !== null && $value !== false); - // Complement edges invert the high/low selection without - // duplicating nodes in the BDD. - $ref = ($condResult xor $isComplement) - ? $nodes[$base + 1] - : $nodes[$base + 2]; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddNodeDecoder.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddNodeDecoder.php deleted file mode 100644 index 4437bd5aa..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddNodeDecoder.php +++ /dev/null @@ -1,68 +0,0 @@ - self::INT_32_MAX - ? $value - self::INT_32_OFFSET - : $value; - } - - return $flat; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddResultResolver.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddResultResolver.php deleted file mode 100644 index 73449962c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddResultResolver.php +++ /dev/null @@ -1,140 +0,0 @@ -resolveNoMatch($inputParameters); - } - - // The serialized `results` array omits the implicit no-match rule, - // so defined result index N lives at array offset N - 1. - $results = $this->ruleset->getResults(); - $result = $results[$resultIndex - 1] ?? null; - - if ($result === null) { - throw new UnresolvedEndpointException(sprintf( - 'Endpoint BDD referenced unknown result index %d.', - $resultIndex - )); - } - - if (isset($result['error'])) { - $this->throwError($result, $inputParameters); - } - - if (!isset($result['endpoint'])) { - throw new UnresolvedEndpointException( - 'Endpoint BDD result is missing an `endpoint` or `error` block.' - ); - } - - return $this->buildEndpoint($result['endpoint'], $inputParameters); - } - - /** - * @throws UnresolvedEndpointException - */ - public function resolveNoMatch(array $inputParameters): never - { - throw new UnresolvedEndpointException( - 'Unable to resolve an endpoint using the provider arguments: ' - . json_encode($inputParameters) - ); - } - - /** - * @throws UnresolvedEndpointException - */ - private function throwError(array $result, array $inputParameters): never - { - $message = $this->ruleset->standardLibrary->resolveValue( - $result['error'], - $inputParameters - ); - throw new UnresolvedEndpointException((string) $message); - } - - private function buildEndpoint(array $endpoint, array $inputParameters): RulesetEndpoint - { - $library = $this->ruleset->standardLibrary; - - $url = $library->resolveValue($endpoint['url'], $inputParameters); - $properties = isset($endpoint['properties']) - ? $this->resolveProperties($endpoint['properties'], $inputParameters, $library) - : null; - $headers = isset($endpoint['headers']) - ? $this->resolveHeaders($endpoint['headers'], $inputParameters, $library) - : null; - - return new RulesetEndpoint($url, $properties, $headers); - } - - private function resolveProperties( - $properties, - array $inputParameters, - RulesetStandardLibrary $library - ) { - if (is_array($properties)) { - $resolved = []; - foreach ($properties as $key => $value) { - $resolved[$key] = $this->resolveProperties( - $value, - $inputParameters, - $library - ); - } - return $resolved; - } - - // Inline some of the isTemplate check here to avoid unnecessary resolution attempts on simple strings - if (is_string($properties) && str_contains($properties, '{') && $library->isTemplate($properties)) { - return $library->resolveTemplateString($properties, $inputParameters); - } - - return $properties; - } - - private function resolveHeaders( - array $headers, - array $inputParameters, - RulesetStandardLibrary $library - ): array { - $resolved = []; - foreach ($headers as $name => $values) { - $resolvedValues = []; - foreach ($values as $value) { - $resolvedValues[] = $library->resolveValue($value, $inputParameters); - } - $resolved[$name] = $resolvedValues; - } - return $resolved; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddRuleset.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddRuleset.php deleted file mode 100644 index d5655dbd5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Bdd/BddRuleset.php +++ /dev/null @@ -1,127 +0,0 @@ - */ - private array $parameters; - - /** @var array */ - private array $conditions; - - /** @var array */ - private array $results; - - /** @var int[] Flat triples: [condIdx, hi, lo, condIdx, hi, lo, ...] */ - private array $nodes; - - private int $root; - - public readonly RulesetStandardLibrary $standardLibrary; - - public function __construct(array $definition, array $partitions) - { - foreach (self::REQUIRED_FIELDS as $key) { - if (!array_key_exists($key, $definition)) { - throw new UnresolvedEndpointException( - "Endpoint BDD definition is missing `{$key}`." - ); - } - } - - $this->parameters = $this->buildParameters($definition['parameters'] ?? []); - $this->conditions = $definition['conditions']; - $this->results = $definition['results']; - $this->root = (int) $definition['root']; - $nodeCount = $definition['nodeCount']; - $this->nodes = BddNodeDecoder::decode( - (string) $definition['nodes'], - $nodeCount - ); - - $this->standardLibrary = new RulesetStandardLibrary($partitions); - } - - /** - * @return array - */ - public function getParameters(): array - { - return $this->parameters; - } - - /** - * @return array - */ - public function getConditions(): array - { - return $this->conditions; - } - - /** - * @return array - */ - public function getResults(): array - { - return $this->results; - } - - /** - * @return int[] - */ - public function getNodes(): array - { - return $this->nodes; - } - - public function getRoot(): int - { - return $this->root; - } - - /** - * Applies parameter defaults and type checks. Mirrors the tree ruleset so - * services migrating from one shape to the other see identical input - * validation behavior. - */ - public function applyParameterDefaults(array &$inputParameters): void - { - foreach ($this->parameters as $name => $param) { - $value = $inputParameters[$name] ?? null; - - if (is_null($value) && !is_null($param->getDefault())) { - $inputParameters[$name] = $param->getDefault(); - } elseif (!is_null($value)) { - $param->validateInputParam($value); - } - } - } - - private function buildParameters(array $parameters): array - { - $built = []; - foreach ($parameters as $name => $definition) { - $built[$name] = new RulesetParameter($name, $definition); - } - return $built; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointDefinitionProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointDefinitionProvider.php deleted file mode 100644 index 5b9092287..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointDefinitionProvider.php +++ /dev/null @@ -1,138 +0,0 @@ - '/endpoint-tests-1', - 'bdd' => '/endpoint-bdd', - default => '/endpoint-rule-set-1', - }; - } - - private static function getLatest($service) - { - $manifest = \Aws\manifest(); - return $manifest[$service]['versions']['latest']; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php deleted file mode 100644 index e34e9f1a1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php +++ /dev/null @@ -1,139 +0,0 @@ -bddRuleset = $ruleset; - $this->bddEvaluator = new BddEvaluator( - $ruleset, - new BddResultResolver($ruleset) - ); - } elseif ($ruleset instanceof Ruleset) { - $this->ruleset = $ruleset; - } elseif (is_array($ruleset)) { - $this->ruleset = new Ruleset($ruleset, $partitions); - } else { - throw new \InvalidArgumentException( - 'EndpointProviderV2 expects an array, Ruleset, or BddRuleset' - . ' but received ' . (is_object($ruleset) - ? get_class($ruleset) - : gettype($ruleset)) - ); - } - - $this->cache = new LruArrayCache(100); - } - - /** - * Returns the parsed tree ruleset for services using the legacy - * `endpointRuleSet` trait. Returns null when the provider was built from - * an `endpointBdd` trait. - * - * @return Ruleset|null - */ - public function getRuleset() - { - return $this->ruleset; - } - - /** - * Returns the parsed BDD ruleset for services using the `endpointBdd` - * trait, or null when the provider was built from a tree ruleset. - */ - public function getBddRuleset(): ?BddRuleset - { - return $this->bddRuleset; - } - - /** - * Given input parameters, determines the correct endpoint or an error - * to be thrown for a given request. - * - * @return RulesetEndpoint - * @throws UnresolvedEndpointException - */ - public function resolveEndpoint(array $inputParameters) - { - $hashedParams = $this->hashInputParameters($inputParameters); - $match = $this->cache->get($hashedParams); - - if (!is_null($match)) { - return $match; - } - - $endpoint = $this->bddEvaluator !== null - ? $this->bddEvaluator->evaluate($inputParameters) - : $this->ruleset->evaluate($inputParameters); - - // This condition just applies to endpoint resolution - // through the decision tree evaluation process. - if ($endpoint === false) { - throw new UnresolvedEndpointException( - 'Unable to resolve an endpoint using the provider arguments: ' - . json_encode($inputParameters) - ); - } - - $this->cache->set($hashedParams, $endpoint); - - return $endpoint; - } - - private function hashInputParameters($inputParameters) - { - return md5(serialize($inputParameters)); - } - - /** - * @return array - */ - public function getActiveParameters(): array - { - if ($this->bddRuleset !== null) { - return $this->bddRuleset->getParameters(); - } - - return $this->ruleset->getParameters(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointV2Middleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointV2Middleware.php deleted file mode 100644 index 5db08c54f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointV2Middleware.php +++ /dev/null @@ -1,427 +0,0 @@ - 'v4', - 'sigv4a' => 'v4a', - 'none' => 'anonymous', - 'bearer' => 'bearer', - 'sigv4-s3express' => 'v4-s3express' - ]; - - /** @var callable */ - private $nextHandler; - - /** @var EndpointProviderV2 */ - private $endpointProvider; - - /** @var Service */ - private $api; - - /** @var array */ - private $clientArgs; - - /** @var Closure */ - private $credentialProvider; - - /** - * Create a middleware wrapper function - * - * @param EndpointProviderV2 $endpointProvider - * @param Service $api - * @param array $args - * @param callable $credentialProvider - * - * @return Closure - */ - public static function wrap( - EndpointProviderV2 $endpointProvider, - Service $api, - array $args, - callable $credentialProvider - ) : Closure - { - return function (callable $handler) use ($endpointProvider, $api, $args, $credentialProvider) { - return new self($handler, $endpointProvider, $api, $args, $credentialProvider); - }; - } - - /** - * @param callable $nextHandler - * @param EndpointProviderV2 $endpointProvider - * @param Service $api - * @param array $args - */ - public function __construct( - callable $nextHandler, - EndpointProviderV2 $endpointProvider, - Service $api, - array $args, - ?callable $credentialProvider = null - ) - { - $this->nextHandler = $nextHandler; - $this->endpointProvider = $endpointProvider; - $this->api = $api; - $this->clientArgs = $args; - $this->credentialProvider = $credentialProvider; - } - - /** - * @param CommandInterface $command - * - * @return Promise - */ - public function __invoke(CommandInterface $command) - { - $nextHandler = $this->nextHandler; - $operation = $this->api->getOperation($command->getName()); - $commandArgs = $command->toArray(); - $providerArgs = $this->resolveArgs($commandArgs, $operation); - - $endpoint = $this->endpointProvider->resolveEndpoint($providerArgs); - - $this->appendEndpointMetrics($providerArgs, $endpoint, $command); - - if (!empty($authSchemes = $endpoint->getProperty('authSchemes'))) { - $this->applyAuthScheme( - $authSchemes, - $command - ); - } - - return $nextHandler($command, $endpoint); - } - - /** - * Resolves client, context params, static context params and endpoint provider - * arguments provided at the command level. - * - * @param array $commandArgs - * @param Operation $operation - * - * @return array - */ - private function resolveArgs(array $commandArgs, Operation $operation): array - { - $rulesetParams = $this->endpointProvider->getActiveParameters(); - - if (isset($rulesetParams[self::ACCOUNT_ID_PARAM]) - && isset($rulesetParams[self::ACCOUNT_ID_ENDPOINT_MODE_PARAM])) { - $this->clientArgs[self::ACCOUNT_ID_PARAM] = $this->resolveAccountId(); - } - - $endpointCommandArgs = $this->filterEndpointCommandArgs( - $rulesetParams, - $commandArgs - ); - $staticContextParams = $this->bindStaticContextParams( - $operation->getStaticContextParams() - ); - $contextParams = $this->bindContextParams( - $commandArgs, $operation->getContextParams() - ); - $operationContextParams = $this->bindOperationContextParams( - $commandArgs, - $operation->getOperationContextParams() - ); - - return array_merge( - $this->clientArgs, - $operationContextParams, - $contextParams, - $staticContextParams, - $endpointCommandArgs - ); - } - - /** - * Compares Ruleset parameters against Command arguments - * to create a mapping of arguments to pass into the - * endpoint provider for endpoint resolution. - * - * @param array $rulesetParams - * @param array $commandArgs - * @return array - */ - private function filterEndpointCommandArgs( - array $rulesetParams, - array $commandArgs - ): array - { - $endpointMiddlewareOpts = [ - '@use_dual_stack_endpoint' => 'UseDualStack', - '@use_accelerate_endpoint' => 'Accelerate', - '@use_path_style_endpoint' => 'ForcePathStyle' - ]; - - $filteredArgs = []; - - foreach($rulesetParams as $name => $value) { - if (isset($commandArgs[$name])) { - if (!empty($value->getBuiltIn())) { - continue; - } - $filteredArgs[$name] = $commandArgs[$name]; - } - } - - if ($this->api->getServiceName() === 's3') { - foreach($endpointMiddlewareOpts as $optionName => $newValue) { - if (isset($commandArgs[$optionName])) { - $filteredArgs[$newValue] = $commandArgs[$optionName]; - } - } - } - - return $filteredArgs; - } - - /** - * Binds static context params to their corresponding values. - * - * @param $staticContextParams - * - * @return array - */ - private function bindStaticContextParams($staticContextParams): array - { - $scopedParams = []; - - forEach($staticContextParams as $paramName => $paramValue) { - $scopedParams[$paramName] = $paramValue['value']; - } - - return $scopedParams; - } - - /** - * Binds context params to their corresponding values found in - * command arguments. - * - * @param array $commandArgs - * @param array $contextParams - * - * @return array - */ - private function bindContextParams( - array $commandArgs, - array $contextParams - ): array - { - $scopedParams = []; - - foreach($contextParams as $name => $spec) { - if (isset($commandArgs[$spec['shape']])) { - $scopedParams[$name] = $commandArgs[$spec['shape']]; - } - } - - return $scopedParams; - } - - /** - * Binds context params to their corresponding values found in - * command arguments. - * - * @param array $commandArgs - * @param array $contextParams - * - * @return array - */ - private function bindOperationContextParams( - array $commandArgs, - array $operationContextParams - ): array - { - $scopedParams = []; - - foreach($operationContextParams as $name => $spec) { - $scopedValue = search($spec['path'], $commandArgs); - - if ($scopedValue) { - $scopedParams[$name] = $scopedValue; - } - } - - return $scopedParams; - } - - /** - * Applies resolved auth schemes to the command object. - * - * @param $authSchemes - * @param $command - * - * @return void - */ - private function applyAuthScheme( - array $authSchemes, - CommandInterface $command - ): void - { - $authScheme = $this->resolveAuthScheme($authSchemes); - - $command['@context']['signature_version'] = $authScheme['version']; - - if (isset($authScheme['name'])) { - $command['@context']['signing_service'] = $authScheme['name']; - } - - if (isset($authScheme['region'])) { - $command['@context']['signing_region'] = $authScheme['region']; - } elseif (isset($authScheme['signingRegionSet'])) { - $command['@context']['signing_region_set'] = $authScheme['signingRegionSet']; - } - } - - /** - * Returns the first compatible auth scheme in an endpoint object's - * auth schemes. - * - * @param array $authSchemes - * - * @return array - */ - private function resolveAuthScheme(array $authSchemes): array - { - $invalidAuthSchemes = []; - - foreach($authSchemes as $authScheme) { - if ($this->isValidAuthScheme($authScheme['name'])) { - return $this->normalizeAuthScheme($authScheme); - } - $invalidAuthSchemes[$authScheme['name']] = false; - } - - $invalidAuthSchemesString = '`' . implode( - '`, `', - array_keys($invalidAuthSchemes)) - . '`'; - $validAuthSchemesString = '`' - . implode('`, `', array_keys( - array_diff_key(self::$validAuthSchemes, $invalidAuthSchemes)) - ) - . '`'; - throw new UnresolvedAuthSchemeException( - "This operation requests {$invalidAuthSchemesString}" - . " auth schemes, but the client currently supports {$validAuthSchemesString}." - ); - } - - /** - * Normalizes an auth scheme's name, signing region or signing region set - * to the auth keys recognized by the SDK. - * - * @param array $authScheme - * @return array - */ - private function normalizeAuthScheme(array $authScheme): array - { - /* - sigv4a will contain a regionSet property. which is guaranteed to be `*` - for now. The SigV4 class handles this automatically for now. It seems - complexity will be added here in the future. - */ - $normalizedAuthScheme = []; - - if (isset($authScheme['disableDoubleEncoding']) - && $authScheme['disableDoubleEncoding'] === true - && $authScheme['name'] !== 'sigv4a' - && $authScheme['name'] !== 'sigv4-s3express' - ) { - $normalizedAuthScheme['version'] = 's3v4'; - } else { - $normalizedAuthScheme['version'] = self::$validAuthSchemes[$authScheme['name']]; - } - - $normalizedAuthScheme['name'] = $authScheme['signingName'] ?? null; - $normalizedAuthScheme['region'] = $authScheme['signingRegion'] ?? null; - $normalizedAuthScheme['signingRegionSet'] = $authScheme['signingRegionSet'] ?? null; - - return $normalizedAuthScheme; - } - - private function isValidAuthScheme($signatureVersion): bool - { - if (isset(self::$validAuthSchemes[$signatureVersion])) { - if ($signatureVersion === 'sigv4a') { - return extension_loaded('awscrt'); - } - return true; - } - - return false; - } - - /** - * This method tries to resolve an `AccountId` parameter from a resolved identity. - * We will just perform this operation if the parameter `AccountId` is part of the ruleset parameters and - * `AccountIdEndpointMode` is not disabled, otherwise, we will ignore it. - * - * @return null|string - */ - private function resolveAccountId(): ?string - { - if (isset($this->clientArgs[self::ACCOUNT_ID_ENDPOINT_MODE_PARAM]) - && $this->clientArgs[self::ACCOUNT_ID_ENDPOINT_MODE_PARAM] === 'disabled') { - return null; - } - - if (is_null($this->credentialProvider)) { - return null; - } - - $identityProviderFn = $this->credentialProvider; - $identity = $identityProviderFn()->wait(); - - return $identity->getAccountId(); - } - - private function appendEndpointMetrics( - array $providerArgs, - RulesetEndpoint $endpoint, - CommandInterface $command - ): void - { - // Resolved AccountId Metric - if (!empty($providerArgs[self::ACCOUNT_ID_PARAM])) { - $command->getMetricsBuilder()->append(MetricsBuilder::RESOLVED_ACCOUNT_ID); - } - // AccountIdMode Metric - if(!empty($providerArgs[self::ACCOUNT_ID_ENDPOINT_MODE_PARAM])) { - $command->getMetricsBuilder()->identifyMetricByValueAndAppend( - 'account_id_endpoint_mode', - $providerArgs[self::ACCOUNT_ID_ENDPOINT_MODE_PARAM] - ); - } - - // AccountId Endpoint Metric - $command->getMetricsBuilder()->identifyMetricByValueAndAppend( - 'account_id_endpoint', - $endpoint->getUrl() - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointV2SerializerTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointV2SerializerTrait.php deleted file mode 100644 index 951cbcbc3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointV2SerializerTrait.php +++ /dev/null @@ -1,77 +0,0 @@ -applyHeaders($endpoint, $headers); - $resolvedUrl = $endpoint->getUrl(); - $this->applyScheme($resolvedUrl); - $this->endpoint = $this instanceof RestSerializer - ? new Uri($resolvedUrl) - : $resolvedUrl; - } - - /** - * Combines modeled headers and headers resolved from an endpoint object. - * - * @param $endpoint - * @param $headers - * @return void - */ - private function applyHeaders(RulesetEndpoint $endpoint, array &$headers): void - { - if (!is_null($endpoint->getHeaders())) { - $headers = array_merge( - $headers, - $endpoint->getHeaders() - ); - } - } - - /** - * Applies custom HTTP schemes provided in client configuration. - * - * @param $resolvedUrl - * @return void - */ - private function applyScheme(&$resolvedUrl): void - { - $resolvedEndpointScheme = parse_url($resolvedUrl, PHP_URL_SCHEME); - $scheme = $this->endpoint instanceof Uri - ? $this->endpoint->getScheme() - : parse_url($this->endpoint, PHP_URL_SCHEME); - - if (!empty($scheme) && $scheme !== $resolvedEndpointScheme) { - $resolvedUrl = str_replace( - $resolvedEndpointScheme, - $scheme, - $resolvedUrl - ); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/AbstractRule.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/AbstractRule.php deleted file mode 100644 index adedb4e19..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/AbstractRule.php +++ /dev/null @@ -1,62 +0,0 @@ -conditions = $definition['conditions']; - $this->documentation = isset($definition['documentation']) ? - $definition['documentation'] : null; - } - - /** - * @return array - */ - public function getConditions() - { - return $this->conditions; - } - - /** - * @return mixed - */ - public function getDocumentation() - { - return $this->documentation; - } - - /** - * Determines if all conditions for a given rule are met. - * - * @return boolean - */ - protected function evaluateConditions( - array &$inputParameters, - RulesetStandardLibrary $standardLibrary - ) - { - foreach($this->getConditions() as $condition) { - $result = $standardLibrary->callFunction($condition, $inputParameters); - if (is_null($result) || $result === false) { - return false; - } - } - return true; - } - - abstract public function evaluate( - array $inputParameters, - RulesetStandardLibrary $standardLibrary - ); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/EndpointRule.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/EndpointRule.php deleted file mode 100644 index c3a0e9b7e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/EndpointRule.php +++ /dev/null @@ -1,111 +0,0 @@ -endpoint = $definition['endpoint']; - } - - /** - * @return array - */ - public function getEndpoint() - { - return $this->endpoint; - } - - /** - * If all the rule's conditions are met, return the resolved - * endpoint object. - * - * @return RulesetEndpoint | null - */ - public function evaluate(array $inputParameters, RulesetStandardLibrary $standardLibrary) - { - if ($this->evaluateConditions($inputParameters, $standardLibrary)) { - return $this->resolve($inputParameters, $standardLibrary); - } - return false; - } - - /** - * Given input parameters, resolve an endpoint in its entirety. - * - * @return RulesetEndpoint - */ - private function resolve( - array $inputParameters, - RulesetStandardLibrary $standardLibrary - ) - { - $uri = $standardLibrary->resolveValue($this->endpoint['url'], $inputParameters); - $properties = isset($this->endpoint['properties']) - ? $this->resolveProperties($this->endpoint['properties'], $inputParameters, $standardLibrary) - : null; - $headers = $this->resolveHeaders($inputParameters, $standardLibrary); - - return new RulesetEndpoint($uri, $properties, $headers); - } - - /** - * Recurse through an endpoint's `properties` attribute, resolving template - * strings when found. Return the fully resolved attribute. - * - * @return array - */ - private function resolveProperties( - $properties, - array $inputParameters, - RulesetStandardLibrary $standardLibrary - ) - { - if (is_array($properties)) { - $propertiesArr = []; - foreach($properties as $key => $val) { - $propertiesArr[$key] = $this->resolveProperties($val, $inputParameters, $standardLibrary); - } - return $propertiesArr; - } elseif ($standardLibrary->isTemplate($properties)) { - return $standardLibrary->resolveTemplateString($properties, $inputParameters); - } - return $properties; - } - - /** - * If present, iterate through an endpoint's headers attribute resolving - * values along the way. Return the fully resolved attribute. - * - * @return array - */ - private function resolveHeaders( - array $inputParameters, - RulesetStandardLibrary $standardLibrary - ) - { - $headers = isset($this->endpoint['headers']) ? $this->endpoint['headers'] : null; - if (is_null($headers)) { - return null; - } - $resolvedHeaders = []; - - foreach($headers as $headerName => $headerValues) { - $resolvedValues = []; - foreach($headerValues as $value) { - $resolvedValue = $standardLibrary->resolveValue($value, $inputParameters, $standardLibrary); - $resolvedValues[] = $resolvedValue; - } - $resolvedHeaders[$headerName] = $resolvedValues; - } - return $resolvedHeaders; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/ErrorRule.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/ErrorRule.php deleted file mode 100644 index 941624a12..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/ErrorRule.php +++ /dev/null @@ -1,45 +0,0 @@ -error = $definition['error']; - } - - /** - * @return array - */ - public function getError() - { - return $this->error; - } - - /** - * If an error rule's conditions are met, raise an - * UnresolvedEndpointError containing the fully resolved error string. - * - * @return null - * @throws UnresolvedEndpointException - */ - public function evaluate( - array $inputParameters, - RulesetStandardLibrary $standardLibrary - ) - { - if ($this->evaluateConditions($inputParameters, $standardLibrary)) { - $message = $standardLibrary->resolveValue($this->error, $inputParameters); - throw new UnresolvedEndpointException($message); - } - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/RuleCreator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/RuleCreator.php deleted file mode 100644 index 279477e81..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Rule/RuleCreator.php +++ /dev/null @@ -1,26 +0,0 @@ -rules = $this->createRules($definition['rules']); - } - - /** - * @return array - */ - public function getRules() - { - return $this->rules; - } - - /** - * If a tree rule's conditions evaluate successfully, iterate over its - * subordinate rules and return a result if there is one. If any of the - * subsequent rules are trees, the function will recurse until it reaches - * an error or an endpoint rule - * - * @return mixed - */ - public function evaluate( - array $inputParameters, - RulesetStandardLibrary $standardLibrary - ) - { - if ($this->evaluateConditions($inputParameters, $standardLibrary)) { - foreach($this->rules as $rule) { - $inputParametersCopy = $inputParameters; - $evaluation = $rule->evaluate($inputParametersCopy, $standardLibrary); - if ($evaluation !== false) { - return $evaluation; - } - } - } - return false; - } - - private function createRules(array $rules) - { - $rulesList = []; - - forEach($rules as $rule) { - $ruleType = RuleCreator::create($rule['type'], $rule); - $rulesList[] = $ruleType; - } - return $rulesList; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php deleted file mode 100644 index 21828c195..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php +++ /dev/null @@ -1,117 +0,0 @@ -version = $ruleset['version']; - $this->parameters = $this->createParameters($ruleset['parameters']); - $this->rules = $this->createRules($ruleset['rules']); - $this->standardLibrary = new RulesetStandardLibrary($partitions); - } - - /** - * @return mixed - */ - public function getVersion() - { - return $this->version; - } - - /** - * @return array - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * @return array - */ - public function getRules() - { - return $this->rules; - } - - /** - * Evaluate the ruleset against the input parameters. - * Return the first rule the parameters match against. - * - * @return mixed - */ - public function evaluate(array $inputParameters) - { - $this->validateInputParameters($inputParameters); - - foreach($this->rules as $rule) { - $evaluation = $rule->evaluate($inputParameters, $this->standardLibrary); - if ($evaluation !== false) { - return $evaluation; - } - } - return false; - } - - /** - * Ensures all corresponding client-provided parameters match - * the Ruleset parameter's specified type. - * - * @return void - */ - private function validateInputParameters(array &$inputParameters) - { - foreach($this->parameters as $paramName => $param) { - $inputParam = isset($inputParameters[$paramName]) ? $inputParameters[$paramName] : null; - - if (is_null($inputParam) && !is_null($param->getDefault())) { - $inputParameters[$paramName] = $param->getDefault(); - } elseif (!is_null($inputParam)) { - $param->validateInputParam($inputParam); - } - } - } - - private function createParameters(array $parameters) - { - $parameterList = []; - - foreach($parameters as $name => $definition) { - $parameterList[$name] = new RulesetParameter($name, $definition); - } - - return $parameterList; - } - - private function createRules(array $rules) - { - $rulesList = []; - - forEach($rules as $rule) { - $ruleObj = RuleCreator::create($rule['type'], $rule); - $rulesList[] = $ruleObj; - } - return $rulesList; - } -} - diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetEndpoint.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetEndpoint.php deleted file mode 100644 index 46f844e46..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetEndpoint.php +++ /dev/null @@ -1,63 +0,0 @@ -url = $url; - $this->properties = $properties; - $this->headers = $headers; - } - - /** - * @return mixed - */ - public function getUrl() - { - return $this->url; - } - - /** - * @param $property - * @return mixed - */ - public function getProperty($property) - { - if (isset($this->properties[$property])) { - return $this->properties[$property]; - } - - return null; - } - - /** - * @return mixed - */ - public function getProperties() - { - return $this->properties; - } - - /** - * @return mixed - */ - public function getHeaders() - { - return $this->headers; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetParameter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetParameter.php deleted file mode 100644 index 1a3322cd1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetParameter.php +++ /dev/null @@ -1,179 +0,0 @@ - */ - private static $typeMap = [ - 'String' => 'is_string', - 'Boolean' => 'is_bool', - 'StringArray' => 'isStringArray' - ]; - - public function __construct($name, array $definition) - { - $type = ucfirst($definition['type']); - if ($this->isValidType($type)) { - $this->type = $type; - } else { - throw new UnresolvedEndpointException( - 'Unknown parameter type ' . "`{$type}`" . - '. Parameters must be of type `String`, `Boolean` or `StringArray.' - ); - } - - $this->name = $name; - $this->builtIn = $definition['builtIn'] ?? null; - $this->default = $definition['default'] ?? null; - $this->required = $definition['required'] ?? false; - $this->documentation = $definition['documentation'] ?? null; - $this->deprecated = $definition['deprecated'] ?? false; - } - - /** - * @return mixed - */ - public function getName() - { - return $this->name; - } - - /** - * @return mixed - */ - public function getType() - { - return $this->type; - } - - /** - * @return mixed - */ - public function getBuiltIn() - { - return $this->builtIn; - } - - /** - * @return mixed - */ - public function getDefault() - { - return $this->default; - } - - /** - * @return boolean - */ - public function getRequired() - { - return $this->required; - } - - /** - * @return string - */ - public function getDocumentation() - { - return $this->documentation; - } - - /** - * @return boolean - */ - public function getDeprecated() - { - return $this->deprecated; - } - - /** - * Validates that an input parameter matches the type provided in its definition. - * - * @return void - * @throws InvalidArgumentException - */ - public function validateInputParam($inputParam) - { - if (!$this->isValidInput($inputParam)) { - throw new UnresolvedEndpointException( - "Input parameter `{$this->name}` is the wrong type. Must be a {$this->type}." - ); - } - - if ($this->deprecated) { - $deprecated = $this->deprecated; - $deprecationString = "{$this->name} has been deprecated "; - $msg = $deprecated['message'] ?? null; - $since = $deprecated['since'] ?? null; - - if (!is_null($since)){ - $deprecationString .= 'since ' . $since . '. '; - } - if (!is_null($msg)) { - $deprecationString .= $msg; - } - - trigger_error($deprecationString, E_USER_WARNING); - } - } - - private function isValidType($type) - { - return isset(self::$typeMap[$type]); - } - - private function isValidInput($inputParam): bool - { - $method = self::$typeMap[$this->type]; - if (is_callable($method)) { - return $method($inputParam); - } elseif (method_exists($this, $method)) { - return $this->$method($inputParam); - } - - return false; - } - - private function isStringArray(array $array): bool - { - if (is_associative($array)) { - return false; - } - - foreach($array as $value) { - if (!is_string($value)) { - return false; - } - } - - return true; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetStandardLibrary.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetStandardLibrary.php deleted file mode 100644 index a730c6572..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetStandardLibrary.php +++ /dev/null @@ -1,572 +0,0 @@ -partitions = $partitions; - } - - /** - * Determines if a value is set. - * - * @return boolean - */ - public function is_set($value) - { - return isset($value); - } - - /** - * Function implementation of logical operator `not` - * - * @return boolean - */ - public function not($value) - { - return !$value; - } - - /** - * Find an attribute within a value given a path string. - * - * @return mixed - */ - public function getAttr($from, $path) - { - // Handles the case where "[]" is provided as the top-level - // path. `\w` alone doesn't cover negative indices (e.g. `[-2]`) which - // the smithy rules engine uses to reference the second-to-last element, - // so we accept either a signed integer or a bare identifier. - if (preg_match('/^\[(-?\d+|\w+)\]$/', $path, $matches)) { - $token = $matches[1]; - if (is_numeric($token)) { - $index = (int) $token; - // Fold negative indices to Python-style access from the end, - // matching the reference engine's semantics. - if ($index < 0 && is_array($from)) { - $index += count($from); - } - return $from[$index] ?? null; - } - return $from[$token] ?? null; - } - - - $parts = explode('.', $path); - foreach ($parts as $part) { - $sliceIdx = strpos($part, '['); - if ($sliceIdx !== false) { - if (substr($part, -1) !== ']') { - return null; - } - $slice = (int) substr($part, $sliceIdx + 1, strlen($part) - 1); - $fromIndex = substr($part, 0, $sliceIdx); - $from = $from[$fromIndex][$slice] ?? null; - } else { - $from = $from[$part]; - } - } - return $from; - } - - /** - * Computes a substring given the start index and end index. If `reverse` is - * true, slice the string from the end instead. - * - * @return mixed - */ - public function substring($input, $start, $stop, $reverse) - { - if (!is_string($input)) { - throw new UnresolvedEndpointException( - 'Input passed to `substring` must be `string`.' - ); - } - - if (preg_match('/[^\x00-\x7F]/', $input)) { - return null; - } - if ($start >= $stop or strlen($input) < $stop) { - return null; - } - if (!$reverse) { - return substr($input, $start, $stop - $start); - } else { - $offset = strlen($input) - $stop; - $length = $stop - $start; - return substr($input, $offset, $length); - } - } - - /** - * Evaluates two strings for equality. - * - * @return boolean - */ - public function stringEquals($string1, $string2) - { - if (!is_string($string1) || !is_string($string2)) { - throw new UnresolvedEndpointException( - 'Values passed to StringEquals must be `string`.' - ); - } - return $string1 === $string2; - } - - /** - * Evaluates two booleans for equality. - * - * @return boolean - */ - public function booleanEquals($boolean1, $boolean2) - { - return - filter_var($boolean1, FILTER_VALIDATE_BOOLEAN) - === filter_var($boolean2, FILTER_VALIDATE_BOOLEAN); - } - - /** - * Percent-encodes an input string. - * - * @return mixed - */ - public function uriEncode($input) - { - if (is_null($input)) { - return null; - } - return str_replace('%7E', '~', rawurlencode($input)); - } - - /** - * Parses URL string into components. - * - * @return mixed - */ - public function parseUrl($url) - { - if (is_null($url)) { - return null; - } - - $parsed = parse_url($url); - - if ($parsed === false || !empty($parsed['query'])) { - return null; - } elseif (!isset($parsed['scheme'])) { - return null; - } - - if ($parsed['scheme'] !== 'http' - && $parsed['scheme'] !== 'https' - ) { - return null; - } - - $urlInfo = []; - $urlInfo['scheme'] = $parsed['scheme']; - $urlInfo['authority'] = $parsed['host'] ?? ''; - if (isset($parsed['port'])) { - $urlInfo['authority'] = $urlInfo['authority'] . ":" . $parsed['port']; - } - $urlInfo['path'] = $parsed['path'] ?? ''; - $urlInfo['normalizedPath'] = !empty($parsed['path']) - ? rtrim($urlInfo['path'] ?: '', '/' . "/") . '/' - : '/'; - $urlInfo['isIp'] = !isset($parsed['host']) ? - 'false' : $this->isValidIp($parsed['host']); - - return $urlInfo; - } - - /** - * Evaluates whether a value is a valid host label per - * RFC 1123. If allow_subdomains is true, split on `.` and validate - * each subdomain separately. - * - * @return boolean - */ - public function isValidHostLabel($hostLabel, $allowSubDomains) - { - if (!isset($hostLabel) - || (!$allowSubDomains && strpos($hostLabel, '.') != false) - ) { - return false; - } - - if ($allowSubDomains) { - foreach (explode('.', $hostLabel) as $subdomain) { - if (!$this->validateHostLabel($subdomain)) { - return false; - } - } - return true; - } else { - return $this->validateHostLabel($hostLabel); - } - } - - /** - * Parse and validate string for ARN components. - * - * @return array|null - */ - public function parseArn($arnString) - { - if (!is_string($arnString) - || strncmp($arnString, 'arn', 3) !== 0 - ) { - return null; - } - - $parts = explode(':', $arnString, 6); - if (count($parts) < 6) { - return null; - } - - $partition = $parts[1]; - $service = $parts[2]; - $region = $parts[3]; - $accountId = $parts[4]; - $resource = $parts[5]; - - if ($partition === '' - || $service === '' - || $resource === '' - ) { - return null; - } - - return [ - 'partition' => $partition, - 'service' => $service, - 'region' => $region, - 'accountId' => $accountId, - 'resourceId' => preg_split("/[:\/]/", $resource), - ]; - } - - /** - * Matches a region string to an AWS partition. - * - * @return mixed - */ - public function partition($region) - { - if (!is_string($region)) { - throw new UnresolvedEndpointException( - 'Value passed to `partition` must be `string`.' - ); - } - - $partitions = $this->partitions; - foreach ($partitions['partitions'] as $partition) { - if (array_key_exists($region, $partition['regions']) - || preg_match("/{$partition['regionRegex']}/", $region) - ) { - return $partition['outputs']; - } - } - //return `aws` partition if no match is found. - return $partitions['partitions'][0]['outputs']; - } - - /** - * Returns the first non-null argument, or null if every argument is null. - * Mirrors the standard library `coalesce` function and accepts any number - * of already-resolved values. - * - * @return mixed - */ - public function coalesce(...$values) - { - foreach ($values as $value) { - if (!is_null($value)) { - return $value; - } - } - return null; - } - - /** - * Splits a string on a delimiter up to an optional limit, returning an - * array of string parts. Mirrors the smithy `split` function: a `null` or - * `0` limit means "no limit", a positive limit caps the number of parts, - * and any other input (non-string, empty delimiter, negative limit) - * returns null so downstream conditions treat it as "no value". - * - * @return array|null - */ - public function split($input, $delimiter, $limit = null) - { - if (!is_string($input) || !is_string($delimiter) || $delimiter === '') { - return null; - } - - if (is_null($limit) || $limit === 0) { - return explode($delimiter, $input); - } - - if (!is_int($limit) || $limit < 0) { - return null; - } - - return explode($delimiter, $input, $limit); - } - - /** - * Functional if-then-else. Returns `$then` when `$condition` is truthy, - * otherwise `$else`. Arguments are resolved eagerly by the caller, which - * matches the rules engine semantics for function arguments. - * - * @return mixed - */ - public function ite($condition, $then, $else) - { - return filter_var($condition, FILTER_VALIDATE_BOOLEAN) ? $then : $else; - } - - /** - * Evaluates whether a value is a valid bucket name for virtual host - * style bucket URLs. - * - * @return boolean - */ - public function isVirtualHostableS3Bucket($bucketName, $allowSubdomains) - { - if ((is_null($bucketName) - || (strlen($bucketName) < 3 || strlen($bucketName) > 63)) - || preg_match(self::IPV4_RE, $bucketName) - || strtolower($bucketName) !== $bucketName - ) { - return false; - } - - if ($allowSubdomains) { - $labels = explode('.', $bucketName); - $results = []; - forEach($labels as $label) { - $results[] = $this->isVirtualHostableS3Bucket($label, false); - } - return !in_array(false, $results); - } - return $this->isValidHostLabel($bucketName, false); - } - - public function callFunction($funcCondition, &$inputParameters) - { - $argv = $funcCondition['argv']; - $assign = $funcCondition['assign'] ?? null; - $fn = $funcCondition['fn']; - switch ($fn) { - case 'aws.parseArn': - $result = $this->parseArn( - $this->resolveValue($argv[0], $inputParameters) - ); - break; - - case 'getAttr': - $result = $this->getAttr( - $this->resolveValue($argv[0], $inputParameters), - $argv[1] - ); - break; - - case 'stringEquals': - $result = $this->stringEquals( - $this->resolveValue($argv[0], $inputParameters), - $this->resolveValue($argv[1], $inputParameters) - ); - break; - - case 'booleanEquals': - $result = $this->booleanEquals( - $this->resolveValue($argv[0], $inputParameters), - $this->resolveValue($argv[1], $inputParameters) - ); - break; - - case 'isSet': - $arg = $argv[0]; - $result = isset($arg['ref']) - ? isset($inputParameters[$arg['ref']]) - : $this->is_set($this->resolveValue($arg, $inputParameters)); - break; - - case 'not': - $result = $this->not( - $this->resolveValue($argv[0], $inputParameters) - ); - break; - - case 'substring': - $result = $this->substring( - $this->resolveValue($argv[0], $inputParameters), - $this->resolveValue($argv[1], $inputParameters), - $this->resolveValue($argv[2], $inputParameters), - isset($argv[3]) - ? $this->resolveValue($argv[3], $inputParameters) - : false - ); - break; - - default: - $funcArgs = []; - foreach ($argv as $arg) { - $funcArgs[] = $this->resolveValue($arg, $inputParameters); - } - - $funcName = str_replace('aws.', '', $fn); - if ($funcName === 'isSet') { - $funcName = 'is_set'; - } - - if (!method_exists($this, $funcName)) { - throw new UnresolvedEndpointException( - "Unknown endpoint function `{$fn}`." - ); - } - - $result = call_user_func_array( - [$this, $funcName], - $funcArgs - ); - } - - if ($assign !== null) { - if (isset($inputParameters[$assign])) { - throw new UnresolvedEndpointException( - "Assignment `{$assign}` already exists in input parameters" . - " or has already been assigned by an endpoint rule and cannot be overwritten." - ); - } - $inputParameters[$assign] = $result; - } - return $result; - } - - public function resolveValue($value, $inputParameters) - { - //Given a value, check if it's a function, reference or template. - //returns resolved value - if (is_array($value)) { - if (isset($value['fn'])) { - return $this->callFunction($value, $inputParameters); - } - if (isset($value['ref'])) { - return $inputParameters[$value['ref']] ?? null; - } - } elseif (is_string($value) - && str_contains($value, '{') - && $this->isTemplate($value) - ) { - return $this->resolveTemplateString($value, $inputParameters); - } - - return $value; - } - - public function isFunc($arg) - { - return is_array($arg) && isset($arg['fn']); - } - - public function isRef($arg) - { - return is_array($arg) && isset($arg['ref']); - } - - public function isTemplate($arg) - { - return is_string($arg) - && str_contains($arg, '{') - && preg_match(self::TEMPLATE_SEARCH_RE, $arg) === 1; - } - - public function resolveTemplateString($value, $inputParameters) - { - return preg_replace_callback( - self::TEMPLATE_PARSE_RE, - function ($match) use ($inputParameters) { - if (str_starts_with($match[0], '{{')) { - return '{' . $match[1] . '}'; - } - - $notFoundMessage = 'Resolved value was null. Please check rules and ' . - 'input parameters and try again.'; - - $parts = explode("#", $match[2]); - if (count($parts) > 1) { - $resolvedValue = $inputParameters; - foreach($parts as $part) { - if (!isset($resolvedValue[$part])) { - throw new UnresolvedEndpointException($notFoundMessage); - } - $resolvedValue = $resolvedValue[$part]; - } - return $resolvedValue; - } else { - if (!isset($inputParameters[$parts[0]])) { - throw new UnresolvedEndpointException($notFoundMessage); - } - return $inputParameters[$parts[0]]; - } - }, - $value - ); - } - - private function validateHostLabel ($hostLabel) - { - if (empty($hostLabel) || strlen($hostLabel) > 63) { - return false; - } - if (preg_match(self::HOST_LABEL_RE, $hostLabel)) { - return true; - } - return false; - } - - private function isValidIp($hostName) - { - $isWrapped = strpos($hostName, '[') === 0 - && strrpos($hostName, ']') === strlen($hostName) - 1; - - return preg_match( - self::IPV4_RE, - $hostName - ) - //IPV6 enclosed in brackets - || ($isWrapped && preg_match( - self::IPV6_RE, - $hostName - )) - ? 'true' : 'false'; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/AwsException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/AwsException.php deleted file mode 100644 index 54d7549f0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/AwsException.php +++ /dev/null @@ -1,263 +0,0 @@ -data = $context['body'] ?? []; - $this->command = $command; - $this->response = $context['response'] ?? null; - $this->request = $context['request'] ?? null; - $this->requestId = $context['request_id'] ?? null; - $this->errorType = $context['type'] ?? null; - $this->errorCode = $context['code'] ?? null; - $this->errorShape = $context['error_shape'] ?? null; - $this->connectionError = !empty($context['connection_error']); - $this->result = $context['result'] ?? null; - $this->transferInfo = $context['transfer_stats'] ?? []; - $this->errorMessage = $context['message'] ?? null; - $this->monitoringEvents = []; - $this->maxRetriesExceeded = false; - parent::__construct($message, 0, $previous); - } - - public function __toString() - { - if (!$this->getPrevious()) { - return parent::__toString(); - } - - // PHP strangely shows the innermost exception first before the outer - // exception message. It also has a default character limit for - // exception message strings such that the "next" exception (this one) - // might not even get shown, causing developers to attempt to catch - // the inner exception instead of the actual exception because they - // can't see the outer exception's __toString output. - return sprintf( - "exception '%s' with message '%s'\n\n%s", - get_class($this), - $this->getMessage(), - parent::__toString() - ); - } - - /** - * Get the command that was executed. - * - * @return CommandInterface - */ - public function getCommand() - { - return $this->command; - } - - /** - * Get the concise error message if any. - * - * @return string|null - */ - public function getAwsErrorMessage() - { - return $this->errorMessage; - } - - /** - * Get the sent HTTP request if any. - * - * @return RequestInterface|null - */ - public function getRequest() - { - return $this->request; - } - - /** - * Get the received HTTP response if any. - * - * @return ResponseInterface|null - */ - public function getResponse() - { - return $this->response; - } - - /** - * Get the result of the exception if available - * - * @return ResultInterface|null - */ - public function getResult() - { - return $this->result; - } - - /** - * Returns true if this is a connection error. - * - * @return bool - */ - public function isConnectionError() - { - return $this->connectionError; - } - - /** - * If available, gets the HTTP status code of the corresponding response - * - * @return int|null - */ - public function getStatusCode() - { - return $this->response ? $this->response->getStatusCode() : null; - } - - /** - * Get the request ID of the error. This value is only present if a - * response was received and is not present in the event of a networking - * error. - * - * @return string|null Returns null if no response was received - */ - public function getAwsRequestId() - { - return $this->requestId; - } - - /** - * Get the AWS error type. - * - * @return string|null Returns null if no response was received - */ - public function getAwsErrorType() - { - return $this->errorType; - } - - /** - * Get the AWS error code. - * - * @return string|null Returns null if no response was received - */ - public function getAwsErrorCode() - { - return $this->errorCode; - } - - /** - * Get the AWS error shape. - * - * @return Shape|null Returns null if no response was received - */ - public function getAwsErrorShape() - { - return $this->errorShape; - } - - /** - * Get all transfer information as an associative array if no $name - * argument is supplied, or gets a specific transfer statistic if - * a $name attribute is supplied (e.g., 'retries_attempted'). - * - * @param string $name Name of the transfer stat to retrieve - * - * @return mixed|null|array - */ - public function getTransferInfo($name = null) - { - if (!$name) { - return $this->transferInfo; - } - - return $this->transferInfo[$name] ?? null; - } - - /** - * Replace the transfer information associated with an exception. - * - * @param array $info - */ - public function setTransferInfo(array $info) - { - $this->transferInfo = $info; - } - - /** - * Returns whether the max number of retries is exceeded. - * - * @return bool - */ - public function isMaxRetriesExceeded() - { - return $this->maxRetriesExceeded; - } - - /** - * Sets the flag for max number of retries exceeded. - */ - public function setMaxRetriesExceeded() - { - $this->maxRetriesExceeded = true; - } - - public function hasKey($name) - { - return isset($this->data[$name]); - } - - public function get($key) - { - return $this[$key]; - } - - public function search($expression) - { - return JmesPath::search($expression, $this->toArray()); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/CommonRuntimeException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/CommonRuntimeException.php deleted file mode 100644 index d17cd3a70..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/CommonRuntimeException.php +++ /dev/null @@ -1,7 +0,0 @@ -errorCode = $code; - $this->errorMessage = $message; - parent::__construct($message); - } - - /** - * Get the AWS error code. - * - * @return string|null Returns null if no response was received - */ - public function getAwsErrorCode() - { - return $this->errorCode; - } - - /** - * Get the concise error message if any. - * - * @return string|null - */ - public function getAwsErrorMessage() - { - return $this->errorMessage; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/IncalculablePayloadException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/IncalculablePayloadException.php deleted file mode 100644 index a64e7428f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/IncalculablePayloadException.php +++ /dev/null @@ -1,11 +0,0 @@ - 'uploading parts to']); - $msg .= ". The following parts had errors:\n"; - /** @var $error AwsException */ - foreach ($prev as $part => $error) { - $msg .= "- Part {$part}: " . $error->getMessage(). "\n"; - } - } elseif ($prev instanceof AwsException) { - switch ($prev->getCommand()->getName()) { - case 'CreateMultipartUpload': - case 'InitiateMultipartUpload': - $action = 'initiating'; - break; - case 'CompleteMultipartUpload': - $action = 'completing'; - break; - } - if (isset($action)) { - $msg = strtr($msg, ['performing' => $action]); - } - $msg .= ": {$prev->getMessage()}"; - } - - if (!$prev instanceof \Exception) { - $prev = null; - } - - parent::__construct($msg, 0, $prev); - $this->state = $state; - } - - /** - * Get the state of the transfer - * - * @return UploadState - */ - public function getState() - { - return $this->state; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/TokenException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/TokenException.php deleted file mode 100644 index f66960158..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Exception/TokenException.php +++ /dev/null @@ -1,11 +0,0 @@ -client = $client ?: new Client(); - } - - /** - * @param Psr7Request $request - * @param array $options - * - * @return Promise\PromiseInterface - */ - public function __invoke(Psr7Request $request, array $options = []) - { - $request = $request->withHeader( - 'User-Agent', - $request->getHeaderLine('User-Agent') - . ' ' . Utils::defaultUserAgent() - ); - - return $this->client->sendAsync($request, $this->parseOptions($options)) - ->otherwise( - static function (\Throwable $e) { - return new Promise\RejectedPromise([ - 'exception' => $e, - 'connection_error' => HttpHandlerError::isConnectionError($e), - 'response' => HttpHandlerError::getResponse($e), - ]); - } - ); - } - - private function parseOptions(array $options) - { - if (isset($options['http_stats_receiver'])) { - $fn = $options['http_stats_receiver']; - unset($options['http_stats_receiver']); - - $prev = isset($options['on_stats']) - ? $options['on_stats'] - : null; - - $options['on_stats'] = static function ( - TransferStats $stats - ) use ($fn, $prev) { - if (is_callable($prev)) { - $prev($stats); - } - $transferStats = ['total_time' => $stats->getTransferTime()]; - $transferStats += $stats->getHandlerStats(); - $fn($transferStats); - }; - } - - return $options; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Handler/GuzzleV6/GuzzleHandler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Handler/GuzzleV6/GuzzleHandler.php deleted file mode 100644 index 9d08d2a81..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Handler/GuzzleV6/GuzzleHandler.php +++ /dev/null @@ -1,11 +0,0 @@ -getHandlerContext(); - - return !empty($context['errno']) && $context['errno'] === self::CURLE_RECV_ERROR; - } - - return false; - } - - public static function getResponse(\Throwable $exception): ?ResponseInterface - { - // Guzzle 8: response-aware failures expose the response through ResponseException. - if ($exception instanceof ResponseException) { - return $exception->getResponse(); - } - - // Guzzle 7: RequestException directly carried an optional response. - if ($exception instanceof RequestException && is_callable([$exception, 'getResponse']) - ) { - return $exception->getResponse(); - } - - return null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HandlerList.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HandlerList.php deleted file mode 100644 index e25b08bf0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HandlerList.php +++ /dev/null @@ -1,469 +0,0 @@ - [], - self::SIGN => [], - self::BUILD => [], - self::VALIDATE => [], - self::INIT => [], - ]; - - /** - * @param callable $handler HTTP handler. - */ - public function __construct(?callable $handler = null) - { - $this->handler = $handler; - } - - /** - * Dumps a string representation of the list. - * - * @return string - */ - public function __toString() - { - $str = ''; - $i = 0; - - foreach (array_reverse($this->steps) as $k => $step) { - foreach (array_reverse($step) as $j => $tuple) { - $str .= "{$i}) Step: {$k}, "; - if ($tuple[1]) { - $str .= "Name: {$tuple[1]}, "; - } - $str .= "Function: " . $this->debugCallable($tuple[0]) . "\n"; - $i++; - } - } - - if ($this->handler) { - $str .= "{$i}) Handler: " . $this->debugCallable($this->handler) . "\n"; - } - - return $str; - } - - /** - * Set the HTTP handler that actually returns a response. - * - * @param callable $handler Function that accepts a request and array of - * options and returns a Promise. - */ - public function setHandler(callable $handler) - { - $this->handler = $handler; - } - - /** - * Returns true if the builder has a handler. - * - * @return bool - */ - public function hasHandler() - { - return (bool) $this->handler; - } - - /** - * Checks if a middleware exists. The middleware - * should have been added with a name in order to - * use this method. - * - * @param string $name - * - * @return bool - */ - public function hasMiddleware(string $name): bool - { - return isset($this->named[$name]); - } - - /** - * Append a middleware to the init step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function appendInit(callable $middleware, $name = null) - { - $this->add(self::INIT, $name, $middleware); - } - - /** - * Prepend a middleware to the init step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function prependInit(callable $middleware, $name = null) - { - $this->add(self::INIT, $name, $middleware, true); - } - - /** - * Append a middleware to the validate step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function appendValidate(callable $middleware, $name = null) - { - $this->add(self::VALIDATE, $name, $middleware); - } - - /** - * Prepend a middleware to the validate step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function prependValidate(callable $middleware, $name = null) - { - $this->add(self::VALIDATE, $name, $middleware, true); - } - - /** - * Append a middleware to the build step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function appendBuild(callable $middleware, $name = null) - { - $this->add(self::BUILD, $name, $middleware); - } - - /** - * Prepend a middleware to the build step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function prependBuild(callable $middleware, $name = null) - { - $this->add(self::BUILD, $name, $middleware, true); - } - - /** - * Append a middleware to the sign step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function appendSign(callable $middleware, $name = null) - { - $this->add(self::SIGN, $name, $middleware); - } - - /** - * Prepend a middleware to the sign step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function prependSign(callable $middleware, $name = null) - { - $this->add(self::SIGN, $name, $middleware, true); - } - - /** - * Append a middleware to the attempt step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function appendAttempt(callable $middleware, $name = null) - { - $this->add(self::ATTEMPT, $name, $middleware); - } - - /** - * Prepend a middleware to the attempt step. - * - * @param callable $middleware Middleware function to add. - * @param string $name Name of the middleware. - */ - public function prependAttempt(callable $middleware, $name = null) - { - $this->add(self::ATTEMPT, $name, $middleware, true); - } - - /** - * Add a middleware before the given middleware by name. - * - * @param string|callable $findName Add before this - * @param string $withName Optional name to give the middleware - * @param callable $middleware Middleware to add. - */ - public function before($findName, $withName, callable $middleware) - { - $this->splice($findName, $withName, $middleware, true); - } - - /** - * Add a middleware after the given middleware by name. - * - * @param string|callable $findName Add after this - * @param string $withName Optional name to give the middleware - * @param callable $middleware Middleware to add. - */ - public function after($findName, $withName, callable $middleware) - { - $this->splice($findName, $withName, $middleware, false); - } - - /** - * Remove a middleware by name or by instance from the list. - * - * @param string|callable $nameOrInstance Middleware to remove. - */ - public function remove($nameOrInstance) - { - if (is_callable($nameOrInstance)) { - $this->removeByInstance($nameOrInstance); - } elseif (is_string($nameOrInstance)) { - $this->removeByName($nameOrInstance); - } - } - - /** - * Interpose a function between each middleware (e.g., allowing for a trace - * through the middleware layers). - * - * The interpose function is a function that accepts a "step" argument as a - * string and a "name" argument string. This function must then return a - * function that accepts the next handler in the list. This function must - * then return a function that accepts a CommandInterface and optional - * RequestInterface and returns a promise that is fulfilled with an - * Aws\ResultInterface or rejected with an Aws\Exception\AwsException - * object. - * - * @param callable|null $fn Pass null to remove any previously set function - */ - public function interpose(?callable $fn = null) - { - $this->sorted = null; - $this->interposeFn = $fn; - } - - /** - * Compose the middleware and handler into a single callable function. - * - * @return callable - */ - public function resolve() - { - if (!($prev = $this->handler)) { - throw new \LogicException('No handler has been specified'); - } - - if ($this->sorted === null) { - $this->sortMiddleware(); - } - - foreach ($this->sorted as $fn) { - $prev = $fn($prev); - } - - return $prev; - } - - /** - * @return int - */ - #[\ReturnTypeWillChange] - public function count() - { - return count($this->steps[self::INIT]) - + count($this->steps[self::VALIDATE]) - + count($this->steps[self::BUILD]) - + count($this->steps[self::SIGN]) - + count($this->steps[self::ATTEMPT]); - } - - /** - * Splices a function into the middleware list at a specific position. - * - * @param $findName - * @param $withName - * @param callable $middleware - * @param $before - */ - private function splice($findName, $withName, callable $middleware, $before) - { - if (!isset($this->named[$findName])) { - throw new \InvalidArgumentException("$findName not found"); - } - - $idx = $this->sorted = null; - $step = $this->named[$findName]; - - if ($withName) { - $this->named[$withName] = $step; - } - - foreach ($this->steps[$step] as $i => $tuple) { - if ($tuple[1] === $findName) { - $idx = $i; - break; - } - } - - $replacement = $before - ? [$this->steps[$step][$idx], [$middleware, $withName]] - : [[$middleware, $withName], $this->steps[$step][$idx]]; - array_splice($this->steps[$step], $idx, 1, $replacement); - } - - /** - * Provides a debug string for a given callable. - * - * @param array|callable $fn Function to write as a string. - * - * @return string - */ - private function debugCallable($fn) - { - if (is_string($fn)) { - return "callable({$fn})"; - } - - if (is_array($fn)) { - $ele = is_string($fn[0]) ? $fn[0] : get_class($fn[0]); - return "callable(['{$ele}', '{$fn[1]}'])"; - } - - return 'callable(' . spl_object_hash($fn) . ')'; - } - - /** - * Sort the middleware, and interpose if needed in the sorted list. - */ - private function sortMiddleware() - { - $this->sorted = []; - - if (!$this->interposeFn) { - foreach ($this->steps as $step) { - foreach ($step as $fn) { - $this->sorted[] = $fn[0]; - } - } - return; - } - - $ifn = $this->interposeFn; - // Interpose the interposeFn into the handler stack. - foreach ($this->steps as $stepName => $step) { - foreach ($step as $fn) { - $this->sorted[] = $ifn($stepName, $fn[1]); - $this->sorted[] = $fn[0]; - } - } - } - - private function removeByName($name) - { - if (!isset($this->named[$name])) { - return; - } - - $this->sorted = null; - $step = $this->named[$name]; - $this->steps[$step] = array_values( - array_filter( - $this->steps[$step], - function ($tuple) use ($name) { - return $tuple[1] !== $name; - } - ) - ); - } - - private function removeByInstance(callable $fn) - { - foreach ($this->steps as $k => $step) { - foreach ($step as $j => $tuple) { - if ($tuple[0] === $fn) { - $this->sorted = null; - unset($this->named[$this->steps[$k][$j][1]]); - unset($this->steps[$k][$j]); - } - } - } - } - - /** - * Add a middleware to a step. - * - * @param string $step Middleware step. - * @param string $name Middleware name. - * @param callable $middleware Middleware function to add. - * @param bool $prepend Prepend instead of append. - */ - private function add($step, $name, callable $middleware, $prepend = false) - { - $this->sorted = null; - - if ($prepend) { - $this->steps[$step][] = [$middleware, $name]; - } else { - array_unshift($this->steps[$step], [$middleware, $name]); - } - - if ($name) { - $this->named[$name] = $step; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HasDataTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HasDataTrait.php deleted file mode 100644 index 5910fff52..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HasDataTrait.php +++ /dev/null @@ -1,81 +0,0 @@ -data); - } - - /** - * This method returns a reference to the variable to allow for indirect - * array modification (e.g., $foo['bar']['baz'] = 'qux'). - * - * @param $offset - * - * @return mixed|null - */ - #[\ReturnTypeWillChange] - public function & offsetGet($offset) - { - if (isset($this->data[$offset])) { - return $this->data[$offset]; - } - - $value = null; - return $value; - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function offsetSet($offset, $value) - { - $this->data[$offset] = $value; - } - - /** - * @return bool - */ - #[\ReturnTypeWillChange] - public function offsetExists($offset) - { - return isset($this->data[$offset]); - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function offsetUnset($offset) - { - unset($this->data[$offset]); - } - - public function toArray() - { - return $this->data; - } - - /** - * @return int - */ - #[\ReturnTypeWillChange] - public function count() - { - return count($this->data); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HasMonitoringEventsTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HasMonitoringEventsTrait.php deleted file mode 100644 index b28f0a462..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HasMonitoringEventsTrait.php +++ /dev/null @@ -1,39 +0,0 @@ -monitoringEvents; - } - - /** - * Prepend a client-side monitoring event to this object's event list - * - * @param array $event - */ - public function prependMonitoringEvent(array $event) - { - array_unshift($this->monitoringEvents, $event); - } - - /** - * Append a client-side monitoring event to this object's event list - * - * @param array $event - */ - public function appendMonitoringEvent(array $event) - { - $this->monitoringEvents []= $event; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HashInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HashInterface.php deleted file mode 100644 index 6304e4dfe..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/HashInterface.php +++ /dev/null @@ -1,27 +0,0 @@ -stream = $stream; - $this->hash = $hash; - $this->callback = $onComplete; - } - - public function read($length): string - { - $data = $this->stream->read($length); - $this->hash->update($data); - if ($this->eof()) { - $result = $this->hash->complete(); - if ($this->callback) { - call_user_func($this->callback, $result); - } - } - - return $data; - } - - public function seek($offset, $whence = SEEK_SET): void - { - // Seeking arbitrarily is not supported. - if ($offset !== 0) { - return; - } - - $this->hash->reset(); - $this->stream->seek($offset); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/History.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/History.php deleted file mode 100644 index 9f8a3bf04..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/History.php +++ /dev/null @@ -1,161 +0,0 @@ -maxEntries = $maxEntries; - } - - /** - * @return int - */ - #[\ReturnTypeWillChange] - public function count() - { - return count($this->entries); - } - - #[\ReturnTypeWillChange] - public function getIterator() - { - return new \ArrayIterator(array_values($this->entries)); - } - - /** - * Get the last finished command seen by the history container. - * - * @return CommandInterface - * @throws \LogicException if no commands have been seen. - */ - public function getLastCommand() - { - if (!$this->entries) { - throw new \LogicException('No commands received'); - } - - return end($this->entries)['command']; - } - - /** - * Get the last finished request seen by the history container. - * - * @return RequestInterface - * @throws \LogicException if no requests have been seen. - */ - public function getLastRequest() - { - if (!$this->entries) { - throw new \LogicException('No requests received'); - } - - return end($this->entries)['request']; - } - - /** - * Get the last received result or exception. - * - * @return ResultInterface|AwsException - * @throws \LogicException if no return values have been received. - */ - public function getLastReturn() - { - if (!$this->entries) { - throw new \LogicException('No entries'); - } - - $last = end($this->entries); - - if (isset($last['result'])) { - return $last['result']; - } - - if (isset($last['exception'])) { - return $last['exception']; - } - - throw new \LogicException('No return value for last entry.'); - } - - /** - * Initiate an entry being added to the history. - * - * @param CommandInterface $cmd Command be executed. - * @param RequestInterface $req Request being sent. - * - * @return string Returns the ticket used to finish the entry. - */ - public function start(CommandInterface $cmd, RequestInterface $req) - { - $ticket = uniqid(); - $this->entries[$ticket] = [ - 'command' => $cmd, - 'request' => $req, - 'result' => null, - 'exception' => null, - ]; - - return $ticket; - } - - /** - * Finish adding an entry to the history container. - * - * @param string $ticket Ticket returned from the start call. - * @param mixed $result The result (an exception or AwsResult). - */ - public function finish($ticket, $result) - { - if (!isset($this->entries[$ticket])) { - throw new \InvalidArgumentException('Invalid history ticket'); - } - - if (isset($this->entries[$ticket]['result']) - || isset($this->entries[$ticket]['exception']) - ) { - throw new \LogicException('History entry is already finished'); - } - - if ($result instanceof \Exception) { - $this->entries[$ticket]['exception'] = $result; - } else { - $this->entries[$ticket]['result'] = $result; - } - - if (count($this->entries) >= $this->maxEntries) { - $this->entries = array_slice($this->entries, -$this->maxEntries, null, true); - } - } - - /** - * Flush the history - */ - public function clear() - { - $this->entries = []; - } - - /** - * Converts the history to an array. - * - * @return array - */ - public function toArray() - { - return array_values($this->entries); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/IdempotencyTokenMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/IdempotencyTokenMiddleware.php deleted file mode 100644 index c87d0bba6..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/IdempotencyTokenMiddleware.php +++ /dev/null @@ -1,120 +0,0 @@ -bytesGenerator = $bytesGenerator - ?: $this->findCompatibleRandomSource(); - $this->service = $service; - $this->nextHandler = $nextHandler; - } - - public function __invoke( - CommandInterface $command, - ?RequestInterface $request = null - ) { - $handler = $this->nextHandler; - if ($this->bytesGenerator) { - $operation = $this->service->getOperation($command->getName()); - $members = $operation->getInput()->getMembers(); - foreach ($members as $member => $value) { - if ($value['idempotencyToken']) { - $bytes = call_user_func($this->bytesGenerator, 16); - // populating UUIDv4 only when the parameter is not set - $command[$member] = $command[$member] - ?: $this->getUuidV4($bytes); - // only one member could have the trait enabled - break; - } - } - } - return $handler($command, $request); - } - - /** - * This function generates a random UUID v4 string, - * which is used as auto filled token value. - * - * @param string $bytes 16 bytes of pseudo-random bytes - * @return string - * More information about UUID v4, see: - * https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29 - * https://tools.ietf.org/html/rfc4122#page-14 - */ - private static function getUuidV4($bytes) - { - // set version to 0100 - $bytes[6] = chr(ord($bytes[6]) & 0x0f | 0x40); - // set bits 6-7 to 10 - $bytes[8] = chr(ord($bytes[8]) & 0x3f | 0x80); - return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($bytes), 4)); - } - - /** - * This function decides the PHP function used in generating random bytes. - * - * @return callable|null - */ - private function findCompatibleRandomSource() - { - if (function_exists('random_bytes')) { - return 'random_bytes'; - } - - if (function_exists('openssl_random_pseudo_bytes')) { - return 'openssl_random_pseudo_bytes'; - } - - if (function_exists('mcrypt_create_iv')) { - return 'mcrypt_create_iv'; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Identity/AwsCredentialIdentity.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Identity/AwsCredentialIdentity.php deleted file mode 100644 index f7971126a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Identity/AwsCredentialIdentity.php +++ /dev/null @@ -1,19 +0,0 @@ -cache = new LruArrayCache(100); - $this->region = $clientRegion; - $this->config = $config; - } - - public function __invoke($command) - { - $s3Client = $this->getS3Client(); - $bucket = $command['Bucket']; - if ($identity = $this->cache->get($bucket)) { - if (!$identity->isExpired()) { - return Promise\Create::promiseFor($identity); - } - } - $response = $s3Client->createSession(['Bucket' => $bucket]); - $identity = new Aws\Identity\S3\S3ExpressIdentity( - $response['Credentials']['AccessKeyId'], - $response['Credentials']['SecretAccessKey'], - $response['Credentials']['SessionToken'], - $response['Credentials']['Expiration']->getTimestamp() - ); - $this->cache->set($bucket, $identity); - return Promise\Create::promiseFor($identity); - } - - private function getS3Client() - { - if (is_null($this->s3Client)) { - $this->s3Client = $this->config['client'] - ?? new Aws\S3\S3Client([ - 'region' => $this->region, - 'disable_express_session_auth' => true - ]); - } - return $this->s3Client; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php deleted file mode 100644 index 0c5a24dcc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php +++ /dev/null @@ -1,74 +0,0 @@ -service = $service; - $this->nextHandler = $nextHandler; - $this->mandatoryAttributeList = $mandatoryAttributeList; - } - - public function __invoke(CommandInterface $cmd) { - $nextHandler = $this->nextHandler; - $op = $this->service->getOperation($cmd->getName())->toArray(); - if (!empty($op['input']['shape'])) { - $service = $this->service->toArray(); - if (!empty($input = $service['shapes'][$op['input']['shape']])) { - if (!empty($input['required'])) { - foreach ($input['required'] as $key => $member) { - if (in_array($member, $this->mandatoryAttributeList)) { - $argument = is_string($cmd[$member]) ? trim($cmd[$member]) : $cmd[$member]; - if ($argument === '' || $argument === null) { - $commandName = $cmd->getName(); - throw new \InvalidArgumentException( - "The {$commandName} operation requires non-empty parameter: {$member}" - ); - } - } - } - } - } - } - return $nextHandler($cmd); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/JsonCompiler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/JsonCompiler.php deleted file mode 100644 index 5358b315a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/JsonCompiler.php +++ /dev/null @@ -1,25 +0,0 @@ -maxItems = $maxItems; - } - - public function get($key) - { - $key = $key ?? ''; - if (!isset($this->items[$key])) { - return null; - } - - $entry = $this->items[$key]; - - // Ensure the item is not expired. - if (!$entry[1] || time() < $entry[1]) { - // LRU: remove the item and push it to the end of the array. - unset($this->items[$key]); - $this->items[$key] = $entry; - return $entry[0]; - } - - unset($this->items[$key]); - return null; - } - - public function set($key, $value, $ttl = 0) - { - $key = $key ?? ''; - // Only call time() if the TTL is not 0/false/null - $ttl = $ttl ? time() + $ttl : 0; - $this->items[$key] = [$value, $ttl]; - - // Determine if there are more items in the cache than allowed. - $diff = count($this->items) - $this->maxItems; - - // Clear out least recently used items. - if ($diff > 0) { - // Reset to the beginning of the array and begin unsetting. - reset($this->items); - for ($i = 0; $i < $diff; $i++) { - unset($this->items[key($this->items)]); - next($this->items); - } - } - } - - public function remove($key) - { - $key = $key ?? ''; - unset($this->items[$key]); - } - - /** - * @return int - */ - #[\ReturnTypeWillChange] - public function count() - { - return count($this->items); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MetricsBuilder.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MetricsBuilder.php deleted file mode 100644 index af11847af..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MetricsBuilder.php +++ /dev/null @@ -1,506 +0,0 @@ -metrics = []; - // The first metrics does not include the separator - // therefore it is reduced by default. - $this->metricsSize = -(strlen(self::$METRIC_SEPARATOR)); - } - - /** - * Build the metrics string value. - * - * @return string - */ - public function build(): string - { - if (empty($this->metrics)) { - return ""; - } - - return $this->encode(); - } - - /** - * Encodes the metrics by separating each metric - * with a comma. Example: for the metrics[A,B,C] then - * the output would be "A,B,C". - * - * @return string - */ - private function encode(): string - { - return implode(self::$METRIC_SEPARATOR, array_keys($this->metrics)); - } - - /** - * Appends a metric to the internal metrics holder after validating it. - * Increases the current metrics size by the length of the new metric - * plus the length of the encoding separator. - * Example: $currentSize = $currentSize + len($newMetric) + len($separator) - * - * @param string $metric The metric to append. - * - * @return void - */ - public function append(string $metric): void - { - if (!$this->canMetricBeAppended($metric)) { - return; - } - - $this->metrics[$metric] = true; - $this->metricsSize += strlen($metric) + strlen(self::$METRIC_SEPARATOR); - } - - /** - * Receives a feature group and a value to identify which one is the metric. - * For example, a group could be `signature` and a value could be `v4a`, - * then the metric will be `SIGV4A_SIGNING`. - * - * @param string $featureGroup the feature group such as `signature`. - * @param mixed $value the value for identifying the metric. - * - * @return void - */ - public function identifyMetricByValueAndAppend( - string $featureGroup, - mixed $value - ): void - { - if (empty($value)) { - return; - } - - static $appendMetricFns = [ - 'signature' => 'appendSignatureMetric', - 'request_compression' => 'appendRequestCompressionMetric', - 'request_checksum' => 'appendRequestChecksumMetric', - 'credentials' => 'appendCredentialsMetric', - 'account_id_endpoint_mode' => 'appendAccountIdEndpointMode', - 'account_id_endpoint' => 'appendAccountIdEndpoint', - 'request_checksum_calculation' => 'appendRequestChecksumCalculationMetric', - 'token' => 'appendTokenMetric' - ]; - - $fn = $appendMetricFns[$featureGroup]; - $this->{$fn}($value); - } - - /** - * Appends the signature metric based on the signature value. - * - * @param string $signature - * - * @return void - */ - private function appendSignatureMetric(string $signature): void - { - if ($signature === 'v4-s3express') { - $this->append(self::S3_EXPRESS_BUCKET); - } elseif ($signature === 'v4a') { - $this->append(self::SIGV4A_SIGNING); - } - } - - /** - * Appends the request compression metric based on the format resolved. - * - * @param string $format - * - * @return void - */ - private function appendRequestCompressionMetric(string $format): void - { - if ($format === 'gzip') { - $this->append(self::GZIP_REQUEST_COMPRESSION); - } - } - - /** - * Appends the request checksum metric based on the algorithm. - * - * @param string $algorithm - * - * @return void - */ - private function appendRequestChecksumMetric(string $algorithm): void - { - if ($algorithm === 'crc32') { - $this->append(self::FLEXIBLE_CHECKSUMS_REQ_CRC32); - } elseif ($algorithm === 'crc32c') { - $this->append(self::FLEXIBLE_CHECKSUMS_REQ_CRC32C); - } elseif ($algorithm === 'crc64') { - $this->append(self::FLEXIBLE_CHECKSUMS_REQ_CRC64); - } elseif ($algorithm === 'sha1') { - $this->append(self::FLEXIBLE_CHECKSUMS_REQ_SHA1); - } elseif ($algorithm === 'sha256') { - $this->append(self::FLEXIBLE_CHECKSUMS_REQ_SHA256); - } - } - - - /** - * Appends the credentials metric based on the type of credentials - * resolved. - * - * @param CredentialsInterface $credentials - * - * @return void - */ - private function appendCredentialsMetric( - CredentialsInterface $credentials - ): void - { - $source = $credentials->toArray()['source'] ?? null; - if (empty($source)) { - return; - } - - static $credentialsMetricMapping = [ - CredentialSources::STATIC => - self::CREDENTIALS_CODE, - CredentialSources::ENVIRONMENT => - self::CREDENTIALS_ENV_VARS, - CredentialSources::ENVIRONMENT_STS_WEB_ID_TOKEN => - self::CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN, - CredentialSources::STS_ASSUME_ROLE => - self::CREDENTIALS_STS_ASSUME_ROLE, - CredentialSources::STS_WEB_ID_TOKEN => - self::CREDENTIALS_STS_ASSUME_ROLE_WEB_ID, - CredentialSources::PROFILE => - self::CREDENTIALS_PROFILE, - CredentialSources::IMDS => - self::CREDENTIALS_IMDS, - CredentialSources::ECS => - self::CREDENTIALS_HTTP, - CredentialSources::PROFILE_STS_WEB_ID_TOKEN => - self::CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN, - CredentialSources::PROFILE_PROCESS => - self::CREDENTIALS_PROFILE_PROCESS, - CredentialSources::PROFILE_SSO => - self::CREDENTIALS_PROFILE_SSO, - CredentialSources::PROFILE_SSO_LEGACY => - self::CREDENTIALS_PROFILE_SSO_LEGACY, - CredentialSources::PROFILE_LOGIN => - self::CREDENTIALS_PROFILE_LOGIN - ]; - if (isset($credentialsMetricMapping[$source])) { - $this->append($credentialsMetricMapping[$source]); - } - } - - private function appendTokenMetric(TokenInterface $token): void - { - $source = $token->getSource(); - if (empty($source)) { - return; - } - - static $tokenMetricMapping = [ - 'bearer_service_env_vars' => self::BEARER_SERVICE_ENV_VARS - ]; - - if (isset($tokenMetricMapping[$source])) { - $this->append($tokenMetricMapping[$source]); - } - } - - private function appendRequestChecksumCalculationMetric( - string $checkSumCalculation - ): void - { - static $checksumCalculationMetricMapping = [ - 'when_supported' => self::FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED, - 'when_required' => self::FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED, - ]; - - if (isset($checksumCalculationMetricMapping[$checkSumCalculation])) { - $this->append($checksumCalculationMetricMapping[$checkSumCalculation]); - } - } - - /** - * Appends the account_id_endpoint_mode metrics based on - * the value resolved. - * - * @param string $accountIdEndpointMode - * - * @return void - */ - private function appendAccountIdEndpointMode( - string $accountIdEndpointMode - ): void - { - if (empty($accountIdEndpointMode)) { - return; - } - - if ($accountIdEndpointMode === 'preferred') { - $this->append(self::ACCOUNT_ID_MODE_PREFERRED); - } elseif ($accountIdEndpointMode === 'disabled') { - $this->append(self::ACCOUNT_ID_MODE_DISABLED); - } elseif ($accountIdEndpointMode === 'required') { - $this->append(self::ACCOUNT_ID_MODE_REQUIRED); - } - } - - /** - * Appends the account_id_endpoint metric whenever a resolved endpoint - * matches an account_id endpoint pattern which also defined here. - * - * @param string $endpoint - * - * @return void - */ - private function appendAccountIdEndpoint(string $endpoint): void - { - static $pattern = "/(https|http):\\/\\/\\d{12}\\.ddb/"; - if (preg_match($pattern, $endpoint)) { - $this->append(self::ACCOUNT_ID_ENDPOINT); - } - } - - /** - * Resolves metrics from client arguments. - * - * @param array $args - * - * @return void - */ - public function resolveAndAppendFromArgs(array $args = []): void - { - static $metricsFnList = [ - 'appendEndpointMetric', - 'appendRetryConfigMetric', - 'appendResponseChecksumValidationMetric', - ]; - foreach ($metricsFnList as $metricFn) { - $this->{$metricFn}($args); - } - } - - /** - * Appends the endpoint metric into the metrics builder, - * just if a custom endpoint was provided at client construction. - * - * @param array $args - * - * @return void - */ - private function appendEndpointMetric(array $args): void - { - if (!empty($args['endpoint_override'])) { - $this->append(MetricsBuilder::ENDPOINT_OVERRIDE); - } - } - - /** - * Appends the retry mode metric into the metrics builder, - * based on the resolved retry config mode. - * - * @param array $args - * - * @return void - */ - private function appendRetryConfigMetric(array $args): void - { - $retries = $args['retries'] ?? null; - if ($retries === null) { - return; - } - - $retryMode = ''; - if ($retries instanceof \Aws\Retry\Configuration) { - $retryMode = $retries->getMode(); - } elseif (is_array($retries) - && isset($retries["mode"]) - ) { - $retryMode = $retries["mode"]; - } - - if ($retryMode === 'legacy') { - $this->append( - MetricsBuilder::RETRY_MODE_LEGACY - ); - } elseif ($retryMode === 'standard') { - $this->append( - MetricsBuilder::RETRY_MODE_STANDARD - ); - } elseif ($retryMode === 'adaptive') { - $this->append( - MetricsBuilder::RETRY_MODE_ADAPTIVE - ); - } - } - - /** - * Appends the provided/resolved response checksum validation mode. - * - * @param array $args - * - * @return void - */ - private function appendResponseChecksumValidationMetric(array $args): void - { - if (empty($args['response_checksum_validation'])) { - return; - } - - $checksumValidation = $args['response_checksum_validation']; - static $checksumValidationMetricMapping = [ - 'when_supported' => MetricsBuilder::FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED, - 'when_required' => MetricsBuilder::FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED, - ]; - - if (isset($checksumValidationMetricMapping[$checksumValidation])) { - $this->append($checksumValidationMetricMapping[$checksumValidation]); - } - } - - /** - * Validates if a metric can be appended by ensuring the total size, - * including the new metric and separator, does not exceed the limit. - * Also checks that the metric does not already exist. - * Example: Appendable if: - * $currentSize + len($newMetric) + len($separator) <= MAX_SIZE - * and: - * $newMetric not in $existingMetrics - * - * @param string $newMetric The metric to validate. - * - * @return bool True if the metric can be appended, false otherwise. - */ - private function canMetricBeAppended(string $newMetric): bool - { - if ($newMetric === "") { - return false; - } - - if ($this->metricsSize - + (strlen($newMetric) + strlen(self::$METRIC_SEPARATOR)) - > self::$MAX_METRICS_SIZE - ) { - return false; - } - - if (isset($this->metrics[$newMetric])) { - return false; - } - - return true; - } - - /** - * Returns the metrics builder from the property @context of a command. - * - * @param Command $command - * - * @return MetricsBuilder - */ - public static function fromCommand(CommandInterface $command): MetricsBuilder - { - return $command->getMetricsBuilder(); - } - - /** - * Helper method for appending a metrics capture middleware into a - * handler stack given. The middleware appended here is on top of the - * build step. - * - * @param HandlerList $handlerList - * @param $metric - * - * @return void - */ - public static function appendMetricsCaptureMiddleware( - HandlerList $handlerList, - $metric - ): void - { - $middlewareName = 'metrics-capture-'.$metric; - if (!$handlerList->hasMiddleware($middlewareName)) { - $handlerList->appendBuild( - Middleware::tap( - function (CommandInterface $command) use ($metric) { - self::fromCommand($command)->append( - $metric - ); - } - ), - $middlewareName - ); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Middleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Middleware.php deleted file mode 100644 index 76006abf1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Middleware.php +++ /dev/null @@ -1,473 +0,0 @@ -getOperation($command->getName()); - $source = $command[$sourceParameter]; - - if ($source !== null - && $operation->getInput()->hasMember($bodyParameter) - ) { - $lazyOpenStream = new LazyOpenStream($source, 'r'); - $command[$bodyParameter] = $lazyOpenStream; - unset($command[$sourceParameter]); - - $next = $handler($command, $request); - // To avoid failures in some tests cases - if ($next !== null && method_exists($next, 'then')) { - return $next->then( - function ($result) use ($lazyOpenStream) { - // To make sure the resource is closed. - $lazyOpenStream->close(); - - return $result; - } - )->otherwise(function (\Throwable $e) use ($lazyOpenStream) { - $lazyOpenStream->close(); - - throw $e; - }); - } - - return $next; - } - - return $handler($command, $request); - }; - }; - } - - /** - * Adds a middleware that uses client-side validation. - * - * @param Service $api API being accessed. - * - * @return callable - */ - public static function validation(Service $api, ?Validator $validator = null) - { - $validator = $validator ?: new Validator(); - if ($api->isModifiedModel()) { - $api = new Service( - $api->getDefinition(), - $api->getProvider() - ); - } - return function (callable $handler) use ($api, $validator) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($api, $validator, $handler) { - $operation = $api->getOperation($command->getName()); - $validator->validate( - $command->getName(), - $operation->getInput(), - $command->toArray() - ); - return $handler($command, $request); - }; - }; - } - - /** - * Builds an HTTP request for a command. - * - * @param callable $serializer Function used to serialize a request for a - * command. - * @param EndpointProviderV2 | null $endpointProvider - * @param array $providerArgs - * @return callable - */ - public static function requestBuilder($serializer) - { - return function (callable $handler) use ($serializer) { - return function (CommandInterface $command, $endpoint = null) use ($serializer, $handler) { - return $handler($command, $serializer($command, $endpoint)); - }; - }; - } - - /** - * Creates a middleware that signs requests for a command. - * - * @param callable $credProvider Credentials provider function that - * returns a promise that is resolved - * with a CredentialsInterface object. - * @param callable $signatureFunction Function that accepts a Command - * object and returns a - * SignatureInterface. - * - * @return callable - */ - public static function signer( - callable $credProvider, - callable $signatureFunction, - $tokenProvider = null, - $config = [] - ) { - return function (callable $handler) use ($signatureFunction, $credProvider, $tokenProvider, $config) { - return function ( - CommandInterface $command, - RequestInterface $request - ) use ($handler, $signatureFunction, $credProvider, $tokenProvider, $config) { - $signer = $signatureFunction($command); - - // Token authorization path - if ($signer instanceof TokenAuthorization) { - return $tokenProvider()->then(function (TokenInterface $token) use ($handler, $command, $signer, $request) { - $command->getMetricsBuilder()->identifyMetricByValueAndAppend('token', $token); - return $handler($command, $signer->authorizeRequest($request, $token)); - }); - } - - // DPoP path - if ($signer instanceof DpopSignature) { - if (empty($key = $command['dpopKey']) - || !($key instanceof \OpenSSLAsymmetricKey) - ) { - throw new \RuntimeException( - 'A valid DPoP key must be present for DPoP signatures' - ); - } - - return $handler($command, $signer->signRequest($request, $key)); - } - - // Credential signing path - $credentialPromise = ($signer instanceof S3ExpressSignature) - ? $config['s3_express_identity_provider']($command) - : $credProvider(); - - return $credentialPromise->then(function (CredentialsInterface $creds) use ($handler, - $command, - $signer, - $request - ) { - $command->getMetricsBuilder()->identifyMetricByValueAndAppend('credentials', $creds); - return $handler($command, $signer->signRequest($request, $creds)); - }); - }; - }; - } - - /** - * Creates a middleware that invokes a callback at a given step. - * - * The tap callback accepts a CommandInterface and RequestInterface as - * arguments but is not expected to return a new value or proxy to - * downstream middleware. It's simply a way to "tap" into the handler chain - * to debug or get an intermediate value. - * - * @param callable $fn Tap function - * - * @return callable - */ - public static function tap(callable $fn) - { - return function (callable $handler) use ($fn) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler, $fn) { - $fn($command, $request); - return $handler($command, $request); - }; - }; - } - - /** - * Middleware wrapper function that retries requests based on the boolean - * result of invoking the provided "decider" function. - * - * If no delay function is provided, a simple implementation of exponential - * backoff will be utilized. - * - * @param callable $decider Function that accepts the number of retries, - * a request, [result], and [exception] and - * returns true if the command is to be retried. - * @param callable $delay Function that accepts the number of retries and - * returns the number of milliseconds to delay. - * @param bool $stats Whether to collect statistics on retries and the - * associated delay. - * - * @return callable - */ - public static function retry( - ?callable $decider = null, - ?callable $delay = null, - $stats = false - ) { - $decider = $decider ?: RetryMiddleware::createDefaultDecider(); - $delay = $delay ?: [RetryMiddleware::class, 'exponentialDelay']; - - return function (callable $handler) use ($decider, $delay, $stats) { - return new RetryMiddleware($decider, $delay, $handler, $stats); - }; - } - /** - * Middleware wrapper function that adds an invocation id header to - * requests, which is only applied after the build step. - * - * This is a uniquely generated UUID to identify initial and subsequent - * retries as part of a complete request lifecycle. - * - * @return callable - */ - public static function invocationId() - { - return function (callable $handler) { - return function ( - CommandInterface $command, - RequestInterface $request - ) use ($handler){ - return $handler($command, $request->withHeader( - 'amz-sdk-invocation-id', - md5(uniqid(gethostname(), true)) - )); - }; - }; - } - /** - * Middleware wrapper function that adds a Content-Type header to requests. - * This is only done when the Content-Type has not already been set, and the - * request body's URI is available. It then checks the file extension of the - * URI to determine the mime-type. - * - * @param array $operations Operations that Content-Type should be added to. - * - * @return callable - */ - public static function contentType(array $operations) - { - return function (callable $handler) use ($operations) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler, $operations) { - if (!$request->hasHeader('Content-Type') - && in_array($command->getName(), $operations, true) - && ($uri = $request->getBody()->getMetadata('uri')) - ) { - $request = $request->withHeader( - 'Content-Type', - Psr7\MimeType::fromFilename($uri) ?: 'application/octet-stream' - ); - } - - return $handler($command, $request); - }; - }; - } - /** - * Middleware wrapper function that adds a trace id header to requests - * from clients instantiated in supported Lambda runtime environments. - * - * The purpose for this header is to track and stop Lambda functions - * from being recursively invoked due to misconfigured resources. - * - * @return callable - */ - public static function recursionDetection() - { - return function (callable $handler) { - return function ( - CommandInterface $command, - RequestInterface $request - ) use ($handler){ - $isLambda = getenv('AWS_LAMBDA_FUNCTION_NAME'); - $traceId = str_replace('\e', '\x1b', getenv('_X_AMZN_TRACE_ID')); - - if ($isLambda && $traceId) { - if (!$request->hasHeader('X-Amzn-Trace-Id')) { - $ignoreChars = ['=', ';', ':', '+', '&', '[', ']', '{', '}', '"', '\'', ',']; - $traceIdEncoded = rawurlencode(stripcslashes($traceId)); - - foreach($ignoreChars as $char) { - $encodedChar = rawurlencode($char); - $traceIdEncoded = str_replace($encodedChar, $char, $traceIdEncoded); - } - - return $handler($command, $request->withHeader( - 'X-Amzn-Trace-Id', - $traceIdEncoded - )); - } - } - return $handler($command, $request); - }; - }; - } - /** - * Tracks command and request history using a history container. - * - * This is useful for testing. - * - * @param History $history History container to store entries. - * - * @return callable - */ - public static function history(History $history) - { - return function (callable $handler) use ($history) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler, $history) { - $ticket = $history->start($command, $request); - return $handler($command, $request) - ->then( - function ($result) use ($history, $ticket) { - $history->finish($ticket, $result); - return $result; - }, - function ($reason) use ($history, $ticket) { - $history->finish($ticket, $reason); - return Promise\Create::rejectionFor($reason); - } - ); - }; - }; - } - - /** - * Creates a middleware that applies a map function to requests as they - * pass through the middleware. - * - * @param callable $f Map function that accepts a RequestInterface and - * returns a RequestInterface. - * - * @return callable - */ - public static function mapRequest(callable $f) - { - return static function (callable $handler) use ($f) { - return static function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler, $f) { - return $handler($command, $f($request)); - }; - }; - } - - /** - * Creates a middleware that applies a map function to commands as they - * pass through the middleware. - * - * @param callable $f Map function that accepts a command and returns a - * command. - * - * @return callable - */ - public static function mapCommand(callable $f) - { - return function (callable $handler) use ($f) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler, $f) { - return $handler($f($command), $request); - }; - }; - } - - /** - * Creates a middleware that applies a map function to results. - * - * @param callable $f Map function that accepts an Aws\ResultInterface and - * returns an Aws\ResultInterface. - * - * @return callable - */ - public static function mapResult(callable $f) - { - return function (callable $handler) use ($f) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler, $f) { - return $handler($command, $request)->then($f); - }; - }; - } - - public static function timer() - { - return function (callable $handler) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler) { - $start = microtime(true); - return $handler($command, $request) - ->then( - function (ResultInterface $res) use ($start) { - if (!isset($res['@metadata'])) { - $res['@metadata'] = []; - } - if (!isset($res['@metadata']['transferStats'])) { - $res['@metadata']['transferStats'] = []; - } - - $res['@metadata']['transferStats']['total_time'] - = microtime(true) - $start; - - return $res; - }, - function ($err) use ($start) { - if ($err instanceof AwsException) { - $err->setTransferInfo([ - 'total_time' => microtime(true) - $start, - ] + $err->getTransferInfo()); - } - return Promise\Create::rejectionFor($err); - } - ); - }; - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MockHandler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MockHandler.php deleted file mode 100644 index 7d6b4539e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MockHandler.php +++ /dev/null @@ -1,148 +0,0 @@ -queue = []; - $this->onFulfilled = $onFulfilled; - $this->onRejected = $onRejected; - - if ($resultOrQueue) { - call_user_func_array([$this, 'append'], array_values($resultOrQueue)); - } - } - - /** - * Adds one or more variadic ResultInterface or AwsException objects to the - * queue. - */ - public function append() - { - foreach (func_get_args() as $value) { - if ($value instanceof ResultInterface - || $value instanceof Exception - || is_callable($value) - ) { - $this->queue[] = $value; - } else { - throw new \InvalidArgumentException('Expected an Aws\ResultInterface or Exception.'); - } - } - } - - /** - * Adds one or more \Exception or \Throwable to the queue - */ - public function appendException() - { - foreach (func_get_args() as $value) { - if ($value instanceof \Exception || $value instanceof \Throwable) { - $this->queue[] = $value; - } else { - throw new \InvalidArgumentException('Expected an \Exception or \Throwable.'); - } - } - } - - public function __invoke( - CommandInterface $command, - RequestInterface $request - ) { - if (!$this->queue) { - $last = $this->lastCommand - ? ' The last command sent was ' . $this->lastCommand->getName() . '.' - : ''; - throw new \RuntimeException('Mock queue is empty. Trying to send a ' - . $command->getName() . ' command failed.' . $last); - } - - $this->lastCommand = $command; - $this->lastRequest = $request; - - $result = array_shift($this->queue); - - if (is_callable($result)) { - $result = $result($command, $request); - } - - if ($result instanceof \Exception) { - $result = new RejectedPromise($result); - } else { - // Add an effective URI and statusCode if not present. - $meta = $result['@metadata']; - if (!isset($meta['effectiveUri'])) { - $meta['effectiveUri'] = (string) $request->getUri(); - } - if (!isset($meta['statusCode'])) { - $meta['statusCode'] = 200; - } - $result['@metadata'] = $meta; - $result = Promise\Create::promiseFor($result); - } - - $result->then($this->onFulfilled, $this->onRejected); - - return $result; - } - - /** - * Get the last received request. - * - * @return RequestInterface|null - */ - public function getLastRequest() - { - return $this->lastRequest; - } - - /** - * Get the last received command. - * - * @return CommandInterface - */ - public function getLastCommand() - { - return $this->lastCommand; - } - - /** - * Returns the number of remaining items in the queue. - * - * @return int - */ - #[\ReturnTypeWillChange] - public function count() - { - return count($this->queue); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MonitoringEventsInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MonitoringEventsInterface.php deleted file mode 100644 index 662927fe0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/MonitoringEventsInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - true, 'region' => true] - ); - $args['region']['required'] = false; - unset($args['region']['fn']); - unset($args['region']['default']); - - return $args + [ - 'client_factory' => [ - 'type' => 'config', - 'valid' => ['callable'], - 'doc' => 'A callable that takes an array of client' - . ' configuration arguments and returns a regionalized' - . ' client.', - 'required' => true, - 'internal' => true, - 'default' => function (array $args) { - $namespace = manifest($args['service'])['namespace']; - $klass = "Aws\\{$namespace}\\{$namespace}Client"; - $region = isset($args['region']) ? $args['region'] : null; - - return function (array $args) use ($klass, $region) { - if ($region && empty($args['region'])) { - $args['region'] = $region; - } - - return new $klass($args); - }; - }, - ], - 'partition' => [ - 'type' => 'config', - 'valid' => ['string', PartitionInterface::class], - 'doc' => 'AWS partition to connect to. Valid partitions' - . ' include "aws," "aws-cn," and "aws-us-gov." Used to' - . ' restrict the scope of the mapRegions method.', - 'default' => function (array $args) { - $region = isset($args['region']) ? $args['region'] : ''; - return PartitionEndpointProvider::defaultProvider() - ->getPartition($region, $args['service']); - }, - 'fn' => function ($value, array &$args) { - if (is_string($value)) { - $value = PartitionEndpointProvider::defaultProvider() - ->getPartitionByName($value); - } - - if (!$value instanceof PartitionInterface) { - throw new \InvalidArgumentException('No valid partition' - . ' was provided. Provide a concrete partition or' - . ' the name of a partition (e.g., "aws," "aws-cn,"' - . ' or "aws-us-gov").' - ); - } - $partitions = EndpointDefinitionProvider::getPartitions(); - $parsed = EndpointDefinitionProvider::getParsedRuleset( - $args['service'], - isset($args['version']) ? $args['version'] : 'latest', - $partitions - ); - $args['endpoint_provider'] = new EndpointProviderV2($parsed, $partitions); - } - ], - ]; - } - - /** - * The multi-region client constructor accepts the following options: - * - * - client_factory: (callable) An optional callable that takes an array of - * client configuration arguments and returns a regionalized client. - * - partition: (Aws\Endpoint\Partition|string) AWS partition to connect to. - * Valid partitions include "aws," "aws-cn," and "aws-us-gov." Used to - * restrict the scope of the mapRegions method. - * - region: (string) Region to connect to when no override is provided. - * Used to create the default client factory and determine the appropriate - * AWS partition when present. - * - * @param array $args Client configuration arguments. - */ - public function __construct(array $args = []) - { - if (!isset($args['service'])) { - $args['service'] = $this->parseClass(); - } - - $this->handlerList = new HandlerList(function ( - CommandInterface $command - ) { - list($region, $args) = $this->getRegionFromArgs($command->toArray()); - $command = $this->getClientFromPool($region) - ->getCommand($command->getName(), $args); - - if ($this->isUseCustomHandler()) { - $command->getHandlerList()->setHandler($this->customHandler); - } - - return $this->executeAsync($command); - }); - - $argDefinitions = static::getArguments(); - $resolver = new ClientResolver($argDefinitions); - $args = $resolver->resolve($args, $this->handlerList); - $this->config = $args['config']; - $this->factory = $args['client_factory']; - $this->partition = $args['partition']; - $this->args = array_diff_key($args, $args['config']); - } - - /** - * Get the region to which the client is configured to send requests by - * default. - * - * @return string - */ - public function getRegion() - { - return $this->getClientFromPool()->getRegion(); - } - - /** - * Create a command for an operation name. - * - * Special keys may be set on the command to control how it behaves, - * including: - * - * - @http: Associative array of transfer specific options to apply to the - * request that is serialized for this command. Available keys include - * "proxy", "verify", "timeout", "connect_timeout", "debug", "delay", and - * "headers". - * - @region: The region to which the command should be sent. - * - * @param string $name Name of the operation to use in the command - * @param array $args Arguments to pass to the command - * - * @return CommandInterface - * @throws \InvalidArgumentException if no command can be found by name - */ - public function getCommand($name, array $args = []) - { - return new Command($name, $args, clone $this->getHandlerList()); - } - - public function getConfig($option = null) - { - if (null === $option) { - return $this->config; - } - - if (isset($this->config[$option])) { - return $this->config[$option]; - } - - return $this->getClientFromPool()->getConfig($option); - } - - public function getCredentials() - { - return $this->getClientFromPool()->getCredentials(); - } - - public function getHandlerList() - { - return $this->handlerList; - } - - public function getApi() - { - return $this->getClientFromPool()->getApi(); - } - - public function getEndpoint() - { - return $this->getClientFromPool()->getEndpoint(); - } - - public function useCustomHandler(callable $handler) - { - $this->customHandler = $handler; - } - - private function isUseCustomHandler() - { - return isset($this->customHandler); - } - - /** - * @param string $region Omit this argument or pass in an empty string to - * allow the configured client factory to apply the - * region. - * - * @return AwsClientInterface - */ - protected function getClientFromPool($region = '') - { - $region = $region ?? ''; - if (empty($this->clientPool[$region])) { - $factory = $this->factory; - $this->clientPool[$region] = $factory( - array_replace($this->args, array_filter(['region' => $region])) - ); - } - - return $this->clientPool[$region]; - } - - /** - * Parse the class name and return the "service" name of the client. - * - * @return string - */ - private function parseClass() - { - $klass = get_class($this); - - if ($klass === __CLASS__) { - return ''; - } - - return strtolower(substr($klass, strrpos($klass, '\\') + 1, -17)); - } - - private function getRegionFromArgs(array $args) - { - $region = isset($args['@region']) - ? $args['@region'] - : $this->getRegion(); - unset($args['@region']); - - return [$region, $args]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php deleted file mode 100644 index 96848fd6c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php +++ /dev/null @@ -1,328 +0,0 @@ - null, - 'state' => null, - 'concurrency' => self::DEFAULT_CONCURRENCY, - 'prepare_data_source' => null, - 'before_initiate' => null, - 'before_upload' => null, - 'before_complete' => null, - 'exception_class' => MultipartUploadException::class, - ]; - - /** @var Client Client used for the upload. */ - protected $client; - - /** @var array Configuration used to perform the upload. */ - protected $config; - - /** @var array Service-specific information about the upload workflow. */ - protected $info; - - /** @var PromiseInterface Promise that represents the multipart upload. */ - protected $promise; - - /** @var UploadState State used to manage the upload. */ - protected $state; - - /** @var bool Configuration used to indicate if upload progress will be displayed. */ - protected $displayProgress; - - /** - * @param Client $client - * @param array $config - */ - public function __construct(Client $client, array $config = []) - { - $this->client = $client; - $this->info = $this->loadUploadWorkflowInfo(); - $this->config = $config + self::$defaultConfig; - $this->state = $this->determineState(); - - if (isset($config['display_progress']) - && is_bool($config['display_progress']) - ) { - $this->displayProgress = $config['display_progress']; - } - } - - /** - * Returns the current state of the upload - * - * @return UploadState - */ - public function getState() - { - return $this->state; - } - - /** - * Upload the source using multipart upload operations. - * - * @return Result The result of the CompleteMultipartUpload operation. - * @throws \LogicException if the upload is already complete or aborted. - * @throws MultipartUploadException if an upload operation fails. - */ - public function upload() - { - return $this->promise()->wait(); - } - - /** - * Upload the source asynchronously using multipart upload operations. - * - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - if ($this->promise) { - return $this->promise; - } - - return $this->promise = Promise\Coroutine::of(function () { - // Initiate the upload. - if ($this->state->isCompleted()) { - throw new \LogicException('This multipart upload has already ' - . 'been completed or aborted.' - ); - } - - if (!$this->state->isInitiated()) { - // Execute the prepare callback. - if (is_callable($this->config["prepare_data_source"])) { - $this->config["prepare_data_source"](); - } - - $result = (yield $this->execCommand('initiate', $this->getInitiateParams())); - $this->state->setUploadId( - $this->info['id']['upload_id'], - $result[$this->info['id']['upload_id']] - ); - $this->state->setStatus(UploadState::INITIATED); - } - - // Create a command pool from a generator that yields UploadPart - // commands for each upload part. - $resultHandler = $this->getResultHandler($errors); - $commands = new CommandPool( - $this->client, - $this->getUploadCommands($resultHandler), - [ - 'concurrency' => $this->config['concurrency'], - 'before' => $this->config['before_upload'], - ] - ); - - // Execute the pool of commands concurrently, and process errors. - yield $commands->promise(); - if ($errors) { - throw new $this->config['exception_class']($this->state, $errors); - } - - // Complete the multipart upload. - yield $this->execCommand('complete', $this->getCompleteParams()); - $this->state->setStatus(UploadState::COMPLETED); - })->otherwise($this->buildFailureCatch()); - } - - private function transformException($e) - { - // Throw errors from the operations as a specific Multipart error. - if ($e instanceof AwsException) { - $e = new $this->config['exception_class']($this->state, $e); - } - throw $e; - } - - private function buildFailureCatch() - { - if (interface_exists("Throwable")) { - return function (\Throwable $e) { - return $this->transformException($e); - }; - } else { - return function (\Exception $e) { - return $this->transformException($e); - }; - } - } - - protected function getConfig() - { - return $this->config; - } - - /** - * Provides service-specific information about the multipart upload - * workflow. - * - * This array of data should include the keys: 'command', 'id', and 'part_num'. - * - * @return array - */ - abstract protected function loadUploadWorkflowInfo(); - - /** - * Determines the part size to use for upload parts. - * - * Examines the provided partSize value and the source to determine the - * best possible part size. - * - * @throws \InvalidArgumentException if the part size is invalid. - * - * @return int - */ - abstract protected function determinePartSize(); - - /** - * Uses information from the Command and Result to determine which part was - * uploaded and mark it as uploaded in the upload's state. - * - * @param CommandInterface $command - * @param ResultInterface $result - */ - abstract protected function handleResult( - CommandInterface $command, - ResultInterface $result - ); - - /** - * Gets the service-specific parameters used to initiate the upload. - * - * @return array - */ - abstract protected function getInitiateParams(); - - /** - * Gets the service-specific parameters used to complete the upload. - * - * @return array - */ - abstract protected function getCompleteParams(); - - /** - * Based on the config and service-specific workflow info, creates a - * `Promise` for an `UploadState` object. - */ - private function determineState(): UploadState - { - // If the state was provided via config, then just use it. - if ($this->config['state'] instanceof UploadState) { - return $this->config['state']; - } - - // Otherwise, construct a new state from the provided identifiers. - $required = $this->info['id']; - $id = [$required['upload_id'] => null]; - unset($required['upload_id']); - foreach ($required as $key => $param) { - if (!isset($this->config[$key]) || $this->config[$key] === '') { - throw new IAE('You must provide a value for "' . $key . '" in ' - . 'your config for the MultipartUploader for ' - . $this->client->getApi()->getServiceFullName() . '.'); - } - $id[$param] = $this->config[$key]; - } - $state = new UploadState($id, $this->config); - $state->setPartSize($this->determinePartSize()); - - return $state; - } - - /** - * Executes a MUP command with all of the parameters for the operation. - * - * @param string $operation Name of the operation. - * @param array $params Service-specific params for the operation. - * - * @return PromiseInterface - */ - protected function execCommand($operation, array $params) - { - // Create the command. - $command = $this->client->getCommand( - $this->info['command'][$operation], - $params + $this->state->getId() - ); - - // Execute the before callback. - if (is_callable($this->config["before_{$operation}"])) { - $this->config["before_{$operation}"]($command); - } - - // Execute the command asynchronously and return the promise. - return $this->client->executeAsync($command); - } - - /** - * Returns a middleware for processing responses of part upload operations. - * - * - Adds an onFulfilled callback that calls the service-specific - * handleResult method on the Result of the operation. - * - Adds an onRejected callback that adds the error to an array of errors. - * - Has a passedByRef $errors arg that the exceptions get added to. The - * caller should use that &$errors array to do error handling. - * - * @param array $errors Errors from upload operations are added to this. - * - * @return callable - */ - protected function getResultHandler(&$errors = []) - { - return function (callable $handler) use (&$errors) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler, &$errors) { - return $handler($command, $request)->then( - function (ResultInterface $result) use ($command) { - $this->handleResult($command, $result); - return $result; - }, - function (AwsException $e) use (&$errors) { - $errors[$e->getCommand()[$this->info['part_num']]] = $e; - return new Result(); - } - ); - }; - }; - } - - /** - * Creates a generator that yields part data for the upload's source. - * - * Yields associative arrays of parameters that are ultimately merged in - * with others to form the complete parameters of a command. This can - * include the Body parameter, which is a limited stream (i.e., a Stream - * object, decorated with a LimitStream). - * - * @param callable $resultHandler - * - * @return \Generator - */ - abstract protected function getUploadCommands(callable $resultHandler); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/AbstractUploader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/AbstractUploader.php deleted file mode 100644 index 7ffb41fb0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/AbstractUploader.php +++ /dev/null @@ -1,157 +0,0 @@ -source = $this->determineSource($source); - parent::__construct($client, $config); - } - - /** - * Create a stream for a part that starts at the current position and - * has a length of the upload part size (or less with the final part). - * - * @param Stream $stream - * - * @return Psr7\LimitStream - */ - protected function limitPartStream(Stream $stream) - { - // Limit what is read from the stream to the part size. - return new Psr7\LimitStream( - $stream, - $this->state->getPartSize(), - $this->source->tell() - ); - } - - protected function getUploadCommands(callable $resultHandler) - { - // Determine if the source can be seeked. - $seekable = $this->source->isSeekable() - && $this->source->getMetadata('wrapper_type') === 'plainfile'; - - for ($partNumber = 1; $this->isEof($seekable); $partNumber++) { - // If we haven't already uploaded this part, yield a new part. - if (!$this->state->hasPartBeenUploaded($partNumber)) { - $partStartPos = $this->source->tell(); - if (!($data = $this->createPart($seekable, $partNumber))) { - break; - } - $command = $this->client->getCommand( - $this->info['command']['upload'], - $data + $this->state->getId() - ); - $command->getHandlerList()->appendSign($resultHandler, 'mup'); - $numberOfParts = $this->getNumberOfParts($this->state->getPartSize()); - if (isset($numberOfParts) && $partNumber > $numberOfParts) { - throw new $this->config['exception_class']( - $this->state, - new AwsException( - "Maximum part number for this job exceeded, file has likely been corrupted." . - " Please restart this upload.", - $command - ) - ); - } - - yield $command; - if ($this->source->tell() > $partStartPos) { - continue; - } - } - - // Advance the source's offset if not already advanced. - if ($seekable) { - $this->source->seek(min( - $this->source->tell() + $this->state->getPartSize(), - $this->source->getSize() - )); - } else { - $this->source->read($this->state->getPartSize()); - } - } - } - - /** - * Generates the parameters for an upload part by analyzing a range of the - * source starting from the current offset up to the part size. - * - * @param bool $seekable - * @param int $number - * - * @return array|null - */ - abstract protected function createPart($seekable, $number); - - /** - * Checks if the source is at EOF. - * - * @param bool $seekable - * - * @return bool - */ - private function isEof($seekable) - { - return $seekable - ? $this->source->tell() < $this->source->getSize() - : !$this->source->eof(); - } - - /** - * Turns the provided source into a stream and stores it. - * - * If a string is provided, it is assumed to be a filename, otherwise, it - * passes the value directly to `Psr7\Utils::streamFor()`. - * - * @param mixed $source - * - * @return Stream - */ - private function determineSource($source) - { - // Use the contents of a file as the data source. - if (is_string($source)) { - $source = Psr7\Utils::tryFopen($source, 'r'); - $stream = Psr7\Utils::streamFor($source); - } elseif (is_resource($source)) { - // User-owned resource — don't fclose on destruct. - $stream = \Aws\detach_on_close_stream(Psr7\Utils::streamFor($source)); - } else { - $stream = Psr7\Utils::streamFor($source); - } - - if (!$stream->isReadable()) { - throw new IAE('Source stream must be readable.'); - } - - return $stream; - } - - protected function getNumberOfParts($partSize) - { - if ($sourceSize = $this->source->getSize()) { - return ceil($sourceSize/$partSize); - } - return null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/UploadState.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/UploadState.php deleted file mode 100644 index 9bada253e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Multipart/UploadState.php +++ /dev/null @@ -1,237 +0,0 @@ - $s])` can - * replay Phase 3 correctly without the caller having to re-specify. - */ - private array $config = []; - - /** - * @param array $id Params used to identity the upload. - */ - public function __construct(array $id, array $config = []) - { - $this->id = $id; - $this->config = $config; - - if (isset($config['display_progress']) - && is_bool($config['display_progress']) - ) { - $this->displayProgress = $config['display_progress']; - } - } - - /** - * @return array The config array the state was constructed with. - */ - public function getConfig(): array - { - return $this->config; - } - - /** - * Get the upload's ID, which is a tuple of parameters that can uniquely - * identify the upload. - * - * @return array - */ - public function getId() - { - return $this->id; - } - - /** - * Sets the "upload_id", or 3rd part of the upload's ID. This typically - * only needs to be done after initiating an upload. - * - * @param string $key The param key of the upload_id. - * @param string $value The param value of the upload_id. - */ - public function setUploadId($key, $value) - { - $this->id[$key] = $value; - } - - /** - * Get the part size. - * - * @return int - */ - public function getPartSize() - { - return $this->partSize; - } - - /** - * Set the part size. - * - * @param $partSize int Size of upload parts. - */ - public function setPartSize($partSize) - { - $this->partSize = $partSize; - } - - /** - * Sets the 1/8th thresholds array. $totalSize is only sent if - * 'track_upload' is true. - * - * @param $totalSize numeric Size of object to upload. - * - * @return array - */ - public function setProgressThresholds($totalSize): array - { - if(!is_numeric($totalSize)) { - throw new \InvalidArgumentException( - 'The total size of the upload must be a number.' - ); - } - - $this->progressThresholds[0] = 0; - for ($i = 1; $i <= self::PROGRESS_THRESHOLD_SIZE; $i++) { - $this->progressThresholds[] = round( - $totalSize * ($i / self::PROGRESS_THRESHOLD_SIZE) - ); - } - - return $this->progressThresholds; - } - - /** - * Prints progress of upload. - * - * @param $totalUploaded numeric Size of upload so far. - */ - public function getDisplayProgress($totalUploaded): void - { - if (!is_numeric($totalUploaded)) { - throw new \InvalidArgumentException( - 'The size of the bytes being uploaded must be a number.' - ); - } - - if ($this->displayProgress) { - while (!empty($this->progressBar) - && $totalUploaded >= $this->progressThresholds[0] - ) { - echo array_shift($this->progressBar); - array_shift($this->progressThresholds); - } - } - } - - /** - * Marks a part as being uploaded. - * - * @param int $partNumber The part number. - * @param array $partData Data from the upload operation that needs to be - * recalled during the complete operation. - */ - public function markPartAsUploaded($partNumber, array $partData = []) - { - $this->uploadedParts[$partNumber] = $partData; - } - - /** - * Returns whether a part has been uploaded. - * - * @param int $partNumber The part number. - * - * @return bool - */ - public function hasPartBeenUploaded($partNumber) - { - return isset($this->uploadedParts[$partNumber]); - } - - /** - * Returns a sorted list of all the uploaded parts. - * - * @return array - */ - public function getUploadedParts() - { - ksort($this->uploadedParts); - return $this->uploadedParts; - } - - /** - * Set the status of the upload. - * - * @param int $status Status is an integer code defined by the constants - * CREATED, INITIATED, and COMPLETED on this class. - */ - public function setStatus($status) - { - $this->status = $status; - } - - /** - * Determines whether the upload state is in the INITIATED status. - * - * @return bool - */ - public function isInitiated() - { - return $this->status === self::INITIATED; - } - - /** - * Determines whether the upload state is in the COMPLETED status. - * - * @return bool - */ - public function isCompleted() - { - return $this->status === self::COMPLETED; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PhpHash.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PhpHash.php deleted file mode 100644 index 7a82815ae..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PhpHash.php +++ /dev/null @@ -1,81 +0,0 @@ -algo = $algo; - $this->options = $options; - } - - public function update($data) - { - if ($this->hash !== null) { - $this->reset(); - } - - hash_update($this->getContext(), $data); - } - - public function complete() - { - if ($this->hash) { - return $this->hash; - } - - $this->hash = hash_final($this->getContext(), true); - - if (isset($this->options['base64']) && $this->options['base64']) { - $this->hash = base64_encode($this->hash); - } - - return $this->hash; - } - - public function reset() - { - $this->context = $this->hash = null; - } - - /** - * Get a hash context or create one if needed - * - * @return resource|\HashContext - */ - private function getContext() - { - if (!$this->context) { - $key = isset($this->options['key']) ? $this->options['key'] : ''; - $this->context = hash_init( - $this->algo, - $key ? HASH_HMAC : 0, - $key - ); - } - - return $this->context; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PresignUrlMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PresignUrlMiddleware.php deleted file mode 100644 index e2055a377..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PresignUrlMiddleware.php +++ /dev/null @@ -1,128 +0,0 @@ -endpointProvider = $endpointProvider; - $this->client = \WeakReference::create($client); - $this->nextHandler = $nextHandler; - $this->commandPool = $options['operations']; - $this->serviceName = $options['service']; - $this->presignParam = !empty($options['presign_param']) - ? $options['presign_param'] - : 'PresignedUrl'; - $this->extraQueryParams = !empty($options['extra_query_params']) - ? $options['extra_query_params'] - : []; - $this->requireDifferentRegion = !empty($options['require_different_region']); - } - - public static function wrap( - AwsClientInterface $client, - $endpointProvider, - array $options = [] - ) { - return static function (callable $handler) use ($endpointProvider, $client, $options) { - return new PresignUrlMiddleware($options, $endpointProvider, $client, $handler); - }; - } - - public function __invoke(CommandInterface $cmd, ?RequestInterface $request = null) - { - if (in_array($cmd->getName(), $this->commandPool) - && (!isset($cmd['__skip' . $cmd->getName()])) - ) { - $client = $this->client->get(); - $cmd['DestinationRegion'] = $client->getRegion(); - if (!empty($cmd['SourceRegion']) && !empty($cmd[$this->presignParam])) { - goto nexthandler; - } - if (!$this->requireDifferentRegion - || (!empty($cmd['SourceRegion']) - && $cmd['SourceRegion'] !== $cmd['DestinationRegion']) - ) { - $cmd[$this->presignParam] = $this->createPresignedUrl($client, $cmd); - } - } - nexthandler: - $nextHandler = $this->nextHandler; - return $nextHandler($cmd, $request); - } - - private function createPresignedUrl( - AwsClientInterface $client, - CommandInterface $cmd - ) { - $cmdName = $cmd->getName(); - $newCmd = $client->getCommand($cmdName, $cmd->toArray()); - // Avoid infinite recursion by flagging the new command. - $newCmd['__skip' . $cmdName] = true; - - // Serialize a request for the operation. - $request = \Aws\serialize($newCmd); - // Create the new endpoint for the target endpoint. - if ($this->endpointProvider instanceof \Aws\EndpointV2\EndpointProviderV2) { - $providerArgs = array_merge( - $this->client->get()->getEndpointProviderArgs(), - ['Region' => $cmd['SourceRegion']] - ); - $endpoint = $this->endpointProvider->resolveEndpoint($providerArgs)->getUrl(); - } else { - $endpoint = EndpointProvider::resolve($this->endpointProvider, [ - 'region' => $cmd['SourceRegion'], - 'service' => $this->serviceName, - ])['endpoint']; - } - - // Set the request to hit the target endpoint. - $uri = $request->getUri()->withHost((new Uri($endpoint))->getHost()); - $request = $request->withUri($uri); - - // Create a presigned URL for our generated request. - $signer = new SignatureV4($this->serviceName, $cmd['SourceRegion']); - - $currentQueryParams = (string) $request->getBody(); - $paramsToAdd = false; - if (!empty($this->extraQueryParams[$cmdName])) { - foreach ($this->extraQueryParams[$cmdName] as $param) { - if (!strpos($currentQueryParams, $param)) { - $paramsToAdd = "&{$param}=" . urlencode($cmd[$param]); - } - } - } - - return (string) $signer->presign( - SignatureV4::convertPostToGet($request, $paramsToAdd ?: ""), - $client->getCredentials()->wait(), - '+1 hour' - )->getUri(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Psr16CacheAdapter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Psr16CacheAdapter.php deleted file mode 100644 index b1ac8edf2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Psr16CacheAdapter.php +++ /dev/null @@ -1,30 +0,0 @@ -cache = $cache; - } - - public function get($key) - { - return $this->cache->get($key); - } - - public function set($key, $value, $ttl = 0) - { - $this->cache->set($key, $value, $ttl); - } - - public function remove($key) - { - $this->cache->delete($key); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PsrCacheAdapter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PsrCacheAdapter.php deleted file mode 100644 index 9dd2d941c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/PsrCacheAdapter.php +++ /dev/null @@ -1,38 +0,0 @@ -pool = $pool; - } - - public function get($key) - { - $item = $this->pool->getItem($key); - - return $item->isHit() ? $item->get() : null; - } - - public function set($key, $value, $ttl = 0) - { - $item = $this->pool->getItem($key); - $item->set($value); - if ($ttl > 0) { - $item->expiresAfter($ttl); - } - - $this->pool->save($item); - } - - public function remove($key) - { - $this->pool->deleteItem($key); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/QueryCompatibleInputMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/QueryCompatibleInputMiddleware.php deleted file mode 100644 index 9da75b6c3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/QueryCompatibleInputMiddleware.php +++ /dev/null @@ -1,234 +0,0 @@ -service = $service; - $this->nextHandler = $nextHandler; - } - - public function __invoke(CommandInterface $cmd) - { - $this->command = $cmd; - $nextHandler = $this->nextHandler; - $op = $this->service->getOperation($cmd->getName()); - $inputMembers = $op->getInput()->getMembers(); - $input = $cmd->toArray(); - - foreach ($input as $param => $value) { - if (isset($inputMembers[$param])) { - $shape = $inputMembers[$param]; - $this->processInput($value, $shape, [$param]); - } - } - - return $nextHandler($this->command); - } - - /** - * Recurses a given input shape. if a given scalar input does not match its - * modeled type, it is cast to its modeled type. - * - * @param $input - * @param $shape - * @param array $path - * - * @return void - */ - private function processInput($input, $shape, array $path) : void - { - switch ($shape->getType()) { - case 'structure': - $this->processStructure($input, $shape, $path); - break; - case 'list': - $this->processList($input, $shape, $path); - break; - case 'map': - $this->processMap($input, $shape, $path); - break; - default: - $this->processScalar($input, $shape, $path); - } - } - - /** - * @param array $input - * @param StructureShape $shape - * @param array $path - * - * @return void - */ - private function processStructure( - array $input, - StructureShape $shape, - array $path - ) : void - { - foreach ($input as $param => $value) { - if ($shape->hasMember($param)) { - $memberPath = array_merge($path, [$param]); - $this->processInput($value, $shape->getMember($param), $memberPath); - } - } - } - - /** - * @param array $input - * @param ListShape $shape - * @param array $path - * - * @return void - */ - private function processList( - array $input, - ListShape $shape, - array $path - ) : void - { - foreach ($input as $param => $value) { - $memberPath = array_merge($path, [$param]); - $this->processInput($value, $shape->getMember(), $memberPath); - } - } - - /** - * @param array $input - * @param MapShape $shape - * @param array $path - * - * @return void - */ - private function processMap(array $input, MapShape $shape, array $path) : void - { - foreach ($input as $param => $value) { - $memberPath = array_merge($path, [$param]); - $this->processInput($value, $shape->getValue(), $memberPath); - } - } - - /** - * @param $input - * @param Shape $shape - * @param array $path - * - * @return void - */ - private function processScalar($input, Shape $shape, array $path) : void - { - $expectedType = $shape->getType(); - - if (!$this->isModeledType($input, $expectedType)) { - trigger_error( - "The provided type for `". implode(' -> ', $path) ."` value was `" - . (gettype($input) === 'double' ? 'float' : gettype($input)) . "`." - . " The modeled type is `{$expectedType}`.", - E_USER_WARNING - ); - $value = $this->castValue($input, $expectedType); - $this->changeValueAtPath($path, $value); - } - } - - /** - * Modifies command in place - * - * @param array $path - * @param $newValue - * - * @return void - */ - private function changeValueAtPath(array $path, $newValue) : void - { - $commandRef = &$this->command; - - foreach ($path as $segment) { - if (!isset($commandRef[$segment])) { - return; - } - $commandRef = &$commandRef[$segment]; - } - $commandRef = $newValue; - } - - /** - * @param $value - * @param $type - * - * @return bool - */ - private function isModeledType($value, $type) : bool - { - switch ($type) { - case 'string': - return is_string($value); - case 'integer': - case 'long': - return is_int($value); - case 'float': - return is_float($value); - default: - return true; - } - } - - /** - * @param $value - * @param $type - * - * @return float|int|mixed|string - */ - private function castValue($value, $type) - { - switch ($type) { - case 'integer': - return (int) $value; - case 'long' : - return $value + 0; - case 'float': - return (float) $value; - case 'string': - return (string) $value; - default: - return $value; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RequestCompressionMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RequestCompressionMiddleware.php deleted file mode 100644 index f8e5015a5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RequestCompressionMiddleware.php +++ /dev/null @@ -1,172 +0,0 @@ - 'gzencode' - ]; - - /** - * Create a middleware wrapper function. - * - * @return callable - */ - public static function wrap(array $config) - { - return function (callable $handler) use ($config) { - return new self($handler, $config); - }; - } - - public function __construct(callable $nextHandler, $config) - { - $this->minimumCompressionSize = $this->determineMinimumCompressionSize($config); - $this->api = $config['api']; - $this->nextHandler = $nextHandler; - } - - public function __invoke(CommandInterface $command, RequestInterface $request) - { - if (isset($command['@request_min_compression_size_bytes']) - && is_int($command['@request_min_compression_size_bytes']) - && $this->isValidCompressionSize($command['@request_min_compression_size_bytes']) - ) { - $this->minimumCompressionSize = $command['@request_min_compression_size_bytes']; - } - $nextHandler = $this->nextHandler; - $operation = $this->api->getOperation($command->getName()); - $compressionInfo = $operation['requestcompression'] ?? null; - - if (!$this->shouldCompressRequestBody( - $compressionInfo, - $command, - $operation, - $request - )) { - return $nextHandler($command, $request); - } - - $this->encodings = $compressionInfo['encodings']; - $request = $this->compressRequestBody($request); - - // Capture request compression metric - $command->getMetricsBuilder()->identifyMetricByValueAndAppend( - 'request_compression', - $request->getHeaderLine('content-encoding') - ); - - return $nextHandler($command, $request); - } - - private function compressRequestBody( - RequestInterface $request - ) { - $fn = $this->determineEncoding(); - if (is_null($fn)) { - return $request; - } - - $body = $request->getBody()->getContents(); - $compressedBody = $fn($body); - - $request = $request->withBody(Psr7\Utils::streamFor($compressedBody)); - if ($request->hasHeader('Content-Encoding')) { - return $request->withAddedHeader('Content-Encoding', $this->encoding); - } - - return $request->withHeader('Content-Encoding', $this->encoding); - } - - private function determineEncoding() - { - foreach ($this->encodings as $encoding) { - if (isset($this->encodingMap[$encoding])) { - $this->encoding = $encoding; - return $this->encodingMap[$encoding]; - } - } - return null; - } - - private function shouldCompressRequestBody( - $compressionInfo, - $command, - $operation, - $request - ){ - if ($compressionInfo) { - if (isset($command['@disable_request_compression']) - && $command['@disable_request_compression'] === true - ) { - return false; - } elseif ($this->hasStreamingTraitWithoutRequiresLength($command, $operation) - ) { - return true; - } - - $requestBodySize = $request->hasHeader('content-length') - ? (int) $request->getHeaderLine('content-length') - : $request->getBody()->getSize(); - - if ($requestBodySize >= $this->minimumCompressionSize) { - return true; - } - } - return false; - } - - private function hasStreamingTraitWithoutRequiresLength($command, $operation) - { - foreach ($operation->getInput()->getMembers() as $name => $member) { - if (isset($command[$name]) - && !empty($member['streaming']) - && empty($member['requiresLength']) - ){ - return true; - } - } - return false; - } - - private function determineMinimumCompressionSize($config) { - if (is_callable($config['request_min_compression_size_bytes'])) { - $minCompressionSz = $config['request_min_compression_size_bytes'](); - } else { - $minCompressionSz = $config['request_min_compression_size_bytes']; - } - - if ($this->isValidCompressionSize($minCompressionSz)) { - return $minCompressionSz; - } - } - - private function isValidCompressionSize($compressionSize) - { - if (is_numeric($compressionSize) - && ($compressionSize >= 0 && $compressionSize <= 10485760) - ) { - return true; - } - - throw new \InvalidArgumentException( - 'The minimum request compression size must be a ' - . 'non-negative integer value between 0 and 10485760 bytes, inclusive.' - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResponseContainerInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResponseContainerInterface.php deleted file mode 100644 index d26921bb8..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResponseContainerInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -data = $data; - } - - public function hasKey($name) - { - return isset($this->data[$name]); - } - - public function get($key) - { - return $this[$key]; - } - - public function search($expression) - { - return JmesPath::search($expression, $this->toArray()); - } - - public function __toString() - { - $jsonData = json_encode($this->toArray(), JSON_PRETTY_PRINT); - return <<get(\$key)`) or "accessing the result like an -associative array (e.g. `\$result['key']`). You can also execute JMESPath -expressions on the result data using the search() method. - -{$jsonData} - -EOT; - } - - /** - * @deprecated - */ - public function getPath($path) - { - return $this->search(str_replace('/', '.', $path)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResultInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResultInterface.php deleted file mode 100644 index 18a166abb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResultInterface.php +++ /dev/null @@ -1,54 +0,0 @@ -execute($command); - * $jpResult = $result->search('foo.*.bar[?baz > `10`]'); - * - * @param string $expression JMESPath expression to execute - * - * @return mixed Returns the result of the JMESPath expression. - * @link http://jmespath.readthedocs.org/en/latest/ JMESPath documentation - */ - public function search($expression); -}; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResultPaginator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResultPaginator.php deleted file mode 100644 index 396ed1a93..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/ResultPaginator.php +++ /dev/null @@ -1,206 +0,0 @@ -client = $client; - $this->operation = $operation; - $this->args = $args; - $this->config = $config; - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->client->getHandlerList(), - MetricsBuilder::PAGINATOR - ); - } - - /** - * Runs a paginator asynchronously and uses a callback to handle results. - * - * The callback should have the signature: function (Aws\Result $result). - * A non-null return value from the callback will be yielded by the - * promise. This means that you can return promises from the callback that - * will need to be resolved before continuing iteration over the remaining - * items, essentially merging in other promises to the iteration. The last - * non-null value returned by the callback will be the result that fulfills - * the promise to any downstream promises. - * - * @param callable $handleResult Callback for handling each page of results. - * The callback accepts the result that was - * yielded as a single argument. If the - * callback returns a promise, the promise - * will be merged into the coroutine. - * - * @return Promise\Promise - */ - public function each(callable $handleResult) - { - return Promise\Coroutine::of(function () use ($handleResult) { - $nextToken = null; - do { - $command = $this->createNextCommand($this->args, $nextToken); - $result = (yield $this->client->executeAsync($command)); - $nextToken = $this->determineNextToken($result); - $retVal = $handleResult($result); - if ($retVal !== null) { - yield Promise\Create::promiseFor($retVal); - } - } while ($nextToken); - }); - } - - /** - * Returns an iterator that iterates over the values of applying a JMESPath - * search to each result yielded by the iterator as a flat sequence. - * - * @param string $expression JMESPath expression to apply to each result. - * - * @return \Iterator - */ - public function search($expression) - { - // Apply JMESPath expression on each result, but as a flat sequence. - return flatmap($this, function (Result $result) use ($expression) { - return (array) $result->search($expression); - }); - } - - /** - * @return Result - */ - #[\ReturnTypeWillChange] - public function current() - { - return $this->valid() ? $this->result : false; - } - - /** - * @return mixed - */ - #[\ReturnTypeWillChange] - public function key() - { - return $this->valid() ? $this->requestCount - 1 : null; - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function next() - { - $this->result = null; - } - - /** - * @return bool - */ - #[\ReturnTypeWillChange] - public function valid() - { - if ($this->result) { - return true; - } - - if ($this->nextToken || !$this->requestCount) { - //Forward/backward paging can result in a case where the last page's nextforwardtoken - //is the same as the one that came before it. This can cause an infinite loop. - $hasBidirectionalPaging = $this->config['output_token'] === 'nextForwardToken'; - if ($hasBidirectionalPaging && $this->nextToken) { - $tokenKey = $this->config['input_token']; - $previousToken = $this->nextToken[$tokenKey]; - } - - $this->result = $this->client->execute( - $this->createNextCommand($this->args, $this->nextToken) - ); - - $this->nextToken = $this->determineNextToken($this->result); - - if (isset($previousToken) - && $previousToken === $this->nextToken[$tokenKey] - ) { - return false; - } - - $this->requestCount++; - return true; - } - - return false; - } - - /** - * @return void - */ - #[\ReturnTypeWillChange] - public function rewind() - { - $this->requestCount = 0; - $this->nextToken = null; - $this->result = null; - } - - private function createNextCommand(array $args, ?array $nextToken = null) - { - return $this->client->getCommand($this->operation, array_merge($args, ($nextToken ?: []))); - } - - private function determineNextToken(Result $result) - { - if (!$this->config['output_token']) { - return null; - } - - if ($this->config['more_results'] - && !$result->search($this->config['more_results']) - ) { - return null; - } - - $nextToken = is_scalar($this->config['output_token']) - ? [$this->config['input_token'] => $this->config['output_token']] - : array_combine($this->config['input_token'], $this->config['output_token']); - - return array_filter(array_map(function ($outputToken) use ($result) { - return $result->search($outputToken); - }, $nextToken)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/Configuration.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/Configuration.php deleted file mode 100644 index aa370c409..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/Configuration.php +++ /dev/null @@ -1,61 +0,0 @@ -validModes)) { - throw new ConfigurationException("'{$mode}' is not a valid mode." - . " The mode has to be 'legacy', 'standard', or 'adaptive'."); - } - if (!is_numeric($maxAttempts) - || intval($maxAttempts) != $maxAttempts - || $maxAttempts < 1 - ) { - throw new ConfigurationException("The 'maxAttempts' parameter has" - . " to be an integer >= 1."); - } - - $this->mode = $mode; - $this->maxAttempts = intval($maxAttempts); - } - - /** - * {@inheritdoc} - */ - public function getMode() - { - return $this->mode; - } - - /** - * {@inheritdoc} - */ - public function getMaxAttempts() - { - return $this->maxAttempts; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'mode' => $this->getMode(), - 'max_attempts' => $this->getMaxAttempts(), - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/ConfigurationInterface.php deleted file mode 100644 index 3f57b62d6..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/ConfigurationInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * use Aws\Sts\RegionalEndpoints\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see \Aws\Retry\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const DEFAULT_MAX_ATTEMPTS = 3; - const DEFAULT_MODE = 'legacy'; - const ENV_MAX_ATTEMPTS = 'AWS_MAX_ATTEMPTS'; - const ENV_MODE = 'AWS_RETRY_MODE'; - const ENV_PROFILE = 'AWS_PROFILE'; - const INI_MAX_ATTEMPTS = 'max_attempts'; - const INI_MODE = 'retry_mode'; - - public static $cacheKey = 'aws_retries_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback(); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['retries']) - && $config['retries'] instanceof CacheInterface - ) { - return self::cache($memo, $config['retries'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates config from environment variables. - * - * @return callable - */ - public static function env() - { - return function () { - // Use config from environment variables, if available - $mode = getenv(self::ENV_MODE); - $maxAttempts = getenv(self::ENV_MAX_ATTEMPTS); - $hasMode = $mode !== false && $mode !== ''; - $hasMaxAttempts = $maxAttempts !== false && $maxAttempts !== ''; - - if ($hasMode || $hasMaxAttempts) { - return Promise\Create::promiseFor( - new Configuration( - $hasMode ? $mode : self::getDefaultMode(), - $hasMaxAttempts ? $maxAttempts : self::DEFAULT_MAX_ATTEMPTS - )); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_MODE - . ' or ' . self::ENV_MAX_ATTEMPTS); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback() - { - return function () { - return Promise\Create::promiseFor( - new Configuration(self::getDefaultMode(), self::DEFAULT_MAX_ATTEMPTS) - ); - }; - } - - /** - * Returns the default retry mode. Reflects the AWS_NEW_RETRIES_2026 - * opt-in: 'standard' when the env flag is set, 'legacy' otherwise. - */ - public static function getDefaultMode(): string - { - return OptIn::isEnabled() ? 'standard' : self::DEFAULT_MODE; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini( - $profile = null, - $filename = null - ) { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - $data = \Aws\parse_ini_file($filename, true); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - $hasMode = isset($data[$profile][self::INI_MODE]) - && $data[$profile][self::INI_MODE] !== ''; - $hasMaxAttempts = array_key_exists( - self::INI_MAX_ATTEMPTS, - $data[$profile] - ) && $data[$profile][self::INI_MAX_ATTEMPTS] !== ''; - - if (!$hasMode && !$hasMaxAttempts) { - return self::reject("Required retry config values - not present in INI profile '{$profile}' ({$filename})"); - } - - $maxAttempts = $hasMaxAttempts - ? $data[$profile][self::INI_MAX_ATTEMPTS] - : self::DEFAULT_MAX_ATTEMPTS; - - return Promise\Create::promiseFor( - new Configuration( - $hasMode - ? $data[$profile][self::INI_MODE] - : self::getDefaultMode(), - $maxAttempts - ) - ); - }; - } - - /** - * Unwraps a configuration object in whatever valid form it is in, - * always returning a ConfigurationInterface object. - * - * @param mixed $config - * @return ConfigurationInterface - * @throws \InvalidArgumentException - */ - public static function unwrap($config) - { - if (is_callable($config)) { - $config = $config(); - } - if ($config instanceof PromiseInterface) { - $config = $config->wait(); - } - if ($config instanceof ConfigurationInterface) { - return $config; - } - - // An integer value for this config indicates the legacy 'retries' - // config option, which is incremented to translate to max attempts - if (is_int($config)) { - return new Configuration('legacy', $config + 1); - } - - if (is_array($config) && isset($config['mode'])) { - $maxAttempts = isset($config['max_attempts']) - ? $config['max_attempts'] - : self::DEFAULT_MAX_ATTEMPTS; - return new Configuration($config['mode'], $maxAttempts); - } - - throw new \InvalidArgumentException('Not a valid retry configuration' - . ' argument.'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/Exception/ConfigurationException.php deleted file mode 100644 index 0705c2ee9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -initialRetryTokens = isset($config['initial_retry_tokens']) - ? $config['initial_retry_tokens'] - : 500; - $this->noRetryIncrement = isset($config['no_retry_increment']) - ? $config['no_retry_increment'] - : 1; - $this->retryCost = isset($config['retry_cost']) - ? $config['retry_cost'] - : 5; - $this->timeoutRetryCost = isset($config['timeout_retry_cost']) - ? $config['timeout_retry_cost'] - : 10; - $this->maxCapacity = $this->initialRetryTokens; - $this->availableCapacity = $this->initialRetryTokens; - } - - public function hasRetryQuota($result) - { - if ($result instanceof AwsException && $result->isConnectionError()) { - $this->capacityAmount = $this->timeoutRetryCost; - } else { - $this->capacityAmount = $this->retryCost; - } - - if ($this->capacityAmount > $this->availableCapacity) { - return false; - } - - $this->availableCapacity -= $this->capacityAmount; - return true; - } - - public function releaseToQuota($result) - { - if ($result instanceof AwsException) { - $statusCode = (int) $result->getStatusCode(); - } elseif ($result instanceof ResultInterface) { - $statusCode = isset($result['@metadata']['statusCode']) - ? (int) $result['@metadata']['statusCode'] - : null; - } - - if (!empty($statusCode) && $statusCode >= 200 && $statusCode < 300) { - if (isset($this->capacityAmount)) { - $amount = $this->capacityAmount; - $this->availableCapacity += $amount; - unset($this->capacityAmount); - } else { - $amount = $this->noRetryIncrement; - $this->availableCapacity += $amount; - } - $this->availableCapacity = min( - $this->availableCapacity, - $this->maxCapacity - ); - } - - return (isset($amount) ? $amount : 0); - } - - public function getAvailableCapacity() - { - return $this->availableCapacity; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/RateLimiter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/RateLimiter.php deleted file mode 100644 index b58cc5929..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/RateLimiter.php +++ /dev/null @@ -1,182 +0,0 @@ -beta = isset($options['beta']) - ? $options['beta'] - : 0.7; - $this->minCapacity = isset($options['min_capacity']) - ? $options['min_capacity'] - : 1; - $this->minFillRate = isset($options['min_fill_rate']) - ? $options['min_fill_rate'] - : 0.5; - $this->scaleConstant = isset($options['scale_constant']) - ? $options['scale_constant'] - : 0.4; - $this->smooth = isset($options['smooth']) - ? $options['smooth'] - : 0.8; - $this->timeProvider = isset($options['time_provider']) - ? $options['time_provider'] - : null; - - $this->lastTxRateBucket = floor($this->time()); - $this->lastThrottleTime = $this->time(); - } - - public function isEnabled() - { - return $this->enabled; - } - - public function getSendToken() - { - $this->acquireToken(1); - } - - public function updateSendingRate($isThrottled) - { - $this->updateMeasuredRate(); - - if ($isThrottled) { - if (!$this->isEnabled()) { - $rateToUse = $this->measuredTxRate; - } else { - $rateToUse = min($this->measuredTxRate, $this->fillRate); - } - - $this->lastMaxRate = $rateToUse; - $this->calculateTimeWindow(); - $this->lastThrottleTime = $this->time(); - $calculatedRate = $this->cubicThrottle($rateToUse); - $this->enableTokenBucket(); - } else { - $this->calculateTimeWindow(); - $calculatedRate = $this->cubicSuccess($this->time()); - } - $newRate = min($calculatedRate, 2 * $this->measuredTxRate); - $this->updateTokenBucketRate($newRate); - return $newRate; - } - - private function acquireToken($amount) - { - if (!$this->enabled) { - return true; - } - - $this->refillTokenBucket(); - - if ($amount > $this->currentCapacity) { - usleep((int) (1000000 * ($amount - $this->currentCapacity) / $this->fillRate)); - } - - $this->currentCapacity -= $amount; - return true; - } - - private function calculateTimeWindow() - { - $this->timeWindow = pow(($this->lastMaxRate * (1 - $this->beta) / $this->scaleConstant), 0.333); - } - - private function cubicSuccess($timestamp) - { - $dt = $timestamp - $this->lastThrottleTime; - return $this->scaleConstant * pow($dt - $this->timeWindow, 3) + $this->lastMaxRate; - } - - private function cubicThrottle($rateToUse) - { - return $rateToUse * $this->beta; - } - - private function enableTokenBucket() - { - $this->enabled = true; - } - - private function refillTokenBucket() - { - $timestamp = $this->time(); - if (!isset($this->lastTimestamp)) { - $this->lastTimestamp = $timestamp; - return; - } - $fillAmount = ($timestamp - $this->lastTimestamp) * $this->fillRate; - $this->currentCapacity = $this->currentCapacity + $fillAmount; - if (!is_null($this->maxCapacity)) { - $this->currentCapacity = min( - $this->maxCapacity, - $this->currentCapacity - ); - } - - $this->lastTimestamp = $timestamp; - } - - private function time() - { - if (is_callable($this->timeProvider)) { - $provider = $this->timeProvider; - $time = $provider(); - return $time; - } - return microtime(true); - } - - private function updateMeasuredRate() - { - $timestamp = $this->time(); - $timeBucket = floor(round($timestamp, 3) * 2) / 2; - $this->requestCount++; - if ($timeBucket > $this->lastTxRateBucket) { - $currentRate = $this->requestCount / ($timeBucket - $this->lastTxRateBucket); - $this->measuredTxRate = ($currentRate * $this->smooth) - + ($this->measuredTxRate * (1 - $this->smooth)); - $this->requestCount = 0; - $this->lastTxRateBucket = $timeBucket; - } - } - - private function updateTokenBucketRate($newRps) - { - $this->refillTokenBucket(); - $this->fillRate = max($newRps, $this->minFillRate); - $this->maxCapacity = max($newRps, $this->minCapacity); - $this->currentCapacity = min($this->currentCapacity, $this->maxCapacity); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/RetryHelperTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/RetryHelperTrait.php deleted file mode 100644 index 5e174bda0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/RetryHelperTrait.php +++ /dev/null @@ -1,61 +0,0 @@ -withHeader('amz-sdk-request', implode('; ', $header)); - } - - - private function updateStats($retries, $delay, array &$stats) - { - if (!isset($stats['total_retry_delay'])) { - $stats['total_retry_delay'] = 0; - } - - $stats['total_retry_delay'] += $delay; - $stats['retries_attempted'] = $retries; - } - - private function updateHttpStats($value, array &$stats) - { - if (empty($stats['http'])) { - $stats['http'] = []; - } - - if ($value instanceof AwsException) { - $resultStats = $value->getTransferInfo(); - $stats['http'] []= $resultStats; - } elseif ($value instanceof ResultInterface) { - $resultStats = isset($value['@metadata']['transferStats']['http'][0]) - ? $value['@metadata']['transferStats']['http'][0] - : []; - $stats['http'] []= $resultStats; - } - } - - private function bindStatsToReturn($return, array $stats) - { - if ($return instanceof ResultInterface) { - if (!isset($return['@metadata'])) { - $return['@metadata'] = []; - } - - $return['@metadata']['transferStats'] = $stats; - } elseif ($return instanceof AwsException) { - $return->setTransferInfo($stats); - } - - return $return; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/LongPolling.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/LongPolling.php deleted file mode 100644 index b2713e762..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/LongPolling.php +++ /dev/null @@ -1,27 +0,0 @@ - ['ReceiveMessage' => true], - 'states' => ['GetActivityTask' => true], - 'swf' => [ - 'PollForActivityTask' => true, - 'PollForDecisionTask' => true, - ], - ]; - - public static function isLongPolling(?string $service, string $operation): bool - { - return $service !== null - && isset(self::OPERATIONS[$service][$operation]); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/OptIn.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/OptIn.php deleted file mode 100644 index 0a7860a09..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/OptIn.php +++ /dev/null @@ -1,40 +0,0 @@ -noRetryIncrement = $config['no_retry_increment'] ?? 1; - $this->retryCost = $config['retry_cost'] ?? 14; - $this->throttlingRetryCost = $config['throttling_retry_cost'] ?? 5; - $this->maxCapacity = $initialTokens; - $this->availableCapacity = $initialTokens; - } - - /** - * Attempts to acquire retry quota. - * - * @param bool $isThrottling Whether the error is a throttling error. - * - * @return int|false The capacity used, or false if insufficient quota. - */ - public function acquireRetryQuota(bool $isThrottling): int|false - { - $cost = $isThrottling ? $this->throttlingRetryCost : $this->retryCost; - - if ($cost > $this->availableCapacity) { - return false; - } - - $this->availableCapacity -= $cost; - - return $cost; - } - - /** - * Releases quota back to the pool. - * - * @param int|null $capacityUsed The capacity to release. If null, uses - * the no_retry_increment value. - */ - public function releaseQuota(?int $capacityUsed): void - { - $amount = $capacityUsed ?? $this->noRetryIncrement; - - $this->availableCapacity = min( - $this->availableCapacity + $amount, - $this->maxCapacity - ); - } - - public function getAvailableCapacity(): int - { - return $this->availableCapacity; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/RetryMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/RetryMiddleware.php deleted file mode 100644 index 4d8bd0a39..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Retry/V3/RetryMiddleware.php +++ /dev/null @@ -1,437 +0,0 @@ - true, - 'ThrottlingException' => true, - 'ThrottledException' => true, - 'RequestThrottledException' => true, - 'TooManyRequestsException' => true, - 'ProvisionedThroughputExceededException' => true, - 'TransactionInProgressException' => true, - 'RequestLimitExceeded' => true, - 'BandwidthLimitExceeded' => true, - 'LimitExceededException' => true, - 'RequestThrottled' => true, - 'SlowDown' => true, - 'PriorRequestNotComplete' => true, - 'EC2ThrottledException' => true, - ]; - - private static array $standardTransientErrors = [ - 'RequestTimeout' => true, - 'RequestTimeoutException' => true, - ]; - - private static array $standardTransientStatusCodes = [ - 500 => true, - 502 => true, - 503 => true, - 504 => true, - ]; - - private float $baseDelayMs; - private bool $collectStats; - private ?\Closure $customDecider; - private ?\Closure $delayer; - private ?float $exponentialBase; - private int $maxAttempts; - private int $maxBackoffMs; - private string $mode; - private \Closure $nextHandler; - private array $options; - private QuotaManager $quotaManager; - private ?RateLimiter $rateLimiter = null; - private ?string $service; - - public static function wrap(ConfigurationInterface $config, array $options): \Closure - { - if (!isset($options['quota_manager'])) { - $options['quota_manager'] = new QuotaManager(); - } - - if ($config->getMode() === 'adaptive' - && !isset($options['rate_limiter']) - ) { - $options['rate_limiter'] = new RateLimiter(); - } - - return function (callable $handler) use ($config, $options) { - return new static($config, $handler, $options); - }; - } - - /** - * Returns a closure that decides retryability for a given result based - * on the standard error codes and status codes. Quota and max-attempts - * decisions are handled by the middleware itself, not by this closure. - */ - public static function createDefaultDecider(array $options = []): \Closure - { - return function ( - int $attempts, - CommandInterface $command, - mixed $result - ) use ($options): bool { - return self::isRetryable($result, $options); - }; - } - - public function __construct( - ConfigurationInterface $config, - callable $handler, - array $options = [] - ) { - $this->options = $options; - $this->maxAttempts = $config->getMaxAttempts(); - $this->mode = $config->getMode(); - $this->nextHandler = $handler(...); - $this->service = $options['service'] ?? null; - $this->quotaManager = $options['quota_manager'] ?? new QuotaManager(); - $this->maxBackoffMs = $options['max_backoff'] ?? self::DEFAULT_MAX_BACKOFF_MS; - $this->baseDelayMs = $options['base_delay'] ?? self::DEFAULT_BASE_DELAY_MS; - $this->exponentialBase = $options['exponential_base'] ?? null; - $this->collectStats = (bool) ($options['collect_stats'] ?? false); - - $this->customDecider = isset($options['decider']) - ? ($options['decider'])(...) - : null; - - $this->delayer = isset($options['delayer']) - ? ($options['delayer'])(...) - : null; - - if ($this->mode === 'adaptive') { - $this->rateLimiter = $options['rate_limiter'] ?? new RateLimiter(); - } - } - - public function __invoke(CommandInterface $cmd, RequestInterface $req): PromiseInterface - { - $handler = $this->nextHandler; - - $attempts = 1; - $monitoringEvents = []; - $requestStats = []; - $capacityUsed = null; - - $req = $this->addRetryHeader($req, 0, $this->resolveMaxAttempts($cmd)); - - $callback = function ($value) use ( - $handler, - $cmd, - $req, - &$attempts, - &$requestStats, - &$monitoringEvents, - &$callback, - &$capacityUsed - ) { - if ($this->mode === 'adaptive') { - $this->rateLimiter->updateSendingRate($this->isThrottlingError($value)); - } - - $this->updateHttpStats($value, $requestStats); - - if ($value instanceof MonitoringEventsInterface) { - $reversedEvents = array_reverse($monitoringEvents); - $monitoringEvents = array_merge($monitoringEvents, $value->getMonitoringEvents()); - foreach ($reversedEvents as $event) { - $value->prependMonitoringEvent($event); - } - } - - $isError = $value instanceof \Throwable; - - $isSuccess = false; - if (!$isError && $value instanceof ResultInterface) { - $statusCode = isset($value['@metadata']['statusCode']) - ? (int) $value['@metadata']['statusCode'] - : null; - if (!empty($statusCode) && $statusCode >= 200 && $statusCode < 300) { - $isSuccess = true; - } - } - - if ($isSuccess) { - $this->quotaManager->releaseQuota($capacityUsed); - $callback = null; - return $this->bindStatsToReturn($value, $requestStats); - } - - $isRetryable = self::isRetryable( - $value, - $this->options - ); - - // Custom decider supplements default retryability - if (!$isRetryable && $this->customDecider !== null) { - $isRetryable = ($this->customDecider)($attempts, $cmd, $value); - } - - if (!$isRetryable) { - if ($isError) { - $callback = null; - return Promise\Create::rejectionFor( - $this->bindStatsToReturn($value, $requestStats) - ); - } - $callback = null; - return $this->bindStatsToReturn($value, $requestStats); - } - - // Max attempts is checked before retry quota. - $maxAttempts = $this->resolveMaxAttempts($cmd); - - if ($attempts >= $maxAttempts) { - if ($value instanceof AwsException) { - $value->setMaxRetriesExceeded(); - } - if ($isError) { - $callback = null; - return Promise\Create::rejectionFor( - $this->bindStatsToReturn($value, $requestStats) - ); - } - $callback = null; - return $this->bindStatsToReturn($value, $requestStats); - } - - $isThrottling = $this->isThrottlingError($value); - $attemptIndex = $attempts - 1; - $delayByMs = $this->computeRetryDelay( - $attemptIndex, - $isThrottling, - $value - ); - - $acquired = $this->quotaManager->acquireRetryQuota($isThrottling); - if ($acquired === false) { - // Long-polling: sleep and surface the error rather than retry. - if (LongPolling::isLongPolling($this->service, $cmd->getName())) { - $cmd['@http']['delay'] = $delayByMs; - usleep((int) ($delayByMs * 1000)); - } - - if ($isError) { - $callback = null; - return Promise\Create::rejectionFor( - $this->bindStatsToReturn($value, $requestStats) - ); - } - $callback = null; - return $this->bindStatsToReturn($value, $requestStats); - } - $capacityUsed = $acquired; - - if ($this->delayer !== null) { - $delayByMs = ($this->delayer)($attempts); - } - - $attempts++; - $cmd['@http']['delay'] = $delayByMs; - - if ($this->collectStats) { - $this->updateStats($attempts - 1, $delayByMs, $requestStats); - } - - $req = $this->addRetryHeader( - $req, - $attempts - 1, - $maxAttempts - ); - - if ($this->mode === 'adaptive') { - $this->rateLimiter->getSendToken(); - } - - return $handler($cmd, $req)->then($callback, $callback); - }; - - if ($this->mode === 'adaptive') { - $this->rateLimiter->getSendToken(); - } - - return $handler($cmd, $req)->then($callback, $callback); - } - - public function exponentialDelayWithJitter(int $attempts): int - { - return $this->computeRetryDelay($attempts - 1, false, null); - } - - private function computeRetryDelay(int $attemptIndex, bool $isThrottling, mixed $value): int - { - $baseMs = $isThrottling - ? self::THROTTLING_BASE_DELAY_MS - : $this->baseDelayMs; - - if ($this->exponentialBase !== null) { - $jitter = $this->exponentialBase; - } else { - $max = mt_getrandmax(); - try { - $jitter = random_int(0, $max) / $max; - } catch (\Exception $_) { - $jitter = mt_rand(0, $max) / $max; - } - } - - $delayMs = $jitter * min( - $baseMs * pow(2, $attemptIndex), - $this->maxBackoffMs - ); - - $retryAfterHeader = null; - if ($value instanceof AwsException) { - $response = $value->getResponse(); - $retryAfterHeader = $response?->getHeaderLine( - self::RETRY_AFTER_HEADER - ) ?? null; - } elseif ($value instanceof ResultInterface) { - $retryAfterHeader = $value['@metadata']['headers'][ - self::RETRY_AFTER_HEADER - ] ?? null; - } - - if (ctype_digit((string) $retryAfterHeader)) { - $retryAfterMs = (int) $retryAfterHeader; - $retryAfterMs = max($retryAfterMs, $delayMs); - $retryAfterMs = min($retryAfterMs, 5000 + $delayMs); - $delayMs = $retryAfterMs; - } - - return (int) $delayMs; - } - - private static function isRetryable( - mixed $result, - array $options = [] - ): bool - { - $errorCodes = self::$standardThrottlingErrors + self::$standardTransientErrors; - if (!empty($options['transient_error_codes']) - && is_array($options['transient_error_codes']) - ) { - foreach ($options['transient_error_codes'] as $code) { - $errorCodes[$code] = true; - } - } - if (!empty($options['throttling_error_codes']) - && is_array($options['throttling_error_codes']) - ) { - foreach ($options['throttling_error_codes'] as $code) { - $errorCodes[$code] = true; - } - } - - $statusCodes = self::$standardTransientStatusCodes; - if (!empty($options['status_codes']) - && is_array($options['status_codes']) - ) { - foreach ($options['status_codes'] as $code) { - $statusCodes[$code] = true; - } - } - - $isError = $result instanceof \Throwable; - - if (!$isError) { - if (!isset($result['@metadata']['statusCode'])) { - return false; - } - return isset($statusCodes[$result['@metadata']['statusCode']]); - } - - if (!($result instanceof AwsException)) { - return false; - } - - if ($result->isConnectionError()) { - return true; - } - - $awsCode = $result->getAwsErrorCode(); - if ($awsCode !== null && isset($errorCodes[$awsCode])) { - return true; - } - - $status = $result->getStatusCode(); - if ($status !== null && isset($statusCodes[$status])) { - return true; - } - - if (!empty($errorShape = $result->getAwsErrorShape())) { - $definition = $errorShape->toArray(); - if (!empty($definition['retryable'])) { - return true; - } - } - - return false; - } - - private function isThrottlingError(mixed $result): bool - { - if ($result instanceof AwsException) { - $throttlingErrors = self::$standardThrottlingErrors; - if (!empty($this->options['throttling_error_codes']) - && is_array($this->options['throttling_error_codes']) - ) { - foreach ($this->options['throttling_error_codes'] as $code) { - $throttlingErrors[$code] = true; - } - } - if (!empty($result->getAwsErrorCode()) - && !empty($throttlingErrors[$result->getAwsErrorCode()]) - ) { - return true; - } - - if (!empty($errorShape = $result->getAwsErrorShape())) { - $definition = $errorShape->toArray(); - if (!empty($definition['retryable']['throttling'])) { - return true; - } - } - } - - return false; - } - - private function resolveMaxAttempts(CommandInterface $cmd): int - { - return ($cmd['@retries'] !== null) - ? $cmd['@retries'] + 1 - : $this->maxAttempts; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RetryMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RetryMiddleware.php deleted file mode 100644 index ad595e240..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RetryMiddleware.php +++ /dev/null @@ -1,252 +0,0 @@ - true, - 502 => true, - 503 => true, - 504 => true - ]; - - private static $retryCodes = [ - // Throttling error - 'RequestLimitExceeded' => true, - 'Throttling' => true, - 'ThrottlingException' => true, - 'ThrottledException' => true, - 'ProvisionedThroughputExceededException' => true, - 'RequestThrottled' => true, - 'BandwidthLimitExceeded' => true, - 'RequestThrottledException' => true, - 'TooManyRequestsException' => true, - 'IDPCommunicationError' => true, - 'EC2ThrottledException' => true, - ]; - - private $decider; - private $delay; - private $nextHandler; - private $collectStats; - - public function __construct( - callable $decider, - callable $delay, - callable $nextHandler, - $collectStats = false - ) { - $this->decider = $decider; - $this->delay = $delay; - $this->nextHandler = $nextHandler; - $this->collectStats = (bool) $collectStats; - } - - /** - * Creates a default AWS retry decider function. - * - * The optional $extraConfig parameter is an associative array - * that specifies additional retry conditions on top of the ones specified - * by default by the Aws\RetryMiddleware class, with the following keys: - * - * - errorCodes: (string[]) An indexed array of AWS exception codes to retry. - * Optional. - * - statusCodes: (int[]) An indexed array of HTTP status codes to retry. - * Optional. - * @param int $maxRetries - * @param array $extraConfig - * @return callable - */ - public static function createDefaultDecider( - $maxRetries = 3, - $extraConfig = [] - ) { - return function ( - $retries, - CommandInterface $command, - RequestInterface $request, - ?ResultInterface $result = null, - $error = null - ) use ($maxRetries, $extraConfig) { - // Allow command-level options to override this value - $maxRetries = null !== $command['@retries'] ? - $command['@retries'] - : $maxRetries; - - $isRetryable = self::isRetryable( - $result, - $error, - $extraConfig - ); - - if ($retries >= $maxRetries) { - if (!empty($error) - && $error instanceof AwsException - && $isRetryable - ) { - $error->setMaxRetriesExceeded(); - } - return false; - } - - return $isRetryable; - }; - } - - private static function isRetryable( - $result, - $error, - $extraConfig = [] - ) { - $errorCodes = self::$retryCodes; - if (!empty($extraConfig['error_codes']) - && is_array($extraConfig['error_codes']) - ) { - foreach($extraConfig['error_codes'] as $code) { - $errorCodes[$code] = true; - } - } - - $statusCodes = self::$retryStatusCodes; - if (!empty($extraConfig['status_codes']) - && is_array($extraConfig['status_codes']) - ) { - foreach($extraConfig['status_codes'] as $code) { - $statusCodes[$code] = true; - } - } - - if (!$error) { - if (!isset($result['@metadata']['statusCode'])) { - return false; - } - return isset($statusCodes[$result['@metadata']['statusCode']]); - } - - if (!($error instanceof AwsException)) { - return false; - } - - if ($error->isConnectionError()) { - return true; - } - - $awsCode = $error->getAwsErrorCode(); - if (!is_null($awsCode) && isset($errorCodes[$awsCode])) { - return true; - } - - $status = $error->getStatusCode(); - if (!is_null($status) && isset($statusCodes[$status])) { - return true; - } - - return false; - } - - /** - * Delay function that calculates an exponential delay. - * - * Exponential backoff with jitter, 100ms base, 20 sec ceiling - * - * @param $retries - The number of retries that have already been attempted - * - * @return int - * - * @link https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ - */ - public static function exponentialDelay($retries) - { - return mt_rand(0, (int) min(20000, (int) pow(2, $retries) * 100)); - } - - /** - * @param CommandInterface $command - * @param RequestInterface $request - * - * @return PromiseInterface - */ - public function __invoke( - CommandInterface $command, - ?RequestInterface $request = null - ) { - $retries = 0; - $requestStats = []; - $monitoringEvents = []; - $handler = $this->nextHandler; - $decider = $this->decider; - $delay = $this->delay; - - $request = $this->addRetryHeader( - $request, - 0, - $command['@retries'] !== null ? $command['@retries'] + 1 : null - ); - - $g = function ($value) use ( - $handler, - $decider, - $delay, - $command, - $request, - &$retries, - &$requestStats, - &$monitoringEvents, - &$g - ) { - $this->updateHttpStats($value, $requestStats); - - if ($value instanceof MonitoringEventsInterface) { - $reversedEvents = array_reverse($monitoringEvents); - $monitoringEvents = array_merge($monitoringEvents, $value->getMonitoringEvents()); - foreach ($reversedEvents as $event) { - $value->prependMonitoringEvent($event); - } - } - if ($value instanceof \Exception || $value instanceof \Throwable) { - if (!$decider($retries, $command, $request, null, $value)) { - $g = null; - return Promise\Create::rejectionFor( - $this->bindStatsToReturn($value, $requestStats) - ); - } - } elseif ($value instanceof ResultInterface - && !$decider($retries, $command, $request, $value, null) - ) { - $g = null; - return $this->bindStatsToReturn($value, $requestStats); - } - - // Delay fn is called with 0, 1, ... so increment after the call. - $delayBy = $delay($retries++); - $command['@http']['delay'] = $delayBy; - if ($this->collectStats) { - $this->updateStats($retries, $delayBy, $requestStats); - } - - // Update retry header with retry count and delayBy - $request = $this->addRetryHeader( - $request, - $retries, - $command['@retries'] !== null ? $command['@retries'] + 1 : null - ); - - return $handler($command, $request)->then($g, $g); - }; - - return $handler($command, $request)->then($g, $g); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RetryMiddlewareV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RetryMiddlewareV2.php deleted file mode 100644 index f27639da1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/RetryMiddlewareV2.php +++ /dev/null @@ -1,366 +0,0 @@ - true, - 'ThrottlingException' => true, - 'ThrottledException' => true, - 'RequestThrottledException' => true, - 'TooManyRequestsException' => true, - 'ProvisionedThroughputExceededException' => true, - 'TransactionInProgressException' => true, - 'RequestLimitExceeded' => true, - 'BandwidthLimitExceeded' => true, - 'LimitExceededException' => true, - 'RequestThrottled' => true, - 'SlowDown' => true, - 'PriorRequestNotComplete' => true, - 'EC2ThrottledException' => true, - ]; - - private static $standardTransientErrors = [ - 'RequestTimeout' => true, - 'RequestTimeoutException' => true, - ]; - - private static $standardTransientStatusCodes = [ - 500 => true, - 502 => true, - 503 => true, - 504 => true, - ]; - - private $collectStats; - private $decider; - private $delayer; - private $maxAttempts; - private $maxBackoff; - private $mode; - private $nextHandler; - private $options; - private $quotaManager; - private $rateLimiter; - - public static function wrap($config, $options) - { - return function (callable $handler) use ( - $config, - $options - ) { - return new static( - $config, - $handler, - $options - ); - }; - } - - public static function createDefaultDecider( - QuotaManager $quotaManager, - $maxAttempts = 3, - $options = [] - ) { - return function( - $attempts, - CommandInterface $command, - $result - ) use ($options, $quotaManager, $maxAttempts) { - - // Release retry tokens back to quota on a successful result - $quotaManager->releaseToQuota($result); - - // Allow command-level option to override this value - // # of attempts = # of retries + 1 - $maxAttempts = (null !== $command['@retries']) - ? $command['@retries'] + 1 - : $maxAttempts; - - $isRetryable = self::isRetryable( - $result, - $options - ); - - if ($isRetryable) { - - // Retrieve retry tokens and check if quota has been exceeded - if (!$quotaManager->hasRetryQuota($result)) { - return false; - } - - if ($attempts >= $maxAttempts) { - if (!empty($result) && $result instanceof AwsException) { - $result->setMaxRetriesExceeded(); - } - return false; - } - } - - return $isRetryable; - }; - } - - public function __construct( - ConfigurationInterface $config, - callable $handler, - $options = [] - ) { - $this->options = $options; - $this->maxAttempts = $config->getMaxAttempts(); - $this->mode = $config->getMode(); - $this->nextHandler = $handler; - $this->quotaManager = new QuotaManager(); - - $this->maxBackoff = isset($options['max_backoff']) - ? $options['max_backoff'] - : 20000; - - $this->collectStats = isset($options['collect_stats']) - ? (bool) $options['collect_stats'] - : false; - - $this->decider = isset($options['decider']) - ? $options['decider'] - : self::createDefaultDecider( - $this->quotaManager, - $this->maxAttempts, - $options - ); - - $this->delayer = isset($options['delayer']) - ? $options['delayer'] - : function ($attempts) { - return $this->exponentialDelayWithJitter($attempts); - }; - - if ($this->mode === 'adaptive') { - $this->rateLimiter = isset($options['rate_limiter']) - ? $options['rate_limiter'] - : new RateLimiter(); - } - } - - public function __invoke(CommandInterface $cmd, RequestInterface $req) - { - $decider = $this->decider; - $delayer = $this->delayer; - $handler = $this->nextHandler; - - $attempts = 1; - $monitoringEvents = []; - $requestStats = []; - - $req = $this->addRetryHeader($req, 0, $this->resolveMaxAttempts($cmd)); - - $callback = function ($value) use ( - $handler, - $cmd, - $req, - $decider, - $delayer, - &$attempts, - &$requestStats, - &$monitoringEvents, - &$callback - ) { - if ($this->mode === 'adaptive') { - $this->rateLimiter->updateSendingRate($this->isThrottlingError($value)); - } - - $this->updateHttpStats($value, $requestStats); - - if ($value instanceof MonitoringEventsInterface) { - $reversedEvents = array_reverse($monitoringEvents); - $monitoringEvents = array_merge($monitoringEvents, $value->getMonitoringEvents()); - foreach ($reversedEvents as $event) { - $value->prependMonitoringEvent($event); - } - } - if ($value instanceof Exception || $value instanceof \Throwable) { - if (!$decider($attempts, $cmd, $value)) { - $callback = null; - return Promise\Create::rejectionFor( - $this->bindStatsToReturn($value, $requestStats) - ); - } - } elseif ($value instanceof ResultInterface - && !$decider($attempts, $cmd, $value) - ) { - $callback = null; - return $this->bindStatsToReturn($value, $requestStats); - } - - $delayBy = $delayer($attempts++); - $cmd['@http']['delay'] = $delayBy; - if ($this->collectStats) { - $this->updateStats($attempts - 1, $delayBy, $requestStats); - } - - // Update retry header with retry count and delayBy - $req = $this->addRetryHeader( - $req, - $attempts - 1, - $this->resolveMaxAttempts($cmd) - ); - - // Get token from rate limiter, which will sleep if necessary - if ($this->mode === 'adaptive') { - $this->rateLimiter->getSendToken(); - } - - return $handler($cmd, $req)->then($callback, $callback); - }; - - // Get token from rate limiter, which will sleep if necessary - if ($this->mode === 'adaptive') { - $this->rateLimiter->getSendToken(); - } - - return $handler($cmd, $req)->then($callback, $callback); - } - - /** - * Amount of milliseconds to delay as a function of attempt number - * - * @param $attempts - * @return mixed - */ - public function exponentialDelayWithJitter($attempts) - { - $max = mt_getrandmax(); - try { - $rand = random_int(0, $max) / $max; - } catch (Exception $_) { - // fallback to prevent failing - $rand = mt_rand(0, $max) / $max; - } - - return min(1000 * $rand * pow(2, $attempts) , $this->maxBackoff); - } - - private static function isRetryable( - $result, - $options = [] - ) { - $errorCodes = self::$standardThrottlingErrors + self::$standardTransientErrors; - if (!empty($options['transient_error_codes']) - && is_array($options['transient_error_codes']) - ) { - foreach($options['transient_error_codes'] as $code) { - $errorCodes[$code] = true; - } - } - if (!empty($options['throttling_error_codes']) - && is_array($options['throttling_error_codes']) - ) { - foreach($options['throttling_error_codes'] as $code) { - $errorCodes[$code] = true; - } - } - - $statusCodes = self::$standardTransientStatusCodes; - if (!empty($options['status_codes']) - && is_array($options['status_codes']) - ) { - foreach($options['status_codes'] as $code) { - $statusCodes[$code] = true; - } - } - - if ($result instanceof Exception || $result instanceof \Throwable) { - $isError = true; - } else { - $isError = false; - } - - if (!$isError) { - if (!isset($result['@metadata']['statusCode'])) { - return false; - } - return isset($statusCodes[$result['@metadata']['statusCode']]); - } - - if (!($result instanceof AwsException)) { - return false; - } - - if ($result->isConnectionError()) { - return true; - } - - $awsCode = $result->getAwsErrorCode(); - if (!is_null($awsCode) && isset($errorCodes[$awsCode])) { - return true; - } - - $status = $result->getStatusCode(); - if (!is_null($status) && isset($statusCodes[$status])) { - return true; - } - - // Check error shape for the retryable trait - if (!empty($errorShape = $result->getAwsErrorShape())) { - $definition = $errorShape->toArray(); - if (!empty($definition['retryable'])) { - return true; - } - } - - return false; - } - - private function isThrottlingError($result) - { - if ($result instanceof AwsException) { - // Check pre-defined throttling errors - $throttlingErrors = self::$standardThrottlingErrors; - if (!empty($this->options['throttling_error_codes']) - && is_array($this->options['throttling_error_codes']) - ) { - foreach($this->options['throttling_error_codes'] as $code) { - $throttlingErrors[$code] = true; - } - } - if (!empty($result->getAwsErrorCode()) - && !empty($throttlingErrors[$result->getAwsErrorCode()]) - ) { - return true; - } - - // Check error shape for the throttling trait - if (!empty($errorShape = $result->getAwsErrorShape())) { - $definition = $errorShape->toArray(); - if (!empty($definition['retryable']['throttling'])) { - return true; - } - } - } - - return false; - } - - private function resolveMaxAttempts(CommandInterface $cmd) - { - return $cmd['@retries'] !== null - ? $cmd['@retries'] + 1 - : $this->maxAttempts; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php deleted file mode 100644 index 18d3a174d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php +++ /dev/null @@ -1,79 +0,0 @@ - true, - 'UploadPartCopy' => true, - 'CopyObject' => true, - 'CompleteMultipartUpload' => true, - ]; - - /** @var callable */ - private $errorParser; - /** @var string */ - private $exceptionClass; - - public function __construct( - callable $parser, - callable $errorParser, - $exceptionClass = AwsException::class - ) { - $this->parser = $parser; - $this->errorParser = $errorParser; - $this->exceptionClass = $exceptionClass; - } - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - if (200 === $response->getStatusCode() - && isset(self::$ambiguousSuccesses[$command->getName()]) - ) { - $errorParser = $this->errorParser; - try { - $parsed = $errorParser($response); - } catch (ParserException $e) { - $parsed = [ - 'code' => 'ConnectionError', - 'message' => "An error connecting to the service occurred" - . " while performing the " . $command->getName() - . " operation." - ]; - } - if (isset($parsed['code']) && isset($parsed['message'])) { - throw new $this->exceptionClass( - $parsed['message'], - $command, - ['connection_error' => true] - ); - } - } - - $fn = $this->parser; - return $fn($command, $response); - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - return $this->parser->parseMemberFromStream($stream, $member, $response); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ApplyChecksumMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ApplyChecksumMiddleware.php deleted file mode 100644 index fcdd7af1c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ApplyChecksumMiddleware.php +++ /dev/null @@ -1,243 +0,0 @@ - true, - 'UploadPart' => true, - ]; - - /** @var Service */ - private $api; - - /** @var array */ - private $config; - - /** @var callable */ - private $nextHandler; - - /** - * Create a middleware wrapper function. - * - * @param Service $api - * @return callable - */ - public static function wrap(Service $api, array $config = []) - { - return function (callable $handler) use ($api, $config) { - return new self($handler, $api, $config); - }; - } - - public function __construct( - callable $nextHandler, - Service $api, - array $config = [] - ) - { - $this->api = $api; - $this->nextHandler = $nextHandler; - $this->config = $config; - } - - public function __invoke( - CommandInterface $command, - RequestInterface $request - ) { - $next = $this->nextHandler; - $name = $command->getName(); - $body = $request->getBody(); - $operation = $this->api->getOperation($name); - $mode = $command['@context']['request_checksum_calculation'] - ?? $this->config['request_checksum_calculation'] - ?? self::DEFAULT_CALCULATION_MODE; - - $command->getMetricsBuilder()->identifyMetricByValueAndAppend( - 'request_checksum_calculation', - $mode - ); - - // Trigger warning if AddContentMD5 is specified for PutObject or UploadPart - $this->handleDeprecatedAddContentMD5($command); - - $checksumInfo = $operation['httpChecksum'] ?? []; - $checksumMemberName = $checksumInfo['requestAlgorithmMember'] ?? ''; - $checksumMember = !empty($checksumMemberName) - ? $operation->getInput()->getMember($checksumMemberName) - : null; - $checksumRequired = $checksumInfo['requestChecksumRequired'] ?? false; - $requestedAlgorithm = $command[$checksumMemberName] ?? null; - - $shouldAddChecksum = $this->shouldAddChecksum( - $mode, - $checksumRequired, - $checksumMember, - $requestedAlgorithm - ); - if ($shouldAddChecksum) { - if (!$this->hasAlgorithmHeader($request)) { - $supportedAlgorithms = array_map('strtolower', $checksumMember['enum'] ?? []); - $algorithm = $this->determineChecksumAlgorithm( - $supportedAlgorithms, - $requestedAlgorithm, - $checksumMemberName - ); - $request = $this->addAlgorithmHeader($algorithm, $request, $body); - - $command->getMetricsBuilder()->identifyMetricByValueAndAppend( - 'request_checksum', - $algorithm - ); - } - } - - // Set the content hash header if ContentSHA256 is provided - if (isset(self::$sha256[$name]) && $command['ContentSHA256']) { - $request = $request->withHeader( - 'X-Amz-Content-Sha256', - $command['ContentSHA256'] - ); - $command->getMetricsBuilder()->append( - MetricsBuilder::FLEXIBLE_CHECKSUMS_REQ_SHA256 - ); - } - - return $next($command, $request); - } - - /** - * @param CommandInterface $command - * - * @return void - */ - private function handleDeprecatedAddContentMD5(CommandInterface $command): void - { - if (!empty($command['AddContentMD5'])) { - trigger_error( - 'S3 no longer supports MD5 checksums. ' . - 'A CRC32 checksum will be computed and applied on your behalf.', - E_USER_DEPRECATED - ); - $command['ChecksumAlgorithm'] = self::DEFAULT_ALGORITHM; - } - } - - /** - * @param string $mode - * @param Shape|null $checksumMember - * @param string $name - * @param bool $checksumRequired - * @param string|null $requestedAlgorithm - * - * @return bool - */ - private function shouldAddChecksum( - string $mode, - bool $checksumRequired, - ?Shape $checksumMember, - ?string $requestedAlgorithm - ): bool - { - return ($mode === 'when_supported' && $checksumMember) - || ($mode === 'when_required' - && ($checksumRequired || ($checksumMember && $requestedAlgorithm))); - } - - /** - * @param Shape|null $checksumMember - * @param string|null $requestedAlgorithm - * @param string|null $checksumMemberName - * - * @return string - */ - private function determineChecksumAlgorithm( - array $supportedAlgorithms, - ?string $requestedAlgorithm, - ?string $checksumMemberName - ): string - { - $algorithm = self::DEFAULT_ALGORITHM; - - if ($requestedAlgorithm) { - $requestedAlgorithm = strtolower($requestedAlgorithm); - if (!in_array($requestedAlgorithm, $supportedAlgorithms)) { - throw new InvalidArgumentException( - "Unsupported algorithm supplied for input variable {$checksumMemberName}. " . - "Supported checksums for this operation include: " - . implode(", ", $supportedAlgorithms) . "." - ); - } - $algorithm = $requestedAlgorithm; - } - - return $algorithm; - } - - /** - * @param string $requestedAlgorithm - * @param RequestInterface $request - * @param StreamInterface $body - * - * @return RequestInterface - */ - private function addAlgorithmHeader( - string $requestedAlgorithm, - RequestInterface $request, - StreamInterface $body - ): RequestInterface - { - $headerName = "x-amz-checksum-{$requestedAlgorithm}"; - if (!$request->hasHeader($headerName)) { - $encoded = self::getEncodedValue($requestedAlgorithm, $body); - $request = $request->withHeader($headerName, $encoded); - } - - return $request; - } - - /** - * @param RequestInterface $request - * - * @return bool - */ - private function hasAlgorithmHeader(RequestInterface $request): bool - { - $headers = $request->getHeaders(); - - foreach ($headers as $name => $values) { - if (stripos($name, 'x-amz-checksum-') === 0) { - return true; - } - } - - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BatchDelete.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BatchDelete.php deleted file mode 100644 index db81bebc5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BatchDelete.php +++ /dev/null @@ -1,240 +0,0 @@ - 'us-west-2', - * 'version' => 'latest' - * ]); - * - * $listObjectsParams = ['Bucket' => 'foo', 'Prefix' => 'starts/with/']; - * $delete = Aws\S3\BatchDelete::fromListObjects($s3, $listObjectsParams); - * // Asynchronously delete - * $promise = $delete->promise(); - * // Force synchronous completion - * $delete->delete(); - * - * When using one of the batch delete creational static methods, you can supply - * an associative array of options: - * - * - before: Function invoked before executing a command. The function is - * passed the command that is about to be executed. This can be useful - * for logging, adding custom request headers, etc. - * - batch_size: The size of each delete batch. Defaults to 1000. - * - * @link http://docs.aws.amazon.com/AmazonS3/latest/API/multiobjectdeleteapi.html - */ -class BatchDelete implements PromisorInterface -{ - private $bucket; - /** @var AwsClientInterface */ - private $client; - /** @var callable */ - private $before; - /** @var PromiseInterface */ - private $cachedPromise; - /** @var callable */ - private $promiseCreator; - private $batchSize = 1000; - private $queue = []; - - /** - * Creates a BatchDelete object from all of the paginated results of a - * ListObjects operation. Each result that is returned by the ListObjects - * operation will be deleted. - * - * @param AwsClientInterface $client AWS Client to use. - * @param array $listObjectsParams ListObjects API parameters - * @param array $options BatchDelete options. - * - * @return BatchDelete - */ - public static function fromListObjects( - AwsClientInterface $client, - array $listObjectsParams, - array $options = [] - ) { - $iter = $client->getPaginator('ListObjects', $listObjectsParams); - $bucket = $listObjectsParams['Bucket']; - $fn = function (BatchDelete $that) use ($iter) { - return $iter->each(function ($result) use ($that) { - $promises = []; - if (is_array($result['Contents'])) { - foreach ($result['Contents'] as $object) { - if ($promise = $that->enqueue($object)) { - $promises[] = $promise; - } - } - } - return $promises ? Promise\Utils::all($promises) : null; - }); - }; - - return new self($client, $bucket, $fn, $options); - } - - /** - * Creates a BatchDelete object from an iterator that yields results. - * - * @param AwsClientInterface $client AWS Client to use to execute commands - * @param string $bucket Bucket where the objects are stored - * @param \Iterator $iter Iterator that yields assoc arrays - * @param array $options BatchDelete options - * - * @return BatchDelete - */ - public static function fromIterator( - AwsClientInterface $client, - $bucket, - \Iterator $iter, - array $options = [] - ) { - $fn = function (BatchDelete $that) use ($iter) { - return Promise\Coroutine::of(function () use ($that, $iter) { - foreach ($iter as $obj) { - if ($promise = $that->enqueue($obj)) { - yield $promise; - } - } - }); - }; - - return new self($client, $bucket, $fn, $options); - } - - /** - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - if (!$this->cachedPromise) { - $this->cachedPromise = $this->createPromise(); - } - - return $this->cachedPromise; - } - - /** - * Synchronously deletes all of the objects. - * - * @throws DeleteMultipleObjectsException on error. - */ - public function delete() - { - $this->promise()->wait(); - } - - /** - * @param AwsClientInterface $client Client used to transfer the requests - * @param string $bucket Bucket to delete from. - * @param callable $promiseFn Creates a promise. - * @param array $options Hash of options used with the batch - * - * @throws \InvalidArgumentException if the provided batch_size is <= 0 - */ - private function __construct( - AwsClientInterface $client, - $bucket, - callable $promiseFn, - array $options = [] - ) { - $this->client = $client; - $this->bucket = $bucket; - $this->promiseCreator = $promiseFn; - - if (isset($options['before'])) { - if (!is_callable($options['before'])) { - throw new \InvalidArgumentException('before must be callable'); - } - $this->before = $options['before']; - } - - if (isset($options['batch_size'])) { - if ($options['batch_size'] <= 0) { - throw new \InvalidArgumentException('batch_size is not > 0'); - } - $this->batchSize = min($options['batch_size'], 1000); - } - } - - private function enqueue(array $obj) - { - $this->queue[] = $obj; - return count($this->queue) >= $this->batchSize - ? $this->flushQueue() - : null; - } - - private function flushQueue() - { - static $validKeys = ['Key' => true, 'VersionId' => true]; - - if (count($this->queue) === 0) { - return null; - } - - $batch = []; - while ($obj = array_shift($this->queue)) { - $batch[] = array_intersect_key($obj, $validKeys); - } - - $command = $this->client->getCommand('DeleteObjects', [ - 'Bucket' => $this->bucket, - 'Delete' => ['Objects' => $batch] - ]); - - if ($this->before) { - call_user_func($this->before, $command); - } - - return $this->client->executeAsync($command) - ->then(function ($result) { - if (!empty($result['Errors'])) { - throw new DeleteMultipleObjectsException( - $result['Deleted'] ?: [], - $result['Errors'] - ); - } - return $result; - }); - } - - /** - * Returns a promise that will clean up any references when it completes. - * - * @return PromiseInterface - */ - private function createPromise() - { - // Create the promise - $promise = call_user_func($this->promiseCreator, $this); - $this->promiseCreator = null; - - // Cleans up the promise state and references. - $cleanup = function () { - $this->before = $this->client = $this->queue = null; - }; - - // When done, ensure cleanup and that any remaining are processed. - return $promise->then( - function () use ($cleanup) { - return Promise\Create::promiseFor($this->flushQueue()) - ->then($cleanup); - }, - function ($reason) use ($cleanup) { - $cleanup(); - return Promise\Create::rejectionFor($reason); - } - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BucketEndpointArnMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BucketEndpointArnMiddleware.php deleted file mode 100644 index becfded6f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BucketEndpointArnMiddleware.php +++ /dev/null @@ -1,355 +0,0 @@ -partitionProvider = PartitionEndpointProvider::defaultProvider(); - $this->region = $region; - $this->service = $service; - $this->config = $config; - $this->nextHandler = $nextHandler; - $this->isUseEndpointV2 = $isUseEndpointV2; - } - - public function __invoke(CommandInterface $cmd, RequestInterface $req) - { - $nextHandler = $this->nextHandler; - - $op = $this->service->getOperation($cmd->getName())->toArray(); - if (!empty($op['input']['shape'])) { - $service = $this->service->toArray(); - if (!empty($input = $service['shapes'][$op['input']['shape']])) { - foreach ($input['members'] as $key => $member) { - if ($member['shape'] === 'BucketName') { - $arnableKey = $key; - break; - } - } - - if (!empty($arnableKey) && ArnParser::isArn($cmd[$arnableKey])) { - - try { - // Throw for commands that do not support ARN inputs - if (in_array($cmd->getName(), $this->nonArnableCommands)) { - throw new S3Exception( - 'ARN values cannot be used in the bucket field for' - . ' the ' . $cmd->getName() . ' operation.', - $cmd - ); - } - - if (!$this->isUseEndpointV2) { - $arn = ArnParser::parse($cmd[$arnableKey]); - $partition = $this->validateArn($arn); - $host = $this->generateAccessPointHost($arn, $req); - } - // Remove encoded bucket string from path - $path = $req->getUri()->getPath(); - $encoded = rawurlencode($cmd[$arnableKey]); - $len = strlen($encoded) + 1; - if (trim(substr($path, 0, $len), '/') === "{$encoded}") { - $path = substr($path, $len); - if (substr($path, 0, 1) !== "/") { - $path = '/' . $path; - } - } - if (empty($path)) { - $path = ''; - } - - // Set modified request - if ($this->isUseEndpointV2) { - $req = $req->withUri( - $req->getUri()->withPath($path) - - ); - goto next; - } - - $req = $req->withUri( - $req->getUri()->withPath($path)->withHost($host) - ); - - // Update signing region based on ARN data if configured to do so - if ($this->config['use_arn_region']->isUseArnRegion() - && !$this->config['use_fips_endpoint']->isUseFipsEndpoint() - ) { - $region = $arn->getRegion(); - } else { - $region = $this->region; - } - $endpointData = $partition([ - 'region' => $region, - 'service' => $arn->getService() - ]); - $cmd['@context']['signing_region'] = $endpointData['signingRegion']; - - // Update signing service for Outposts and Lambda ARNs - if ($arn instanceof OutpostsArnInterface - || $arn instanceof ObjectLambdaAccessPointArn - ) { - $cmd['@context']['signing_service'] = $arn->getService(); - } - } catch (InvalidArnException $e) { - // Add context to ARN exception - throw new S3Exception( - 'Bucket parameter parsed as ARN and failed with: ' - . $e->getMessage(), - $cmd, - [], - $e - ); - } - } - } - } - next: - return $nextHandler($cmd, $req); - } - - - private function generateAccessPointHost( - BaseAccessPointArn $arn, - RequestInterface $req - ) { - if ($arn instanceof OutpostsAccessPointArn) { - $accesspointName = $arn->getAccesspointName(); - } else { - $accesspointName = $arn->getResourceId(); - } - - if ($arn instanceof MultiRegionAccessPointArn) { - $partition = $this->partitionProvider->getPartitionByName( - $arn->getPartition(), - 's3' - ); - $dnsSuffix = $partition->getDnsSuffix(); - return "{$accesspointName}.accesspoint.s3-global.{$dnsSuffix}"; - } - - $host = "{$accesspointName}-" . $arn->getAccountId(); - - $useFips = $this->config['use_fips_endpoint']->isUseFipsEndpoint(); - $fipsString = $useFips ? "-fips" : ""; - - if ($arn instanceof OutpostsAccessPointArn) { - $host .= '.' . $arn->getOutpostId() . '.s3-outposts'; - } else if ($arn instanceof ObjectLambdaAccessPointArn) { - if (!empty($this->config['endpoint'])) { - return $host . '.' . $this->config['endpoint']; - } else { - $host .= ".s3-object-lambda{$fipsString}"; - } - } else { - $host .= ".s3-accesspoint{$fipsString}"; - if (!empty($this->config['dual_stack'])) { - $host .= '.dualstack'; - } - } - - if (!empty($this->config['use_arn_region']->isUseArnRegion())) { - $region = $arn->getRegion(); - } else { - $region = $this->region; - } - $region = \Aws\strip_fips_pseudo_regions($region); - $host .= '.' . $region . '.' . $this->getPartitionSuffix($arn, $this->partitionProvider); - return $host; - } - - /** - * Validates an ARN, returning a partition object corresponding to the ARN - * if successful - * - * @param $arn - * @return \Aws\Endpoint\Partition - */ - private function validateArn($arn) - { - if ($arn instanceof AccessPointArnInterface) { - - // Dualstack is not supported with Outposts access points - if ($arn instanceof OutpostsAccessPointArn - && !empty($this->config['dual_stack']) - ) { - throw new UnresolvedEndpointException( - 'Dualstack is currently not supported with S3 Outposts access' - . ' points. Please disable dualstack or do not supply an' - . ' access point ARN.'); - } - if ($arn instanceof MultiRegionAccessPointArn) { - if (!empty($this->config['disable_multiregion_access_points'])) { - throw new UnresolvedEndpointException( - 'Multi-Region Access Point ARNs are disabled, but one was provided. Please' - . ' enable them or provide a different ARN.' - ); - } - if (!empty($this->config['dual_stack'])) { - throw new UnresolvedEndpointException( - 'Multi-Region Access Point ARNs do not currently support dual stack. Please' - . ' disable dual stack or provide a different ARN.' - ); - } - } - // Accelerate is not supported with access points - if (!empty($this->config['accelerate'])) { - throw new UnresolvedEndpointException( - 'Accelerate is currently not supported with access points.' - . ' Please disable accelerate or do not supply an access' - . ' point ARN.'); - } - - // Path-style is not supported with access points - if (!empty($this->config['path_style'])) { - throw new UnresolvedEndpointException( - 'Path-style addressing is currently not supported with' - . ' access points. Please disable path-style or do not' - . ' supply an access point ARN.'); - } - - // Custom endpoint is not supported with access points - if (!is_null($this->config['endpoint']) - && !$arn instanceof ObjectLambdaAccessPointArn - ) { - throw new UnresolvedEndpointException( - 'A custom endpoint has been supplied along with an access' - . ' point ARN, and these are not compatible with each other.' - . ' Please only use one or the other.'); - } - - // Dualstack is not supported with object lambda access points - if ($arn instanceof ObjectLambdaAccessPointArn - && !empty($this->config['dual_stack']) - ) { - throw new UnresolvedEndpointException( - 'Dualstack is currently not supported with Object Lambda access' - . ' points. Please disable dualstack or do not supply an' - . ' access point ARN.'); - } - // Global endpoints do not support cross-region requests - if ($this->isGlobal($this->region) - && $this->config['use_arn_region']->isUseArnRegion() == false - && $arn->getRegion() != $this->region - && !$arn instanceof MultiRegionAccessPointArn - ) { - throw new UnresolvedEndpointException( - 'Global endpoints do not support cross region requests.' - . ' Please enable use_arn_region or do not supply a global region' - . ' with a different region in the ARN.'); - } - - // Get partitions for ARN and client region - $arnPart = $this->partitionProvider->getPartition( - $arn->getRegion(), - 's3' - ); - $clientPart = $this->partitionProvider->getPartition( - $this->region, - 's3' - ); - - // If client partition not found, try removing pseudo-region qualifiers - if (!($clientPart->isRegionMatch($this->region, 's3'))) { - $clientPart = $this->partitionProvider->getPartition( - \Aws\strip_fips_pseudo_regions($this->region), - 's3' - ); - } - if (!$arn instanceof MultiRegionAccessPointArn) { - // Verify that the partition matches for supplied partition and region - if ($arn->getPartition() !== $clientPart->getName()) { - throw new InvalidRegionException('The supplied ARN partition' - . " does not match the client's partition."); - } - if ($clientPart->getName() !== $arnPart->getName()) { - throw new InvalidRegionException('The corresponding partition' - . ' for the supplied ARN region does not match the' - . " client's partition."); - } - - // Ensure ARN region matches client region unless - // configured for using ARN region over client region - $this->validateMatchingRegion($arn); - - // Ensure it is not resolved to fips pseudo-region for S3 Outposts - $this->validateFipsConfigurations($arn); - } - - return $arnPart; - } - - throw new InvalidArnException('Provided ARN was not a valid S3 access' - . ' point ARN or S3 Outposts access point ARN.'); - } - - /** - * Checks if a region is global - * - * @param $region - * @return bool - */ - private function isGlobal($region) - { - return $region == 's3-external-1' || $region == 'aws-global'; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BucketEndpointMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BucketEndpointMiddleware.php deleted file mode 100644 index 131043b21..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/BucketEndpointMiddleware.php +++ /dev/null @@ -1,111 +0,0 @@ - true]; - private $nextHandler; - private bool $useEndpointV2; - private ?string $endpoint; - - /** - * Create a middleware wrapper function. - * - * @param bool $useEndpointV2 - * @param string|null $endpoint - * - * @return callable - */ - public static function wrap( - bool $useEndpointV2 = false, - ?string $endpoint = null - ): callable - { - return function (callable $handler) use ($useEndpointV2, $endpoint) { - return new self($handler, $useEndpointV2, $endpoint); - }; - } - - public function __construct( - callable $nextHandler, - bool $useEndpointV2, - ?string $endpoint = null - ) - { - $this->nextHandler = $nextHandler; - $this->useEndpointV2 = $useEndpointV2; - $this->endpoint = $endpoint; - } - - public function __invoke(CommandInterface $command, RequestInterface $request) - { - $nextHandler = $this->nextHandler; - $bucket = $command['Bucket']; - - if ($bucket && !isset(self::$exclusions[$command->getName()])) { - $request = $this->modifyRequest($request, $command); - } - - return $nextHandler($command, $request); - } - - /** - * @param string $path - * @param string $bucket - * - * @return string - */ - private function removeBucketFromPath(string $path, string $bucket): string - { - $len = strlen($bucket) + 1; - if (str_starts_with($path, "/{$bucket}")) { - $path = substr($path, $len); - } - - return $path ?: '/'; - } - - /** - * @param RequestInterface $request - * @param CommandInterface $command - * - * @return RequestInterface - */ - private function modifyRequest( - RequestInterface $request, - CommandInterface $command - ): RequestInterface - { - $uri = $request->getUri(); - $path = $uri->getPath(); - $host = $uri->getHost(); - $bucket = $command['Bucket']; - - if ($this->useEndpointV2 && !empty($this->endpoint)) { - // V2 provider adds bucket name to host by default - // preserve original host - $host = (new Uri($this->endpoint))->getHost(); - } - - $path = $this->removeBucketFromPath($path, $bucket); - - // Modify the Key to make sure the key is encoded, but slashes are not. - if ($command['Key']) { - $path = S3Client::encodeKey(rawurldecode($path)); - } - - return $request->withUri($uri->withPath($path)->withHost($host)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/CalculatesChecksumTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/CalculatesChecksumTrait.php deleted file mode 100644 index b2e82f445..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/CalculatesChecksumTrait.php +++ /dev/null @@ -1,84 +0,0 @@ - true, - 'crc32' => true, - 'sha256' => true, - 'sha1' => true - ]; - - /** - * @param string $requestedAlgorithm the algorithm to encode with - * @param string $value the value to be encoded - * @return string - */ - public static function getEncodedValue($requestedAlgorithm, $value) { - $requestedAlgorithm = strtolower($requestedAlgorithm); - $useCrt = extension_loaded('awscrt'); - - if (isset(self::$supportedAlgorithms[$requestedAlgorithm])) { - if ($useCrt) { - $crt = new Crt(); - switch ($requestedAlgorithm) { - case 'crc32c': - return base64_encode(pack('N*',($crt::crc32c($value)))); - case 'crc32': - return base64_encode(pack('N*',($crt::crc32($value)))); - default: - break; - } - } - - if ($requestedAlgorithm === 'crc32c') { - throw new CommonRuntimeException("crc32c is not supported for checksums " - . "without use of the common runtime for php. Please enable the CRT or choose " - . "a different algorithm." - ); - } - - if ($requestedAlgorithm === "crc32") { - $requestedAlgorithm = "crc32b"; - } - - return base64_encode( - Psr7\Utils::hash(Psr7\Utils::streamFor($value), - $requestedAlgorithm, - true - ) - ); - } - - $validAlgorithms = implode(', ', array_keys(self::$supportedAlgorithms)); - throw new InvalidArgumentException( - "Invalid checksum requested: {$requestedAlgorithm}." - . " Valid algorithms supported by the runtime are {$validAlgorithms}." - ); - } - - /** - * Returns the first checksum available, if available. - * - * @param array $parameters - * - * @return string|null - */ - public static function filterChecksum(array $parameters): ?string - { - foreach (self::$supportedAlgorithms as $algorithm => $_) { - $checksumAlgorithm = "Checksum" . strtoupper($algorithm); - if (isset($parameters[$checksumAlgorithm])) { - return $checksumAlgorithm; - } - } - - return null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTrait.php deleted file mode 100644 index 1bd796a42..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTrait.php +++ /dev/null @@ -1,79 +0,0 @@ -instructionFileSuffix; - } - - protected function determineGetObjectStrategy( - $result, - $instructionFileSuffix - ) { - if (isset($result['Metadata'][MetadataEnvelope::CONTENT_KEY_V2_HEADER]) || - isset($result['Metadata'][MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]) - ) { - return new HeadersMetadataStrategy(); - } - - return new InstructionFileMetadataStrategy( - $this->client, - $instructionFileSuffix - ); - } - - protected function getMetadataStrategy(array $args, $instructionFileSuffix) - { - if (!empty($args['@MetadataStrategy'])) { - if ($args['@MetadataStrategy'] instanceof MetadataStrategyInterface) { - return $args['@MetadataStrategy']; - } - - if (is_string($args['@MetadataStrategy'])) { - switch ($args['@MetadataStrategy']) { - case HeadersMetadataStrategy::class: - return new HeadersMetadataStrategy(); - case InstructionFileMetadataStrategy::class: - return new InstructionFileMetadataStrategy( - $this->client, - $instructionFileSuffix - ); - default: - throw new \InvalidArgumentException('Could not match the' - . ' specified string in "MetadataStrategy" to a' - . ' predefined strategy.'); - } - } else { - throw new \InvalidArgumentException('The metadata strategy that' - . ' was passed to "MetadataStrategy" was unrecognized.'); - } - } elseif ($instructionFileSuffix) { - return new InstructionFileMetadataStrategy( - $this->client, - $instructionFileSuffix - ); - } - - return null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTraitV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTraitV2.php deleted file mode 100644 index 9302bc3e2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTraitV2.php +++ /dev/null @@ -1,34 +0,0 @@ -$value) { - $args['Metadata'][$header] = $value; - } - - return $args; - } - - /** - * Generates a MetadataEnvelope according to the metadata headers from the - * GetObject result. - * - * @param array $args Arguments from Command and Result that contains - * S3 Object information, relevant headers, and command - * configuration. - * - * @return MetadataEnvelope - */ - public function load(array $args) - { - $envelope = new MetadataEnvelope(); - $constantValues = MetadataEnvelope::getConstantValues(); - - foreach ($constantValues as $constant) { - if (!empty($args['Metadata'][$constant])) { - $envelope[$constant] = $args['Metadata'][$constant]; - } - } - - return $envelope; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php deleted file mode 100644 index 9987ae0eb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php +++ /dev/null @@ -1,184 +0,0 @@ -suffix = empty($suffix) - ? self::DEFAULT_FILE_SUFFIX - : $suffix; - $this->client = $client; - } - - /** - * Places the information in the MetadataEnvelope to a location on S3. - * - * @param MetadataEnvelope $envelope Encryption data to save according to - * the strategy. - * @param array $args Starting arguments for PutObject, used for saving - * extra the instruction file. - * - * @return array Updated arguments for PutObject. - */ - public function save(MetadataEnvelope $envelope, array $args) - { - //= ../specification/s3-encryption/data-format/metadata-strategy.md#instruction-file - //# The S3EC MUST support writing some or all (depending on format) content metadata to an Instruction File. - - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v1-v2-instruction-files - //# In the V1/V2 message format, all of the content metadata MUST be stored in the Instruction File. - - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //= type=implication - //# In the V3 format, the mapkeys "x-amz-c", "x-amz-d", and "x-amz-i" MUST be stored exclusively in the Object Metadata. - if (MetadataEnvelope::isV3Envelope($envelope)) { - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST store the mapkey "x-amz-c" and its value in the Object Metadata when writing with an Instruction File. - $args['Metadata'][MetadataEnvelope::CONTENT_CIPHER_V3] = $envelope[MetadataEnvelope::CONTENT_CIPHER_V3]; - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST store the mapkey "x-amz-d" and its value in the Object Metadata when writing with an Instruction File. - $args['Metadata'][MetadataEnvelope::KEY_COMMITMENT_V3] = $envelope[MetadataEnvelope::KEY_COMMITMENT_V3]; - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST store the mapkey "x-amz-i" and its value in the Object Metadata when writing with an Instruction File. - $args['Metadata'][MetadataEnvelope::MESSAGE_ID_V3] = $envelope[MetadataEnvelope::MESSAGE_ID_V3]; - - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST NOT store the mapkey "x-amz-c" and its value in the Instruction File. - unset($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]); - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST NOT store the mapkey "x-amz-d" and its value in the Instruction File. - unset($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]); - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST NOT store the mapkey "x-amz-i" and its value in the Instruction File. - unset($envelope[MetadataEnvelope::MESSAGE_ID_V3]); - if ( - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST store the mapkey "x-amz-3" and its value in the Instruction File. - !isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]) - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST store the mapkey "x-amz-w" and its value in the Instruction File. - || !isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) - //= ../specification/s3-encryption/data-format/metadata-strategy.md#v3-instruction-files - //# - The V3 message format MUST store the mapkey "x-amz-t" and its value (when present in the content metadata) in the Instruction File. - || !isset($envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3]) - ) { - throw new \InvalidArgumentException('Invalid V3 Envelope'); - } - } - - //= ../specification/s3-encryption/data-format/metadata-strategy.md#instruction-file - //# The serialized JSON string MUST be the only contents of the Instruction File. - $this->client->putObject([ - 'Bucket' => $args['Bucket'], - 'Key' => $args['Key'] . $this->suffix, - //= ../specification/s3-encryption/data-format/metadata-strategy.md#instruction-file - //= type=implication - //# The content metadata stored in the Instruction File MUST be serialized to a JSON string. - 'Body' => json_encode($envelope) - ]); - - return $args; - } - - /** - * Uses the strategy's client to retrieve the instruction file from S3 and generates - * a MetadataEnvelope from its contents. - * - * @param array $args Arguments from Command and Result that contains - * S3 Object information, relevant headers, and command - * configuration. - * - * @return MetadataEnvelope - */ - public function load(array $args) - { - $result = $this->client->getObject([ - 'Bucket' => $args['Bucket'], - 'Key' => $args['Key'] . $this->suffix - ]); - - $metadataHeaders = json_decode($result['Body'], true); - $envelope = new MetadataEnvelope(); - $constantValues = MetadataEnvelope::getConstantValues(); - - foreach ($constantValues as $constant) { - if (isset($metadataHeaders[$constant])) { - // check for a duplicate - if (empty($envelope[$constant])) { - $envelope[$constant] = $metadataHeaders[$constant]; - } else { - throw new CryptoException("Duplicate keys are not allowed" - . " in Instruction Files. " - ); - } - } - } - - // check if we are reading a V3 object - // if it is a V3 object some data is stored in the object metadata and some - // as in the instruction file - //= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys - //# In the V3 format, the mapkeys "x-amz-c", "x-amz-d", and "x-amz-i" - //# MUST be stored exclusively in the Object Metadata - if (!empty($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) { - // before loading the rest of the v3 metadata, we must check that: - // 1. the following values are not already present in the envelope, if they are - // the instruction file is not correct. - if (!empty($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) - || !empty($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]) - || !empty($envelope[MetadataEnvelope::MESSAGE_ID_V3]) - ) { - throw new CryptoException("One or more reserved keys found in" - . " Instruction file when they should not be present."); - } - // this data is stored in the original object's metadata - // V3 added x-amz-c, x-amz-d, x-amz-i, x-amz-3, x-amz-w, x-amz-m, x-amz-t - // x-amz-c, x-amz-d, x-amz-i are strictly stored on the object metadata - // the rest are stored in the instruction file - $envelope[MetadataEnvelope::CONTENT_CIPHER_V3] = $args['Metadata'][MetadataEnvelope::CONTENT_CIPHER_V3]; - $envelope[MetadataEnvelope::KEY_COMMITMENT_V3] = $args['Metadata'][MetadataEnvelope::KEY_COMMITMENT_V3]; - $envelope[MetadataEnvelope::MESSAGE_ID_V3] = $args['Metadata'][MetadataEnvelope::MESSAGE_ID_V3]; - - if (!MetadataEnvelope::isV3Envelope($envelope)) { - throw new CryptoException("Expected a V3 envelope but was unable to" - . " constuct one."); - } - return $envelope; - } - // if we are not reading a v3 object then it must be a v2 object - if (!MetadataEnvelope::isV2Envelope($envelope) - && !MetadataEnvelope::isV1Envelope($envelope)) { - throw new CryptoException("Malformed metadata envelope."); - } - - return $envelope; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClient.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClient.php deleted file mode 100644 index 130e9c971..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClient.php +++ /dev/null @@ -1,359 +0,0 @@ -client = $client; - $this->instructionFileSuffix = $instructionFileSuffix; - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->client->getHandlerList(), - MetricsBuilder::S3_CRYPTO_V1N - ); - } - - private static function getDefaultStrategy() - { - return new HeadersMetadataStrategy(); - } - - /** - * Encrypts the data in the 'Body' field of $args and promises to upload it - * to the specified location on S3. - * - * @param array $args Arguments for encrypting an object and uploading it - * to S3 via PutObject. - * - * The required configuration arguments are as follows: - * - * - @MaterialsProvider: (MaterialsProvider) Provides Cek, Iv, and Cek - * encrypting/decrypting for encryption metadata. - * - @CipherOptions: (array) Cipher options for encrypting data. Only the - * Cipher option is required. Accepts the following: - * - Cipher: (string) cbc|gcm - * See also: AbstractCryptoClient::$supportedCiphers. Note that - * cbc is deprecated and gcm should be used when possible. - * - KeySize: (int) 128|192|256 - * See also: MaterialsProvider::$supportedKeySizes - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. Note if you pass in Aad for gcm encryption, the - * PHP SDK will be able to decrypt the resulting object, but other - * AWS SDKs may not be able to do so. - * - * The optional configuration arguments are as follows: - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for storing - * MetadataEnvelope information. Defaults to using a - * HeadersMetadataStrategy. Can either be a class implementing - * MetadataStrategy, a class name of a predefined strategy, or empty/null - * to default. - * - @InstructionFileSuffix: (string|null) Suffix used when writing to an - * instruction file if using an InstructionFileMetadataHandler. - * - * @return PromiseInterface - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function putObjectAsync(array $args) - { - $provider = $this->getMaterialsProvider($args); - unset($args['@MaterialsProvider']); - - $instructionFileSuffix = $this->getInstructionFileSuffix($args); - unset($args['@InstructionFileSuffix']); - - $strategy = $this->getMetadataStrategy($args, $instructionFileSuffix); - unset($args['@MetadataStrategy']); - - $envelope = new MetadataEnvelope(); - - $bodyStream = Psr7\Utils::streamFor($args['Body']); - // User-owned resource which should be detached instead of closed - // during garbage-collection - if (is_resource($args['Body'])) { - $bodyStream = \Aws\detach_on_close_stream($bodyStream); - } - - return Promise\Create::promiseFor($this->encrypt( - $bodyStream, - $args['@CipherOptions'] ?: [], - $provider, - $envelope - ))->then( - function ($encryptedBodyStream) use ($args) { - $hash = new PhpHash('sha256'); - $hashingEncryptedBodyStream = new HashingStream( - $encryptedBodyStream, - $hash, - self::getContentShaDecorator($args) - ); - return [$hashingEncryptedBodyStream, $args]; - } - )->then( - function ($putObjectContents) use ($strategy, $envelope) { - list($bodyStream, $args) = $putObjectContents; - if ($strategy === null) { - $strategy = self::getDefaultStrategy(); - } - - $updatedArgs = $strategy->save($envelope, $args); - $updatedArgs['Body'] = $bodyStream; - return $updatedArgs; - } - )->then( - function ($args) { - unset($args['@CipherOptions']); - return $this->client->putObjectAsync($args); - } - ); - } - - private static function getContentShaDecorator(&$args) - { - return function ($hash) use (&$args) { - $args['ContentSHA256'] = bin2hex($hash); - }; - } - - /** - * Encrypts the data in the 'Body' field of $args and uploads it to the - * specified location on S3. - * - * @param array $args Arguments for encrypting an object and uploading it - * to S3 via PutObject. - * - * The required configuration arguments are as follows: - * - * - @MaterialsProvider: (MaterialsProvider) Provides Cek, Iv, and Cek - * encrypting/decrypting for encryption metadata. - * - @CipherOptions: (array) Cipher options for encrypting data. A Cipher - * is required. Accepts the following options: - * - Cipher: (string) cbc|gcm - * See also: AbstractCryptoClient::$supportedCiphers. Note that - * cbc is deprecated and gcm should be used when possible. - * - KeySize: (int) 128|192|256 - * See also: MaterialsProvider::$supportedKeySizes - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. Note if you pass in Aad for gcm encryption, the - * PHP SDK will be able to decrypt the resulting object, but other - * AWS SDKs may not be able to do so. - * - * The optional configuration arguments are as follows: - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for storing - * MetadataEnvelope information. Defaults to using a - * HeadersMetadataStrategy. Can either be a class implementing - * MetadataStrategy, a class name of a predefined strategy, or empty/null - * to default. - * - @InstructionFileSuffix: (string|null) Suffix used when writing to an - * instruction file if an using an InstructionFileMetadataHandler was - * determined. - * - * @return \Aws\Result PutObject call result with the details of uploading - * the encrypted file. - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function putObject(array $args) - { - return $this->putObjectAsync($args)->wait(); - } - - /** - * Promises to retrieve an object from S3 and decrypt the data in the - * 'Body' field. - * - * @param array $args Arguments for retrieving an object from S3 via - * GetObject and decrypting it. - * - * The required configuration argument is as follows: - * - * - @MaterialsProvider: (MaterialsProvider) Provides Cek, Iv, and Cek - * encrypting/decrypting for decryption metadata. May have data loaded - * from the MetadataEnvelope upon decryption. - * - * The optional configuration arguments are as follows: - * - * - SaveAs: (string) The path to a file on disk to save the decrypted - * object data. This will be handled by file_put_contents instead of the - * Guzzle sink. - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for reading - * MetadataEnvelope information. Defaults to determining based on object - * response headers. Can either be a class implementing MetadataStrategy, - * a class name of a predefined strategy, or empty/null to default. - * - @InstructionFileSuffix: (string) Suffix used when looking for an - * instruction file if an InstructionFileMetadataHandler is being used. - * - @CipherOptions: (array) Cipher options for decrypting data. A Cipher - * is required. Accepts the following options: - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. - * - * @return PromiseInterface - * - * @throws \InvalidArgumentException Thrown when required arguments are not - * passed or are passed incorrectly. - */ - public function getObjectAsync(array $args) - { - $provider = $this->getMaterialsProvider($args); - unset($args['@MaterialsProvider']); - - $instructionFileSuffix = $this->getInstructionFileSuffix($args); - unset($args['@InstructionFileSuffix']); - - $strategy = $this->getMetadataStrategy($args, $instructionFileSuffix); - unset($args['@MetadataStrategy']); - - $saveAs = null; - if (!empty($args['SaveAs'])) { - $saveAs = $args['SaveAs']; - } - - $promise = $this->client->getObjectAsync($args) - ->then( - function ($result) use ( - $provider, - $instructionFileSuffix, - $strategy, - $args - ) { - if ($strategy === null) { - $strategy = $this->determineGetObjectStrategy( - $result, - $instructionFileSuffix - ); - } - - $envelope = $strategy->load($args + [ - 'Metadata' => $result['Metadata'] - ]); - - $provider = $provider->fromDecryptionEnvelope($envelope); - - $result['Body'] = $this->decrypt( - $result['Body'], - $provider, - $envelope, - isset($args['@CipherOptions']) - ? $args['@CipherOptions'] - : [] - ); - return $result; - } - )->then( - function ($result) use ($saveAs) { - if (!empty($saveAs)) { - file_put_contents( - $saveAs, - (string)$result['Body'], - LOCK_EX - ); - } - return $result; - } - ); - - return $promise; - } - - /** - * Retrieves an object from S3 and decrypts the data in the 'Body' field. - * - * @param array $args Arguments for retrieving an object from S3 via - * GetObject and decrypting it. - * - * The required configuration argument is as follows: - * - * - @MaterialsProvider: (MaterialsProvider) Provides Cek, Iv, and Cek - * encrypting/decrypting for decryption metadata. May have data loaded - * from the MetadataEnvelope upon decryption. - * - * The optional configuration arguments are as follows: - * - * - SaveAs: (string) The path to a file on disk to save the decrypted - * object data. This will be handled by file_put_contents instead of the - * Guzzle sink. - * - @InstructionFileSuffix: (string|null) Suffix used when looking for an - * instruction file if an InstructionFileMetadataHandler was detected. - * - @CipherOptions: (array) Cipher options for encrypting data. A Cipher - * is required. Accepts the following options: - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. - * - * @return \Aws\Result GetObject call result with the 'Body' field - * wrapped in a decryption stream with its metadata - * information. - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function getObject(array $args) - { - return $this->getObjectAsync($args)->wait(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV2.php deleted file mode 100644 index c130b9584..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV2.php +++ /dev/null @@ -1,475 +0,0 @@ - - * use Aws\Crypto\KmsMaterialsProviderV2; - * use Aws\S3\Crypto\S3EncryptionClientV2; - * use Aws\S3\S3Client; - * - * $encryptionClient = new S3EncryptionClientV2( - * new S3Client([ - * 'region' => 'us-west-2', - * 'version' => 'latest' - * ]) - * ); - * $materialsProvider = new KmsMaterialsProviderV2( - * new KmsClient([ - * 'profile' => 'default', - * 'region' => 'us-east-1', - * 'version' => 'latest', - * ], - * 'your-kms-key-id' - * ); - * - * $encryptionClient->putObject([ - * '@MaterialsProvider' => $materialsProvider, - * '@CipherOptions' => [ - * 'Cipher' => 'gcm', - * 'KeySize' => 256, - * ], - * '@KmsEncryptionContext' => ['foo' => 'bar'], - * 'Bucket' => 'your-bucket', - * 'Key' => 'your-key', - * 'Body' => 'your-encrypted-data', - * ]); - * - * - * Example read call (using objects from previous example): - * - * - * $encryptionClient->getObject([ - * '@MaterialsProvider' => $materialsProvider, - * '@CipherOptions' => [ - * 'Cipher' => 'gcm', - * 'KeySize' => 256, - * ], - * '@CommitmentPolicy' => 'FORBID_ENCRYPT_ALLOW_DECRYPT', - * 'Bucket' => 'your-bucket', - * 'Key' => 'your-key', - * ]); - * - */ -class S3EncryptionClientV2 extends AbstractCryptoClientV2 -{ - use CipherBuilderTrait; - use CryptoParamsTraitV2; - use DecryptionTraitV2; - use EncryptionTraitV2; - use UserAgentTrait; - - const CRYPTO_VERSION = '2.1'; - - private $client; - private $instructionFileSuffix; - private $legacyWarningCount; - - /** - * @param S3Client $client The S3Client to be used for true uploading and - * retrieving objects from S3 when using the - * encryption client. - * @param string|null $instructionFileSuffix Suffix for a client wide - * default when using instruction - * files for metadata storage. - */ - public function __construct( - S3Client $client, - $instructionFileSuffix = null - ) { - trigger_error( - 'S3EncryptionClientV2 will be deprecated soon and will be removed in a future ' . - 'release due to security vulnerabilities (CVE-2024-56473). Please ' . - 'migrate to S3EncryptionClientV3 as soon as possible.' . "\n" . - 'See https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/' . - 'security.html for upgrade guidance.', - E_USER_DEPRECATED - ); - $this->client = $client; - $this->instructionFileSuffix = $instructionFileSuffix; - $this->legacyWarningCount = 0; - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->client->getHandlerList(), - MetricsBuilder::S3_CRYPTO_V2 - ); - } - - private static function getDefaultStrategy() - { - return new HeadersMetadataStrategy(); - } - - /** - * Encrypts the data in the 'Body' field of $args and promises to upload it - * to the specified location on S3. - * - * Note that for PHP versions of < 7.1, this operation uses an AES-GCM - * polyfill for encryption since there is no native PHP support. The - * performance for large inputs will be a lot slower than for PHP 7.1+, so - * upgrading older PHP version environments may be necessary to use this - * effectively. - * - * @param array $args Arguments for encrypting an object and uploading it - * to S3 via PutObject. - * - * The required configuration arguments are as follows: - * - * - @MaterialsProvider: (MaterialsProviderV2) Provides Cek, Iv, and Cek - * encrypting/decrypting for encryption metadata. - * - @CipherOptions: (array) Cipher options for encrypting data. Only the - * Cipher option is required. Accepts the following: - * - Cipher: (string) gcm - * See also: AbstractCryptoClientV2::$supportedCiphers - * - KeySize: (int) 128|256 - * See also: MaterialsProvider::$supportedKeySizes - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. Note if you pass in - * Aad, the PHP SDK will be able to decrypt the resulting object, - * but other AWS SDKs may not be able to do so. - * - @KmsEncryptionContext: (array) Only required if using - * KmsMaterialsProviderV2. An associative array of key-value - * pairs to be added to the encryption context for KMS key encryption. An - * empty array may be passed if no additional context is desired. - * - * The optional configuration arguments are as follows: - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for storing - * MetadataEnvelope information. Defaults to using a - * HeadersMetadataStrategy. Can either be a class implementing - * MetadataStrategy, a class name of a predefined strategy, or empty/null - * to default. - * - @InstructionFileSuffix: (string|null) Suffix used when writing to an - * instruction file if using an InstructionFileMetadataHandler. - * - * @return PromiseInterface - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function putObjectAsync(array $args) - { - $provider = $this->getMaterialsProvider($args); - unset($args['@MaterialsProvider']); - - $instructionFileSuffix = $this->getInstructionFileSuffix($args); - unset($args['@InstructionFileSuffix']); - - $strategy = $this->getMetadataStrategy($args, $instructionFileSuffix); - unset($args['@MetadataStrategy']); - - $envelope = new MetadataEnvelope(); - - $bodyStream = Psr7\Utils::streamFor($args['Body']); - // User-owned resource which should be detached instead of closed - // during garbage-collection - if (is_resource($args['Body'])) { - $bodyStream = \Aws\detach_on_close_stream($bodyStream); - } - - return Promise\Create::promiseFor($this->encrypt( - $bodyStream, - $args, - $provider, - $envelope - ))->then( - function ($encryptedBodyStream) use ($args) { - $hash = new PhpHash('sha256'); - $hashingEncryptedBodyStream = new HashingStream( - $encryptedBodyStream, - $hash, - self::getContentShaDecorator($args) - ); - return [$hashingEncryptedBodyStream, $args]; - } - )->then( - function ($putObjectContents) use ($strategy, $envelope) { - list($bodyStream, $args) = $putObjectContents; - if ($strategy === null) { - $strategy = self::getDefaultStrategy(); - } - - $updatedArgs = $strategy->save($envelope, $args); - $updatedArgs['Body'] = $bodyStream; - return $updatedArgs; - } - )->then( - function ($args) { - unset($args['@CipherOptions']); - return $this->client->putObjectAsync($args); - } - ); - } - - private static function getContentShaDecorator(&$args) - { - return function ($hash) use (&$args) { - $args['ContentSHA256'] = bin2hex($hash); - }; - } - - /** - * Encrypts the data in the 'Body' field of $args and uploads it to the - * specified location on S3. - * - * Note that for PHP versions of < 7.1, this operation uses an AES-GCM - * polyfill for encryption since there is no native PHP support. The - * performance for large inputs will be a lot slower than for PHP 7.1+, so - * upgrading older PHP version environments may be necessary to use this - * effectively. - * - * @param array $args Arguments for encrypting an object and uploading it - * to S3 via PutObject. - * - * The required configuration arguments are as follows: - * - * - @MaterialsProvider: (MaterialsProvider) Provides Cek, Iv, and Cek - * encrypting/decrypting for encryption metadata. - * - @CipherOptions: (array) Cipher options for encrypting data. A Cipher - * is required. Accepts the following options: - * - Cipher: (string) gcm - * See also: AbstractCryptoClientV2::$supportedCiphers - * - KeySize: (int) 128|256 - * See also: MaterialsProvider::$supportedKeySizes - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. Note if you pass in - * Aad, the PHP SDK will be able to decrypt the resulting object, - * but other AWS SDKs may not be able to do so. - * - @KmsEncryptionContext: (array) Only required if using - * KmsMaterialsProviderV2. An associative array of key-value - * pairs to be added to the encryption context for KMS key encryption. An - * empty array may be passed if no additional context is desired. - * - * The optional configuration arguments are as follows: - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for storing - * MetadataEnvelope information. Defaults to using a - * HeadersMetadataStrategy. Can either be a class implementing - * MetadataStrategy, a class name of a predefined strategy, or empty/null - * to default. - * - @InstructionFileSuffix: (string|null) Suffix used when writing to an - * instruction file if an using an InstructionFileMetadataHandler was - * determined. - * - * @return \Aws\Result PutObject call result with the details of uploading - * the encrypted file. - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function putObject(array $args) - { - return $this->putObjectAsync($args)->wait(); - } - - /** - * Promises to retrieve an object from S3 and decrypt the data in the - * 'Body' field. - * - * @param array $args Arguments for retrieving an object from S3 via - * GetObject and decrypting it. - * - * The required configuration argument is as follows: - * - * - @MaterialsProvider: (MaterialsProviderInterface) Provides Cek, Iv, and Cek - * encrypting/decrypting for decryption metadata. May have data loaded - * from the MetadataEnvelope upon decryption. - * - @SecurityProfile: (string) Must be set to 'V2' or 'V2_AND_LEGACY'. - * - 'V2' indicates that only objects encrypted with S3EncryptionClientV2 - * content encryption and key wrap schemas are able to be decrypted. - * - 'V2_AND_LEGACY' indicates that objects encrypted with both - * S3EncryptionClientV2 and older legacy encryption clients are able - * to be decrypted. - * - @CommitmentPolicy: (string) Must be set to 'FORBID_ENCRYPT_ALLOW_DECRYPT'. - * - 'FORBID_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to read messages encrypted with key commitment or without key commitment. - * - * The optional configuration arguments are as follows: - * - * - SaveAs: (string) The path to a file on disk to save the decrypted - * object data. This will be handled by file_put_contents instead of the - * Guzzle sink. - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for reading - * MetadataEnvelope information. Defaults to determining based on object - * response headers. Can either be a class implementing MetadataStrategy, - * a class name of a predefined strategy, or empty/null to default. - * - @InstructionFileSuffix: (string) Suffix used when looking for an - * instruction file if an InstructionFileMetadataHandler is being used. - * - @CipherOptions: (array) Cipher options for decrypting data. A Cipher - * is required. Accepts the following options: - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. - * - @KmsAllowDecryptWithAnyCmk: (bool) This allows decryption with - * KMS materials for any KMS key ID, instead of needing the KMS key ID to - * be specified and provided to the decrypt operation. Ignored for non-KMS - * materials providers. Defaults to false. - * - * @return PromiseInterface - * - * @throws \InvalidArgumentException Thrown when required arguments are not - * passed or are passed incorrectly. - */ - public function getObjectAsync(array $args) - { - $provider = $this->getMaterialsProvider($args); - unset($args['@MaterialsProvider']); - - $keyCommitmentPolicy = $this->getKeyCommitmentPolicy($args); - - $instructionFileSuffix = $this->getInstructionFileSuffix($args); - unset($args['@InstructionFileSuffix']); - - $strategy = $this->getMetadataStrategy($args, $instructionFileSuffix); - unset($args['@MetadataStrategy']); - - if (!isset($args['@SecurityProfile']) - || !in_array($args['@SecurityProfile'], self::$supportedSecurityProfiles) - ) { - throw new CryptoException("@SecurityProfile is required and must be" - . " set to 'V2' or 'V2_AND_LEGACY'"); - } - - // Only throw this legacy warning once per client - if (in_array($args['@SecurityProfile'], self::$legacySecurityProfiles) - && $this->legacyWarningCount < 1 - ) { - $this->legacyWarningCount++; - trigger_error( - "This S3 Encryption Client operation is configured to" - . " read encrypted data with legacy encryption modes. If you" - . " don't have objects encrypted with these legacy modes," - . " you should disable support for them to enhance security. ", - E_USER_WARNING - ); - } - - $saveAs = null; - if (!empty($args['SaveAs'])) { - $saveAs = $args['SaveAs']; - } - - $promise = $this->client->getObjectAsync($args) - ->then( - function ($result) use ( - $provider, - $instructionFileSuffix, - $strategy, - $args - ) { - if ($strategy === null) { - $strategy = $this->determineGetObjectStrategy( - $result, - $instructionFileSuffix - ); - } - - $envelope = $strategy->load($args + [ - 'Metadata' => $result['Metadata'] - ]); - - $result['Body'] = $this->decrypt( - $result['Body'], - $provider, - $envelope, - $args - ); - return $result; - } - )->then( - function ($result) use ($saveAs) { - if (!empty($saveAs)) { - file_put_contents( - $saveAs, - (string)$result['Body'], - LOCK_EX - ); - } - return $result; - } - ); - - return $promise; - } - - /** - * Retrieves an object from S3 and decrypts the data in the 'Body' field. - * - * @param array $args Arguments for retrieving an object from S3 via - * GetObject and decrypting it. - * - * The required configuration argument is as follows: - * - * - @MaterialsProvider: (MaterialsProviderInterface) Provides Cek, Iv, and Cek - * encrypting/decrypting for decryption metadata. May have data loaded - * from the MetadataEnvelope upon decryption. - * - @SecurityProfile: (string) Must be set to 'V2' or 'V2_AND_LEGACY'. - * - 'V2' indicates that only objects encrypted with S3EncryptionClientV2 - * content encryption and key wrap schemas are able to be decrypted. - * - 'V2_AND_LEGACY' indicates that objects encrypted with both - * S3EncryptionClientV2 and older legacy encryption clients are able - * to be decrypted. - * - @CommitmentPolicy: (string) Must be set to 'FORBID_ENCRYPT_ALLOW_DECRYPT'. - * - 'FORBID_ENCRYPT_ALLOW_DECRYPT' indicates that the client is - * configured to read messages encrypted with key commitment - * or without key commitment. - * - * The optional configuration arguments are as follows: - * - * - SaveAs: (string) The path to a file on disk to save the decrypted - * object data. This will be handled by file_put_contents instead of the - * Guzzle sink. - * - @InstructionFileSuffix: (string|null) Suffix used when looking for an - * instruction file if an InstructionFileMetadataHandler was detected. - * - @CipherOptions: (array) Cipher options for encrypting data. A Cipher - * is required. Accepts the following options: - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. - * - @KmsAllowDecryptWithAnyCmk: (bool) This allows decryption with - * KMS materials for any KMS key ID, instead of needing the KMS key ID to - * be specified and provided to the decrypt operation. Ignored for non-KMS - * materials providers. Defaults to false. - * - * @return \Aws\Result GetObject call result with the 'Body' field - * wrapped in a decryption stream with its metadata - * information. - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function getObject(array $args) - { - return $this->getObjectAsync($args)->wait(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV3.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV3.php deleted file mode 100644 index b3f28ab03..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV3.php +++ /dev/null @@ -1,588 +0,0 @@ - - * use Aws\Crypto\KmsMaterialsProviderV3; - * use Aws\S3\Crypto\S3EncryptionClientV3; - * use Aws\S3\S3Client; - * - * $encryptionClient = new S3EncryptionClientV3( - * new S3Client([ - * 'region' => 'us-west-2', - * 'version' => 'latest' - * ]) - * ); - * $materialsProvider = new KmsMaterialsProviderV3( - * new KmsClient([ - * 'profile' => 'default', - * 'region' => 'us-east-1', - * 'version' => 'latest', - * ], - * 'your-kms-key-id' - * ); - * - * $encryptionClient->putObject([ - * '@MaterialsProvider' => $materialsProvider, - * '@CipherOptions' => [ - * 'Cipher' => 'gcm', - * 'KeySize' => 256, - * ], - * '@CommitmentPolicy' => 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT', - * '@KmsEncryptionContext' => ['foo' => 'bar'], - * 'Bucket' => 'your-bucket', - * 'Key' => 'your-key', - * 'Body' => 'your-encrypted-data', - * ]); - * - * - * Example read call (using objects from previous example): - * - * - * $encryptionClient->getObject([ - * '@MaterialsProvider' => $materialsProvider, - * '@CipherOptions' => [ - * 'Cipher' => 'gcm', - * 'KeySize' => 256, - * ], - * '@CommitmentPolicy' => 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT', - * 'Bucket' => 'your-bucket', - * 'Key' => 'your-key', - * ]); - * - */ -class S3EncryptionClientV3 extends AbstractCryptoClientV3 -{ - use CipherBuilderTrait; - use CryptoParamsTraitV3; - use DecryptionTraitV3; - use EncryptionTraitV3; - use UserAgentTrait; - - const CRYPTO_VERSION = '3.0'; - - private S3Client $client; - private ?string $instructionFileSuffix; - private int $legacyWarningCount; - - /** - * @param S3Client $client The S3Client to be used for true uploading and - * retrieving objects from S3 when using the - * encryption client. - * @param string|null $instructionFileSuffix Suffix for a client wide - * default when using instruction - * files for metadata storage. - */ - public function __construct( - //= ../specification/s3-encryption/client.md#wrapped-s3-client-s - //= type=implication - //# The S3EC MUST support the option to provide an SDK S3 client instance during its initialization. - S3Client $client, - //= ../specification/s3-encryption/client.md#aws-sdk-compatibility - //= type=implication - //# The S3EC MUST provide a different set of configuration options than the conventional S3 client. - - //= ../specification/s3-encryption/client.md#instruction-file-configuration - //= type=implication - //# In this case, the Instruction File Configuration SHOULD be optional, - //# such that its default configuration is used when none is provided. - ?string $instructionFileSuffix = null - ) { - //= ../specification/s3-encryption/client.md#aws-sdk-compatibility - //= type=implication - //# The S3EC MUST adhere to the same interface for API operations as the conventional AWS SDK S3 client. - $this->appendUserAgent($client, 'feat/s3-encrypt-php/' . self::CRYPTO_VERSION); - //= ../specification/s3-encryption/client.md#wrapped-s3-client-s - //# The S3EC MUST NOT support use of S3EC as the provided S3 client during its initialization; - //# it MUST throw an exception in this case. - if ($client instanceof S3EncryptionClientV3) { - throw new CryptoException("Client configuration error." - . " An S3 Encryption Client is not a valid S3 client for an S3 Encryption Client."); - } - $this->client = $client; - //= ../specification/s3-encryption/client.md#instruction-file-configuration - //= type=implication - //# The S3EC MAY support the option to provide Instruction File Configuration during its initialization. - - //= ../specification/s3-encryption/client.md#instruction-file-configuration - //= type=implication - //# If the S3EC in a given language supports Instruction Files, - //# then it MUST accept Instruction File Configuration during its initialization. - $this->instructionFileSuffix = $instructionFileSuffix; - $this->legacyWarningCount = 0; - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->client->getHandlerList(), - MetricsBuilder::S3_CRYPTO_V3 - ); - - if (!extension_loaded('openssl')) { - throw new CryptoException("Unable to load `openssl` extension."); - } - } - - //= ../specification/s3-encryption/data-format/metadata-strategy.md#instruction-file - //# Instruction File writes MUST NOT be enabled by default. - private static function getDefaultStrategy(): HeadersMetadataStrategy - { - return new HeadersMetadataStrategy(); - } - - /** - * Encrypts the data in the 'Body' field of $args and promises to upload it - * to the specified location on S3. - * - * @param array $args Arguments for encrypting an object and uploading it - * to S3 via PutObject. - * - * The required configuration arguments are as follows: - * - * - @MaterialsProvider: (MaterialsProviderV3) Provides Cek, Iv, and Cek - * encrypting/decrypting for encryption metadata. - * - @CommitmentPolicy: (string) Must be set to 'FORBID_ENCRYPT_ALLOW_DECRYPT', - * 'REQUIRE_ENCRYPT_ALLOW_DECRYPT', or 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT'. - * - 'FORBID_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages without key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment. - * - @CipherOptions: (array) Cipher options for encrypting data. Only the - * Cipher option is required. Accepts the following: - * - Cipher: (string) gcm - * See also: AbstractCryptoClientV3::$supportedCiphers - * - KeySize: (int) 256 - * See also: MaterialsProvider::$supportedKeySizes - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. Note if you pass in - * Aad, the PHP SDK will be able to decrypt the resulting object, - * but other AWS SDKs may not be able to do so. - * - @KmsEncryptionContext: (array) Only required if using - * KmsMaterialsProviderV3. An associative array of key-value - * pairs to be added to the encryption context for KMS key encryption. An - * empty array may be passed if no additional context is desired. - * - * The optional configuration arguments are as follows: - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for storing - * MetadataEnvelope information. Defaults to using a - * HeadersMetadataStrategy. Can either be a class implementing - * MetadataStrategy, a class name of a predefined strategy, or empty/null - * to default. - * - @InstructionFileSuffix: (string|null) Suffix used when writing to an - * instruction file if using an InstructionFileMetadataHandler. - * - * @return PromiseInterface - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function putObjectAsync(array $args): PromiseInterface - { - //= ../specification/s3-encryption/client.md#cryptographic-materials - //= type=implication - //# The S3EC MUST accept either one CMM or one Keyring instance upon initialization. - $provider = $this->getMaterialsProvider($args); - unset($args['@MaterialsProvider']); - - //= ../specification/s3-encryption/client.md#key-commitment - //= type=implication - //# The S3EC MUST support configuration of the [Key Commitment policy](./key-commitment.md) during its initialization. - $keyCommitmentPolicy = $this->getKeyCommitmentPolicy($args); - unset($args['@CommitmentPolicy']); - - //= ../specification/s3-encryption/data-format/metadata-strategy.md#instruction-file - //# Instruction File writes MUST be optionally configured during client creation or on each PutObject request. - $instructionFileSuffix = $this->getInstructionFileSuffix($args); - unset($args['@InstructionFileSuffix']); - - $strategy = $this->getMetadataStrategy($args, $instructionFileSuffix); - unset($args['@MetadataStrategy']); - - //= ../specification/s3-encryption/client.md#encryption-algorithm - //= type=implication - //# The S3EC MUST support configuration of the encryption algorithm (or algorithm suite) during its initialization. - $options = array_change_key_case($args); - $cipherOptions = array_intersect_key( - $options['@cipheroptions'], - self::$allowedOptions - ); - if (empty($cipherOptions['Cipher'])) { - throw new \InvalidArgumentException('An encryption cipher must be' - . ' specified in @CipherOptions["Cipher"].'); - } - - $algorithmSuite = AlgorithmSuite::validateCommitmentPolicyOnEncrypt( - $cipherOptions, - $keyCommitmentPolicy - ); - - $envelope = new MetadataEnvelope(); - - $bodyStream = Psr7\Utils::streamFor($args['Body']); - // User-owned resource which should be detached instead of closed - // during garbage-collection - if (is_resource($args['Body'])) { - $bodyStream = \Aws\detach_on_close_stream($bodyStream); - } - - return Promise\Create::promiseFor( - //= ../specification/s3-encryption/client.md#required-api-operations - //= type=implication - //# - PutObject MUST encrypt its input data before it is uploaded to S3. - $this->encrypt( - $bodyStream, - $algorithmSuite, - $options, - $provider, - $envelope - ) - )->then( - function ($encryptedBodyStream) use ($args) { - $hash = new PhpHash('sha256'); - $hashingEncryptedBodyStream = new HashingStream( - $encryptedBodyStream, - $hash, - self::getContentShaDecorator($args) - ); - - return [$hashingEncryptedBodyStream, $args]; - } - )->then( - function ($putObjectContents) use ($strategy, $envelope) { - list($bodyStream, $args) = $putObjectContents; - if ($strategy === null) { - $strategy = self::getDefaultStrategy(); - } - //= ../specification/s3-encryption/data-format/metadata-strategy.md#object-metadata - //# By default, the S3EC MUST store content metadata in the S3 Object Metadata. - $updatedArgs = $strategy->save($envelope, $args); - $updatedArgs['Body'] = $bodyStream; - - return $updatedArgs; - } - )->then( - function ($args) { - unset($args['@CipherOptions']); - - return $this->client->putObjectAsync($args); - } - ); - } - - private static function getContentShaDecorator(&$args): \Closure - { - return function ($hash) use (&$args) { - $args['ContentSHA256'] = bin2hex($hash); - }; - } - - /** - * Encrypts the data in the 'Body' field of $args and uploads it to the - * specified location on S3. - * - * @param array $args Arguments for encrypting an object and uploading it - * to S3 via PutObject. - * - * The required configuration arguments are as follows: - * - * - @MaterialsProvider: (MaterialsProvider) Provides Cek, Iv, and Cek - * encrypting/decrypting for encryption metadata. - * - @CommitmentPolicy: (string) Must be set to 'FORBID_ENCRYPT_ALLOW_DECRYPT', - * 'REQUIRE_ENCRYPT_ALLOW_DECRYPT', or 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT'. - * - 'FORBID_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages without key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment. - * - @CipherOptions: (array) Cipher options for encrypting data. A Cipher - * is required. Accepts the following options: - * - Cipher: (string) gcm - * See also: AbstractCryptoClientV3::$supportedCiphers - * - KeySize: (int) 128|256 - * See also: MaterialsProvider::$supportedKeySizes - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. Note if you pass in - * Aad, the PHP SDK will be able to decrypt the resulting object, - * but other AWS SDKs may not be able to do so. - * - @KmsEncryptionContext: (array) Only required if using - * KmsMaterialsProviderV3. An associative array of key-value - * pairs to be added to the encryption context for KMS key encryption. An - * empty array may be passed if no additional context is desired. - * - * The optional configuration arguments are as follows: - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for storing - * MetadataEnvelope information. Defaults to using a - * HeadersMetadataStrategy. Can either be a class implementing - * MetadataStrategy, a class name of a predefined strategy, or empty/null - * to default. - * - @InstructionFileSuffix: (string|null) Suffix used when writing to an - * instruction file if an using an InstructionFileMetadataHandler was - * determined. - * - * @return \Aws\Result PutObject call result with the details of uploading - * the encrypted file. - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function putObject(array $args): Result - { - //= ../specification/s3-encryption/client.md#required-api-operations - //= type=implication - //# - PutObject MUST be implemented by the S3EC. - return $this->putObjectAsync($args)->wait(); - } - - /** - * Promises to retrieve an object from S3 and decrypt the data in the - * 'Body' field. - * - * @param array $args Arguments for retrieving an object from S3 via - * GetObject and decrypting it. - * - * The required configuration argument is as follows: - * - * - @MaterialsProvider: (MaterialsProviderInterface) Provides Cek, Iv, and Cek - * encrypting/decrypting for decryption metadata. May have data loaded - * from the MetadataEnvelope upon decryption. - * - @CommitmentPolicy: (string) Must be set to 'FORBID_ENCRYPT_ALLOW_DECRYPT', - * 'REQUIRE_ENCRYPT_ALLOW_DECRYPT', or 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT'. - * - 'FORBID_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages without key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment. - * - @SecurityProfile: (string) Must be set to 'V3' or 'V3_AND_LEGACY'. - * - 'V3' indicates that only objects encrypted with S3EncryptionClientV3 - * content encryption and key wrap schemas are able to be decrypted. - * - 'V3_AND_LEGACY' indicates that objects encrypted with both - * S3EncryptionClientV3 and older legacy encryption clients are able - * to be decrypted. - * - * The optional configuration arguments are as follows: - * - * - SaveAs: (string) The path to a file on disk to save the decrypted - * object data. This will be handled by file_put_contents instead of the - * Guzzle sink. - * - * - @MetadataStrategy: (MetadataStrategy|string|null) Strategy for reading - * MetadataEnvelope information. Defaults to determining based on object - * response headers. Can either be a class implementing MetadataStrategy, - * a class name of a predefined strategy, or empty/null to default. - * - @InstructionFileSuffix: (string) Suffix used when looking for an - * instruction file if an InstructionFileMetadataHandler is being used. - * - @CipherOptions: (array) Cipher options for decrypting data. A Cipher - * is required. Accepts the following options: - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. - * - @KmsAllowDecryptWithAnyCmk: (bool) This allows decryption with - * KMS materials for any KMS key ID, instead of needing the KMS key ID to - * be specified and provided to the decrypt operation. Ignored for non-KMS - * materials providers. Defaults to false. - * - * @return PromiseInterface - * - * @throws \InvalidArgumentException Thrown when required arguments are not - * passed or are passed incorrectly. - */ - public function getObjectAsync(array $args): PromiseInterface - { - //= ../specification/s3-encryption/client.md#cryptographic-materials - //= type=implication - //# The S3EC MUST accept either one CMM or one Keyring instance upon initialization. - $provider = $this->getMaterialsProvider($args); - unset($args['@MaterialsProvider']); - - //= ../specification/s3-encryption/client.md#key-commitment - //= type=implication - //# The S3EC MUST support configuration of the [Key Commitment policy](./key-commitment.md) during its initialization. - $keyCommitmentPolicy = $this->getKeyCommitmentPolicy($args); - unset($args['@CommitmentPolicy']); - - $instructionFileSuffix = $this->getInstructionFileSuffix($args); - unset($args['@InstructionFileSuffix']); - - $strategy = $this->getMetadataStrategy($args, $instructionFileSuffix); - unset($args['@MetadataStrategy']); - - //= ../specification/s3-encryption/client.md#enable-legacy-wrapping-algorithms - //= type=implication - //# The S3EC MUST support the option to enable or disable legacy wrapping algorithms. - if (!isset($args['@SecurityProfile']) - || !in_array($args['@SecurityProfile'], self::SUPPORTED_SECURITY_PROFILES) - ) { - throw new CryptoException("@SecurityProfile is required and must be" - . " set to 'V3' or 'V3_AND_LEGACY'"); - } - - // Only throw this legacy warning once per client - if (in_array($args['@SecurityProfile'], self::LEGACY_SECURITY_PROFILES) - && $this->legacyWarningCount < 1 - ) { - $this->legacyWarningCount++; - trigger_error( - "This S3 Encryption Client operation is configured to" - . " read encrypted data with legacy encryption modes. If you" - . " don't have objects encrypted with these legacy modes," - . " you should disable support for them to enhance security. ", - E_USER_WARNING - ); - } - - $saveAs = null; - if (!empty($args['SaveAs'])) { - $saveAs = $args['SaveAs']; - } - - $promise = $this->client->getObjectAsync($args) - ->then( - function ($result) use ( - $provider, - $instructionFileSuffix, - $strategy, - $keyCommitmentPolicy, - $args - ) { - if ($strategy === null) { - $strategy = $this->determineGetObjectStrategy( - $result, - $instructionFileSuffix - ); - } - - $envelope = $strategy->load($args + [ - 'Metadata' => $result['Metadata'] - ]); - //= ../specification/s3-encryption/client.md#required-api-operations - //= type=implication - //# - GetObject MUST decrypt data received from the S3 server and return it as plaintext. - $result['Body'] = $this->decrypt( - $result['Body'], - $provider, - $envelope, - $keyCommitmentPolicy, - $args - ); - - return $result; - } - )->then( - function ($result) use ($saveAs) { - if (!empty($saveAs)) { - file_put_contents( - $saveAs, - (string)$result['Body'], - LOCK_EX - ); - } - - return $result; - } - ); - - return $promise; - } - - /** - * Retrieves an object from S3 and decrypts the data in the 'Body' field. - * - * @param array $args Arguments for retrieving an object from S3 via - * GetObject and decrypting it. - * - * The required configuration argument is as follows: - * - * - @MaterialsProvider: (MaterialsProviderInterface) Provides Cek, Iv, and Cek - * encrypting/decrypting for decryption metadata. May have data loaded - * from the MetadataEnvelope upon decryption. - * - @CommitmentPolicy: (string) Must be set to 'FORBID_ENCRYPT_ALLOW_DECRYPT', - * 'REQUIRE_ENCRYPT_ALLOW_DECRYPT', or 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT'. - * - 'FORBID_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages without key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_ALLOW_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment or without key commitment. - * - 'REQUIRE_ENCRYPT_REQUIRE_DECRYPT' indicates that the client is configured - * to write messages with key commitment and read messages encrypted - * with key commitment. - * - @SecurityProfile: (string) Must be set to 'V3' or 'V3_AND_LEGACY'. - * - 'V3' indicates that only objects encrypted with S3EncryptionClientV3 - * content encryption and key wrap schemas are able to be decrypted. - * - 'V3_AND_LEGACY' indicates that objects encrypted with both - * S3EncryptionClientV3 and older legacy encryption clients are able - * to be decrypted. - * - * The optional configuration arguments are as follows: - * - * - SaveAs: (string) The path to a file on disk to save the decrypted - * object data. This will be handled by file_put_contents instead of the - * Guzzle sink. - * - @InstructionFileSuffix: (string|null) Suffix used when looking for an - * instruction file if an InstructionFileMetadataHandler was detected. - * - @CipherOptions: (array) Cipher options for encrypting data. A Cipher - * is required. Accepts the following options: - * - Aad: (string) Additional authentication data. This option is - * passed directly to OpenSSL when using gcm. It is ignored when - * using cbc. - * - @KmsAllowDecryptWithAnyCmk: (bool) This allows decryption with - * KMS materials for any KMS key ID, instead of needing the KMS key ID to - * be specified and provided to the decrypt operation. Ignored for non-KMS - * materials providers. Defaults to false. - * - * @return \Aws\Result GetObject call result with the 'Body' field - * wrapped in a decryption stream with its metadata - * information. - * - * @throws \InvalidArgumentException Thrown when arguments above are not - * passed or are passed incorrectly. - */ - public function getObject(array $args): Result - { - //= ../specification/s3-encryption/client.md#required-api-operations - //= type=implication - //# - GetObject MUST be implemented by the S3EC. - return $this->getObjectAsync($args)->wait(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploader.php deleted file mode 100644 index ddf1d2df9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploader.php +++ /dev/null @@ -1,169 +0,0 @@ -appendUserAgent($client, 'feat/s3-encrypt/' . self::CRYPTO_VERSION); - $this->client = $client; - $config['params'] = []; - if (!empty($config['bucket'])) { - $config['params']['Bucket'] = $config['bucket']; - } - if (!empty($config['key'])) { - $config['params']['Key'] = $config['key']; - } - - $this->provider = $this->getMaterialsProvider($config); - unset($config['@MaterialsProvider']); - - $this->instructionFileSuffix = $this->getInstructionFileSuffix($config); - unset($config['@InstructionFileSuffix']); - $this->strategy = $this->getMetadataStrategy( - $config, - $this->instructionFileSuffix - ); - if ($this->strategy === null) { - $this->strategy = self::getDefaultStrategy(); - } - unset($config['@MetadataStrategy']); - - $config['prepare_data_source'] = $this->getEncryptingDataPreparer(); - - parent::__construct($client, $source, $config); - } - - private static function getDefaultStrategy() - { - return new HeadersMetadataStrategy(); - } - - private function getEncryptingDataPreparer() - { - return function() { - // Defer encryption work until promise is executed - $envelope = new MetadataEnvelope(); - - list($this->source, $params) = Promise\Create::promiseFor($this->encrypt( - $this->source, - $this->config['@cipheroptions'] ?: [], - $this->provider, - $envelope - ))->then( - function ($bodyStream) use ($envelope) { - $params = $this->strategy->save( - $envelope, - $this->config['params'] - ); - return [$bodyStream, $params]; - } - )->wait(); - - $this->source->rewind(); - $this->config['params'] = $params; - }; - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV2.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV2.php deleted file mode 100644 index 1bdbccf37..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV2.php +++ /dev/null @@ -1,176 +0,0 @@ -appendUserAgent($client, 'feat/s3-encrypt/' . self::CRYPTO_VERSION); - $this->client = $client; - $config['params'] = []; - if (!empty($config['bucket'])) { - $config['params']['Bucket'] = $config['bucket']; - } - if (!empty($config['key'])) { - $config['params']['Key'] = $config['key']; - } - - $this->provider = $this->getMaterialsProvider($config); - unset($config['@MaterialsProvider']); - - $this->instructionFileSuffix = $this->getInstructionFileSuffix($config); - unset($config['@InstructionFileSuffix']); - $this->strategy = $this->getMetadataStrategy( - $config, - $this->instructionFileSuffix - ); - if ($this->strategy === null) { - $this->strategy = self::getDefaultStrategy(); - } - unset($config['@MetadataStrategy']); - - $config['prepare_data_source'] = $this->getEncryptingDataPreparer(); - - parent::__construct($client, $source, $config); - } - - private static function getDefaultStrategy() - { - return new HeadersMetadataStrategy(); - } - - private function getEncryptingDataPreparer() - { - return function() { - // Defer encryption work until promise is executed - $envelope = new MetadataEnvelope(); - - list($this->source, $params) = Promise\Create::promiseFor($this->encrypt( - $this->source, - $this->config ?: [], - $this->provider, - $envelope - ))->then( - function ($bodyStream) use ($envelope) { - $params = $this->strategy->save( - $envelope, - $this->config['params'] - ); - return [$bodyStream, $params]; - } - )->wait(); - - $this->source->rewind(); - $this->config['params'] = $params; - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV3.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV3.php deleted file mode 100644 index bd4f20f7a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV3.php +++ /dev/null @@ -1,217 +0,0 @@ -appendUserAgent($client, 'feat/s3-encrypt/' . self::CRYPTO_VERSION); - $this->client = $client; - $config['params'] = []; - if (!empty($config['bucket'])) { - $config['params']['Bucket'] = $config['bucket']; - } - if (!empty($config['key'])) { - $config['params']['Key'] = $config['key']; - } - - $this->provider = $this->getMaterialsProvider($config); - unset($config['@MaterialsProvider']); - - $this->keyCommitmentPolicy = $this->getKeyCommitmentPolicy($config); - unset($config['@CommitmentPolicy']); - - $this->instructionFileSuffix = $this->getInstructionFileSuffix($config); - unset($config['@InstructionFileSuffix']); - $this->strategy = $this->getMetadataStrategy( - $config, - $this->instructionFileSuffix - ); - if ($this->strategy === null) { - $this->strategy = self::getDefaultStrategy(); - } - unset($config['@MetadataStrategy']); - - $options = array_change_key_case($config); - $cipherOptions = array_intersect_key( - $options['@cipheroptions'], - self::$allowedOptions - ); - if (empty($cipherOptions['Cipher'])) { - throw new \InvalidArgumentException('An encryption cipher must be' - . ' specified in @CipherOptions["Cipher"].'); - } - - $this->algorithmSuite = AlgorithmSuite::validateCommitmentPolicyOnEncrypt( - $cipherOptions, - $this->keyCommitmentPolicy - ); - - //= ../specification/s3-encryption/client.md#optional-api-operations - //= type=implication - //# - If implemented, CreateMultipartUpload MUST initiate a multipart upload. - $config['prepare_data_source'] = $this->getEncryptingDataPreparer(); - - parent::__construct($client, $source, $config); - - if (!extension_loaded('openssl')) { - throw new CryptoException("Unable to load `openssl` extension."); - } - } - - private static function getDefaultStrategy() - { - return new HeadersMetadataStrategy(); - } - - private function getEncryptingDataPreparer() - { - return function() { - // Defer encryption work until promise is executed - $envelope = new MetadataEnvelope(); - - list($this->source, $params) = Promise\Create::promiseFor($this->encrypt( - $this->source, - $this->algorithmSuite, - $this->config ?: [], - $this->provider, - $envelope - ))->then( - function ($bodyStream) use ($envelope) { - $params = $this->strategy->save( - $envelope, - $this->config['params'] - ); - return [$bodyStream, $params]; - } - )->wait(); - - $this->source->rewind(); - $this->config['params'] = $params; - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3_EC_SUPPORT_POLICY.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3_EC_SUPPORT_POLICY.md deleted file mode 100644 index 598701672..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/S3_EC_SUPPORT_POLICY.md +++ /dev/null @@ -1,19 +0,0 @@ -# Overview - -This page describes the support policy for the Amazon S3 Encryption Client for PHP. We regularly provide the Amazon S3 Encryption Client for PHP with updates that may contain support for new or updated APIs, new features, enhancements, bug fixes, security patches, or documentation updates. Updates may also address changes with dependencies, language runtimes, and operating systems. - -We recommend users to stay up-to-date with Amazon S3 Encryption Client for PHP releases to keep up with the latest features, security updates, and underlying dependencies. Continued use of an unsupported SDK version is not recommended and is done at the user's discretion. - -# Major Version Lifecycle - -The Amazon S3 Encryption Client for Go follows the same major version lifecycle as the AWS SDK. For details on this lifecycle, see [AWS SDKs and Tools Maintenance Policy](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle). - -# Version Support Matrix - -This table describes the current support status of each major version of the Amazon S3 Encryption Client for PHP. It also shows the next status each major version will transition to, and the date at which that transition will happen. - -| Major version | Current status | Next status | Next status date | -|--------------|----------------|-------------|------------------| -| 3.x | General Availability | - | - | -| 2.x | General Availability | Maintenance | 2026-06-15 | -| 1.x | End of Support | - | - | diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/UserAgentTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/UserAgentTrait.php deleted file mode 100644 index 45662758c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Crypto/UserAgentTrait.php +++ /dev/null @@ -1,31 +0,0 @@ -getHandlerList(); - $list->appendBuild(Middleware::mapRequest( - function(RequestInterface $req) use ($agentString) { - if (!empty($req->getHeader('User-Agent')) - && !empty($req->getHeader('User-Agent')[0]) - ) { - $userAgent = $req->getHeader('User-Agent')[0]; - if (strpos($userAgent, $agentString) === false) { - $userAgent .= " {$agentString}"; - }; - } else { - $userAgent = $agentString; - } - - $req = $req->withHeader('User-Agent', $userAgent); - return $req; - } - )); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php deleted file mode 100644 index 3c35c4b97..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php +++ /dev/null @@ -1,106 +0,0 @@ -getPartition( - $arn->getRegion(), - $arn->getService() - ); - return $partition->getDnsSuffix(); - } - - private function getSigningRegion( - $region, - $service, - PartitionEndpointProvider $provider - ) { - $partition = $provider->getPartition($region, $service); - $data = $partition->toArray(); - if (isset($data['services'][$service]['endpoints'][$region]['credentialScope']['region'])) { - return $data['services'][$service]['endpoints'][$region]['credentialScope']['region']; - } - return $region; - } - - private function isMatchingSigningRegion( - $arnRegion, - $clientRegion, - $service, - PartitionEndpointProvider $provider - ) { - $arnRegion = \Aws\strip_fips_pseudo_regions(strtolower($arnRegion)); - $clientRegion = strtolower($clientRegion); - if ($arnRegion === $clientRegion) { - return true; - } - if ($this->getSigningRegion($clientRegion, $service, $provider) === $arnRegion) { - return true; - } - return false; - } - - private function validateFipsConfigurations(ArnInterface $arn) - { - $useFipsEndpoint = !empty($this->config['use_fips_endpoint']); - if ($arn instanceof OutpostsArnInterface) { - if (empty($this->config['use_arn_region']) - || !($this->config['use_arn_region']->isUseArnRegion()) - ) { - $region = $this->region; - } else { - $region = $arn->getRegion(); - } - if (\Aws\is_fips_pseudo_region($region)) { - throw new InvalidRegionException( - 'Fips is currently not supported with S3 Outposts access' - . ' points. Please provide a non-fips region or do not supply an' - . ' access point ARN.'); - } - } - } - - private function validateMatchingRegion(ArnInterface $arn) - { - if (!($this->isMatchingSigningRegion( - $arn->getRegion(), - $this->region, - $this->service->getEndpointPrefix(), - $this->partitionProvider) - )) { - if (empty($this->config['use_arn_region']) - || !($this->config['use_arn_region']->isUseArnRegion()) - ) { - throw new InvalidRegionException('The region' - . " specified in the ARN (" . $arn->getRegion() - . ") does not match the client region (" - . "{$this->region})."); - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/DeleteMultipleObjectsException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/DeleteMultipleObjectsException.php deleted file mode 100644 index 5b4c28903..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/DeleteMultipleObjectsException.php +++ /dev/null @@ -1,68 +0,0 @@ -deleted = array_values($deleted); - $this->errors = array_values($errors); - parent::__construct('Unable to delete certain keys when executing a' - . ' DeleteMultipleObjects request: ' - . self::createMessageFromErrors($errors)); - } - - /** - * Create a single error message from multiple errors. - * - * @param array $errors Errors encountered - * - * @return string - */ - public static function createMessageFromErrors(array $errors) - { - return "\n- " . implode("\n- ", array_map(function ($key) { - return json_encode($key); - }, $errors)); - } - - /** - * Get the errored objects - * - * @return array Returns an array of associative arrays, each containing - * a 'Code', 'Message', and 'Key' key. - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Get the successfully deleted objects - * - * @return array Returns an array of associative arrays, each containing - * a 'Key' and optionally 'DeleteMarker' and - * 'DeleterMarkerVersionId' - */ - public function getDeleted() - { - return $this->deleted; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/MultipartCopyAnnotationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/MultipartCopyAnnotationException.php deleted file mode 100644 index c29f4ca82..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/MultipartCopyAnnotationException.php +++ /dev/null @@ -1,47 +0,0 @@ - */ - private array $failed; - - /** - * @param UploadState $state - * @param array $failed - * @param string[] $succeeded - */ - public function __construct(UploadState $state, array $failed, array $succeeded = []) - { - parent::__construct($state, $failed); - - $this->failed = $failed; - $this->succeeded = $succeeded; - } - - /** - * @return string[] - */ - public function getSucceededAnnotations(): array - { - return $this->succeeded; - } - - /** - * @return array - */ - public function getFailedAnnotations(): array - { - return $this->failed; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/PermanentRedirectException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/PermanentRedirectException.php deleted file mode 100644 index 67d916e89..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Exception/PermanentRedirectException.php +++ /dev/null @@ -1,4 +0,0 @@ -collectPathInfo($error->getCommand()); - } elseif ($prev instanceof AwsException) { - $this->collectPathInfo($prev->getCommand()); - } - parent::__construct($state, $prev); - } - - /** - * Get the Bucket information of the transfer object - * - * @return string|null Returns null when 'Bucket' information - * is unavailable. - */ - public function getBucket() - { - return $this->bucket; - } - - /** - * Get the Key information of the transfer object - * - * @return string|null Returns null when 'Key' information - * is unavailable. - */ - public function getKey() - { - return $this->key; - } - - /** - * Get the source file name of the transfer object - * - * @return string|null Returns null when metadata of the stream - * wrapped in 'Body' parameter is unavailable. - */ - public function getSourceFileName() - { - return $this->filename; - } - - /** - * Collect file path information when accessible. (Bucket, Key) - * - * @param CommandInterface $cmd - */ - private function collectPathInfo(CommandInterface $cmd) - { - if (empty($this->bucket) && isset($cmd['Bucket'])) { - $this->bucket = $cmd['Bucket']; - } - if (empty($this->key) && isset($cmd['Key'])) { - $this->key = $cmd['Key']; - } - if (empty($this->filename) && isset($cmd['Body'])) { - $this->filename = $cmd['Body']->getMetadata('uri'); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ExpiresParsingMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ExpiresParsingMiddleware.php deleted file mode 100644 index 5bdb34a70..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ExpiresParsingMiddleware.php +++ /dev/null @@ -1,56 +0,0 @@ -nextHandler = $nextHandler; - } - - public function __invoke(CommandInterface $command, ?RequestInterface $request = null) - { - $next = $this->nextHandler; - return $next($command, $request)->then( - function (ResultInterface $result) { - if (empty($result['Expires']) && !empty($result['ExpiresString'])) { - trigger_error( - "Failed to parse the `expires` header as a timestamp due to " - . " an invalid timestamp format.\nPlease refer to `ExpiresString` " - . "for the unparsed string format of this header.\n" - , E_USER_WARNING - ); - } - return $result; - } - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/GetBucketLocationParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/GetBucketLocationParser.php deleted file mode 100644 index 94aee6967..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/GetBucketLocationParser.php +++ /dev/null @@ -1,49 +0,0 @@ -parser = $parser; - } - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - $fn = $this->parser; - $result = $fn($command, $response); - - if ($command->getName() === 'GetBucketLocation') { - $location = 'us-east-1'; - if (preg_match('/>(.+?)<\/LocationConstraint>/', $response->getBody(), $matches)) { - $location = $matches[1] === 'EU' ? 'eu-west-1' : $matches[1]; - } - $result['LocationConstraint'] = $location; - } - - return $result; - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - return $this->parser->parseMemberFromStream($stream, $member, $response); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartCopy.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartCopy.php deleted file mode 100644 index 526bbfe0c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartCopy.php +++ /dev/null @@ -1,907 +0,0 @@ - true, - 'REPLACE' => true, - ]; - - private const TAGS_DIRECTIVE_UNSPECIFIED = 'UNSPECIFIED'; - private const TAGS_DIRECTIVE_COPY = 'COPY'; - private const TAGS_DIRECTIVE_REPLACE = 'REPLACE'; - - private const VALID_TAGS_DIRECTIVES = [ - self::TAGS_DIRECTIVE_UNSPECIFIED => true, - self::TAGS_DIRECTIVE_COPY => true, - self::TAGS_DIRECTIVE_REPLACE => true, - ]; - - private const ANNOTATIONS_DIRECTIVE_UNSPECIFIED = 'UNSPECIFIED'; - private const ANNOTATIONS_DIRECTIVE_COPY = 'COPY'; - private const ANNOTATIONS_DIRECTIVE_EXCLUDE = 'EXCLUDE'; - - private const VALID_ANNOTATIONS_DIRECTIVES = [ - self::ANNOTATIONS_DIRECTIVE_UNSPECIFIED => true, - self::ANNOTATIONS_DIRECTIVE_COPY => true, - self::ANNOTATIONS_DIRECTIVE_EXCLUDE => true, - ]; - - /** Phase 3 PutObjectAnnotation retry policy (full-jitter exponential, capped). */ - private const ANNOTATION_MAX_ATTEMPTS = 3; - private const ANNOTATION_BASE_DELAY_MS = 100; - private const ANNOTATION_MAX_DELAY_MS = 5000; - - /** Metadata fields forwarded from source to destination on metadata_directive=COPY. */ - private static array $copyMetadataFields = [ - 'CacheControl', - 'ContentDisposition', - 'ContentEncoding', - 'ContentLanguage', - 'ContentType', - 'Expires', - 'Metadata', - ]; - - /** @var string|array */ - private $source; - /** @var string|null User-provided versionId (from source string or config). */ - private $sourceVersionId; - /** @var string|null HeadObject-derived versionId (used only for Phase 1 reads). */ - private ?string $headDerivedVersionId = null; - /** @var ResultInterface|null */ - private $sourceMetadata; - /** @var string|null */ - private ?string $sourceETag = null; - /** @var array|null Source TagSet (populated when tags_directive resolves to COPY). */ - private ?array $sourceTags = null; - /** @var array Annotation name => payload, populated in Phase 1. */ - private array $annotationBodies = []; - - /** - * Creates a multipart upload for copying an S3 object. - * - * The valid configuration options are as follows: - * - * - acl: (string) ACL to set on the object being upload. Objects are - * private by default. - * - before_complete: (callable) Callback to invoke before the - * `CompleteMultipartUpload` operation. The callback should have a - * function signature like `function (Aws\Command $command) {...}`. - * - before_initiate: (callable) Callback to invoke before the - * `CreateMultipartUpload` operation. The callback should have a function - * signature like `function (Aws\Command $command) {...}`. - * - before_upload: (callable) Callback to invoke before `UploadPartCopy` - * operations. The callback should have a function signature like - * `function (Aws\Command $command) {...}`. - * - bucket: (string, required) Name of the bucket to which the object is - * being uploaded. - * - concurrency: (int, default=int(5)) Maximum number of concurrent - * `UploadPart` operations allowed during the multipart upload. - * - key: (string, required) Key to use for the object being uploaded. - * - params: (array) An array of key/value parameters that will be applied - * to each of the sub-commands run by the uploader as a base. - * Auto-calculated options will override these parameters. If you need - * more granularity over parameters to each sub-command, use the before_* - * options detailed above to update the commands directly. - * - part_size: (int, default=int(5242880)) Part size, in bytes, to use when - * doing a multipart upload. This must between 5 MB and 5 GB, inclusive. - * - state: (Aws\Multipart\UploadState) An object that represents the state - * of the multipart upload and that is used to resume a previous upload. - * When this option is provided, the `bucket`, `key`, and `part_size` - * options are ignored. - * - metadata_directive: (string, default='COPY') 'COPY' or 'REPLACE'. - * Caller-supplied `params['Metadata']` does NOT change the directive, - * set this option explicitly to opt into REPLACE. When 'COPY', source - * metadata fields (Metadata, CacheControl, ContentDisposition, - * ContentEncoding, ContentLanguage, ContentType, Expires) are forwarded - * and any matching caller-supplied fields are dropped. When 'REPLACE', - * no source metadata is read and caller-supplied params are used as-is. - * - tags_directive: (string, default='UNSPECIFIED') 'UNSPECIFIED', 'COPY', - * or 'REPLACE'. UNSPECIFIED means no tag work and any caller-supplied - * `params['Tagging']` is dropped. COPY reads source tags via GetObjectTagging - * and writes them to the destination via PutObjectTagging after - * CompleteMultipartUpload. REPLACE skips the read and writes - * caller-supplied `params['Tagging']` to the destination. - * - annotations_directive: (string, default='UNSPECIFIED') 'UNSPECIFIED', - * 'COPY', or 'EXCLUDE'. UNSPECIFIED and EXCLUDE both skip annotation - * work. COPY reads source annotations via ListObjectAnnotations and - * per-name GetObjectAnnotation, then writes them to the destination - * via per-name PutObjectAnnotation. - * - source_metadata: (Aws\ResultInterface) The result of a HeadObject call - * on the copy source. If not provided, the SDK makes a HeadObject request - * to obtain the source object's size and metadata. Providing this avoids - * the extra request. - * - display_progress: (boolean) Set true to track status in 1/8th increments - * for upload. - * - * @param S3ClientInterface $client - * @param string|array $source - * @param array $config - */ - public function __construct( - S3ClientInterface $client, - $source, - array $config = [] - ) { - if (is_array($source)) { - $this->source = $source; - } else { - $this->source = $this->getInputSource($source); - } - - $config = array_change_key_case($config); - - // Resume: replay the original directives unless caller overrides. - if (isset($config['state']) && $config['state'] instanceof UploadState) { - $stateConfig = $config['state']->getConfig(); - if (!empty($stateConfig)) { - $config += array_change_key_case($stateConfig); - } - } - - parent::__construct( - $client, - $config + ['source_metadata' => null] - ); - - if ($this->displayProgress) { - $this->getState()->setProgressThresholds( - $this->sourceMetadata["ContentLength"] - ); - } - } - - /** - * Alias of {@see self::upload()}. - * - * @return ResultInterface - */ - public function copy() - { - return $this->upload(); - } - - /** - * Drives the multipart copy workflow: - * - * Phase 1: Source reads. - * HeadObject (pins VersionId), then (no-op unless tags/annotations were opted in) - * GetObjectTagging and ListObjectAnnotations + per-name GetObjectAnnotation in parallel. - * - * Phase 2: Multipart upload. CreateMultipartUpload, UploadPartCopy parts - * in parallel, CompleteMultipartUpload. - * - * Phase 3 (optional): Destination writes (skipped unless tags/annotations were - * opted in). PutObjectTagging (atomic, fail-fast), then per-name - * PutObjectAnnotation in parallel with retries (partial failure is - * surfaced via {@see MultipartCopyAnnotationException}). - * - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - if ($this->promise) { - return $this->promise; - } - - return $this->promise = Coroutine::of(function () { - try { - // Phase 1: HeadObject pins VersionId for the conditional reads below. - yield $this->fetchSourceMetadata(); - - $tagsDir = $this->resolveTagsDirective(); - $annotDir = $this->resolveAnnotationsDirective(); - - // Tags + annotations are independent once VersionId is pinned. - $concurrent = []; - if ($tagsDir === self::TAGS_DIRECTIVE_COPY) { - $concurrent[] = $this->fetchSourceTags(); - } - if ($annotDir === self::ANNOTATIONS_DIRECTIVE_COPY) { - $concurrent[] = $this->fetchSourceAnnotations(); - } - if ($concurrent) { - yield P\Utils::all($concurrent); - } - - if ($this->state->isCompleted()) { - throw new \LogicException( - 'This multipart upload has already been completed or aborted.' - ); - } - - // Phase 2: initiate. - if (!$this->state->isInitiated()) { - if (is_callable($this->config['prepare_data_source'])) { - $this->config['prepare_data_source'](); - } - $init = yield $this->execCommand('initiate', $this->getInitiateParams()); - $this->state->setUploadId( - $this->info['id']['upload_id'], - $init[$this->info['id']['upload_id']] - ); - $this->state->setStatus(UploadState::INITIATED); - } - - // Phase 2: parts. - $resultHandler = $this->getResultHandler($errors); - $pool = new CommandPool( - $this->client, - $this->getUploadCommands($resultHandler), - [ - 'concurrency' => $this->config['concurrency'], - 'before' => $this->config['before_upload'], - ] - ); - - yield $pool->promise(); - - if ($errors) { - throw new $this->config['exception_class']($this->state, $errors); - } - - // Phase 2: complete. - $complete = yield $this->execCommand('complete', $this->getCompleteParams()); - $this->state->setStatus(UploadState::COMPLETED); - - // Phase 3: destination writes (if applicable). - $destETag = $complete['ETag'] ?? null; - $destVersionId = $complete['VersionId'] ?? null; - - yield from $this->writeDestinationTags($tagsDir, $destVersionId); - - if ($annotDir === self::ANNOTATIONS_DIRECTIVE_COPY) { - yield from $this->writeDestinationAnnotations($destETag, $destVersionId); - } - - yield $complete; - } catch (AwsException $e) { - throw new $this->config['exception_class']($this->state, $e); - } - }); - } - - /** - * @return array - */ - protected function loadUploadWorkflowInfo() - { - return [ - 'command' => [ - 'initiate' => 'CreateMultipartUpload', - 'upload' => 'UploadPartCopy', - 'complete' => 'CompleteMultipartUpload', - ], - 'id' => [ - 'bucket' => 'Bucket', - 'key' => 'Key', - 'upload_id' => 'UploadId', - ], - 'part_num' => 'PartNumber', - ]; - } - - /** - * Yields UploadPartCopy commands for parts not yet uploaded. - * - * @param callable $resultHandler - * @return \Generator - */ - protected function getUploadCommands(callable $resultHandler) - { - $parts = ceil($this->getSourceSize() / $this->determinePartSize()); - - for ($partNumber = 1; $partNumber <= $parts; $partNumber++) { - if (!$this->state->hasPartBeenUploaded($partNumber)) { - $command = $this->client->getCommand( - $this->info['command']['upload'], - $this->createPart($partNumber, $parts) + $this->getState()->getId() - ); - $command->getHandlerList()->appendSign($resultHandler, 'mup'); - yield $command; - } - } - } - - /** - * Builds the parameter array for a single UploadPartCopy. - * - * @param int $partNumber - * @param int $partsCount - * @return array - */ - private function createPart($partNumber, $partsCount) - { - $data = []; - - $config = $this->getConfig(); - $params = $config['params'] ?? []; - foreach ($params as $k => $v) { - $data[$k] = $v; - } - // Source may be a string or, when the key contains '?', an array. - if (is_array($this->source)) { - $key = str_replace('%2F', '/', rawurlencode($this->source['source_key'])); - $bucket = $this->source['source_bucket']; - } else { - [$bucket, $key] = explode('/', ltrim($this->source, '/'), 2); - $key = implode( - '/', - array_map( - 'urlencode', - explode('/', rawurldecode($key)) - ) - ); - } - - $uri = ArnParser::isArn($bucket) ? '' : '/'; - $uri .= $bucket . '/' . $key; - $data['CopySource'] = $uri; - $data['PartNumber'] = $partNumber; - if (!empty($this->sourceVersionId)) { - $data['CopySource'] .= "?versionId=" . $this->sourceVersionId; - } - if ($this->sourceETag !== null) { - $data['CopySourceIfMatch'] = $this->sourceETag; - } - - $defaultPartSize = $this->determinePartSize(); - $startByte = $defaultPartSize * ($partNumber - 1); - $data['ContentLength'] = $partNumber < $partsCount - ? $defaultPartSize - : $this->getSourceSize() - ($defaultPartSize * ($partsCount - 1)); - $endByte = $startByte + $data['ContentLength'] - 1; - $data['CopySourceRange'] = "bytes=$startByte-$endByte"; - - return $data; - } - - /** - * @param ResultInterface $result - * @return string - */ - protected function extractETag(ResultInterface $result) - { - return $result->search('CopyPartResult.ETag'); - } - - /** - * Builds CreateMultipartUpload params: applies metadata_directive, strips - * Tagging when Phase 3 will write tags separately. - * - * @return array - * @throws \InvalidArgumentException - */ - protected function getInitiateParams() - { - $params = $this->traitGetInitiateParams(); - - $directive = strtoupper($this->resolveMetadataDirective()); - - if (!isset(self::VALID_METADATA_DIRECTIVES[$directive])) { - throw new \InvalidArgumentException( - "Invalid metadata_directive value '$directive'." - . " Must be 'COPY' or 'REPLACE'." - ); - } - - // CreateMultipartUpload has no MetadataDirective member. The directive is local-only. - // Under COPY, forwarded fields exactly mirror source. Caller's params for fields - // source is empty on are dropped, matching how tags work. - if ($directive === 'COPY') { - $sourceMetadata = $this->getSourceMetadata(); - foreach (self::$copyMetadataFields as $field) { - if (!empty($sourceMetadata[$field])) { - $params[$field] = $sourceMetadata[$field]; - } else { - unset($params[$field]); - } - } - } - - // When tags_directive is UNSPECIFIED, no tag work - // happens at all and any caller-supplied - // params['Tagging'] is dropped here too — callers who need their - // tags applied must opt in via tags_directive='REPLACE'. - unset($params['Tagging']); - - return $params; - } - - /** - * @return string|null - */ - protected function getSourceMimeType() - { - return $this->getSourceMetadata()['ContentType']; - } - - /** - * @return int - */ - protected function getSourceSize() - { - return $this->getSourceMetadata()['ContentLength']; - } - - /** - * Sync wrapper for callers in the constructor / trait that need a value now. - * - * @return ResultInterface - */ - private function getSourceMetadata() - { - return $this->fetchSourceMetadata()->wait(); - } - - /** - * Resolves the source HeadObject result and caches it. - * - * @return PromiseInterface - */ - private function fetchSourceMetadata(): PromiseInterface - { - if (!$this->sourceMetadata instanceof ResultInterface - && $this->config['source_metadata'] instanceof ResultInterface - ) { - $this->sourceMetadata = $this->config['source_metadata']; - $this->captureSourceIdentifiers($this->sourceMetadata); - } - - if ($this->sourceMetadata instanceof ResultInterface) { - return P\Create::promiseFor($this->sourceMetadata); - } - - return $this->client->headObjectAsync($this->buildHeadParams()) - ->then(function (ResultInterface $r): ResultInterface { - $this->sourceMetadata = $r; - $this->captureSourceIdentifiers($r); - return $r; - }); - } - - /** - * Captures VersionId and ETag from a source HeadObject result. - * - * HeadObject-derived VersionId is used only for Phase 1 source reads - * (tags/annotations). Only user-provided versionId is attached to - * UploadPartCopy requests. - * - * @param ResultInterface $r - * @return void - */ - private function captureSourceIdentifiers(ResultInterface $r): void - { - if (!empty($r['VersionId'])) { - $this->headDerivedVersionId = $r['VersionId']; - } - - if (!empty($r['ETag'])) { - $this->sourceETag = $r['ETag']; - } - } - - /** - * Builds HeadObject params for the source, parsing `?versionId=` if present. - * - * @return array - */ - private function buildHeadParams(): array - { - if (is_array($this->source)) { - $headParams = [ - 'Key' => $this->source['source_key'], - 'Bucket' => $this->source['source_bucket'], - ]; - if (isset($this->source['source_version_id'])) { - $this->sourceVersionId = $this->source['source_version_id']; - $headParams['VersionId'] = $this->sourceVersionId; - } - - return $headParams; - } - - [$bucket, $key] = explode('/', ltrim($this->source, '/'), 2); - $headParams = [ - 'Bucket' => $bucket, - 'Key' => $key, - ]; - if (str_contains($key, '?')) { - [$key, $query] = explode('?', $key, 2); - $headParams['Key'] = $key; - $query = Psr7\Query::parse($query, false); - if (isset($query['versionId'])) { - $this->sourceVersionId = $query['versionId']; - $headParams['VersionId'] = $this->sourceVersionId; - } - } - - return $headParams; - } - - /** - * Builds Bucket/Key (and VersionId if pinned) for source-side reads. - * - * Uses the user-provided sourceVersionId if available, otherwise falls - * back to the HeadObject-derived versionId for Phase 1 consistency. - * - * @return array - */ - private function buildSourceObjectParams(): array - { - if (is_array($this->source)) { - $p = [ - 'Bucket' => $this->source['source_bucket'], - 'Key' => $this->source['source_key'], - ]; - } else { - [$bucket, $key] = explode('/', ltrim($this->source, '/'), 2); - if (str_contains($key, '?')) { - [$key] = explode('?', $key, 2); - } - - $p = [ - 'Bucket' => $bucket, - 'Key' => rawurldecode($key), - ]; - } - - $versionId = $this->sourceVersionId ?? $this->headDerivedVersionId; - if (!empty($versionId)) { - $p['VersionId'] = $versionId; - } - - return $p; - } - - /** - * GetObjectTagging on the source. Caches `TagSet` on the instance. - * Requires fetchSourceMetadata() to have resolved (uses pinned VersionId). - * - * @return PromiseInterface - */ - private function fetchSourceTags(): PromiseInterface - { - return $this->client - ->getObjectTaggingAsync($this->buildSourceObjectParams()) - ->then(function (ResultInterface $r): ResultInterface { - $this->sourceTags = $r['TagSet'] ?? []; - return $r; - }); - } - - /** - * Drains source annotation names, then fans out per-name - * GetObjectAnnotation calls bounded by `concurrency`. Caches payloads - * on the instance. Requires fetchSourceMetadata() to have resolved. - * - * @return PromiseInterface - */ - private function fetchSourceAnnotations(): PromiseInterface - { - return Coroutine::of(function () { - $listParams = $this->buildSourceObjectParams(); - - $names = []; - yield $this->client - ->getPaginator('ListObjectAnnotations', $listParams) - ->each(function (ResultInterface $page) use (&$names) { - foreach ($page['Annotations'] ?? [] as $entry) { - if (!empty($entry['AnnotationName'])) { - $names[] = $entry['AnnotationName']; - } - } - }); - - if (empty($names)) { - return; - } - - $getParams = $this->buildSourceObjectParams(); - $commands = array_map(function ($name) use ($getParams) { - return $this->client->getCommand( - 'GetObjectAnnotation', - $getParams + ['AnnotationName' => $name] - ); - }, $names); - - $pool = new CommandPool($this->client, $commands, [ - 'concurrency' => $this->config['concurrency'], - 'fulfilled' => function ( - ResultInterface $result, - $iterKey - ) use ($names) { - $name = $names[$iterKey]; - $payload = $result['AnnotationPayload'] ?? null; - $body = $payload === null ? '' : (string) $payload; - // PutObjectAnnotation requires a payload >= 1 byte. - if ($body !== '') { - $this->annotationBodies[$name] = $body; - } - }, - 'rejected' => function ( - $reason, - $iterKey, - PromiseInterface $aggregatePromise - ) { - // Abort the pool on mid-loop precondition failures. - $aggregatePromise->reject($reason); - }, - ]); - - yield $pool->promise(); - }); - } - - /** - * Destination [Bucket, Key] for Phase 3 writes. Falls back to UploadState id - * for resumed copies. - * - * @return array{0: string, 1: string} - */ - private function resolveDestinationBucketAndKey(): array - { - $bucket = $this->config['bucket'] ?? null; - $key = $this->config['key'] ?? null; - if ($bucket === null || $bucket === '' || $key === null || $key === '') { - $id = $this->state->getId(); - $bucket = $id['Bucket'] ?? $bucket; - $key = $id['Key'] ?? $key; - } - - return [$bucket, $key]; - } - - /** - * Phase 3 step 1: PutObjectTagging on the destination, when the resolved - * tags_directive is COPY (use $this->sourceTags) or REPLACE (use caller- - * supplied params['Tagging']). - * - * @param string $tagsDirective - * @param string|null $destVersionId - * @return \Generator - */ - private function writeDestinationTags( - string $tagsDirective, - ?string $destVersionId - ): \Generator - { - [$destBucket, $destKey] = $this->resolveDestinationBucketAndKey(); - - if ($tagsDirective === self::TAGS_DIRECTIVE_REPLACE) { - $callerTagging = $this->config['params']['Tagging'] ?? null; - if ($callerTagging === null || $callerTagging === '') { - return; - } - - $tagging = is_array($callerTagging) - ? $callerTagging - : ['TagSet' => $this->parseTaggingQueryString((string) $callerTagging)]; - - $params = [ - 'Bucket' => $destBucket, - 'Key' => $destKey, - 'Tagging' => $tagging, - ]; - if ($destVersionId !== null) { - $params['VersionId'] = $destVersionId; - } - - yield $this->client->putObjectTaggingAsync($params); - return; - } - - if ($tagsDirective !== self::TAGS_DIRECTIVE_COPY || empty($this->sourceTags)) { - return; - } - - $params = [ - 'Bucket' => $destBucket, - 'Key' => $destKey, - 'Tagging' => ['TagSet' => $this->sourceTags], - ]; - if ($destVersionId !== null) { - $params['VersionId'] = $destVersionId; - } - - yield $this->client->putObjectTaggingAsync($params); - } - - /** - * Phase 3 step 2: per-name PutObjectAnnotation on the destination. - * Promise\Each::ofLimitAll over a generator: each step is invoked only - * when a concurrency slot opens, bounding in-flight requests. - * - * @param string|null $destETag - * @param string|null $destVersionId - * @return \Generator - * @throws MultipartCopyAnnotationException - */ - private function writeDestinationAnnotations( - ?string $destETag, - ?string $destVersionId - ): \Generator - { - if (empty($this->annotationBodies)) { - return; - } - - $succeeded = []; - /** @var array $failed */ - $failed = []; - - [$destBucket, $destKey] = $this->resolveDestinationBucketAndKey(); - - $putAnnotationsCalls = function () use ( - $destBucket, - $destKey, - $destETag, - $destVersionId, - &$succeeded, - &$failed - ) { - foreach ($this->annotationBodies as $name => $body) { - $params = [ - 'Bucket' => $destBucket, - 'Key' => $destKey, - 'AnnotationName' => $name, - 'AnnotationPayload' => $body, - ]; - if ($destVersionId !== null) { - $params['VersionId'] = $destVersionId; - } - if ($destETag !== null) { - $params['ObjectIfMatch'] = $destETag; - } - - yield $this->putAnnotationWithRetries($params)->then( - function () use ($name, &$succeeded) { - $succeeded[] = $name; - }, - function ($reason) use ($name, &$failed) { - $failed[$name] = $reason; - } - ); - } - }; - - yield P\Each::ofLimitAll($putAnnotationsCalls(), $this->config['concurrency']); - - if ($failed) { - throw new MultipartCopyAnnotationException( - $this->state, - $failed, - $succeeded - ); - } - } - - /** - * Single-annotation PutObjectAnnotation with exponential - * backoff + jitter. Delay is set on the command via `@http.delay`. - * - * @param array $baseParams - * @return PromiseInterface - */ - private function putAnnotationWithRetries(array $baseParams): PromiseInterface - { - return Coroutine::of(function () use ($baseParams) { - $delayMs = 0; - for ($attempt = 1; $attempt <= self::ANNOTATION_MAX_ATTEMPTS; $attempt++) { - $params = $baseParams; - if ($delayMs > 0) { - $params['@http'] = ['delay' => $delayMs]; - } - - try { - $result = yield $this->client->putObjectAnnotationAsync($params); - - yield P\Create::promiseFor($result); - - return; - } catch (S3Exception $e) { - $code = $e->getStatusCode(); - $retryable = ($code !== null && $code >= 500); - if (!$retryable || $attempt === self::ANNOTATION_MAX_ATTEMPTS) { - throw $e; - } - - // Full-jitter exponential backoff. - $base = self::ANNOTATION_BASE_DELAY_MS << ($attempt - 1); - $delayMs = random_int(0, min(self::ANNOTATION_MAX_DELAY_MS, $base)); - } - } - }); - } - - /** - * @return string - */ - private function resolveMetadataDirective(): string - { - $explicit = $this->config['metadata_directive'] ?? null; - if ($explicit !== null) { - return strtoupper((string) $explicit); - } - - return 'COPY'; - } - - /** - * @return string - * @throws \InvalidArgumentException - */ - private function resolveTagsDirective(): string - { - $explicit = $this->config['tags_directive'] ?? null; - if ($explicit === null) { - return self::TAGS_DIRECTIVE_UNSPECIFIED; - } - - $value = strtoupper((string) $explicit); - if (!isset(self::VALID_TAGS_DIRECTIVES[$value])) { - throw new \InvalidArgumentException( - "Invalid tags_directive value '$value'. Must be one of: " - . implode(', ', array_keys(self::VALID_TAGS_DIRECTIVES)) . '.' - ); - } - - return $value; - } - - /** - * @return string - * @throws \InvalidArgumentException - */ - private function resolveAnnotationsDirective(): string - { - $explicit = $this->config['annotations_directive'] ?? null; - if ($explicit === null) { - return self::ANNOTATIONS_DIRECTIVE_UNSPECIFIED; - } - - $value = strtoupper((string) $explicit); - if (!isset(self::VALID_ANNOTATIONS_DIRECTIVES[$value])) { - throw new \InvalidArgumentException( - "Invalid annotations_directive value '$value'. Must be one of: " - . implode(', ', array_keys(self::VALID_ANNOTATIONS_DIRECTIVES)) . '.' - ); - } - - return $value; - } - - /** - * URL-decoded source location, prefixed with '/' when not an ARN. - * - * @param string $inputSource - * @return string - */ - private function getInputSource($inputSource) - { - $sourceBuilder = ArnParser::isArn($inputSource) ? '' : '/'; - $sourceBuilder .= ltrim(rawurldecode($inputSource), '/'); - - return $sourceBuilder; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartUploader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartUploader.php deleted file mode 100644 index b2bed2b60..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartUploader.php +++ /dev/null @@ -1,181 +0,0 @@ - null, - 'key' => null, - 'exception_class' => S3MultipartUploadException::class, - ]); - - if ($this->displayProgress) { - $this->getState()->setProgressThresholds($this->source->getSize()); - } - } - - protected function loadUploadWorkflowInfo() - { - return [ - 'command' => [ - 'initiate' => 'CreateMultipartUpload', - 'upload' => 'UploadPart', - 'complete' => 'CompleteMultipartUpload', - ], - 'id' => [ - 'bucket' => 'Bucket', - 'key' => 'Key', - 'upload_id' => 'UploadId', - ], - 'part_num' => 'PartNumber', - ]; - } - - protected function createPart($seekable, $number) - { - // Initialize the array of part data that will be returned. - $data = []; - - // Apply custom params to UploadPart data - $config = $this->getConfig(); - $params = isset($config['params']) ? $config['params'] : []; - foreach ($params as $k => $v) { - $data[$k] = $v; - } - - $data['PartNumber'] = $number; - - // Read from the source to create the body stream. - if ($seekable) { - // Case 1: Source is seekable, use lazy stream to defer work. - $body = $this->limitPartStream( - new Psr7\LazyOpenStream($this->source->getMetadata('uri'), 'r') - ); - } else { - // Case 2: Stream is not seekable; must store in temp stream. - $source = $this->limitPartStream($this->source); - $source = $this->decorateWithHashes($source, $data); - $body = Psr7\Utils::streamFor(); - Psr7\Utils::copyToStream($source, $body); - } - - $contentLength = $body->getSize(); - - // Do not create a part if the body size is zero. - if ($contentLength === 0) { - return false; - } - - $body->seek(0); - $data['Body'] = $body; - - if (isset($config['add_content_md5']) - && $config['add_content_md5'] === true - ) { - $data['AddContentMD5'] = true; - } - - $data['ContentLength'] = $contentLength; - - return $data; - } - - protected function extractETag(ResultInterface $result) - { - return $result['ETag']; - } - - protected function getSourceMimeType() - { - if ($uri = $this->source->getMetadata('uri')) { - return Psr7\MimeType::fromFilename($uri) - ?: 'application/octet-stream'; - } - } - - protected function getSourceSize() - { - return $this->source->getSize(); - } - - /** - * Decorates a stream with a sha256 linear hashing stream. - * - * @param Stream $stream Stream to decorate. - * @param array $data Part data to augment with the hash result. - * - * @return Stream - */ - private function decorateWithHashes(Stream $stream, array &$data) - { - // Decorate source with a hashing stream - $hash = new PhpHash('sha256'); - return new HashingStream($stream, $hash, function ($result) use (&$data) { - $data['ContentSHA256'] = bin2hex($result); - }); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartUploadingTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartUploadingTrait.php deleted file mode 100644 index f76c2e7ec..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/MultipartUploadingTrait.php +++ /dev/null @@ -1,189 +0,0 @@ - $bucket, - 'Key' => $key, - 'UploadId' => $uploadId, - ], $config); - - foreach ($client->getPaginator('ListParts', $state->getId()) as $result) { - // Get the part size from the first part in the first result. - if (!$state->getPartSize()) { - $state->setPartSize($result->search('Parts[0].Size')); - } - // Mark all the parts returned by ListParts as uploaded. - foreach ($result['Parts'] as $part) { - $state->markPartAsUploaded($part['PartNumber'], [ - 'PartNumber' => $part['PartNumber'], - 'ETag' => $part['ETag'] - ]); - } - } - - $state->setStatus(UploadState::INITIATED); - - return $state; - } - - protected function handleResult(CommandInterface $command, ResultInterface $result) - { - $partData = []; - $partData['PartNumber'] = $command['PartNumber']; - $partData['ETag'] = $this->extractETag($result); - $commandName = $command->getName(); - $checksumResult = $commandName === 'UploadPart' - ? $result - : $result[$commandName . 'Result']; - - if (isset($command['ChecksumAlgorithm'])) { - $checksumMemberName = 'Checksum' . strtoupper($command['ChecksumAlgorithm']); - $partData[$checksumMemberName] = $checksumResult[$checksumMemberName] ?? null; - } - - $this->getState()->markPartAsUploaded($command['PartNumber'], $partData); - - // Updates counter for uploaded bytes. - $this->uploadedBytes += $command["ContentLength"]; - // Sends uploaded bytes to progress tracker if getDisplayProgress set - if ($this->displayProgress) { - $this->getState()->getDisplayProgress($this->uploadedBytes); - } - } - - abstract protected function extractETag(ResultInterface $result); - - protected function getCompleteParams() - { - $config = $this->getConfig(); - $params = isset($config['params']) ? $config['params'] : []; - - $params['MultipartUpload'] = [ - 'Parts' => $this->getState()->getUploadedParts() - ]; - - return $params; - } - - protected function determinePartSize() - { - // Make sure the part size is set. - $partSize = $this->getConfig()['part_size'] ?: MultipartUploader::PART_MIN_SIZE; - - // Adjust the part size to be larger for known, x-large uploads. - if ($sourceSize = $this->getSourceSize()) { - $partSize = (int) max( - $partSize, - ceil($sourceSize / MultipartUploader::PART_MAX_NUM) - ); - } - - // Ensure that the part size follows the rules: 5 MB <= size <= 5 GB. - if ($partSize < MultipartUploader::PART_MIN_SIZE || $partSize > MultipartUploader::PART_MAX_SIZE) { - throw new \InvalidArgumentException('The part size must be no less ' - . 'than 5 MB and no greater than 5 GB.'); - } - - return $partSize; - } - - protected function getInitiateParams() - { - $config = $this->getConfig(); - $params = isset($config['params']) ? $config['params'] : []; - - if (isset($config['acl'])) { - $params['ACL'] = $config['acl']; - } - - // Set the ContentType if not already present - if (empty($params['ContentType']) && $type = $this->getSourceMimeType()) { - $params['ContentType'] = $type; - } - - return $params; - } - - /** - * @return UploadState - */ - abstract protected function getState(); - - /** - * @return array - */ - abstract protected function getConfig(); - - /** - * @return int - */ - abstract protected function getSourceSize(); - - /** - * @return string|null - */ - abstract protected function getSourceMimeType(); - - /** - * Parses an S3 Tagging query-string (`k=v&k2=v2`) into a TagSet array - * (`[['Key' => k, 'Value' => v], ...]`). - * - * Shared between MultipartUpload (where callers may pass a Tagging string - * via params) and MultipartCopy's tags_directive=REPLACE path. - * - * @param string $tagging - * @return array - */ - protected static function parseTaggingQueryString(string $tagging): array - { - $tagSet = []; - foreach (explode('&', $tagging) as $pair) { - if ($pair === '') { - continue; - } - $parts = explode('=', $pair, 2); - $tagSet[] = [ - 'Key' => urldecode($parts[0]), - 'Value' => urldecode($parts[1] ?? ''), - ]; - } - return $tagSet; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ObjectCopier.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ObjectCopier.php deleted file mode 100644 index 3f20f504c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ObjectCopier.php +++ /dev/null @@ -1,179 +0,0 @@ - null, - 'before_upload' => null, - 'concurrency' => 5, - 'mup_threshold' => self::DEFAULT_MULTIPART_THRESHOLD, - 'params' => [], - 'part_size' => null, - 'version_id' => null, - ]; - - /** - * @param S3ClientInterface $client The S3 Client used to execute - * the copy command(s). - * @param array $source The object to copy, specified as - * an array with a 'Bucket' and - * 'Key' keys. Provide a - * 'VersionID' key to copy a - * specified version of an object. - * @param array $destination The bucket and key to which to - * copy the $source, specified as - * an array with a 'Bucket' and - * 'Key' keys. - * @param string $acl ACL to apply to the copy - * (default: private). - * @param array $options Options used to configure the - * copy process. Options passed in - * through 'params' are added to - * the sub commands. - * - * @throws InvalidArgumentException - */ - public function __construct( - S3ClientInterface $client, - array $source, - array $destination, - $acl = 'private', - array $options = [] - ) { - $this->validateLocation($source); - $this->validateLocation($destination); - - $this->client = $client; - $this->source = $source; - $this->destination = $destination; - $this->acl = $acl; - $this->options = $options + self::$defaults; - } - - /** - * Perform the configured copy asynchronously. Returns a promise that is - * fulfilled with the result of the CompleteMultipartUpload or CopyObject - * operation or rejected with an exception. - * - * @return Coroutine - */ - public function promise(): PromiseInterface - { - return Coroutine::of(function () { - $headObjectCommand = $this->client->getCommand( - 'HeadObject', - $this->options['params'] + $this->source - ); - if (is_callable($this->options['before_lookup'])) { - $this->options['before_lookup']($headObjectCommand); - } - $objectStats = (yield $this->client->executeAsync( - $headObjectCommand - )); - - if ($objectStats['ContentLength'] > $this->options['mup_threshold']) { - $mup = new MultipartCopy( - $this->client, - $this->getSourcePath(), - ['source_metadata' => $objectStats, 'acl' => $this->acl] - + $this->destination - + $this->options - ); - - yield $mup->promise(); - } else { - $defaults = [ - 'ACL' => $this->acl, - 'MetadataDirective' => 'COPY', - 'CopySource' => $this->getSourcePath(), - ]; - - $params = array_diff_key($this->options, self::$defaults) - + $this->destination + $defaults + $this->options['params']; - - yield $this->client->executeAsync( - $this->client->getCommand('CopyObject', $params) - ); - } - }); - } - - /** - * Perform the configured copy synchronously. Returns the result of the - * CompleteMultipartUpload or CopyObject operation. - * - * @return Result - * - * @throws S3Exception - * @throws MultipartUploadException - */ - public function copy() - { - return $this->promise()->wait(); - } - - private function validateLocation(array $location) - { - if (empty($location['Bucket']) || empty($location['Key'])) { - throw new \InvalidArgumentException('Locations provided to an' - . ' Aws\S3\ObjectCopier must have a non-empty Bucket and Key'); - } - } - - private function getSourcePath() - { - $path = "/{$this->source['Bucket']}/"; - if (ArnParser::isArn($this->source['Bucket'])) { - try { - new AccessPointArn($this->source['Bucket']); - $path = "{$this->source['Bucket']}/object/"; - } catch (\Exception $e) { - throw new \InvalidArgumentException( - 'Provided ARN was a not a valid S3 access point ARN (' - . $e->getMessage() . ')', - 0, - $e - ); - } - } - - $sourcePath = $path . rawurlencode($this->source['Key']); - if (isset($this->source['VersionId'])) { - $sourcePath .= "?versionId={$this->source['VersionId']}"; - } - - return $sourcePath; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ObjectUploader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ObjectUploader.php deleted file mode 100644 index d39cf57a2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/ObjectUploader.php +++ /dev/null @@ -1,169 +0,0 @@ - null, - 'concurrency' => 3, - 'mup_threshold' => self::DEFAULT_MULTIPART_THRESHOLD, - 'params' => [], - 'part_size' => null, - ]; - private $addContentMD5; - - /** - * @param S3ClientInterface $client The S3 Client used to execute - * the upload command(s). - * @param string $bucket Bucket to upload the object, or - * an S3 access point ARN. - * @param string $key Key of the object. - * @param mixed $body Object data to upload. Can be a - * StreamInterface, PHP stream - * resource, or a string of data to - * upload. - * @param string $acl ACL to apply to the copy - * (default: private). - * @param array $options Options used to configure the - * copy process. Options passed in - * through 'params' are added to - * the sub command(s). - */ - public function __construct( - S3ClientInterface $client, - $bucket, - $key, - $body, - $acl = 'private', - array $options = [] - ) { - $this->client = $client; - $this->bucket = $bucket; - $this->key = $key; - $this->body = $this->createStream($body); - $this->acl = $acl; - $this->options = $options + self::$defaults; - // Handle "add_content_md5" option. - $this->addContentMD5 = isset($options['add_content_md5']) - && $options['add_content_md5'] === true; - } - - /** - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - /** @var int $mup_threshold */ - $mup_threshold = $this->options['mup_threshold']; - if ($this->requiresMultipart($this->body, $mup_threshold)) { - // Perform a multipart upload. - return (new MultipartUploader($this->client, $this->body, [ - 'bucket' => $this->bucket, - 'key' => $this->key, - 'acl' => $this->acl - ] + $this->options))->promise(); - } - - // Perform a regular PutObject operation. - $command = $this->client->getCommand('PutObject', [ - 'Bucket' => $this->bucket, - 'Key' => $this->key, - 'Body' => $this->body, - 'ACL' => $this->acl, - 'AddContentMD5' => $this->addContentMD5 - ] + $this->options['params']); - if (is_callable($this->options['before_upload'])) { - $this->options['before_upload']($command); - } - return $this->client->executeAsync($command); - } - - public function upload() - { - return $this->promise()->wait(); - } - - /** - * Creates a stream from the provided body. - * - * @param mixed $body - * - * @return StreamInterface - */ - private function createStream($body): StreamInterface - { - $stream = Psr7\Utils::streamFor($body); - // User-owned resource which should be detached instead of closed - // during garbage-collection - if (is_resource($body)) { - return \Aws\detach_on_close_stream($stream); - } - - return $stream; - } - - /** - * Determines if the body should be uploaded using PutObject or the - * Multipart Upload System. It also modifies the passed-in $body as needed - * to support the upload. - * - * @param StreamInterface $body Stream representing the body. - * @param integer $threshold Minimum bytes before using Multipart. - * - * @return bool - */ - private function requiresMultipart(StreamInterface &$body, $threshold) - { - // If body size known, compare to threshold to determine if Multipart. - if ($body->getSize() !== null) { - return $body->getSize() >= $threshold; - } - - /** - * Handle the situation where the body size is unknown. - * Read up to 5MB into a buffer to determine how to upload the body. - * @var StreamInterface $buffer - */ - $buffer = Psr7\Utils::streamFor(); - Psr7\Utils::copyToStream($body, $buffer, MultipartUploader::PART_MIN_SIZE); - - // If body < 5MB, use PutObject with the buffer. - if ($buffer->getSize() < MultipartUploader::PART_MIN_SIZE) { - $buffer->seek(0); - $body = $buffer; - return false; - } - - // If body >= 5 MB, then use multipart. [YES] - if ($body->isSeekable() && $body->getMetadata('uri') !== 'php://input') { - // If the body is seekable, just rewind the body. - $body->seek(0); - } else { - // If the body is non-seekable, stitch the rewind the buffer and - // the partially read body together into one stream. This avoids - // unnecessary disc usage and does not require seeking on the - // original stream. - $buffer->seek(0); - $body = new Psr7\AppendStream([$buffer, $body]); - } - - return true; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/GetBucketLocationResultMutator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/GetBucketLocationResultMutator.php deleted file mode 100644 index 2e8d1a1a3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/GetBucketLocationResultMutator.php +++ /dev/null @@ -1,42 +0,0 @@ -getName() !== 'GetBucketLocation') { - return $result; - } - - $location = 'us-east-1'; - static $pattern = '/>(.+?)<\/LocationConstraint>/'; - if (preg_match($pattern, $response->getBody(), $matches)) { - $location = $matches[1] === 'EU' ? 'eu-west-1' : $matches[1]; - } - - $result['LocationConstraint'] = $location; - $response->getBody()->rewind(); - - return $result; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/S3Parser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/S3Parser.php deleted file mode 100644 index 3f6f3541a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/S3Parser.php +++ /dev/null @@ -1,275 +0,0 @@ -protocolParser = $protocolParser; - $this->errorParser = $errorParser; - $this->exceptionClass = $exceptionClass; - $this->s3ResultMutators = []; - } - - /** - * Parses a S3 response. - * - * @param CommandInterface $command The command that originated the request. - * @param ResponseInterface $response The response received from the service. - * - * @return ResultInterface|null - */ - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ):? ResultInterface - { - // Check first if the response is an error - $this->parse200Error($command, $response); - - try { - $parseFn = $this->protocolParser; - $result = $parseFn($command, $response); - } catch (ParserException $e) { - // Parsing errors will be considered retryable. - throw new $this->exceptionClass( - "Error parsing response for {$command->getName()}:" - . " AWS parsing error: {$e->getMessage()}", - $command, - ['connection_error' => true, 'exception' => $e], - $e - ); - } - - return $this->executeS3ResultMutators($result, $command, $response); - } - - /** - * Tries to parse a 200 response as an error from S3. - * If the parsed result contains a code and message then that means an error - * was found, and hence an exception is thrown with that error. - * - * @param CommandInterface $command - * @param ResponseInterface $response - * - * @return void - */ - private function parse200Error( - CommandInterface $command, - ResponseInterface $response - ): void - { - // This error parsing should be just for 200 error responses - // and operations where its output shape does not have a streaming - // member and the body of the response is seekable. - if (200 !== $response->getStatusCode() - || !$this->shouldBeConsidered200Error($command->getName()) - || !$response->getBody()->isSeekable()) { - return; - } - - // To guarantee we try the error parsing just for an Error xml response. - if (!$this->isFirstRootElementError($response->getBody())) { - return; - } - - try { - $errorParserFn = $this->errorParser; - $parsedError = $errorParserFn($response, $command); - } catch (ParserException $e) { - // Parsing errors will be considered retryable. - $parsedError = [ - 'code' => 'ConnectionError', - 'message' => "An error connecting to the service occurred" - . " while performing the " . $command->getName() - . " operation." - ]; - } - - if (isset($parsedError['code']) && isset($parsedError['message'])) { - throw new $this->exceptionClass( - $parsedError['message'], - $command, - [ - 'connection_error' => true, - 'code' => $parsedError['code'], - 'message' => $parsedError['message'] - ] - ); - } - } - - /** - * Checks if a specific operation should be considered - * a s3 200 error. Operations where any of its output members - * has a streaming or httpPayload trait should be not considered. - * - * @param $commandName - * - * @return bool - */ - private function shouldBeConsidered200Error($commandName): bool - { - $operation = $this->api->getOperation($commandName); - $output = $operation->getOutput(); - foreach ($output->getMembers() as $_ => $memberProps) { - if (!empty($memberProps['eventstream']) || !empty($memberProps['streaming'])) { - return false; - } - } - - return true; - } - - /** - * Checks if the root element of the response body is "Error", which is - * when we should try to parse an error from a 200 response from s3. - * It is recommended to make sure the stream given is seekable, otherwise - * the rewind call will cause a user warning. - * - * @param StreamInterface $responseBody - * - * @return bool - */ - private function isFirstRootElementError(StreamInterface $responseBody): bool - { - static $pattern = '/<\?xml version="1\.0" encoding="UTF-8"\?>\s*/'; - // To avoid performance overhead in large streams - $reducedBodyContent = $responseBody->read(64); - $foundErrorElement = preg_match($pattern, $reducedBodyContent); - // A rewind is needed because the stream is partially or entirely consumed - // in the previous read operation. - $responseBody->rewind(); - - return $foundErrorElement; - } - - /** - * Execute mutator implementations over a result. - * Mutators are logics that modifies a result. - * - * @param ResultInterface $result - * @param CommandInterface $command - * @param ResponseInterface $response - * - * @return ResultInterface - */ - private function executeS3ResultMutators( - ResultInterface $result, - CommandInterface $command, - ResponseInterface $response - ): ResultInterface - { - foreach ($this->s3ResultMutators as $mutator) { - $result = $mutator($result, $command, $response); - } - - return $result; - } - - /** - * Adds a mutator into the list of mutators. - * - * @param string $mutatorName - * @param S3ResultMutator $s3ResultMutator - * @return void - */ - public function addS3ResultMutator( - string $mutatorName, - S3ResultMutator $s3ResultMutator - ): void - { - if (isset($this->s3ResultMutators[$mutatorName])) { - trigger_error( - "The S3 Result Mutator {$mutatorName} already exists!", - E_USER_WARNING - ); - - return; - } - - $this->s3ResultMutators[$mutatorName] = $s3ResultMutator; - } - - /** - * Removes a mutator from the mutator list. - * - * @param string $mutatorName - * @return void - */ - public function removeS3ResultMutator(string $mutatorName): void - { - if (!isset($this->s3ResultMutators[$mutatorName])) { - trigger_error( - "The S3 Result Mutator {$mutatorName} does not exist!", - E_USER_WARNING - ); - - return; - } - - unset($this->s3ResultMutators[$mutatorName]); - } - - /** - * Returns the list of result mutators available. - * - * @return array - */ - public function getS3ResultMutators(): array - { - return $this->s3ResultMutators; - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) - { - return $this->protocolParser->parseMemberFromStream( - $stream, - $member, - $response - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/S3ResultMutator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/S3ResultMutator.php deleted file mode 100644 index 5119501fe..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Parser/S3ResultMutator.php +++ /dev/null @@ -1,36 +0,0 @@ -api = $api; - $this->config = $config; - } - - /** - * @param ResultInterface $result - * @param CommandInterface|null $command - * @param ResponseInterface|null $response - * - * @return ResultInterface - */ - public function __invoke( - ResultInterface $result, - ?CommandInterface $command = null, - ?ResponseInterface $response = null - ): ResultInterface - { - $operation = $this->api->getOperation($command->getName()); - - // Skip this middleware if the operation doesn't have an httpChecksum - $checksumInfo = $operation['httpChecksum'] ?? null; - if (is_null($checksumInfo)) { - return $result; - } - - $mode = $this->config['response_checksum_validation'] ?? self::DEFAULT_VALIDATION_MODE; - $checksumModeEnabledMember = $checksumInfo['requestValidationModeMember'] ?? ""; - $checksumModeEnabled = strtolower($command[$checksumModeEnabledMember] ?? ""); - $responseAlgorithms = $checksumInfo['responseAlgorithms'] ?? []; - $shouldSkipValidation = $this->shouldSkipValidation( - $mode, - $checksumModeEnabled, - $responseAlgorithms - ); - - if ($shouldSkipValidation) { - return $result; - } - - $checksumPriority = $this->getChecksumPriority(); - $checksumsToCheck = array_intersect($responseAlgorithms, array_map( - 'strtoupper', - array_keys($checksumPriority)) - ); - $checksumValidationInfo = $this->validateChecksum($checksumsToCheck, $response); - - if ($checksumValidationInfo['status'] === "SUCCEEDED") { - $result['ChecksumValidated'] = $checksumValidationInfo['checksum']; - } elseif ($checksumValidationInfo['status'] === "FAILED") { - if ($this->isMultipartGetObject($command, $checksumValidationInfo)) { - return $result; - } - throw new S3Exception( - "Calculated response checksum did not match the expected value", - $command - ); - } - - return $result; - } - - /** - * @param $checksumPriority - * @param ResponseInterface $response - * - * @return array - */ - private function validateChecksum( - $checksumPriority, - ResponseInterface $response - ): array - { - $checksumToValidate = $this->chooseChecksumHeaderToValidate( - $checksumPriority, - $response - ); - $validationStatus = "SKIPPED"; - $checksumHeaderValue = null; - if (!empty($checksumToValidate)) { - $checksumHeaderValue = $response->getHeaderLine( - 'x-amz-checksum-' . $checksumToValidate - ); - if (!empty($checksumHeaderValue)) { - $calculatedChecksumValue = $this->getEncodedValue( - $checksumToValidate, - $response->getBody() - ); - $validationStatus = $checksumHeaderValue == $calculatedChecksumValue - ? "SUCCEEDED" - : "FAILED"; - } - } - return [ - "status" => $validationStatus, - "checksum" => $checksumToValidate, - "checksumHeaderValue" => $checksumHeaderValue, - ]; - } - - /** - * @param $checksumPriority - * @param ResponseInterface $response - * - * @return string - */ - private function chooseChecksumHeaderToValidate( - $checksumPriority, - ResponseInterface $response - ):? string - { - foreach ($checksumPriority as $checksum) { - $checksumHeader = 'x-amz-checksum-' . $checksum; - if ($response->hasHeader($checksumHeader)) { - return $checksum; - } - } - - return null; - } - - /** - * @param string $mode - * @param string $checksumModeEnabled - * @param array $responseAlgorithms - * - * @return bool - */ - private function shouldSkipValidation( - string $mode, - string $checksumModeEnabled, - array $responseAlgorithms - ): bool - { - return empty($responseAlgorithms) - || ($mode === 'when_required' && $checksumModeEnabled !== 'enabled'); - } - - /** - * @return string[] - */ - private function getChecksumPriority(): array - { - return extension_loaded('awscrt') - ? self::$supportedAlgorithms - : array_slice(self::$supportedAlgorithms, 1); - } - - /** - * @param CommandInterface $command - * @param array $checksumValidationInfo - * - * @return bool - */ - private function isMultipartGetObject( - CommandInterface $command, - array $checksumValidationInfo - ): bool - { - if ($command->getName() !== "GetObject" - || empty($checksumValidationInfo['checksumHeaderValue']) - ) { - return false; - } - - $headerValue = $checksumValidationInfo['checksumHeaderValue']; - $lastDashPos = strrpos($headerValue, '-'); - $endOfChecksum = substr($headerValue, $lastDashPos + 1); - - return is_numeric($endOfChecksum) - && (int) $endOfChecksum > 1 - && (int) $endOfChecksum < 10000; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php deleted file mode 100644 index 36a0e683e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php +++ /dev/null @@ -1,62 +0,0 @@ -nextHandler = $nextHandler; - } - - public function __invoke(CommandInterface $command, ?RequestInterface $request = null) - { - $next = $this->nextHandler; - return $next($command, $request)->then( - function (ResultInterface $result) use ($command) { - $status = isset($result['@metadata']['statusCode']) - ? $result['@metadata']['statusCode'] - : null; - if ($status == 301) { - throw new PermanentRedirectException( - 'Encountered a permanent redirect while requesting ' - . $result->search('"@metadata".effectiveUri') . '. ' - . 'Are you sure you are using the correct region for ' - . 'this bucket?', - $command, - ['result' => $result] - ); - } - return $result; - } - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PostObject.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PostObject.php deleted file mode 100644 index 48913ea1e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PostObject.php +++ /dev/null @@ -1,160 +0,0 @@ -client = $client; - $this->bucket = $bucket; - - if (is_array($jsonPolicy)) { - $jsonPolicy = json_encode($jsonPolicy); - } - - $this->jsonPolicy = $jsonPolicy; - $this->formAttributes = [ - 'action' => $this->generateUri(), - 'method' => 'POST', - 'enctype' => 'multipart/form-data' - ]; - - $this->formInputs = $formInputs + ['key' => '${filename}']; - $credentials = $client->getCredentials()->wait(); - $this->formInputs += $this->getPolicyAndSignature($credentials); - } - - /** - * Gets the S3 client. - * - * @return S3ClientInterface - */ - public function getClient() - { - return $this->client; - } - - /** - * Gets the bucket name. - * - * @return string - */ - public function getBucket() - { - return $this->bucket; - } - - /** - * Gets the form attributes as an array. - * - * @return array - */ - public function getFormAttributes() - { - return $this->formAttributes; - } - - /** - * Set a form attribute. - * - * @param string $attribute Form attribute to set. - * @param string $value Value to set. - */ - public function setFormAttribute($attribute, $value) - { - $this->formAttributes[$attribute] = $value; - } - - /** - * Gets the form inputs as an array. - * - * @return array - */ - public function getFormInputs() - { - return $this->formInputs; - } - - /** - * Set a form input. - * - * @param string $field Field name to set - * @param string $value Value to set. - */ - public function setFormInput($field, $value) - { - $this->formInputs[$field] = $value; - } - - /** - * Gets the raw JSON policy. - * - * @return string - */ - public function getJsonPolicy() - { - return $this->jsonPolicy; - } - - private function generateUri() - { - $uri = new Uri($this->client->getEndpoint()); - - if ($this->client->getConfig('use_path_style_endpoint') === true - || ($uri->getScheme() === 'https' - && strpos($this->bucket, '.') !== false) - ) { - // Use path-style URLs - $uri = $uri->withPath("/{$this->bucket}"); - } else { - // Use virtual-style URLs - $uri = $uri->withHost($this->bucket . '.' . $uri->getHost()); - } - - return (string) $uri; - } - - protected function getPolicyAndSignature(CredentialsInterface $creds) - { - $jsonPolicy64 = base64_encode($this->jsonPolicy); - - return [ - 'AWSAccessKeyId' => $creds->getAccessKeyId(), - 'policy' => $jsonPolicy64, - 'signature' => base64_encode(hash_hmac( - 'sha1', - $jsonPolicy64, - $creds->getSecretKey(), - true - )) - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PostObjectV4.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PostObjectV4.php deleted file mode 100644 index 19763722f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PostObjectV4.php +++ /dev/null @@ -1,195 +0,0 @@ -client = $client; - $this->bucket = $bucket; - - // setup form attributes - $this->formAttributes = [ - 'action' => $this->generateUri(), - 'method' => 'POST', - 'enctype' => 'multipart/form-data' - ]; - - $credentials = $this->client->getCredentials()->wait(); - - if ($securityToken = $credentials->getSecurityToken()) { - $options [] = ['x-amz-security-token' => $securityToken]; - $formInputs['X-Amz-Security-Token'] = $securityToken; - } - - // setup basic policy - $policy = [ - 'expiration' => TimestampShape::format($expiration, 'iso8601'), - 'conditions' => $options, - ]; - - // setup basic formInputs - $this->formInputs = $formInputs + ['key' => '${filename}']; - - // finalize policy and signature - - $this->formInputs += $this->getPolicyAndSignature( - $credentials, - $policy - ); - } - - /** - * Gets the S3 client. - * - * @return S3ClientInterface - */ - public function getClient() - { - return $this->client; - } - - /** - * Gets the bucket name. - * - * @return string - */ - public function getBucket() - { - return $this->bucket; - } - - /** - * Gets the form attributes as an array. - * - * @return array - */ - public function getFormAttributes() - { - return $this->formAttributes; - } - - /** - * Set a form attribute. - * - * @param string $attribute Form attribute to set. - * @param string $value Value to set. - */ - public function setFormAttribute($attribute, $value) - { - $this->formAttributes[$attribute] = $value; - } - - /** - * Gets the form inputs as an array. - * - * @return array - */ - public function getFormInputs() - { - return $this->formInputs; - } - - /** - * Set a form input. - * - * @param string $field Field name to set - * @param string $value Value to set. - */ - public function setFormInput($field, $value) - { - $this->formInputs[$field] = $value; - } - - private function generateUri() - { - $uri = new Uri($this->client->getEndpoint()); - - if ($this->client->getConfig('use_path_style_endpoint') === true - || ($uri->getScheme() === 'https' - && strpos($this->bucket, '.') !== false) - ) { - // Use path-style URLs - $uri = $uri->withPath("/{$this->bucket}"); - } else { - // Use virtual-style URLs if haven't been set up already - if (strpos($uri->getHost(), $this->bucket . '.') !== 0) { - $uri = $uri->withHost($this->bucket . '.' . $uri->getHost()); - } - } - - return (string) $uri; - } - - protected function getPolicyAndSignature( - CredentialsInterface $credentials, - array $policy - ){ - $ldt = gmdate(SignatureV4::ISO8601_BASIC); - $sdt = substr($ldt, 0, 8); - $policy['conditions'][] = ['X-Amz-Date' => $ldt]; - - $region = $this->client->getRegion(); - $scope = $this->createScope($sdt, $region, 's3'); - $creds = "{$credentials->getAccessKeyId()}/$scope"; - $policy['conditions'][] = ['X-Amz-Credential' => $creds]; - - $policy['conditions'][] = ['X-Amz-Algorithm' => "AWS4-HMAC-SHA256"]; - - $jsonPolicy64 = base64_encode(json_encode($policy)); - $key = $this->getSigningKey( - $sdt, - $region, - 's3', - $credentials->getSecretKey() - ); - - return [ - 'X-Amz-Credential' => $creds, - 'X-Amz-Algorithm' => "AWS4-HMAC-SHA256", - 'X-Amz-Date' => $ldt, - 'Policy' => $jsonPolicy64, - 'X-Amz-Signature' => bin2hex( - hash_hmac('sha256', $jsonPolicy64, $key, true) - ), - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PutObjectUrlMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PutObjectUrlMiddleware.php deleted file mode 100644 index 9b80406ec..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/PutObjectUrlMiddleware.php +++ /dev/null @@ -1,59 +0,0 @@ -nextHandler = $nextHandler; - } - - public function __invoke(CommandInterface $command, ?RequestInterface $request = null) - { - $next = $this->nextHandler; - return $next($command, $request)->then( - function (ResultInterface $result) use ($command) { - $name = $command->getName(); - switch ($name) { - case 'PutObject': - case 'CopyObject': - $result['ObjectURL'] = isset($result['@metadata']['effectiveUri']) - ? $result['@metadata']['effectiveUri'] - : null; - break; - case 'CompleteMultipartUpload': - $result['ObjectURL'] = urldecode($result['Location'] ?? ''); - break; - } - return $result; - } - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/Configuration.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/Configuration.php deleted file mode 100644 index 48dc63d78..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/Configuration.php +++ /dev/null @@ -1,42 +0,0 @@ -endpointsType = strtolower($endpointsType); - $this->isFallback = $isFallback; - if (!in_array($this->endpointsType, ['legacy', 'regional'])) { - throw new \InvalidArgumentException( - "Configuration parameter must either be 'legacy' or 'regional'." - ); - } - } - - /** - * {@inheritdoc} - */ - public function getEndpointsType() - { - return $this->endpointsType; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'endpoints_type' => $this->getEndpointsType() - ]; - } - - public function isFallback() - { - return $this->isFallback; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationInterface.php deleted file mode 100644 index 10fbf9418..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationInterface.php +++ /dev/null @@ -1,22 +0,0 @@ - - * use Aws\S3\RegionalEndpoint\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see \Aws\S3\RegionalEndpoint\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const ENV_ENDPOINTS_TYPE = 'AWS_S3_US_EAST_1_REGIONAL_ENDPOINT'; - const INI_ENDPOINTS_TYPE = 's3_us_east_1_regional_endpoint'; - const DEFAULT_ENDPOINTS_TYPE = 'legacy'; - - public static $cacheKey = 'aws_s3_us_east_1_regional_endpoint_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback(); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['s3_us_east_1_regional_endpoint']) - && $config['s3_us_east_1_regional_endpoint'] instanceof CacheInterface - ) { - return self::cache($memo, $config['s3_us_east_1_regional_endpoint'], self::$cacheKey); - } - - return $memo; - } - - public static function env() - { - return function () { - // Use config from environment variables, if available - $endpointsType = getenv(self::ENV_ENDPOINTS_TYPE); - if (!empty($endpointsType)) { - return Promise\Create::promiseFor( - new Configuration($endpointsType) - ); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_ENDPOINTS_TYPE); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini( - $profile = null, - $filename = null - ) { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - $data = \Aws\parse_ini_file($filename, true); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile][self::INI_ENDPOINTS_TYPE])) { - return self::reject("Required S3 regional endpoint config values - not present in INI profile '{$profile}' ({$filename})"); - } - - return Promise\Create::promiseFor( - new Configuration($data[$profile][self::INI_ENDPOINTS_TYPE]) - ); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback() - { - return function () { - return Promise\Create::promiseFor( - new Configuration(self::DEFAULT_ENDPOINTS_TYPE, true) - ); - }; - } - - /** - * Unwraps a configuration object in whatever valid form it is in, - * always returning a ConfigurationInterface object. - * - * @param mixed $config - * @return ConfigurationInterface - * @throws \InvalidArgumentException - */ - public static function unwrap($config) - { - if (is_callable($config)) { - $config = $config(); - } - if ($config instanceof Promise\PromiseInterface) { - $config = $config->wait(); - } - if ($config instanceof ConfigurationInterface) { - return $config; - } - if (is_string($config)) { - return new Configuration($config); - } - if (is_array($config) && isset($config['endpoints_type'])) { - return new Configuration($config['endpoints_type']); - } - - throw new \InvalidArgumentException('Not a valid S3 regional endpoint ' - . 'configuration argument.'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/Exception/ConfigurationException.php deleted file mode 100644 index 29e211f55..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/RegionalEndpoint/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -parser = $parser; - $this->exceptionClass = $exceptionClass; - } - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - $fn = $this->parser; - - try { - return $fn($command, $response); - } catch (ParserException $e) { - throw new $this->exceptionClass( - "Error parsing response for {$command->getName()}:" - . " AWS parsing error: {$e->getMessage()}", - $command, - ['connection_error' => true, 'exception' => $e], - $e - ); - } - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - return $this->parser->parseMemberFromStream($stream, $member, $response); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Client.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Client.php deleted file mode 100644 index 02a17f333..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Client.php +++ /dev/null @@ -1,1383 +0,0 @@ - true, - 'when_required' => true - ]; - - public static function getArguments() - { - $args = parent::getArguments(); - $args['retries']['fn'] = [__CLASS__, '_applyRetryConfig']; - $args['api_provider']['fn'] = [__CLASS__, '_applyApiProvider']; - - return - [ - 'request_checksum_calculation' => [ - 'type' => 'config', - 'valid' => ['string'], - 'doc' => 'Valid values are `when_supported` and `when_required`. Default is `when_supported`.' - . ' `when_supported` results in checksum calculation when an operation has modeled checksum support.' - . ' `when_required` results in checksum calculation when an operation has modeled checksum support and' - . ' request checksums are modeled as required.', - 'fn' => [__CLASS__, '_apply_request_checksum_calculation'], - 'default' => [__CLASS__, '_default_request_checksum_calculation'], - ], - 'response_checksum_validation' => [ - 'type' => 'config', - 'valid' => ['string'], - 'doc' => 'Valid values are `when_supported` and `when_required`. Default is `when_supported`.' - . ' `when_supported` results in checksum validation when an operation has modeled checksum support.' - . ' `when_required` results in checksum validation when an operation has modeled checksum support and' - . ' `CheckSumMode` is set to `enabled`.', - 'fn' => [__CLASS__, '_apply_response_checksum_validation'], - 'default' => [__CLASS__, '_default_response_checksum_validation'], - ] - ] - + $args + [ - 'bucket_endpoint' => [ - 'type' => 'config', - 'valid' => ['bool'], - 'doc' => 'Set to true to send requests to a hardcoded ' - . 'bucket endpoint rather than create an endpoint as a ' - . 'result of injecting the bucket into the URL. This ' - . 'option is useful for interacting with CNAME endpoints.', - ], - 'use_arn_region' => [ - 'type' => 'config', - 'valid' => [ - 'bool', - Configuration::class, - CacheInterface::class, - 'callable' - ], - 'doc' => 'Set to true to allow passed in ARNs to override' - . ' client region. Accepts...', - 'fn' => [__CLASS__, '_apply_use_arn_region'], - 'default' => [UseArnRegionConfigurationProvider::class, 'defaultProvider'], - ], - 'use_accelerate_endpoint' => [ - 'type' => 'config', - 'valid' => ['bool'], - 'doc' => 'Set to true to send requests to an S3 Accelerate' - . ' endpoint by default. Can be enabled or disabled on' - . ' individual operations by setting' - . ' \'@use_accelerate_endpoint\' to true or false. Note:' - . ' you must enable S3 Accelerate on a bucket before it can' - . ' be accessed via an Accelerate endpoint.', - 'default' => false, - ], - 'use_path_style_endpoint' => [ - 'type' => 'config', - 'valid' => ['bool'], - 'doc' => 'Set to true to send requests to an S3 path style' - . ' endpoint by default.' - . ' Can be enabled or disabled on individual operations by setting' - . ' \'@use_path_style_endpoint\' to true or false.', - 'default' => false, - ], - 'disable_multiregion_access_points' => [ - 'type' => 'config', - 'valid' => ['bool'], - 'doc' => 'Set to true to disable the usage of' - . ' multi region access points. These are enabled by default.' - . ' Can be enabled or disabled on individual operations by setting' - . ' \'@disable_multiregion_access_points\' to true or false.', - 'default' => false, - ], - 'disable_express_session_auth' => [ - 'type' => 'config', - 'valid' => ['bool'], - 'doc' => 'Set to true to disable the usage of' - . ' s3 express session authentication. This is enabled by default.', - 'default' => [__CLASS__, '_default_disable_express_session_auth'], - ], - 's3_express_identity_provider' => [ - 'type' => 'config', - 'valid' => [ - 'bool', - 'callable' - ], - 'doc' => 'Specifies the provider used to generate identities to sign s3 express requests. ' - . 'Set to `false` to disable s3 express auth, or a callable provider used to create s3 express ' - . 'identities or return null.', - 'default' => [__CLASS__, '_default_s3_express_identity_provider'], - ], - ]; - } - - /** - * {@inheritdoc} - * - * In addition to the options available to - * {@see Aws\AwsClient::__construct}, S3Client accepts the following - * options: - * - * - bucket_endpoint: (bool) Set to true to send requests to a - * hardcoded bucket endpoint rather than create an endpoint as a result - * of injecting the bucket into the URL. This option is useful for - * interacting with CNAME endpoints. Note: if you are using version 2.243.0 - * and above and do not expect the bucket name to appear in the host, you will - * also need to set `use_path_style_endpoint` to `true`. - * - calculate_md5: (bool) Set to false to disable calculating an MD5 - * for all Amazon S3 signed uploads. - * - s3_us_east_1_regional_endpoint: - * (Aws\S3\RegionalEndpoint\ConfigurationInterface|Aws\CacheInterface\|callable|string|array) - * Specifies whether to use regional or legacy endpoints for the us-east-1 - * region. Provide an Aws\S3\RegionalEndpoint\ConfigurationInterface object, an - * instance of Aws\CacheInterface, a callable configuration provider used - * to create endpoint configuration, a string value of `legacy` or - * `regional`, or an associative array with the following keys: - * endpoint_types: (string) Set to `legacy` or `regional`, defaults to - * `legacy` - * - use_accelerate_endpoint: (bool) Set to true to send requests to an S3 - * Accelerate endpoint by default. Can be enabled or disabled on - * individual operations by setting '@use_accelerate_endpoint' to true or - * false. Note: you must enable S3 Accelerate on a bucket before it can be - * accessed via an Accelerate endpoint. - * - use_arn_region: (Aws\S3\UseArnRegion\ConfigurationInterface, - * Aws\CacheInterface, bool, callable) Set to true to enable the client - * to use the region from a supplied ARN argument instead of the client's - * region. Provide an instance of Aws\S3\UseArnRegion\ConfigurationInterface, - * an instance of Aws\CacheInterface, a callable that provides a promise for - * a Configuration object, or a boolean value. Defaults to false (i.e. - * the SDK will not follow the ARN region if it conflicts with the client - * region and instead throw an error). - * - use_dual_stack_endpoint: (bool) Set to true to send requests to an S3 - * Dual Stack endpoint by default, which enables IPv6 Protocol. - * Can be enabled or disabled on individual operations by setting - * '@use_dual_stack_endpoint\' to true or false. Note: - * you cannot use it together with an accelerate endpoint. - * - use_path_style_endpoint: (bool) Set to true to send requests to an S3 - * path style endpoint by default. - * Can be enabled or disabled on individual operations by setting - * '@use_path_style_endpoint\' to true or false. Note: - * you cannot use it together with an accelerate endpoint. - * - disable_multiregion_access_points: (bool) Set to true to disable - * sending multi region requests. They are enabled by default. - * Can be enabled or disabled on individual operations by setting - * '@disable_multiregion_access_points\' to true or false. Note: - * you cannot use it together with an accelerate or dualstack endpoint. - * - * @param array $args - */ - public function __construct(array $args) - { - if ( - !isset($args['s3_us_east_1_regional_endpoint']) - || $args['s3_us_east_1_regional_endpoint'] instanceof CacheInterface - ) { - $args['s3_us_east_1_regional_endpoint'] = ConfigurationProvider::defaultProvider($args); - } - $this->addBuiltIns($args); - parent::__construct($args); - $stack = $this->getHandlerList(); - $config = $this->getConfig(); - $stack->appendInit(SSECMiddleware::wrap($this->getEndpoint()->getScheme()), 's3.ssec'); - $stack->appendBuild( - ApplyChecksumMiddleware::wrap($this->getApi(), $this->getConfig()), - 's3.checksum' - ); - $stack->appendBuild( - Middleware::contentType(['PutObject', 'UploadPart']), - 's3.content_type' - ); - - if ($this->getConfig('bucket_endpoint')) { - $stack->appendBuild(BucketEndpointMiddleware::wrap( - $this->isUseEndpointV2(), $args['endpoint'] ?? null), 's3.bucket_endpoint' - ); - } elseif (!$this->isUseEndpointV2()) { - $stack->appendBuild( - S3EndpointMiddleware::wrap( - $this->getRegion(), - $this->getConfig('endpoint_provider'), - [ - 'accelerate' => $this->getConfig('use_accelerate_endpoint'), - 'path_style' => $this->getConfig('use_path_style_endpoint'), - 'use_fips_endpoint' => $this->getConfig('use_fips_endpoint'), - 'dual_stack' => - $this->getConfig('use_dual_stack_endpoint')->isUseDualStackEndpoint(), - - ] - ), - 's3.endpoint_middleware' - ); - } - - $stack->appendBuild( - BucketEndpointArnMiddleware::wrap( - $this->getApi(), - $this->getRegion(), - [ - 'use_arn_region' => $this->getConfig('use_arn_region'), - 'accelerate' => $this->getConfig('use_accelerate_endpoint'), - 'path_style' => $this->getConfig('use_path_style_endpoint'), - 'dual_stack' => - $this->getConfig('use_dual_stack_endpoint')->isUseDualStackEndpoint(), - 'use_fips_endpoint' => $this->getConfig('use_fips_endpoint'), - 'disable_multiregion_access_points' => - $this->getConfig('disable_multiregion_access_points'), - 'endpoint' => $args['endpoint'] ?? null - ], - $this->isUseEndpointV2() - ), - 's3.bucket_endpoint_arn' - ); - if ($this->getConfig('disable_express_session_auth')) { - $stack->prependSign( - $this->getDisableExpressSessionAuthMiddleware(), - 's3.disable_express_session_auth' - ); - } - - $stack->appendValidate( - InputValidationMiddleware::wrap($this->getApi(), self::$mandatoryAttributes), - 'input_validation_middleware' - ); - $stack->appendSign(ExpiresParsingMiddleware::wrap(), 's3.expires_parsing'); - $stack->appendSign(PutObjectUrlMiddleware::wrap(), 's3.put_object_url'); - $stack->appendSign(PermanentRedirectMiddleware::wrap(), 's3.permanent_redirect'); - $stack->appendInit(Middleware::sourceFile($this->getApi()), 's3.source_file'); - $stack->appendInit($this->getSaveAsParameter(), 's3.save_as'); - $stack->appendInit($this->getLocationConstraintMiddleware(), 's3.location'); - $stack->appendInit($this->getEncodingTypeMiddleware(), 's3.auto_encode'); - $stack->appendInit($this->getHeadObjectMiddleware(), 's3.head_object'); - $this->processModel($this->isUseEndpointV2()); - if ($this->isUseEndpointV2()) { - $stack->after('builder', - 's3.check_empty_path_with_query', - $this->getEmptyPathWithQuery()); - } - } - - /** - * Determine if a string is a valid name for a DNS compatible Amazon S3 - * bucket. - * - * DNS compatible bucket names can be used as a subdomain in a URL (e.g., - * ".s3.amazonaws.com"). - * - * @param string $bucket Bucket name to check. - * - * @return bool - */ - public static function isBucketDnsCompatible($bucket) - { - if (!is_string($bucket)) { - return false; - } - $bucketLen = strlen($bucket); - - return ($bucketLen >= 3 && $bucketLen <= 63) && - // Cannot look like an IP address - !filter_var($bucket, FILTER_VALIDATE_IP) && - preg_match('/^[a-z0-9]([a-z0-9\-\.]*[a-z0-9])?$/', $bucket); - } - - public static function _apply_use_arn_region($value, array &$args, HandlerList $list) - { - if ($value instanceof CacheInterface) { - $value = UseArnRegionConfigurationProvider::defaultProvider($args); - } - if (is_callable($value)) { - $value = $value(); - } - if ($value instanceof PromiseInterface) { - $value = $value->wait(); - } - if ($value instanceof ConfigurationInterface) { - $args['use_arn_region'] = $value; - } else { - // The Configuration class itself will validate other inputs - $args['use_arn_region'] = new Configuration($value); - } - } - - public static function _default_request_checksum_calculation(array $args): string - { - return ConfigurationResolver::resolve( - 'request_checksum_calculation', - ApplyChecksumMiddleware::DEFAULT_CALCULATION_MODE, - 'string', - $args - ); - } - - public static function _apply_request_checksum_calculation( - string $value, - array &$args - ): void - { - $value = strtolower($value); - if (array_key_exists($value, self::$checksumOptionEnum)) { - $args['request_checksum_calculation'] = $value; - } else { - $validValues = implode(' | ', array_keys(self::$checksumOptionEnum)); - throw new \InvalidArgumentException( - 'invalid value provided for `request_checksum_calculation`.' - . ' valid values are: ' . $validValues . '.' - ); - } - } - - public static function _default_response_checksum_validation(array $args): string - { - return ConfigurationResolver::resolve( - 'response_checksum_validation', - ValidateResponseChecksumResultMutator::DEFAULT_VALIDATION_MODE, - 'string', - $args - ); - } - - public static function _apply_response_checksum_validation( - $value, - array &$args - ): void - { - $value = strtolower($value); - if (array_key_exists($value, self::$checksumOptionEnum)) { - $args['response_checksum_validation'] = $value; - } else { - $validValues = implode(' | ', array_keys(self::$checksumOptionEnum)); - throw new \InvalidArgumentException( - 'invalid value provided for `response_checksum_validation`.' - . ' valid values are: ' . $validValues . '.' - ); - } - } - - public static function _default_disable_express_session_auth(array &$args) - { - return ConfigurationResolver::resolve( - 's3_disable_express_session_auth', - false, - 'bool', - $args - ); - } - - public static function _default_s3_express_identity_provider(array $args) - { - if ($args['config']['disable_express_session_auth']) { - return false; - } - return new S3ExpressIdentityProvider($args['region']); - } - - public function createPresignedRequest(CommandInterface $command, $expires, array $options = []) - { - $command = clone $command; - $list = $command->getHandlerList(); - $list->remove('signer'); - - //Removes checksum calculation behavior by default - if (empty($command['ChecksumAlgorithm']) - && empty($command['AddContentMD5']) - ) { - $list->remove('s3.checksum'); - } - - $request = \Aws\serialize($command); - - //Applies ContentSHA256 parameter, if provided and not applied - // by middleware - $commandName = $command->getName(); - if (!empty($command['ContentSHA256'] - && isset(ApplyChecksumMiddleware::$sha256[$commandName]) - && !$request->hasHeader('X-Amz-Content-Sha256') - )) { - $request = $request->withHeader( - 'X-Amz-Content-Sha256', - $command['ContentSHA256'] - ); - } - - $signing_name = $command['@context']['signing_service'] - ?? $this->getSigningName($request->getUri()->getHost()); - $signature_version = $this->getSignatureVersionFromCommand($command); - - /** @var \Aws\Signature\SignatureInterface $signer */ - $signer = call_user_func( - $this->getSignatureProvider(), - $signature_version, - $signing_name, - $this->getConfig('signing_region') - ); - if ($signature_version == 'v4-s3express') { - $provider = $this->getConfig('s3_express_identity_provider'); - $credentials = $provider($command)->wait(); - } else { - $credentials = $this->getCredentials()->wait(); - } - return $signer->presign( - $request, - $credentials, - $expires, - $options - ); - } - - /** - * Returns the URL to an object identified by its bucket and key. - * - * The URL returned by this method is not signed nor does it ensure that the - * bucket and key given to the method exist. If you need a signed URL, then - * use the {@see \Aws\S3\S3Client::createPresignedRequest} method and get - * the URI of the signed request. - * - * @param string $bucket The name of the bucket where the object is located - * @param string $key The key of the object - * - * @return string The URL to the object - */ - public function getObjectUrl($bucket, $key) - { - $command = $this->getCommand('GetObject', [ - 'Bucket' => $bucket, - 'Key' => $key - ]); - - return (string) \Aws\serialize($command)->getUri(); - } - - /** - * Raw URL encode a key and allow for '/' characters - * - * @param string $key Key to encode - * - * @return string Returns the encoded key - */ - public static function encodeKey($key) - { - return str_replace('%2F', '/', rawurlencode($key)); - } - - /** - * Provides a middleware that removes the need to specify LocationConstraint on CreateBucket. - * - * @return \Closure - */ - private function getLocationConstraintMiddleware() - { - $region = $this->getRegion(); - return static function (callable $handler) use ($region) { - return function (Command $command, $request = null) use ($handler, $region) { - if ($command->getName() === 'CreateBucket' - && !self::isDirectoryBucket($command['Bucket']) - ) { - $locationConstraint = $command['CreateBucketConfiguration']['LocationConstraint'] - ?? null; - - if ($locationConstraint === 'us-east-1') { - unset($command['CreateBucketConfiguration']); - } elseif ('us-east-1' !== $region && empty($locationConstraint)) { - if (isset($command['CreateBucketConfiguration'])) { - $command['CreateBucketConfiguration']['LocationConstraint'] = $region; - } else { - $command['CreateBucketConfiguration'] = ['LocationConstraint' => $region]; - } - } - } - - return $handler($command, $request); - }; - }; - } - - /** - * Provides a middleware that supports the `SaveAs` parameter. - * - * @return \Closure - */ - private function getSaveAsParameter() - { - return static function (callable $handler) { - return function (Command $command, $request = null) use ($handler) { - if ($command->getName() === 'GetObject' && isset($command['SaveAs'])) { - $command['@http']['sink'] = $command['SaveAs']; - unset($command['SaveAs']); - } - - return $handler($command, $request); - }; - }; - } - - /** - * Provides a middleware that disables content decoding on HeadObject - * commands. - * - * @return \Closure - */ - private function getHeadObjectMiddleware() - { - return static function (callable $handler) { - return function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler) { - if ($command->getName() === 'HeadObject' - && !isset($command['@http']['decode_content']) - ) { - $command['@http']['decode_content'] = false; - } - - return $handler($command, $request); - }; - }; - } - - /** - * Provides a middleware that autopopulates the EncodingType parameter on - * ListObjects commands. - * - * @return \Closure - */ - private function getEncodingTypeMiddleware() - { - return static function (callable $handler) { - return function (Command $command, $request = null) use ($handler) { - $autoSet = false; - if ($command->getName() === 'ListObjects' - && empty($command['EncodingType']) - ) { - $command['EncodingType'] = 'url'; - $autoSet = true; - } - - return $handler($command, $request) - ->then(function (ResultInterface $result) use ($autoSet) { - if ($result['EncodingType'] === 'url' && $autoSet) { - static $topLevel = [ - 'Delimiter', - 'Marker', - 'NextMarker', - 'Prefix', - ]; - static $nested = [ - ['Contents', 'Key'], - ['CommonPrefixes', 'Prefix'], - ]; - - foreach ($topLevel as $key) { - if (isset($result[$key])) { - $result[$key] = urldecode($result[$key]); - } - } - foreach ($nested as $steps) { - if (isset($result[$steps[0]])) { - foreach ($result[$steps[0]] as $key => $part) { - if (isset($part[$steps[1]])) { - $result[$steps[0]][$key][$steps[1]] - = urldecode($part[$steps[1]]); - } - } - } - } - - } - - return $result; - }); - }; - }; - } - - /** - * Provides a middleware that checks for an empty path and a - * non-empty query string. - * - * @return \Closure - */ - private function getEmptyPathWithQuery() - { - return static function (callable $handler) { - return function (Command $command, RequestInterface $request) use ($handler) { - $uri = $request->getUri(); - if (empty($uri->getPath()) && !empty($uri->getQuery())) { - $uri = $uri->withPath('/'); - $request = $request->withUri($uri); - } - - return $handler($command, $request); - }; - }; - } - - /** - * Provides a middleware that disables express session auth when - * customers opt out of it. - * - * @return \Closure - */ - private function getDisableExpressSessionAuthMiddleware() - { - return static function (callable $handler) { - return static function ( - CommandInterface $command, - ?RequestInterface $request = null - ) use ($handler) { - if (!empty($command['@context']['signature_version']) - && $command['@context']['signature_version'] === 'v4-s3express' - ) { - $command['@context']['signature_version'] = 's3v4'; - } - return $handler($command, $request); - }; - }; - } - - /** - * Special handling for when the service name is s3-object-lambda. - * So, if the host contains s3-object-lambda, then the service name - * returned is s3-object-lambda, otherwise the default signing service is returned. - * @param string $host The host to validate if is a s3-object-lambda URL. - * @return string returns the signing service name to be used - */ - private function getSigningName($host) - { - if (strpos( $host, 's3-object-lambda')) { - return 's3-object-lambda'; - } - - return $this->getConfig('signing_name'); - } - - /** - * If EndpointProviderV2 is used, removes `Bucket` from request URIs. - * This is now handled by the endpoint ruleset. - * - * Additionally adds a synthetic shape `ExpiresString` and modifies - * `Expires` type to ensure it remains set to `timestamp`. - * - * @param array $args - * @return void - * - * @internal - */ - private function processModel(bool $isUseEndpointV2): void - { - $definition = $this->getApi()->getDefinition(); - - if ($isUseEndpointV2) { - foreach($definition['operations'] as &$operation) { - if (isset($operation['http']['requestUri'])) { - $requestUri = $operation['http']['requestUri']; - if ($requestUri === "/{Bucket}") { - $requestUri = str_replace('/{Bucket}', '/', $requestUri); - } else { - $requestUri = str_replace('/{Bucket}', '', $requestUri); - // If we're left with just a query string, prepend '/' - if (str_starts_with($requestUri, '?')) { - $requestUri = '/' . $requestUri; - } - } - $operation['http']['requestUri'] = $requestUri; - } - } - } - - foreach ($definition['shapes'] as $key => &$value) { - $suffix = 'Output'; - if (str_ends_with($key, $suffix)) { - if (isset($value['members']['Expires'])) { - $value['members']['Expires']['deprecated'] = true; - $value['members']['ExpiresString'] = [ - 'shape' => 'ExpiresString', - 'location' => 'header', - 'locationName' => 'Expires' - ]; - } - } - } - $definition['shapes']['ExpiresString']['type'] = 'string'; - $definition['shapes']['Expires']['type'] = 'timestamp'; - - $this->getApi()->setDefinition($definition); - } - - /** - * Adds service-specific client built-in values - * - * @return void - */ - private function addBuiltIns($args) - { - if (isset($args['region']) - && $args['region'] !== 'us-east-1' - ) { - return false; - } - - if (!isset($args['region']) - && ConfigurationResolver::resolve('region', '', 'string') !== 'us-east-1' - ) { - return false; - } - - $key = 'AWS::S3::UseGlobalEndpoint'; - $result = $args['s3_us_east_1_regional_endpoint'] instanceof \Closure ? - $args['s3_us_east_1_regional_endpoint']()->wait() : $args['s3_us_east_1_regional_endpoint']; - - if (is_string($result)) { - if ($result === 'regional') { - $value = false; - } else if ($result === 'legacy') { - $value = true; - } else { - return; - } - } else { - if ($result->isFallback() - || $result->getEndpointsType() === 'legacy' - ) { - $value = true; - } else { - $value = false; - } - } - $this->clientBuiltIns[$key] = $value; - } - - /** - * Determines whether a bucket is a directory bucket. - * Only considers the availability zone/suffix format - * - * @param string $bucket - * @return bool - */ - public static function isDirectoryBucket(string $bucket): bool - { - return preg_match(self::DIRECTORY_BUCKET_REGEX, $bucket) === 1; - } - - /** @internal */ - public static function _applyRetryConfig($value, $args, HandlerList $list) - { - if (!$value) { - return; - } - - $config = \Aws\Retry\ConfigurationProvider::unwrap($value); - - if ($config->getMode() === 'legacy') { - self::appendLegacyModeRetries($config, $list); - return; - } - - if (NewRetriesOptIn::isEnabled()) { - self::appendStandardModeRetriesNew($config, $args, $list); - return; - } - - self::appendStandardModeRetries($config, $args, $list); - } - - private static function appendLegacyModeRetries( - RetryConfigurationInterface $config, - HandlerList $list - ): void - { - $maxRetries = $config->getMaxAttempts() - 1; - $baseDecider = RetryMiddleware::createDefaultDecider($maxRetries); - - $decider = function ($retries, $command, $request, $result, $error) use ($baseDecider, $maxRetries) { - $effectiveMax = $command['@retries'] ?? $maxRetries; - - if ($baseDecider($retries, $command, $request, $result, $error)) { - return true; - } - - if ($error instanceof AwsException && $retries < $effectiveMax) { - return self::isS3SocketIssue($error, $command->getName()); - } - - return false; - }; - - $list->appendSign( - Middleware::retry($decider, [RetryMiddleware::class, 'exponentialDelay']), - 'retry' - ); - } - - private static function appendStandardModeRetries( - RetryConfigurationInterface $config, - $args, - HandlerList $list - ): void - { - // decider that combines V2's default decider with S3-specific checks. - $defaultDecider = RetryMiddlewareV2::createDefaultDecider( - new QuotaManager(), - $config->getMaxAttempts() - ); - - $list->appendSign( - RetryMiddlewareV2::wrap( - $config, - [ - 'collect_stats' => $args['stats']['retries'], - 'decider' => function ( - $attempts, - CommandInterface $cmd, - $result - ) use ($defaultDecider, $config) { - if ($defaultDecider($attempts, $cmd, $result)) { - return true; - } - if ($result instanceof AwsException - && $attempts < $config->getMaxAttempts() - ) { - return self::isS3SocketIssue($result, $cmd->getName()); - } - return false; - }, - ] - ), - 'retry' - ); - } - - private static function appendStandardModeRetriesNew( - RetryConfigurationInterface $config, - $args, - HandlerList $list - ): void - { - // AWS_NEW_RETRIES_2026 path. The base middleware already handles - // the standard retryable shapes, so this decider only adds the - // S3-specific socket carve-out. - $list->appendSign( - RetryV3Middleware::wrap( - $config, - [ - 'collect_stats' => $args['stats']['retries'], - 'service' => $args['service'], - 'decider' => function ( - $attempts, - CommandInterface $cmd, - $result - ) { - return $result instanceof AwsException - && self::isS3SocketIssue($result, $cmd->getName()); - }, - ] - ), - 'retry' - ); - } - - private static function isS3SocketIssue(AwsException $error, string $commandName): bool - { - $response = $error->getResponse(); - if (!empty($response) && $response->getStatusCode() >= 400) { - return strpos( - (string) $response->getBody(), - 'Your socket connection to the server' - ) !== false; - } - - // All commands except CompleteMultipartUpload are idempotent and may - // be retried without worry if a networking error has occurred. - return $error->getPrevious() instanceof RequestException - && $commandName !== 'CompleteMultipartUpload'; - } - - /** @internal */ - public static function _applyApiProvider($value, array &$args, HandlerList $list) - { - ClientResolver::_apply_api_provider($value, $args); - $s3Parser = new S3Parser( - $args['parser'], - $args['error_parser'], - $args['api'], - $args['exception_class'] - ); - $s3Parser->addS3ResultMutator( - 'get-bucket-location', - new GetBucketLocationResultMutator() - ); - $s3Parser->addS3ResultMutator( - 'validate-response-checksum', - new ValidateResponseChecksumResultMutator( - $args['api'], - ['response_checksum_validation' => $args['response_checksum_validation']] - ) - ); - $args['parser'] = $s3Parser; - } - - /** - * @internal - * @codeCoverageIgnore - */ - public static function applyDocFilters(array $api, array $docs) - { - $b64 = '
This value will be base64 encoded on your behalf.
'; - $opt = '
This value will be computed for you it is not supplied.
'; - - // Add a note on the CopyObject docs - $s3ExceptionRetryMessage = "

Additional info on response behavior: if there is" - . " an internal error in S3 after the request was successfully received," - . " a 200 response will be returned with an S3Exception embedded" - . " in it; this will still be caught and retried by" - . " RetryMiddleware.

"; - - $docs['operations']['CopyObject'] .= $s3ExceptionRetryMessage; - $docs['operations']['CompleteMultipartUpload'] .= $s3ExceptionRetryMessage; - $docs['operations']['UploadPartCopy'] .= $s3ExceptionRetryMessage; - $docs['operations']['UploadPart'] .= $s3ExceptionRetryMessage; - - // Add note about stream ownership in the putObject call - $guzzleStreamMessage = "

Additional info on behavior of the stream" - . " parameters: Psr7 takes ownership of streams and will automatically close" - . " streams when this method is called with a stream as the Body" - . " parameter. To prevent this, set the Body using" - . " GuzzleHttp\Psr7\stream_for method with a is an instance of" - . " Psr\Http\Message\StreamInterface, and it will be returned" - . " unmodified. This will allow you to keep the stream in scope.

"; - $docs['operations']['PutObject'] .= $guzzleStreamMessage; - - // Add the SourceFile parameter. - $docs['shapes']['SourceFile']['base'] = 'The path to a file on disk to use instead of the Body parameter.'; - $api['shapes']['SourceFile'] = ['type' => 'string']; - $api['shapes']['PutObjectRequest']['members']['SourceFile'] = ['shape' => 'SourceFile']; - $api['shapes']['UploadPartRequest']['members']['SourceFile'] = ['shape' => 'SourceFile']; - - // Add the ContentSHA256 parameter. - $docs['shapes']['ContentSHA256']['base'] = 'A SHA256 hash of the body content of the request.'; - $api['shapes']['ContentSHA256'] = ['type' => 'string']; - $api['shapes']['PutObjectRequest']['members']['ContentSHA256'] = ['shape' => 'ContentSHA256']; - $api['shapes']['UploadPartRequest']['members']['ContentSHA256'] = ['shape' => 'ContentSHA256']; - $docs['shapes']['ContentSHA256']['append'] = $opt; - - // Add the AddContentMD5 parameter. - $docs['shapes']['AddContentMD5']['base'] = 'Set to true to calculate the ContentMD5 for the upload.'; - $api['shapes']['AddContentMD5'] = ['type' => 'boolean']; - $api['shapes']['PutObjectRequest']['members']['AddContentMD5'] = ['shape' => 'AddContentMD5']; - $api['shapes']['UploadPartRequest']['members']['AddContentMD5'] = ['shape' => 'AddContentMD5']; - - // Add the SaveAs parameter. - $docs['shapes']['SaveAs']['base'] = 'The path to a file on disk to save the object data.'; - $api['shapes']['SaveAs'] = ['type' => 'string']; - $api['shapes']['GetObjectRequest']['members']['SaveAs'] = ['shape' => 'SaveAs']; - - // Several SSECustomerKey documentation updates. - $docs['shapes']['SSECustomerKey']['append'] = $b64; - $docs['shapes']['CopySourceSSECustomerKey']['append'] = $b64; - $docs['shapes']['SSECustomerKeyMd5']['append'] = $opt; - - // Add the ObjectURL to various output shapes and documentation. - $docs['shapes']['ObjectURL']['base'] = 'The URI of the created object.'; - $api['shapes']['ObjectURL'] = ['type' => 'string']; - $api['shapes']['PutObjectOutput']['members']['ObjectURL'] = ['shape' => 'ObjectURL']; - $api['shapes']['CopyObjectOutput']['members']['ObjectURL'] = ['shape' => 'ObjectURL']; - $api['shapes']['CompleteMultipartUploadOutput']['members']['ObjectURL'] = ['shape' => 'ObjectURL']; - - // Fix references to Location Constraint. - unset($api['shapes']['CreateBucketRequest']['payload']); - $api['shapes']['BucketLocationConstraint']['enum'] = [ - "ap-northeast-1", - "ap-southeast-2", - "ap-southeast-1", - "cn-north-1", - "eu-central-1", - "eu-west-1", - "us-east-1", - "us-west-1", - "us-west-2", - "sa-east-1", - ]; - - // Add a note that the ContentMD5 is automatically computed, except for with PutObject and UploadPart - $docs['shapes']['ContentMD5']['append'] = '
The value will be computed on ' - . 'your behalf.
'; - $docs['shapes']['ContentMD5']['excludeAppend'] = ['PutObjectRequest', 'UploadPartRequest']; - - //Add a note to ContentMD5 for PutObject and UploadPart that specifies the value is required - // When uploading to a bucket with object lock enabled and that it is not computed automatically - $objectLock = '
This value is required if uploading to a bucket ' - . 'which has Object Lock enabled. It will not be calculated for you automatically. If you wish to have ' - . 'the value calculated for you, use the `AddContentMD5` parameter.
'; - $docs['shapes']['ContentMD5']['appendOnly'] = [ - 'message' => $objectLock, - 'shapes' => ['PutObjectRequest', 'UploadPartRequest'] - ]; - - // Add `ExpiresString` shape to output structures which contain `Expires` - // Deprecate existing `Expires` shapes in output structures - // Add/Update documentation for both `ExpiresString` and `Expires` - // Ensure `Expires` type remains timestamp - foreach ($api['shapes'] as $key => &$value) { - $suffix = 'Output'; - if (substr($key, -strlen($suffix)) === $suffix) { - if (isset($value['members']['Expires'])) { - $value['members']['Expires']['deprecated'] = true; - $value['members']['ExpiresString'] = [ - 'shape' => 'ExpiresString', - 'location' => 'header', - 'locationName' => 'Expires' - ]; - $docs['shapes']['Expires']['refs'][$key . '$Expires'] - .= '

This output shape has been deprecated. Please refer to ExpiresString instead.

.'; - } - } - } - $api['shapes']['ExpiresString']['type'] = 'string'; - $docs['shapes']['ExpiresString']['base'] = 'The unparsed string value of the Expires output member.'; - $api['shapes']['Expires']['type'] = 'timestamp'; - - return [ - new Service($api, ApiProvider::defaultProvider()), - new DocModel($docs) - ]; - } - - /** - * @internal - * @codeCoverageIgnore - */ - public static function addDocExamples($examples) - { - $getObjectExample = [ - 'input' => [ - 'Bucket' => 'arn:aws:s3:us-east-1:123456789012:accesspoint:myaccesspoint', - 'Key' => 'my-key' - ], - 'output' => [ - 'Body' => 'class GuzzleHttp\Psr7\Stream#208 (7) {...}', - 'ContentLength' => '11', - 'ContentType' => 'application/octet-stream', - ], - 'comments' => [ - 'input' => '', - 'output' => 'Simplified example output' - ], - 'description' => 'The following example retrieves an object by referencing the bucket via an S3 accesss point ARN. Result output is simplified for the example.', - 'id' => '', - 'title' => 'To get an object via an S3 access point ARN' - ]; - if (isset($examples['GetObject'])) { - $examples['GetObject'] []= $getObjectExample; - } else { - $examples['GetObject'] = [$getObjectExample]; - } - - $putObjectExample = [ - 'input' => [ - 'Bucket' => 'arn:aws:s3:us-east-1:123456789012:accesspoint:myaccesspoint', - 'Key' => 'my-key', - 'Body' => 'my-body', - ], - 'output' => [ - 'ObjectURL' => 'https://my-bucket.s3.us-east-1.amazonaws.com/my-key' - ], - 'comments' => [ - 'input' => '', - 'output' => 'Simplified example output' - ], - 'description' => 'The following example uploads an object by referencing the bucket via an S3 accesss point ARN. Result output is simplified for the example.', - 'id' => '', - 'title' => 'To upload an object via an S3 access point ARN' - ]; - if (isset($examples['PutObject'])) { - $examples['PutObject'] []= $putObjectExample; - } else { - $examples['PutObject'] = [$putObjectExample]; - } - - return $examples; - } - - /** - * @param CommandInterface $command - * @return array|mixed|null - */ - private function getSignatureVersionFromCommand(CommandInterface $command) - { - return $command['@context']['signature_version'] - ?? $this->getConfig('signature_version'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3ClientInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3ClientInterface.php deleted file mode 100644 index 649f33a55..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3ClientInterface.php +++ /dev/null @@ -1,605 +0,0 @@ -uploadAsync($bucket, $key, $body, $acl, $options) - ->wait(); - } - - /** - * @see S3ClientInterface::uploadAsync() - */ - public function uploadAsync( - $bucket, - $key, - $body, - $acl = 'private', - array $options = [] - ) { - return (new ObjectUploader($this, $bucket, $key, $body, $acl, $options)) - ->promise(); - } - - /** - * @see S3ClientInterface::copy() - */ - public function copy( - $fromB, - $fromK, - $destB, - $destK, - $acl = 'private', - array $opts = [] - ) { - return $this->copyAsync($fromB, $fromK, $destB, $destK, $acl, $opts) - ->wait(); - } - - /** - * @see S3ClientInterface::copyAsync() - */ - public function copyAsync( - $fromB, - $fromK, - $destB, - $destK, - $acl = 'private', - array $opts = [] - ) { - $source = [ - 'Bucket' => $fromB, - 'Key' => $fromK, - ]; - if (isset($opts['version_id'])) { - $source['VersionId'] = $opts['version_id']; - } - $destination = [ - 'Bucket' => $destB, - 'Key' => $destK - ]; - - return (new ObjectCopier($this, $source, $destination, $acl, $opts)) - ->promise(); - } - - /** - * @see S3ClientInterface::registerStreamWrapper() - */ - public function registerStreamWrapper() - { - StreamWrapper::register($this); - } - - /** - * @see S3ClientInterface::registerStreamWrapperV2() - */ - public function registerStreamWrapperV2() - { - StreamWrapper::register( - $this, - 's3', - null, - true - ); - } - - /** - * @see S3ClientInterface::deleteMatchingObjects() - */ - public function deleteMatchingObjects( - $bucket, - $prefix = '', - $regex = '', - array $options = [] - ) { - $this->deleteMatchingObjectsAsync($bucket, $prefix, $regex, $options) - ->wait(); - } - - /** - * @see S3ClientInterface::deleteMatchingObjectsAsync() - */ - public function deleteMatchingObjectsAsync( - $bucket, - $prefix = '', - $regex = '', - array $options = [] - ) { - if (!$prefix && !$regex) { - return new RejectedPromise( - new \RuntimeException('A prefix or regex is required.') - ); - } - - $params = ['Bucket' => $bucket, 'Prefix' => $prefix]; - $iter = $this->getIterator('ListObjects', $params); - - if ($regex) { - $iter = \Aws\filter($iter, function ($c) use ($regex) { - return preg_match($regex, $c['Key']); - }); - } - - return BatchDelete::fromIterator($this, $bucket, $iter, $options) - ->promise(); - } - - /** - * @see S3ClientInterface::uploadDirectory() - */ - public function uploadDirectory( - $directory, - $bucket, - $keyPrefix = null, - array $options = [] - ) { - $this->uploadDirectoryAsync($directory, $bucket, $keyPrefix, $options) - ->wait(); - } - - /** - * @see S3ClientInterface::uploadDirectoryAsync() - */ - public function uploadDirectoryAsync( - $directory, - $bucket, - $keyPrefix = null, - array $options = [] - ) { - $d = "s3://$bucket" . ($keyPrefix ? '/' . ltrim($keyPrefix, '/') : ''); - return (new Transfer($this, $directory, $d, $options))->promise(); - } - - /** - * @see S3ClientInterface::downloadBucket() - */ - public function downloadBucket( - $directory, - $bucket, - $keyPrefix = '', - array $options = [] - ) { - $this->downloadBucketAsync($directory, $bucket, $keyPrefix, $options) - ->wait(); - } - - /** - * @see S3ClientInterface::downloadBucketAsync() - */ - public function downloadBucketAsync( - $directory, - $bucket, - $keyPrefix = '', - array $options = [] - ) { - $s = "s3://$bucket" . ($keyPrefix ? '/' . ltrim($keyPrefix, '/') : ''); - return (new Transfer($this, $s, $directory, $options))->promise(); - } - - /** - * @see S3ClientInterface::determineBucketRegion() - */ - public function determineBucketRegion($bucketName) - { - return $this->determineBucketRegionAsync($bucketName)->wait(); - } - - /** - * @see S3ClientInterface::determineBucketRegionAsync() - * - * @param string $bucketName - * - * @return PromiseInterface - */ - public function determineBucketRegionAsync($bucketName) - { - $command = $this->getCommand('HeadBucket', ['Bucket' => $bucketName]); - $handlerList = clone $this->getHandlerList(); - $handlerList->remove('s3.permanent_redirect'); - $handlerList->remove('signer'); - $handler = $handlerList->resolve(); - - return $handler($command) - ->then(static function (ResultInterface $result) { - return $result['@metadata']['headers']['x-amz-bucket-region']; - }, function (AwsException $e) { - $response = $e->getResponse(); - if ($response === null) { - throw $e; - } - - if ($e->getAwsErrorCode() === 'AuthorizationHeaderMalformed') { - $region = $this->determineBucketRegionFromExceptionBody( - $response - ); - if (!empty($region)) { - return $region; - } - throw $e; - } - - return $response->getHeaderLine('x-amz-bucket-region'); - }); - } - - private function determineBucketRegionFromExceptionBody(ResponseInterface $response) - { - try { - $element = $this->parseXml($response->getBody(), $response); - if (!empty($element->Region)) { - return (string)$element->Region; - } - } catch (\Exception $e) { - // Fallthrough on exceptions from parsing - } - return false; - } - - /** - * @see S3ClientInterface::doesBucketExist() - */ - public function doesBucketExist($bucket) - { - return $this->checkExistenceWithCommand( - $this->getCommand('HeadBucket', ['Bucket' => $bucket]) - ); - } - - /** - * @see S3ClientInterface::doesBucketExistV2() - */ - public function doesBucketExistV2($bucket, $accept403 = false) - { - $command = $this->getCommand('HeadBucket', ['Bucket' => $bucket]); - - try { - $this->execute($command); - return true; - } catch (S3Exception $e) { - if ( - ($accept403 && $e->getStatusCode() === 403) - || $e instanceof PermanentRedirectException - ) { - return true; - } - if ($e->getStatusCode() === 404) { - return false; - } - throw $e; - } - } - - /** - * @see S3ClientInterface::doesObjectExist() - */ - public function doesObjectExist($bucket, $key, array $options = []) - { - return $this->checkExistenceWithCommand( - $this->getCommand('HeadObject', [ - 'Bucket' => $bucket, - 'Key' => $key - ] + $options) - ); - } - - /** - * @see S3ClientInterface::doesObjectExistV2() - */ - public function doesObjectExistV2( - $bucket, - $key, - $includeDeleteMarkers = false, - array $options = [] - ){ - $command = $this->getCommand('HeadObject', [ - 'Bucket' => $bucket, - 'Key' => $key - ] + $options - ); - - try { - $this->execute($command); - return true; - } catch (S3Exception $e) { - if ($includeDeleteMarkers - && $this->useDeleteMarkers($e) - ) { - return true; - } - if ($e->getStatusCode() === 404) { - return false; - } - throw $e; - } - } - - private function useDeleteMarkers($exception) - { - $response = $exception->getResponse(); - return !empty($response) - && $response->getHeader('x-amz-delete-marker'); - } - - /** - * Determines whether or not a resource exists using a command - * - * @param CommandInterface $command Command used to poll for the resource - * - * @return bool - * @throws S3Exception|\Exception if there is an unhandled exception - */ - private function checkExistenceWithCommand(CommandInterface $command) - { - try { - $this->execute($command); - return true; - } catch (S3Exception $e) { - if ($e->getAwsErrorCode() == 'AccessDenied') { - return true; - } - if ($e->getStatusCode() >= 500) { - throw $e; - } - return false; - } - } - - /** - * @see S3ClientInterface::execute() - */ - abstract public function execute(CommandInterface $command); - - /** - * @see S3ClientInterface::getCommand() - */ - abstract public function getCommand($name, array $args = []); - - /** - * @see S3ClientInterface::getHandlerList() - * - * @return HandlerList - */ - abstract public function getHandlerList(); - - /** - * @see S3ClientInterface::getIterator() - * - * @return \Iterator - */ - abstract public function getIterator($name, array $args = []); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3EndpointMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3EndpointMiddleware.php deleted file mode 100644 index c8dd00703..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3EndpointMiddleware.php +++ /dev/null @@ -1,343 +0,0 @@ - true, - 'DeleteBucket' => true, - 'ListBuckets' => true, - ]; - - const NO_PATTERN = 0; - const DUALSTACK = 1; - const ACCELERATE = 2; - const ACCELERATE_DUALSTACK = 3; - const PATH_STYLE = 4; - const HOST_STYLE = 5; - - /** @var bool */ - private $accelerateByDefault; - /** @var bool */ - private $dualStackByDefault; - /** @var bool */ - private $pathStyleByDefault; - /** @var string */ - private $region; - /** @var callable */ - private $endpointProvider; - /** @var callable */ - private $nextHandler; - /** @var string */ - private $endpoint; - - /** - * Create a middleware wrapper function - * - * @param string $region - * @param EndpointProvider $endpointProvider - * @param array $options - * - * @return callable - */ - public static function wrap($region, $endpointProvider, array $options) - { - return function (callable $handler) use ($region, $endpointProvider, $options) { - return new self($handler, $region, $options, $endpointProvider); - }; - } - - public function __construct( - callable $nextHandler, - $region, - array $options, - $endpointProvider = null - ) { - $this->pathStyleByDefault = isset($options['path_style']) - ? (bool) $options['path_style'] : false; - $this->dualStackByDefault = isset($options['dual_stack']) - ? (bool) $options['dual_stack'] : false; - $this->accelerateByDefault = isset($options['accelerate']) - ? (bool) $options['accelerate'] : false; - $this->region = (string) $region; - $this->endpoint = isset($options['endpoint']) - ? $options['endpoint'] : ""; - $this->endpointProvider = is_null($endpointProvider) - ? PartitionEndpointProvider::defaultProvider() - : $endpointProvider; - $this->nextHandler = $nextHandler; - } - - public function __invoke(CommandInterface $command, RequestInterface $request) - { - if (!empty($this->endpoint)) { - $request = $this->applyEndpoint($command, $request); - } else { - switch ($this->endpointPatternDecider($command, $request)) { - case self::HOST_STYLE: - $request = $this->applyHostStyleEndpoint($command, $request); - break; - case self::NO_PATTERN: - break; - case self::PATH_STYLE: - $request = $this->applyPathStyleEndpointCustomizations($command, $request); - break; - case self::DUALSTACK: - $request = $this->applyDualStackEndpoint($command, $request); - break; - case self::ACCELERATE: - $request = $this->applyAccelerateEndpoint( - $command, - $request, - 's3-accelerate' - ); - break; - case self::ACCELERATE_DUALSTACK: - $request = $this->applyAccelerateEndpoint( - $command, - $request, - 's3-accelerate.dualstack' - ); - break; - } - } - $nextHandler = $this->nextHandler; - return $nextHandler($command, $request); - } - - private static function isRequestHostStyleCompatible( - CommandInterface $command, - RequestInterface $request - ) { - return S3Client::isBucketDnsCompatible($command['Bucket']) - && ( - $request->getUri()->getScheme() === 'http' - || strpos($command['Bucket'], '.') === false - ) - && filter_var($request->getUri()->getHost(), FILTER_VALIDATE_IP) === false; - } - - private function endpointPatternDecider( - CommandInterface $command, - RequestInterface $request - ) { - $accelerate = isset($command['@use_accelerate_endpoint']) - ? $command['@use_accelerate_endpoint'] : $this->accelerateByDefault; - $dualStack = isset($command['@use_dual_stack_endpoint']) - ? $command['@use_dual_stack_endpoint'] : $this->dualStackByDefault; - $pathStyle = isset($command['@use_path_style_endpoint']) - ? $command['@use_path_style_endpoint'] : $this->pathStyleByDefault; - - if ($accelerate && $dualStack) { - // When try to enable both for operations excluded from s3-accelerate, - // only dualstack endpoints will be enabled. - return $this->canAccelerate($command) - ? self::ACCELERATE_DUALSTACK - : self::DUALSTACK; - } - - if ($accelerate && $this->canAccelerate($command)) { - return self::ACCELERATE; - } - - if ($dualStack) { - return self::DUALSTACK; - } - - if (!$pathStyle - && self::isRequestHostStyleCompatible($command, $request) - ) { - return self::HOST_STYLE; - } - - return self::PATH_STYLE; - } - - private function canAccelerate(CommandInterface $command) - { - return empty(self::$exclusions[$command->getName()]) - && S3Client::isBucketDnsCompatible($command['Bucket']); - } - - private function getBucketStyleHost(CommandInterface $command, $host) - { - // For operations on the base host (e.g. ListBuckets) - if (!isset($command['Bucket'])) { - return $host; - } - - return "{$command['Bucket']}.{$host}"; - } - - private function applyHostStyleEndpoint( - CommandInterface $command, - RequestInterface $request - ) { - $uri = $request->getUri(); - $request = $request->withUri( - $uri->withHost($this->getBucketStyleHost( - $command, - $uri->getHost() - )) - ->withPath($this->getBucketlessPath( - $uri->getPath(), - $command - )) - ); - return $request; - } - - private function applyPathStyleEndpointCustomizations( - CommandInterface $command, - RequestInterface $request - ) { - if ($command->getName() == 'WriteGetObjectResponse') { - $dnsSuffix = $this->endpointProvider - ->getPartition($this->region, 's3') - ->getDnsSuffix(); - $fips = \Aws\is_fips_pseudo_region($this->region) ? "-fips" : ""; - $region = \Aws\strip_fips_pseudo_regions($this->region); - $host = - "{$command['RequestRoute']}.s3-object-lambda{$fips}.{$region}.{$dnsSuffix}"; - - $uri = $request->getUri(); - $request = $request->withUri( - $uri->withHost($host) - ->withPath($this->getBucketlessPath( - $uri->getPath(), - $command - )) - ); - } - return $request; - } - - - private function applyDualStackEndpoint( - CommandInterface $command, - RequestInterface $request - ) { - $request = $request->withUri( - $request->getUri()->withHost($this->getDualStackHost()) - ); - - if (empty($command['@use_path_style_endpoint']) - && !$this->pathStyleByDefault - && self::isRequestHostStyleCompatible($command, $request) - ) { - $request = $this->applyHostStyleEndpoint($command, $request); - } - return $request; - } - - private function getDualStackHost() - { - $dnsSuffix = $this->endpointProvider - ->getPartition($this->region, 's3') - ->getDnsSuffix(); - return "s3.dualstack.{$this->region}.{$dnsSuffix}"; - } - - private function applyAccelerateEndpoint( - CommandInterface $command, - RequestInterface $request, - $pattern - ) { - $request = $request->withUri( - $request->getUri() - ->withHost($this->getAccelerateHost($command, $pattern)) - ->withPath($this->getBucketlessPath( - $request->getUri()->getPath(), - $command - )) - ); - return $request; - } - - private function getAccelerateHost(CommandInterface $command, $pattern) - { - $dnsSuffix = $this->endpointProvider - ->getPartition($this->region, 's3') - ->getDnsSuffix(); - return "{$command['Bucket']}.{$pattern}.{$dnsSuffix}"; - } - - private function getBucketlessPath($path, CommandInterface $command) - { - $pattern = '/^\\/' . preg_quote($command['Bucket'], '/') . '/'; - $path = preg_replace($pattern, '', $path) ?: '/'; - if (substr($path, 0 , 1) !== '/') { - $path = '/' . $path; - } - return $path; - } - - private function applyEndpoint( - CommandInterface $command, - RequestInterface $request - ) { - $dualStack = isset($command['@use_dual_stack_endpoint']) - ? $command['@use_dual_stack_endpoint'] : $this->dualStackByDefault; - if (ArnParser::isArn($command['Bucket'])) { - $arn = ArnParser::parse($command['Bucket']); - $outpost = $arn->getService() == 's3-outposts'; - if ($outpost && $dualStack) { - throw new InvalidArgumentException("Outposts + dualstack is not supported"); - } - if ($arn instanceof ObjectLambdaAccessPointArn) { - return $request; - } - } - if ($dualStack) { - throw new InvalidArgumentException("Custom Endpoint + Dualstack not supported"); - } - if ($command->getName() == 'WriteGetObjectResponse') { - $host = "{$command['RequestRoute']}.{$this->endpoint}"; - $uri = $request->getUri(); - return $request = $request->withUri( - $uri->withHost($host) - ->withPath($this->getBucketlessPath( - $uri->getPath(), - $command - )) - ); - } - $host = ($this->pathStyleByDefault) ? - $this->endpoint : - $this->getBucketStyleHost( - $command, - $this->endpoint - ); - $uri = $request->getUri(); - $scheme = $uri->getScheme(); - if(empty($scheme)){ - $request = $request->withUri( - $uri->withHost($host) - ); - } else { - $request = $request->withUri($uri); - } - - return $request; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3MultiRegionClient.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3MultiRegionClient.php deleted file mode 100644 index 72384d130..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3MultiRegionClient.php +++ /dev/null @@ -1,401 +0,0 @@ - function (array &$args) { - $availableRegions = array_keys($args['partition']['regions']); - return end($availableRegions); - }]; - unset($args['region']); - - return $args + [ - 'bucket_region_cache' => [ - 'type' => 'config', - 'valid' => [CacheInterface::class], - 'doc' => 'Cache of regions in which given buckets are located.', - 'default' => function () { return new LruArrayCache; }, - ], - 'region' => $regionDef, - ]; - } - - public function __construct(array $args) - { - parent::__construct($args); - $this->cache = $this->getConfig('bucket_region_cache'); - - $this->getHandlerList()->prependInit( - $this->determineRegionMiddleware(), - 'determine_region' - ); - } - - private function determineRegionMiddleware() - { - $clientRef = \WeakReference::create($this); - return static function (callable $handler) use ($clientRef) { - return static function (CommandInterface $command) use ($handler, $clientRef) { - $client = $clientRef->get(); - $cacheKey = $client->getCacheKey($command['Bucket']); - if ( - empty($command['@region']) && - $region = $client->cache->get($cacheKey) - ) { - $command['@region'] = $region; - } - - return Promise\Coroutine::of(static function () use ( - $handler, - $command, - $cacheKey, - $clientRef - ) { - try { - yield $handler($command); - } catch (PermanentRedirectException $e) { - if (empty($command['Bucket'])) { - throw $e; - } - $client = $clientRef->get(); - $result = $e->getResult(); - $region = null; - if (isset($result['@metadata']['headers']['x-amz-bucket-region'])) { - $region = $result['@metadata']['headers']['x-amz-bucket-region']; - $client->cache->set($cacheKey, $region); - } else { - $region = (yield $client->determineBucketRegionAsync( - $command['Bucket'] - )); - } - - $command['@region'] = $region; - yield $handler($command); - } catch (AwsException $e) { - if ($e->getAwsErrorCode() === 'AuthorizationHeaderMalformed') { - $client = $clientRef->get(); - $region = $client->determineBucketRegionFromExceptionBody( - $e->getResponse() - ); - if (!empty($region)) { - $client->cache->set($cacheKey, $region); - - $command['@region'] = $region; - yield $handler($command); - } else { - throw $e; - } - } else { - throw $e; - } - } - }); - }; - }; - } - - public function createPresignedRequest(CommandInterface $command, $expires, array $options = []) - { - if (empty($command['Bucket'])) { - throw new \InvalidArgumentException('The S3\\MultiRegionClient' - . ' cannot create presigned requests for commands without a' - . ' specified bucket.'); - } - - /** @var S3ClientInterface $client */ - $client = $this->getClientFromPool( - $this->determineBucketRegion($command['Bucket']) - ); - return $client->createPresignedRequest( - $client->getCommand($command->getName(), $command->toArray()), - $expires, - $options - ); - } - - public function getObjectUrl($bucket, $key) - { - /** @var S3Client $regionalClient */ - $regionalClient = $this->getClientFromPool( - $this->determineBucketRegion($bucket) - ); - - return $regionalClient->getObjectUrl($bucket, $key); - } - - public function determineBucketRegionAsync($bucketName) - { - $cacheKey = $this->getCacheKey($bucketName); - if ($cached = $this->cache->get($cacheKey)) { - return Promise\Create::promiseFor($cached); - } - - /** @var S3ClientInterface $regionalClient */ - $regionalClient = $this->getClientFromPool(); - return $regionalClient->determineBucketRegionAsync($bucketName) - ->then( - function ($region) use ($cacheKey) { - $this->cache->set($cacheKey, $region); - - return $region; - } - ); - } - - private function getCacheKey($bucketName) - { - return "aws:s3:{$bucketName}:location"; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartDownloader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartDownloader.php deleted file mode 100644 index d2b9c66e1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartDownloader.php +++ /dev/null @@ -1,653 +0,0 @@ -resumableDownload = $resumableDownload; - $this->isResuming = $resumableDownload !== null; - // Initialize from resume state if available - if ($this->isResuming) { - $this->objectPartsCount = $resumableDownload->getTotalNumberOfParts(); - $this->objectSizeInBytes = $resumableDownload->getObjectSizeInBytes(); - $this->eTag = $resumableDownload->getETag(); - $this->partsCompleted = $resumableDownload->getPartsCompleted(); - $this->initialRequestResult = $this->resumableDownload->getInitialRequestResult(); - // Restore current snapshot - $snapshotData = $resumableDownload->getCurrentSnapshot(); - if (!empty($snapshotData)) { - $this->currentSnapshot = TransferProgressSnapshot::fromArray( - $snapshotData - ); - } - } else { - $this->partsCompleted = $partsCompleted; - $this->objectPartsCount = $objectPartsCount; - $this->objectSizeInBytes = $objectSizeInBytes; - $this->eTag = $eTag; - $this->currentSnapshot = $currentSnapshot; - } - - $this->downloadRequestArgs = $downloadRequestArgs; - $this->validateConfig($config); - $this->config = $config; - if ($downloadHandler === null) { - $downloadHandler = new StreamDownloadHandler(); - } - $this->downloadHandler = $downloadHandler; - $this->listenerNotifier = $listenerNotifier; - // Always starts in 1 - $this->currentPartNo = 1; - } - - /** - * Returns the next command args for fetching the next object part. - * - * @return array - */ - abstract protected function getFetchCommandArgs(): array; - - /** - * Compute the object dimensions, such as size and parts count. - * - * @param ResultInterface $result - * - * @return void - */ - abstract protected function computeObjectDimensions(ResultInterface $result): void; - - private function validateConfig(array &$config): void - { - if (!isset($config['target_part_size_bytes'])) { - $config['target_part_size_bytes'] = S3TransferManagerConfig::DEFAULT_TARGET_PART_SIZE_BYTES; - } - - if (!isset($config['concurrency'])) { - $config['concurrency'] = S3TransferManagerConfig::DEFAULT_CONCURRENCY; - } - - if (!isset($config['response_checksum_validation'])) { - $config['response_checksum_validation'] = S3TransferManagerConfig::DEFAULT_RESPONSE_CHECKSUM_VALIDATION; - } - - if (!isset($config['resume_enabled'])) { - $config['resume_enabled'] = false; - } - } - - /** - * @return array - */ - public function getConfig(): array - { - return $this->config; - } - - /** - * @return int - */ - public function getCurrentPartNo(): int - { - return $this->currentPartNo; - } - - /** - * @return int - */ - public function getObjectPartsCount(): int - { - return $this->objectPartsCount; - } - - /** - * @return int - */ - public function getObjectSizeInBytes(): int - { - return $this->objectSizeInBytes; - } - - /** - * @return TransferProgressSnapshot - */ - public function getCurrentSnapshot(): TransferProgressSnapshot - { - return $this->currentSnapshot; - } - - /** - * @return DownloadResult - */ - public function download(): DownloadResult - { - return $this->promise()->wait(); - } - - /** - * Returns that resolves a multipart download operation, - * or to a rejection in case of any failures. - * - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - return Coroutine::of(function () { - // Skip initial request if resuming (we already have object dimensions) - if ($this->isResuming) { - $this->downloadInitiated($this->downloadRequestArgs); - } else { - yield $this->initialRequest(); - } - - $partsDownloadPromises = $this->partDownloadRequests(); - - // When concurrency is not supported by the download handler - // Then the number of concurrency will be just one. - $concurrency = $this->downloadHandler->isConcurrencySupported() - ? $this->config['concurrency'] - : 1; - - yield Each::ofLimitAll( - $partsDownloadPromises, - $concurrency, - )->then(function () { - // Transfer completed - $this->downloadComplete(); - - return Create::promiseFor(new DownloadResult( - $this->downloadHandler->getHandlerResult(), - $this->initialRequestResult, - )); - })->otherwise(function (Throwable $e) { - $this->downloadFailed($e); - - throw $e; - }); - }); - } - - /** - * Perform the initial download request. - * - * @return PromiseInterface - */ - protected function initialRequest(): PromiseInterface - { - $command = $this->getNextGetObjectCommand(); - // Notify download initiated - $this->downloadInitiated($command->toArray()); - - return $this->s3Client->executeAsync($command) - ->then(function (ResultInterface $result) use ($command) { - // Compute object dimensions such as parts count and object size - $this->computeObjectDimensions($result); - - // If there are more than one part then save the ETag - if ($this->objectPartsCount > 1) { - $this->eTag = $result['ETag']; - } - - $initialRequestResult = $result->toArray(); - // Set full object size - $initialRequestResult['ContentLength'] = $this->objectSizeInBytes; - // Set full object content range - $initialRequestResult['ContentRange'] = "0-" - . ($this->objectSizeInBytes - 1) - . "/" - . $this->objectSizeInBytes; - - // Remove unnecessary fields - unset($initialRequestResult['Body']); - unset($initialRequestResult['@metadata']); - - // Store initial response for resume state - $this->initialRequestResult = $initialRequestResult; - - // Notify listeners but we pass the actual request result - $this->partDownloadCompleted( - 1, - $result->toArray(), - $command->toArray() - ); - })->otherwise(function ($reason) { - $this->partDownloadFailed($reason); - - throw $reason; - }); - } - - /** - * @return \Generator - */ - private function partDownloadRequests(): \Generator - { - while ($this->currentPartNo < $this->objectPartsCount) { - $this->currentPartNo++; - if ($this->partsCompleted[$this->currentPartNo] ?? false) { - continue; - } - - $partNumber = $this->currentPartNo; - $command = $this->getNextGetObjectCommand(); - - yield $this->s3Client->executeAsync($command) - ->then(function (ResultInterface $result) - use ($command, $partNumber) { - $requestArgs = $command->toArray(); - - // Remove metadata - unset($result['@metadata']); - - $this->partDownloadCompleted( - $partNumber, - $result->toArray(), - $requestArgs - ); - }); - } - - if ($this->currentPartNo !== $this->objectPartsCount) { - throw new S3TransferException( - "Expected number of parts `$this->objectPartsCount`" - . " to have been transferred but got `$this->currentPartNo`." - ); - } - } - - /** - * @return CommandInterface - */ - private function getNextGetObjectCommand(): CommandInterface - { - $nextCommandArgs = $this->getFetchCommandArgs(); - if ($this->config['response_checksum_validation'] === 'when_supported') { - $nextCommandArgs['ChecksumMode'] = 'ENABLED'; - } - - if (!empty($this->eTag)) { - $nextCommandArgs['IfMatch'] = $this->eTag; - } - - return $this->s3Client->getCommand( - self::GET_OBJECT_COMMAND, - $nextCommandArgs - ); - } - - /** - * Main purpose of this method is to propagate - * the download-initiated event to listeners, but - * also it does some computation regarding internal states - * that need to be maintained. - * - * @param array $commandArgs - * - * @return void - */ - private function downloadInitiated(array $commandArgs): void - { - if ($this->currentSnapshot === null) { - $this->currentSnapshot = new TransferProgressSnapshot( - $commandArgs['Key'], - 0, - $this->objectSizeInBytes - ); - } else { - $this->currentSnapshot = new TransferProgressSnapshot( - $this->currentSnapshot->getIdentifier(), - $this->currentSnapshot->getTransferredBytes(), - $this->currentSnapshot->getTotalBytes(), - $this->currentSnapshot->getResponse() - ); - } - - // Prepare context - $context = [ - AbstractTransferListener::REQUEST_ARGS_KEY => $commandArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot, - ]; - - // Notify download handler - $this->downloadHandler->transferInitiated($context); - - // Notify listeners - $this->listenerNotifier?->transferInitiated($context); - } - - /** - * Propagates download-failed event to listeners. - * - * @param \Throwable $reason - * - * @return void - */ - private function downloadFailed(\Throwable $reason): void - { - // Event already propagated. - if ($this->currentSnapshot->getReason() !== null) { - return; - } - - $this->currentSnapshot = new TransferProgressSnapshot( - $this->currentSnapshot->getIdentifier(), - $this->currentSnapshot->getTransferredBytes(), - $this->currentSnapshot->getTotalBytes(), - $this->currentSnapshot->getResponse(), - $reason - ); - - // Prepare context - $context = [ - AbstractTransferListener::REQUEST_ARGS_KEY => $this->downloadRequestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot, - AbstractTransferListener::REASON_KEY => $reason, - ]; - - // Notify download handler - $this->downloadHandler->transferFail($context); - - // Notify listeners - $this->listenerNotifier?->transferFail($context); - } - - /** - * Propagates part-download-completed to listeners. - * It also does some computation in order to maintain internal states. - * - * @param int $partNumber - * @param array $result - * @param array $requestArgs - * - * @return void - */ - private function partDownloadCompleted( - int $partNumber, - array $result, - array $requestArgs - ): void - { - $partTransferredBytes = $result['ContentLength'] ?? 0; - // Snapshot and context for listeners - $newSnapshot = new TransferProgressSnapshot( - $this->currentSnapshot->getIdentifier(), - $this->currentSnapshot->getTransferredBytes() + $partTransferredBytes, - $this->objectSizeInBytes, - $this->initialRequestResult - ); - $this->currentSnapshot = $newSnapshot; - - // Notify download handler and evaluate if part was written - $downloadHandlerSnapshot = $this->currentSnapshot->withResponse( - $result - ); - $wasPartWritten = $this->downloadHandler->bytesTransferred([ - AbstractTransferListener::REQUEST_ARGS_KEY => $requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $downloadHandlerSnapshot, - ]); - // If part was written to destination then we mark it as completed - if ($wasPartWritten) { - $this->partsCompleted[$partNumber] = true; - - // Persist resume state just if resume is enabled - if ($this->config['resume_enabled'] ?? false) { - // Update the resume state holder - $this->resumableDownload?->updateCurrentSnapshot( - $this->currentSnapshot->toArray() - ); - $this->resumableDownload?->markPartCompleted($partNumber); - - // Persist the resume state - $this->persistResumeState(); - } - } - - // Notify listeners - $this->listenerNotifier?->bytesTransferred([ - AbstractTransferListener::REQUEST_ARGS_KEY => $this->downloadRequestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot, - ]); - } - - /** - * Propagates part-download-failed event to listeners. - * - * @param \Throwable $reason - * - * @return void - */ - private function partDownloadFailed( - \Throwable $reason, - ): void - { - $this->downloadFailed($reason); - } - - /** - * Propagates object-download-completed event to listeners. - * - * @return void - */ - private function downloadComplete(): void - { - $newSnapshot = new TransferProgressSnapshot( - $this->currentSnapshot->getIdentifier(), - $this->currentSnapshot->getTransferredBytes(), - $this->objectSizeInBytes, - $this->currentSnapshot->getResponse() - ); - $this->currentSnapshot = $newSnapshot; - // Prepare context - $context = [ - AbstractTransferListener::REQUEST_ARGS_KEY => $this->downloadRequestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot, - ]; - - // Notify download handler - $this->downloadHandler->transferComplete($context); - - // Notify listeners - $this->listenerNotifier?->transferComplete($context); - - // Delete resume file on successful completion - if ($this->config['resume_enabled'] ?? false) { - $this->resumableDownload?->deleteResumeFile(); - } - } - - /** - * Persist the current download state to the resume file. - * This method is called after each part is downloaded. - * - * @return void - */ - private function persistResumeState(): void - { - // Only persist if we have a download handler that supports resume - if (!($this->downloadHandler instanceof ResumableDownloadHandlerInterface)) { - return; - } - - // Create ResumableDownload object - if ($this->resumableDownload === null) { - // Resume file destination - $resumeFilePath = $this->config['resume_file_path'] ?? - $this->downloadHandler->getResumeFilePath(); - // Create snapshot data - $snapshotData = $this->currentSnapshot->toArray(); - // Determine multipart download type - $config = $this->config; - $this->resumableDownload = new ResumableDownload( - $resumeFilePath, - $this->downloadRequestArgs, - $config, - $snapshotData, - $this->initialRequestResult, - $this->partsCompleted, - $this->objectPartsCount, - $this->downloadHandler->getTemporaryFilePath(), - $this->eTag ?? '', - $this->objectSizeInBytes, - $this->downloadHandler->getFixedPartSize(), - $this->downloadHandler->getDestination() - ); - } - - try { - $this->resumableDownload->toFile(); - } catch (\Exception $e) { - throw new S3TransferException( - "Unable to persist resumable download state due to: " . $e->getMessage(), - ); - } - } - - /** - * Calculates the object size from content range. - * - * @param string $contentRange - * @return int - */ - public static function computeObjectSizeFromContentRange( - string $contentRange - ): int - { - if (empty($contentRange)) { - return 0; - } - - // For extracting the object size from the ContentRange header value. - if (preg_match(self::OBJECT_SIZE_REGEX, $contentRange, $matches)) { - return (int) $matches[1]; - } - - throw new S3TransferException( - "Invalid content range \"$contentRange\"" - ); - } - - /** - * @param string $range - * - * @return int - */ - public static function getRangeTo(string $range): int - { - preg_match(self::RANGE_TO_REGEX, $range, $match); - if (empty($match)) { - return 0; - } - - return (int) $match[1]; - } - - /** - * @param mixed $multipartDownloadType - * - * @return string - */ - public static function chooseDownloaderClass( - string $multipartDownloadType - ): string - { - return match ($multipartDownloadType) { - AbstractMultipartDownloader::PART_GET_MULTIPART_DOWNLOADER => PartGetMultipartDownloader::class, - AbstractMultipartDownloader::RANGED_GET_MULTIPART_DOWNLOADER => RangeGetMultipartDownloader::class, - default => throw new \InvalidArgumentException( - "The config value for `multipart_download_type` must be one of:\n" - . "\t* " . AbstractMultipartDownloader::PART_GET_MULTIPART_DOWNLOADER - ."\n" - . "\t* " . AbstractMultipartDownloader::RANGED_GET_MULTIPART_DOWNLOADER - ) - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartUploader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartUploader.php deleted file mode 100644 index 55d902e6e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartUploader.php +++ /dev/null @@ -1,385 +0,0 @@ -s3Client = $s3Client; - $this->requestArgs = $requestArgs; - $this->validateConfig($config); - $this->config = $config; - $this->uploadId = $uploadId; - $this->partsCompleted = $partsCompleted; - $this->currentSnapshot = $currentSnapshot; - $this->listenerNotifier = $listenerNotifier; - } - - /** - * @return PromiseInterface - */ - abstract protected function createMultipartOperation(): PromiseInterface; - - /** - * @return PromiseInterface - */ - abstract protected function completeMultipartOperation(): PromiseInterface; - - /** - * @return PromiseInterface - */ - abstract protected function processMultipartOperation(): PromiseInterface; - - /** - * @param int $partSize - * @param array $requestArgs - * @param array $partData - * - * @return void - */ - abstract protected function partCompleted( - int $partSize, - array $requestArgs, - array $partData - ): void; - - /** - * @return PromiseInterface - */ - abstract protected function abortMultipartOperation(): PromiseInterface; - - /** - * @return int - */ - abstract protected function getTotalSize(): int; - - /** - * @param ResultInterface $result - * - * @return mixed - */ - abstract protected function createResponse(ResultInterface $result): mixed; - - /** - * @param array $config - * - * @return void - */ - protected function validateConfig(array &$config): void - { - if (!isset($config['target_part_size_bytes'])) { - $config['target_part_size_bytes'] = S3TransferManagerConfig::DEFAULT_TARGET_PART_SIZE_BYTES; - } - - if (!isset($config['concurrency'])) { - $config['concurrency'] = S3TransferManagerConfig::DEFAULT_CONCURRENCY; - } - - $partSize = $config['target_part_size_bytes']; - if ($partSize < self::PART_MIN_SIZE || $partSize > self::PART_MAX_SIZE) { - throw new \InvalidArgumentException( - "Part size config must be between " . self::PART_MIN_SIZE - ." and " . self::PART_MAX_SIZE . " bytes " - ."but it is configured to $partSize" - ); - } - } - - /** - * @return string|null - */ - public function getUploadId(): ?string - { - return $this->uploadId; - } - - /** - * @return array - */ - public function getPartsCompleted(): array - { - return $this->partsCompleted; - } - - /** - * Get the current progress snapshot. - * @return TransferProgressSnapshot|null - */ - public function getCurrentSnapshot(): ?TransferProgressSnapshot - { - return $this->currentSnapshot; - } - - /** - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - return Coroutine::of(function () { - try { - yield $this->createMultipartOperation(); - yield $this->processMultipartOperation(); - yield $this->completeMultipartOperation(); - } finally { - $this->callOnCompletionCallbacks(); - } - })->then(function (ResultInterface $result) { - return $this->createResponse($result); - })->otherwise(function (Throwable $e) { - $this->operationFailed($e); - - throw $e; - }); - } - - /** - * @return void - */ - protected function sortParts(): void - { - usort($this->partsCompleted, function ($partOne, $partTwo) { - return $partOne['PartNumber'] - <=> $partTwo['PartNumber']; - }); - } - - /** - * @param ResultInterface $result - * @param CommandInterface $command - * - * @return array - */ - protected function collectPart( - ResultInterface $result, - CommandInterface $command - ): array - { - $checksumResult = match($command->getName()) { - 'UploadPart' => $result, - 'UploadPartCopy' => $result['CopyPartResult'], - default => $result[$command->getName() . 'Result'] - }; - - $partNumber = $command['PartNumber']; - $partData = [ - 'PartNumber' => $partNumber, - 'ETag' => $checksumResult['ETag'], - ]; - - if (isset($command['ChecksumAlgorithm'])) { - $checksumMemberName = 'Checksum' . strtoupper($command['ChecksumAlgorithm']); - $partData[$checksumMemberName] = $checksumResult[$checksumMemberName] ?? null; - } - - $this->partsCompleted[$partNumber] = $partData; - - return $partData; - } - - /** - * @param \Iterator $commands - * @param callable $fulfilledCallback - * @param callable $rejectedCallback - * @return PromiseInterface - */ - protected function createCommandPool( - \Iterator $commands, - callable $fulfilledCallback, - callable $rejectedCallback - ): PromiseInterface - { - return (new CommandPool( - $this->s3Client, - $commands, - [ - 'concurrency' => $this->config['concurrency'], - 'fulfilled' => $fulfilledCallback, - 'rejected' => $rejectedCallback - ] - ))->promise(); - } - - /** - * @param array $requestArgs - * @return void - */ - protected function operationInitiated(array $requestArgs): void - { - if ($this->currentSnapshot === null) { - $this->currentSnapshot = new TransferProgressSnapshot( - $requestArgs['Key'], - 0, - $this->getTotalSize() - ); - } - - $this->listenerNotifier?->transferInitiated([ - AbstractTransferListener::REQUEST_ARGS_KEY => $requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot - ]); - } - - /** - * @param ResultInterface $result - * @return void - */ - protected function operationCompleted(ResultInterface $result): void - { - $newSnapshot = new TransferProgressSnapshot( - $this->currentSnapshot->getIdentifier(), - $this->currentSnapshot->getTransferredBytes(), - $this->currentSnapshot->getTotalBytes(), - $result->toArray(), - $this->currentSnapshot->getReason(), - ); - - $this->currentSnapshot = $newSnapshot; - - $this->listenerNotifier?->transferComplete([ - AbstractTransferListener::REQUEST_ARGS_KEY => - $this->requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot - ]); - } - - /** - * @param Throwable $reason - * @return void - * - */ - protected function operationFailed(Throwable $reason): void - { - // Event already propagated - if ($this->currentSnapshot?->getReason() !== null) { - return; - } - - if ($this->currentSnapshot === null) { - $this->currentSnapshot = new TransferProgressSnapshot( - 'Unknown', - 0, - 0, - ); - } - - $this->currentSnapshot = new TransferProgressSnapshot( - $this->currentSnapshot->getIdentifier(), - $this->currentSnapshot->getTransferredBytes(), - $this->currentSnapshot->getTotalBytes(), - $this->currentSnapshot->getResponse(), - $reason - ); - - if (!empty($this->uploadId)) { - trigger_error( - "Multipart Upload with id: " . $this->uploadId . " failed", - ); - $this->abortMultipartOperation()->wait(); - } - - $this->listenerNotifier?->transferFail([ - AbstractTransferListener::REQUEST_ARGS_KEY => - $this->requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot, - 'reason' => $reason, - ]); - } - - /** - * @return void - */ - protected function callOnCompletionCallbacks(): void - { - foreach ($this->onCompletionCallbacks as $fn) { - if (is_callable($fn)) { - call_user_func($fn); - } - } - - $this->onCompletionCallbacks = []; - } - - /** - * @param Throwable $reason - * @return void - */ - protected function partFailed(Throwable $reason): void - { - $this->operationFailed($reason); - } - - /** - * @return int - */ - protected function calculatePartSize(): int - { - return max( - $this->getTotalSize() / self::PART_MAX_NUM, - $this->config['target_part_size_bytes'] - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryDownloader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryDownloader.php deleted file mode 100644 index 92fb661ad..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryDownloader.php +++ /dev/null @@ -1,369 +0,0 @@ -s3Client = $s3Client; - $this->config = $config; - $this->downloadFile = $downloadFile; - $this->downloadDirectoryRequest = $downloadDirectoryRequest; - - // Validations - $this->downloadDirectoryRequest->updateConfigWithDefaults( - $this->config - ); - $this->downloadDirectoryRequest->validateConfig(); - $this->downloadDirectoryRequest->validateDestinationDirectory(); - - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->s3Client->getHandlerList(), - MetricsBuilder::S3_TRANSFER_DOWNLOAD_DIRECTORY - ); - } - - /** - * @return PromiseInterface - * - * @throws Throwable - */ - public function promise(): PromiseInterface - { - $this->objectsDownloaded = 0; - $this->objectsFailed = 0; - - $destinationDirectory = $this->downloadDirectoryRequest->getDestinationDirectory(); - $sourceBucket = $this->downloadDirectoryRequest->getSourceBucket(); - $progressTracker = $this->downloadDirectoryRequest->getProgressTracker(); - - $config = $this->downloadDirectoryRequest->getConfig(); - if ($progressTracker === null && $config['track_progress']) { - $progressTracker = new DirectoryProgressTracker(); - } - - $listArgs = [ - 'Bucket' => $sourceBucket, - ] + ($config['list_objects_v2_args'] ?? []); - - $s3Prefix = $config['s3_prefix'] ?? null; - if (empty($listArgs['Prefix']) && $s3Prefix !== null) { - $listArgs['Prefix'] = $s3Prefix; - } - - // MUST BE NULL - $listArgs['Delimiter'] = null; - - $objects = $this->s3Client - ->getPaginator('ListObjectsV2', $listArgs) - ->search('Contents[]'); - - $filter = $config['filter'] ?? null; - $objects = filter($objects, function (array $object) use ($filter) { - $key = $object['Key'] ?? ''; - if ($filter !== null) { - return call_user_func($filter, $key) && !str_ends_with($key, "/"); - } - - return !str_ends_with($key, "/"); - }); - $objects = map($objects, function (array $object) use ($sourceBucket) { - return [ - 'uri' => self::formatAsS3URI($sourceBucket, $object['Key']), - 'size' => $object['Size'] ?? 0, - ]; - }); - - $downloadObjectRequestModifier = $config['download_object_request_modifier'] - ?? null; - $failurePolicyCallback = $config['failure_policy'] ?? null; - - $directoryListeners = $this->downloadDirectoryRequest->getListeners(); - $singleObjectListeners = $this->downloadDirectoryRequest->getSingleObjectListeners(); - $aggregator = new DirectoryTransferProgressAggregator( - identifier: $this->buildDirectoryIdentifier( - $sourceBucket, - $destinationDirectory, - $s3Prefix - ), - totalBytes: 0, - totalFiles: 0, - directoryListeners: $directoryListeners, - directoryProgressTracker: $progressTracker - ); - - $maxConcurrency = $config['max_concurrency'] - ?? DownloadDirectoryRequest::DEFAULT_MAX_CONCURRENCY; - - $aggregator->notifyDirectoryInitiated([ - 'bucket' => $sourceBucket, - 'destination_directory' => $destinationDirectory, - 's3_prefix' => $s3Prefix, - ]); - - return Each::ofLimitAll( - $this->createDownloadPromises( - $objects, - $config, - $destinationDirectory, - $sourceBucket, - $s3Prefix, - $downloadObjectRequestModifier, - $failurePolicyCallback, - $aggregator, - $singleObjectListeners - ), - $maxConcurrency - )->then(function () use ($aggregator) { - $aggregator->notifyDirectoryComplete([ - 'objects_downloaded' => $this->objectsDownloaded, - 'objects_failed' => $this->objectsFailed, - ]); - return new DownloadDirectoryResult( - $this->objectsDownloaded, - $this->objectsFailed - ); - })->otherwise(function (Throwable $reason) use ($aggregator) { - $aggregator->notifyDirectoryFail($reason); - return new DownloadDirectoryResult( - $this->objectsDownloaded, - $this->objectsFailed, - $reason - ); - }); - } - - /** - * @param iterable $objects - * @param array $config - * @param string $destinationDirectory - * @param string $sourceBucket - * @param string|null $s3Prefix - * @param callable|null $downloadObjectRequestModifier - * @param callable|null $failurePolicyCallback - * @param DirectoryTransferProgressAggregator $aggregator - * @param array $singleObjectListeners - * - * @return \Generator - * @throws Throwable - */ - private function createDownloadPromises( - iterable $objects, - array $config, - string $destinationDirectory, - string $sourceBucket, - ?string $s3Prefix, - ?callable $downloadObjectRequestModifier, - ?callable $failurePolicyCallback, - DirectoryTransferProgressAggregator $aggregator, - array $singleObjectListeners - ): \Generator - { - $s3Delimiter = '/'; - foreach ($objects as $object) { - $aggregator->incrementTotals($object['size'] ?? 0); - $bucketAndKeyArray = S3TransferManager::s3UriAsBucketAndKey($object['uri']); - $objectKey = $bucketAndKeyArray['Key']; - if ($s3Prefix !== null && str_contains($objectKey, $s3Delimiter)) { - $prefixToStrip = str_ends_with($s3Prefix, $s3Delimiter) - ? $s3Prefix - : $s3Prefix . $s3Delimiter; - $objectKey = substr($objectKey, strlen($prefixToStrip)); - } - - // CONVERT THE KEY DIR SEPARATOR TO OS BASED DIR SEPARATOR - if (DIRECTORY_SEPARATOR !== $s3Delimiter) { - $objectKey = str_replace( - $s3Delimiter, - DIRECTORY_SEPARATOR, - $objectKey - ); - } - - $destinationFile = $destinationDirectory . DIRECTORY_SEPARATOR . $objectKey; - if ($this->resolvesOutsideTargetDirectory($destinationFile, $objectKey)) { - throw new S3TransferException( - "Cannot download key $objectKey " - ."its relative path resolves outside the parent directory." - ); - } - - $requestArgs = $this->downloadDirectoryRequest->getDownloadRequestArgs(); - foreach ($bucketAndKeyArray as $key => $value) { - $requestArgs[$key] = $value; - } - if ($downloadObjectRequestModifier !== null) { - call_user_func($downloadObjectRequestModifier, $requestArgs); - } - - $downloadFile = $this->downloadFile; - $downloadConfig = $config; - $downloadConfig['track_progress'] = false; - yield $downloadFile( - $this->s3Client, - new DownloadFileRequest( - destination: $destinationFile, - failsWhenDestinationExists: $config['fails_when_destination_exists'] ?? false, - downloadRequest: new DownloadRequest( - source: null, // Source has been provided in the request args - downloadRequestArgs: $requestArgs, - config: array_merge( - $downloadConfig, - [ - 'target_part_size_bytes' => $config['target_part_size_bytes'] ?? 0, - ] - ), - downloadHandler: null, - listeners: array_merge( - [$aggregator], - array_map( - fn($listener) => clone $listener, - $singleObjectListeners - ) - ), - progressTracker: null - ) - ), - )->then(function () { - $this->objectsDownloaded++; - })->otherwise(function (Throwable $reason) use ( - $sourceBucket, - $destinationDirectory, - $failurePolicyCallback, - $requestArgs - ) { - $this->objectsFailed++; - if ($failurePolicyCallback !== null) { - call_user_func( - $failurePolicyCallback, - $requestArgs, - [ - "destination_directory" => $destinationDirectory, - "bucket" => $sourceBucket, - ], - $reason, - new DownloadDirectoryResult( - $this->objectsDownloaded, - $this->objectsFailed - ) - ); - - return; - } - - throw $reason; - }); - } - } - - /** - * @param string $bucket - * @param string $key - * - * @return string - */ - private static function formatAsS3URI(string $bucket, string $key): string - { - return "s3://$bucket/$key"; - } - - /** - * @param string $sink - * @param string $objectKey - * - * @return bool - */ - private function resolvesOutsideTargetDirectory( - string $sink, - string $objectKey - ): bool - { - $resolved = []; - $sections = explode(DIRECTORY_SEPARATOR, $sink); - $targetSectionsLength = count(explode(DIRECTORY_SEPARATOR, $objectKey)); - $targetSections = array_slice($sections, -($targetSectionsLength + 1)); - $targetDirectory = $targetSections[0]; - - foreach ($targetSections as $section) { - if ($section === '.' || $section === '') { - continue; - } - if ($section === '..') { - array_pop($resolved); - if (empty($resolved) || $resolved[0] !== $targetDirectory) { - return true; - } - } else { - $resolved []= $section; - } - } - - return false; - } - - /** - * @param string $bucket - * @param string $destinationDirectory - * @param string|null $s3Prefix - * - * @return string - */ - private function buildDirectoryIdentifier( - string $bucket, - string $destinationDirectory, - ?string $s3Prefix - ): string { - return sprintf( - 'download:%s/%s->%s', - $bucket, - $s3Prefix ?? '', - rtrim($destinationDirectory, DIRECTORY_SEPARATOR) - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryUploader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryUploader.php deleted file mode 100644 index 9c9e4fca0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryUploader.php +++ /dev/null @@ -1,364 +0,0 @@ -s3Client = $s3Client; - $this->config = $config; - $this->uploadObject = $uploadObject; - $this->uploadDirectoryRequest = $uploadDirectoryRequest; - - // Validations - $this->uploadDirectoryRequest->updateConfigWithDefaults( - $this->config - ); - $this->uploadDirectoryRequest->validateSourceDirectory(); - $this->uploadDirectoryRequest->validateConfig(); - - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->s3Client->getHandlerList(), - MetricsBuilder::S3_TRANSFER_UPLOAD_DIRECTORY - ); - } - - /** - * @return PromiseInterface - * - * @throws Throwable - */ - public function promise(): PromiseInterface - { - $this->objectsUploaded = 0; - $this->objectsFailed = 0; - - $config = $this->uploadDirectoryRequest->getConfig(); - - $filter = $config['filter'] ?? null; - $uploadObjectRequestModifier = $config['upload_object_request_modifier'] - ?? null; - $failurePolicyCallback = $config['failure_policy'] ?? null; - - $sourceDirectory = $this->uploadDirectoryRequest->getSourceDirectory(); - $files = $this->iterateSourceFiles( - $sourceDirectory, - $config, - $filter - ); - - $baseDir = rtrim($sourceDirectory, '/') . DIRECTORY_SEPARATOR; - $delimiter = $config['s3_delimiter'] ?? '/'; - $s3Prefix = $config['s3_prefix'] ?? ''; - if ($s3Prefix !== '' && !str_ends_with($s3Prefix, '/')) { - $s3Prefix .= '/'; - } - - $targetBucket = $this->uploadDirectoryRequest->getTargetBucket(); - - $directoryProgressTracker = $this->uploadDirectoryRequest->getProgressTracker(); - if ($directoryProgressTracker === null - && ($config['track_progress'] - ?? ($this->config['track_progress'] ?? false))) { - $directoryProgressTracker = new DirectoryProgressTracker(); - } - - $directoryListeners = $this->uploadDirectoryRequest->getListeners(); - $singleObjectListeners = $this->uploadDirectoryRequest->getSingleObjectListeners(); - $aggregator = new DirectoryTransferProgressAggregator( - identifier: $this->buildDirectoryIdentifier( - $sourceDirectory, - $targetBucket, - $s3Prefix - ), - totalBytes: 0, - totalFiles: 0, - directoryListeners: $directoryListeners, - directoryProgressTracker: $directoryProgressTracker, - ); - - $maxConcurrency = $config['max_concurrency'] - ?? UploadDirectoryRequest::DEFAULT_MAX_CONCURRENCY; - - $aggregator->notifyDirectoryInitiated([ - 'source_directory' => $sourceDirectory, - 'bucket' => $targetBucket, - 's3_prefix' => $s3Prefix, - ]); - - return Each::ofLimitAll( - $this->createUploadPromises( - $files, - $config, - $uploadObjectRequestModifier, - $failurePolicyCallback, - $sourceDirectory, - $targetBucket, - $baseDir, - $delimiter, - $s3Prefix, - $aggregator, - $singleObjectListeners - ), - $maxConcurrency - )->then(function () use ($aggregator) { - $aggregator->notifyDirectoryComplete([ - 'objects_uploaded' => $this->objectsUploaded, - 'objects_failed' => $this->objectsFailed, - ]); - return new UploadDirectoryResult( - $this->objectsUploaded, - $this->objectsFailed - ); - })->otherwise(function (Throwable $reason) use ($aggregator) { - $aggregator->notifyDirectoryFail($reason); - return new UploadDirectoryResult( - $this->objectsUploaded, - $this->objectsFailed, - $reason - ); - }); - } - - /** - * @param iterable $files - * @param array $config - * @param callable|null $uploadObjectRequestModifier - * @param callable|null $failurePolicyCallback - * @param string $sourceDirectory - * @param string $targetBucket - * @param string $baseDir - * @param string $delimiter - * @param string $s3Prefix - * @param DirectoryTransferProgressAggregator $aggregator - * @param array $singleObjectListeners - * - * @return \Generator - * @throws Throwable - */ - private function createUploadPromises( - iterable $files, - array $config, - ?callable $uploadObjectRequestModifier, - ?callable $failurePolicyCallback, - string $sourceDirectory, - string $targetBucket, - string $baseDir, - string $delimiter, - string $s3Prefix, - DirectoryTransferProgressAggregator $aggregator, - array $singleObjectListeners - ): \Generator - { - foreach ($files as $file) { - $fileSize = filesize($file); - $aggregator->incrementTotals( - $fileSize !== false ? $fileSize : 0 - ); - - $relativePath = substr($file, strlen($baseDir)); - if (str_contains($relativePath, $delimiter) && $delimiter !== '/') { - throw new S3TransferException( - "The filename `$relativePath` must not contain the provided delimiter `$delimiter`" - ); - } - - $objectKey = $s3Prefix.$relativePath; - $objectKey = str_replace( - DIRECTORY_SEPARATOR, - $delimiter, - $objectKey - ); - $uploadRequestArgs = $this->uploadDirectoryRequest->getUploadRequestArgs(); - $uploadRequestArgs['Bucket'] = $targetBucket; - $uploadRequestArgs['Key'] = $objectKey; - - if ($uploadObjectRequestModifier !== null) { - $uploadObjectRequestModifier($uploadRequestArgs); - } - - $uploadObject = $this->uploadObject; - $uploadConfig = $config; - $uploadConfig['track_progress'] = false; - yield $uploadObject( - $this->s3Client, - new UploadRequest( - $file, - $uploadRequestArgs, - $uploadConfig, - listeners: array_merge( - [$aggregator], - array_map( - fn($listener) => clone $listener, - $singleObjectListeners - ) - ), - progressTracker: null - ) - )->then(function (UploadResult $response) { - $this->objectsUploaded++; - - return $response; - })->otherwise(function (Throwable $reason) use ( - $targetBucket, - $sourceDirectory, - $failurePolicyCallback, - $uploadRequestArgs - ) { - $this->objectsFailed++; - if($failurePolicyCallback !== null) { - call_user_func( - $failurePolicyCallback, - $uploadRequestArgs, - [ - "source_directory" => $sourceDirectory, - "bucket_to" => $targetBucket, - ], - $reason, - new UploadDirectoryResult( - $this->objectsUploaded, - $this->objectsFailed - ) - ); - - return; - } - - throw $reason; - }); - } - } - - /** - * Iterate source files applying traversal config and filter. - * - * @param string $sourceDirectory - * @param array $config - * @param callable|null $filter - * - * @return \Generator - */ - private function iterateSourceFiles( - string $sourceDirectory, - array $config, - ?callable $filter - ): \Generator { - $dirIterator = new RecursiveDirectoryIterator($sourceDirectory); - - $flags = FilesystemIterator::SKIP_DOTS; - if ($config['follow_symbolic_links'] ?? false) { - $flags |= FilesystemIterator::FOLLOW_SYMLINKS; - } - - $dirIterator->setFlags($flags); - - if ($config['recursive'] ?? false) { - $dirIterator = new RecursiveIteratorIterator( - $dirIterator, - RecursiveIteratorIterator::SELF_FIRST - ); - if (isset($config['max_depth'])) { - $dirIterator->setMaxDepth($config['max_depth']); - } - } - - $dirVisited = []; - $files = filter( - $dirIterator, - function ($file) use ($filter, &$dirVisited) { - if (is_dir($file)) { - // To avoid circular symbolic links traversal - $dirRealPath = realpath($file); - if ($dirRealPath !== false) { - if ($dirVisited[$dirRealPath] ?? false) { - throw new S3TransferException( - "A circular symbolic link traversal has been detected at $file -> $dirRealPath" - ); - } - - $dirVisited[$dirRealPath] = true; - } - } - - if ($filter !== null) { - return !is_dir($file) && $filter($file); - } - - return !is_dir($file); - } - ); - - foreach ($files as $file) { - yield $file; - } - } - - /** - * @param string $sourceDirectory - * @param string $bucket - * @param string $s3Prefix - * - * @return string - */ - private function buildDirectoryIdentifier( - string $sourceDirectory, - string $bucket, - string $s3Prefix - ): string { - return sprintf( - 'upload:%s->%s/%s', - rtrim($sourceDirectory, DIRECTORY_SEPARATOR), - $bucket, - $s3Prefix - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Exception/FileDownloadException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Exception/FileDownloadException.php deleted file mode 100644 index 9202775f6..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Exception/FileDownloadException.php +++ /dev/null @@ -1,5 +0,0 @@ -resumeFilePath = $resumeFilePath; - $this->requestArgs = $requestArgs; - $this->config = $config; - $this->currentSnapshot = $currentSnapshot; - } - - /** - * Serialize the resumable state to JSON format. - * - * @return string JSON-encoded state - */ - public abstract function toJson(): string; - - /** - * Deserialize a resumable state from JSON format. - * - * @param string $json JSON-encoded state - * @return self - * @throws S3TransferException If the JSON is invalid or missing required fields - */ - public static abstract function fromJson(string $json): self; - - /** - * Load a resumable state from a file. - * - * @param string $filePath Path to the resume file - * @return self - * @throws S3TransferException If the file cannot be read or is invalid - */ - public static abstract function fromFile(string $filePath): self; - - /** - * Save the resumable state to a file. - * When a file path is not provided by default it will use - * the `resumeFilePath` property. - * - * @param string|null $filePath Path where the resume file should be saved - */ - public function toFile(?string $filePath = null): void - { - $saveFileToPath = $filePath ?? $this->resumeFilePath; - - // Ensure directory exists - $resumeDir = dirname($saveFileToPath); - if (!is_dir($resumeDir) - && !mkdir($resumeDir, 0755, true)) { - throw new S3TransferException( - "Failed to create resume directory: $resumeDir" - ); - } - - $json = $this->toJson(); - $signature = hash(self::SIGNATURE_CHECKSUM_ALGORITHM, $json); - $dataWithSignature = json_encode([ - 'signature' => $signature, - 'data' => json_decode($json, true) - ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); - - $result = file_put_contents($saveFileToPath, $dataWithSignature, LOCK_EX); - if ($result === false) { - throw new S3TransferException( - "Failed to write resume file: $saveFileToPath" - ); - } - } - - /** - * @param string|null $filePath - * - * @return void - */ - public function deleteResumeFile(?string $filePath = null): void - { - $resumeFilePath = $filePath ?? $this->resumeFilePath; - if (file_exists($resumeFilePath)) { - unlink($resumeFilePath); - } - } - - /** - * @return string - */ - public function getResumeFilePath(): string - { - return $this->resumeFilePath; - } - - /** - * @return array - */ - public function getRequestArgs(): array - { - return $this->requestArgs; - } - - /** - * @return array - */ - public function getConfig(): array - { - return $this->config; - } - - /** - * @return string - */ - public function getBucket(): string - { - return $this->requestArgs['Bucket']; - } - - /** - * @return string - */ - public function getKey(): string - { - return $this->requestArgs['Key']; - } - - /** - * @return array - */ - public function getCurrentSnapshot(): array - { - return $this->currentSnapshot; - } - - /** - * Update the current snapshot. - * - * @param array $snapshot The new snapshot data - */ - public function updateCurrentSnapshot(array $snapshot): void - { - $this->currentSnapshot = $snapshot; - } - - /** - * Check if a file path is a valid resume file. - * - * @param string $filePath - * @return bool - */ - public static function isResumeFile(string $filePath): bool - { - // Check file extension - if (!str_ends_with($filePath, '.resume')) { - return false; - } - - // Check if file exists and is readable - if (!file_exists($filePath) || !is_readable($filePath)) { - return false; - } - - // Validate file content by attempting to parse it - try { - $json = file_get_contents($filePath); - if ($json === false) { - return false; - } - - $data = json_decode($json, true); - if (json_last_error() !== JSON_ERROR_NONE) { - return false; - } - - // Check for required version field - return isset($data['data']) && isset($data['signature']); - } catch (\Exception $e) { - return false; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/AbstractTransferRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/AbstractTransferRequest.php deleted file mode 100644 index 8dde8ede5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/AbstractTransferRequest.php +++ /dev/null @@ -1,110 +0,0 @@ - 'bool', - ]; - - /** @var array */ - protected array $listeners; - - /** @var AbstractTransferListener|null */ - protected ?AbstractTransferListener $progressTracker; - - /** @var array */ - protected array $singleObjectListeners; - - /** @var array */ - protected array $config; - - /** - * @param array $listeners - * @param AbstractTransferListener|null $progressTracker - * @param array $config - */ - public function __construct( - array $listeners, - ?AbstractTransferListener $progressTracker, - array $config, - array $singleObjectListeners = [] - ) { - $this->listeners = $listeners; - $this->progressTracker = $progressTracker; - $this->singleObjectListeners = $singleObjectListeners; - $this->config = $config; - } - - /** - * Get current listeners. - * - * @return array - */ - public function getListeners(): array - { - return $this->listeners; - } - - /** - * Get the progress tracker. - * - * @return AbstractTransferListener|null - */ - public function getProgressTracker(): ?AbstractTransferListener - { - return $this->progressTracker; - } - - /** - * Get listeners that should receive single-object events. - * - * @return array - */ - public function getSingleObjectListeners(): array - { - return $this->singleObjectListeners; - } - - /** - * @return array - */ - public function getConfig(): array - { - return $this->config; - } - - /** - * @param array $defaultConfig - * - * @return void - */ - public function updateConfigWithDefaults(array $defaultConfig): void - { - foreach (static::$configKeys as $key => $_) { - if (isset($defaultConfig[$key]) && empty($this->config[$key])) { - $this->config[$key] = $defaultConfig[$key]; - } - } - } - - /** - * For validating config. By default, it provides an empty - * implementation. - * @return void - */ - public function validateConfig(): void { - foreach (static::$configKeys as $key => $type) { - if (isset($this->config[$key]) - && !call_user_func('is_' . $type, $this->config[$key])) { - throw new InvalidArgumentException( - "The provided config `$key` must be $type." - ); - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryRequest.php deleted file mode 100644 index 43bbd4ca3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryRequest.php +++ /dev/null @@ -1,140 +0,0 @@ - 'string', - 'filter' => 'callable', - 'download_object_request_modifier' => 'callable', - 'failure_policy' => 'callable', - 'max_concurrency' => 'int', - 'track_progress' => 'bool', - 'target_part_size_bytes' => 'int', - 'list_objects_v2_args' => 'array', - 'fails_when_destination_exists' => 'bool', - ]; - public const DEFAULT_MAX_CONCURRENCY = 100; - - /** @var string */ - private string $sourceBucket; - - /** @var string */ - private string $destinationDirectory; - - /** @var array */ - private readonly array $downloadRequestArgs; - - /** - * @param string $sourceBucket The bucket from where the files are going to be - * downloaded from. - * @param string $destinationDirectory The destination path where the downloaded - * files will be placed in. - * @param array $downloadRequestArgs - * @param array $config The config options for this download directory operation. - * - s3_prefix: (string, optional) This parameter will be considered just if - * not provided as part of the list_objects_v2_args config option. - * - filter: (Closure, optional) A callable which will receive an object key as - * parameter and should return true or false in order to determine - * whether the object should be downloaded. - * - download_object_request_modifier: (Closure, optional) A function that will - * be invoked right before the download request is performed and that will - * receive as parameter the request arguments for each request. - * - failure_policy: (Closure, optional) A function that will be invoked - * on a download failure and that will receive as parameters: - * - $requestArgs: (array) The arguments for the request that originated - * the failure. - * - $downloadDirectoryRequestArgs: (array) The arguments for the download - * directory request. - * - $reason: (Throwable) The exception that originated the request failure. - * - $downloadDirectoryResponse: (DownloadDirectoryResult) The download response - * to that point in the upload process. - * - track_progress: (bool, optional) Overrides the config option set - * in the transfer manager instantiation to decide whether transfer - * progress should be tracked. - * - target_part_size_bytes: (int, optional) The part size in bytes - * to be used in a range multipart download. - * - fails_when_destination_exists: (bool) Whether to fail when a destination - * file exists. - * - max_concurrency: (int, optional) The max number of concurrent downloads. - * - list_objects_v2_args: (array, optional) The arguments to be included - * as part of the listObjectV2 request in order to fetch the objects to - * be downloaded. The most common arguments would be: - * - MaxKeys: (int) Sets the maximum number of keys returned in the response. - * - Prefix: (string) To limit the response to keys that begin with the - * specified prefix. - * @param AbstractTransferListener[] $listeners Directory-level listeners that receive directory snapshots. - * @param AbstractTransferListener|null $progressTracker Directory-level progress tracker. - * @param array $singleObjectListeners Per-object listeners that receive single-object snapshots. - */ - public function __construct( - string $sourceBucket, - string $destinationDirectory, - array $downloadRequestArgs = [], - array $config = [], - array $listeners = [], - ?AbstractTransferListener $progressTracker = null, - array $singleObjectListeners = [] - ) { - parent::__construct( - $listeners, - $progressTracker, - $config, - $singleObjectListeners - ); - if (ArnParser::isArn($sourceBucket)) { - $sourceBucket = ArnParser::parse($sourceBucket)->getResource(); - } - - $this->sourceBucket = $sourceBucket; - $this->destinationDirectory = $destinationDirectory; - $this->downloadRequestArgs = $downloadRequestArgs; - } - - /** - * @return string - */ - public function getSourceBucket(): string - { - return $this->sourceBucket; - } - - /** - * @return string - */ - public function getDestinationDirectory(): string - { - return $this->destinationDirectory; - } - - /** - * @return array - */ - public function getDownloadRequestArgs(): array - { - return $this->downloadRequestArgs; - } - - /** - * Helper method to validate the destination directory exists. - * - * @return void - */ - public function validateDestinationDirectory(): void - { - if (!file_exists($this->destinationDirectory)) { - mkdir($this->destinationDirectory, 0755, true); - } - - if (!is_dir($this->destinationDirectory)) { - throw new InvalidArgumentException( - "Destination directory `$this->destinationDirectory` is not a directory." - ); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryResult.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryResult.php deleted file mode 100644 index 36a35eea3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryResult.php +++ /dev/null @@ -1,68 +0,0 @@ -objectsDownloaded = $objectsDownloaded; - $this->objectsFailed = $objectsFailed; - $this->reason = $reason; - } - - /** - * @return int - */ - public function getObjectsDownloaded(): int - { - return $this->objectsDownloaded; - } - - /** - * @return int - */ - public function getObjectsFailed(): int - { - return $this->objectsFailed; - } - - /** - * @return Throwable|null - */ - public function getReason(): ?Throwable - { - return $this->reason; - } - - /** - * @return string - */ - public function __toString(): string - { - return sprintf( - "DownloadDirectoryResult: %d objects downloaded, %d objects failed", - $this->objectsDownloaded, - $this->objectsFailed - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadFileRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadFileRequest.php deleted file mode 100644 index aa065cae0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadFileRequest.php +++ /dev/null @@ -1,68 +0,0 @@ -destination = $destination; - $this->failsWhenDestinationExists = $failsWhenDestinationExists; - $this->downloadRequest = DownloadRequest::fromDownloadRequestAndDownloadHandler( - $downloadRequest, - new FileDownloadHandler( - $destination, - $failsWhenDestinationExists, - $downloadRequest->getConfig()['resume_enabled'] ?? false - ) - ); - } - - /** - * @return string - */ - public function getDestination(): string - { - return $this->destination; - } - - /** - * @return bool - */ - public function isFailsWhenDestinationExists(): bool - { - return $this->failsWhenDestinationExists; - } - - /** - * @return DownloadRequest - */ - public function getDownloadRequest(): DownloadRequest - { - return $this->downloadRequest; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadRequest.php deleted file mode 100644 index 60dbdfde0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadRequest.php +++ /dev/null @@ -1,159 +0,0 @@ - 'string', - 'multipart_download_type' => 'string', - 'track_progress' => 'bool', - 'concurrency' => 'int', - 'resume_enabled' => 'bool', - 'resume_file_path' => 'string', - 'target_part_size_bytes' => 'int', - ]; - - /** @var string|array|null */ - private string|array|null $source; - - /** @var array */ - private array $downloadRequestArgs; - - /** @var AbstractDownloadHandler|null */ - private ?AbstractDownloadHandler $downloadHandler; - - /** - * @param string|array|null $source The object to be downloaded from S3. - * It can be either a string with a S3 URI or an array with a Bucket and Key - * properties set. - * @param array $downloadRequestArgs - * @param array $config The configuration to be used for this operation: - * - multipart_download_type: (string, optional) - * Overrides the resolved value from the transfer manager config. - * - response_checksum_validation: (string, optional) Overrides the resolved - * value from transfer manager config for whether checksum validation - * should be done. This option will be considered just if ChecksumMode - * is not present in the request args. - * - track_progress: (bool) Overrides the config option set in the transfer - * manager instantiation to decide whether transfer progress should be - * tracked. - * - target_part_size_bytes: (int) The part size in bytes to be used - * in a range multipart download. If this parameter is not provided - * then it fallbacks to the transfer manager `target_part_size_bytes` - * config value. - * - resume_enabled: (bool): To enable resuming a multipart download when a - * failure occurs. - * - resume_file_path (string, optional): To override the default resume file - * location to be generated. If specified the file name must end in `.resume` - * otherwise it will be added automatically. - * @param AbstractDownloadHandler|null $downloadHandler - * @param AbstractTransferListener[]|null $listeners - * @param AbstractTransferListener|null $progressTracker - */ - public function __construct( - string|array|null $source, - array $downloadRequestArgs = [], - array $config = [], - ?AbstractDownloadHandler $downloadHandler = null, - array $listeners = [], - ?AbstractTransferListener $progressTracker = null - ) { - parent::__construct($listeners, $progressTracker, $config); - $this->source = $source; - $this->downloadRequestArgs = $downloadRequestArgs; - $this->config = $config; - if ($downloadHandler === null) { - $downloadHandler = new StreamDownloadHandler(); - } - $this->downloadHandler = $downloadHandler; - } - - /** - * @param DownloadRequest $downloadRequest - * @param FileDownloadHandler $downloadHandler - * - * @return self - */ - public static function fromDownloadRequestAndDownloadHandler( - DownloadRequest $downloadRequest, - FileDownloadHandler $downloadHandler - ): self - { - return new self( - $downloadRequest->getSource(), - $downloadRequest->getObjectRequestArgs(), - $downloadRequest->getConfig(), - $downloadHandler, - $downloadRequest->getListeners(), - $downloadRequest->getProgressTracker() - ); - } - - /** - * @return array|string|null - */ - public function getSource(): array|string|null - { - return $this->source; - } - - /** - * @return array - */ - public function getObjectRequestArgs(): array - { - return $this->downloadRequestArgs; - } - - /** - * @return AbstractDownloadHandler - */ - public function getDownloadHandler(): AbstractDownloadHandler - { - return $this->downloadHandler; - } - - /** - * Helper method to normalize the source as an array with: - * - Bucket - * - Key - * - * @return array - */ - public function normalizeSourceAsArray(): array - { - // If source is null then fall back to getObjectRequest. - $source = $this->getSource() ?? [ - 'Bucket' => $this->downloadRequestArgs['Bucket'] ?? null, - 'Key' => $this->downloadRequestArgs['Key'] ?? null, - ]; - if (is_string($source)) { - $sourceAsArray = S3TransferManager::s3UriAsBucketAndKey($source); - } elseif (is_array($source)) { - $sourceAsArray = $source; - } else { - throw new S3TransferException( - "Unsupported source type `" . gettype($source) . "`" - ); - } - - foreach (['Bucket', 'Key'] as $reqKey) { - if (empty($sourceAsArray[$reqKey])) { - throw new \InvalidArgumentException( - "`$reqKey` is required but not provided in " - . implode(', ', array_keys($sourceAsArray)) . "." - ); - } - } - - return $sourceAsArray; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadResult.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadResult.php deleted file mode 100644 index 64152faaf..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadResult.php +++ /dev/null @@ -1,30 +0,0 @@ -downloadDataResult = $downloadDataResult; - } - - /** - * @return mixed - */ - public function getDownloadDataResult(): mixed - { - return $this->downloadDataResult; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableDownload.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableDownload.php deleted file mode 100644 index 90138747d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableDownload.php +++ /dev/null @@ -1,300 +0,0 @@ - true) - * @param int $totalNumberOfParts Total number of parts in the download - * @param string|null $temporaryFile Path to the temporary file being downloaded to - * @param string $eTag ETag of the S3 object for consistency verification - * @param int $objectSizeInBytes Total size of the object in bytes - * @param int $fixedPartSize Size of each part in bytes - * @param string $destination Final destination path for the downloaded file - */ - public function __construct( - string $resumeFilePath, - array $requestArgs, - array $config, - array $currentSnapshot, - array $initialRequestResult, - array $partsCompleted, - int $totalNumberOfParts, - ?string $temporaryFile, - string $eTag, - int $objectSizeInBytes, - int $fixedPartSize, - string $destination - ) { - parent::__construct( - $resumeFilePath, - $requestArgs, - $config, - $currentSnapshot, - ); - $this->initialRequestResult = $initialRequestResult; - $this->partsCompleted = $partsCompleted; - $this->totalNumberOfParts = $totalNumberOfParts; - $this->temporaryFile = $temporaryFile; - $this->eTag = $eTag; - $this->objectSizeInBytes = $objectSizeInBytes; - $this->fixedPartSize = $fixedPartSize; - $this->destination = $destination; - } - - /** - * Serialize the resumable download state to JSON format. - * - * @return string JSON-encoded state - */ - public function toJson(): string - { - $data = [ - 'version' => self::VERSION, - 'resumeFilePath' => $this->resumeFilePath, - 'requestArgs' => $this->requestArgs, - 'config' => $this->config, - 'initialRequestResult' => $this->initialRequestResult, - 'currentSnapshot' => $this->currentSnapshot, - 'partsCompleted' => $this->partsCompleted, - 'totalNumberOfParts' => $this->totalNumberOfParts, - 'temporaryFile' => $this->temporaryFile, - 'eTag' => $this->eTag, - 'objectSizeInBytes' => $this->objectSizeInBytes, - 'fixedPartSize' => $this->fixedPartSize, - 'destination' => $this->destination, - ]; - - return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); - } - - /** - * Deserialize a resumable download state from JSON format. - * - * @param string $json JSON-encoded state - * @return self - * @throws S3TransferException If the JSON is invalid or missing required fields - */ - public static function fromJson(string $json): self - { - $data = json_decode($json, true); - - if (json_last_error() !== JSON_ERROR_NONE) { - throw new S3TransferException( - 'Failed to parse resume file: ' . json_last_error_msg() - ); - } - - if (!is_array($data)) { - throw new S3TransferException( - 'Invalid resume file format: expected JSON object' - ); - } - - // Validate version - if (!isset($data['version']) || $data['version'] !== self::VERSION) { - throw new S3TransferException( - 'Invalid or unsupported resume file version' - ); - } - - // Validate required fields - $requiredFields = [ - 'resumeFilePath', - 'requestArgs', - 'config', - 'initialRequestResult', - 'currentSnapshot', - 'partsCompleted', - 'totalNumberOfParts', - 'temporaryFile', - 'eTag', - 'objectSizeInBytes', - 'fixedPartSize', - 'destination', - ]; - - foreach ($requiredFields as $field) { - if (!array_key_exists($field, $data)) { - throw new S3TransferException( - "Invalid resume file: missing required field '$field'" - ); - } - } - - return new self( - $data['resumeFilePath'], - $data['requestArgs'], - $data['config'], - $data['currentSnapshot'], - $data['initialRequestResult'], - $data['partsCompleted'], - $data['totalNumberOfParts'], - $data['temporaryFile'], - $data['eTag'], - $data['objectSizeInBytes'], - $data['fixedPartSize'], - $data['destination'] - ); - } - - /** - * @param string $filePath - * - * @return self - */ - public static function fromFile(string $filePath): self - { - if (!file_exists($filePath)) { - throw new S3TransferException( - "Resume file does not exist: $filePath" - ); - } - $content = file_get_contents($filePath); - if ($content === false) { - throw new S3TransferException( - "Failed to read resume file: $filePath" - ); - } - - $fileData = json_decode($content, true); - if (json_last_error() !== JSON_ERROR_NONE) { - throw new S3TransferException( - 'Failed to parse resume file: ' . json_last_error_msg() - ); - } - - // Validate signature if present - if (isset($fileData['signature'], $fileData['data'])) { - $expectedSignature = hash( - self::SIGNATURE_CHECKSUM_ALGORITHM, - json_encode( - $fileData['data'], - JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES - ) - ); - - if (!hash_equals($fileData['signature'], $expectedSignature)) { - throw new S3TransferException( - 'Resume file integrity check failed: signature mismatch' - ); - } - - $json = json_encode($fileData['data']); - } else { - // Legacy format without signature - $json = $content; - } - - return self::fromJson($json); - } - - /** - * @return array - */ - public function getInitialRequestResult(): array - { - return $this->initialRequestResult; - } - - /** - * @return array - */ - public function getPartsCompleted(): array - { - return $this->partsCompleted; - } - - /** - * @return int - */ - public function getTotalNumberOfParts(): int - { - return $this->totalNumberOfParts; - } - - /** - * @return string|null - */ - public function getTemporaryFile(): ?string - { - return $this->temporaryFile; - } - - /** - * @return string - */ - public function getETag(): string - { - return $this->eTag; - } - - /** - * @return int - */ - public function getObjectSizeInBytes(): int - { - return $this->objectSizeInBytes; - } - - /** - * @return int - */ - public function getFixedPartSize(): int - { - return $this->fixedPartSize; - } - - /** - * @return string - */ - public function getDestination(): string - { - return $this->destination; - } - - /** - * Mark a part as completed. - * - * @param int $partNumber The part number to mark as completed - */ - public function markPartCompleted(int $partNumber): void - { - $this->partsCompleted[$partNumber] = true; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableUpload.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableUpload.php deleted file mode 100644 index 7c553e05f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableUpload.php +++ /dev/null @@ -1,239 +0,0 @@ -uploadId = $uploadId; - $this->partsCompleted = $partsCompleted; - $this->source = $source; - $this->objectSize = $objectSize; - $this->partSize = $partSize; - $this->isFullObjectChecksum = $isFullObjectChecksum; - } - - /** - * @return string - */ - public function toJson(): string - { - return json_encode([ - 'version' => self::VERSION, - 'resumeFilePath' => $this->resumeFilePath, - 'requestArgs' => $this->requestArgs, - 'config' => $this->config, - 'uploadId' => $this->uploadId, - 'partsCompleted' => $this->partsCompleted, - 'currentSnapshot' => $this->currentSnapshot, - 'source' => $this->source, - 'objectSize' => $this->objectSize, - 'partSize' => $this->partSize, - 'isFullObjectChecksum' => $this->isFullObjectChecksum, - ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); - } - - /** - * @param string $json - * - * @return self - */ - public static function fromJson(string $json): self - { - $data = json_decode($json, true); - if (json_last_error() !== JSON_ERROR_NONE) { - throw new S3TransferException('Failed to parse resume file: ' . json_last_error_msg()); - } - - $requiredFields = [ - 'version', - 'resumeFilePath', - 'requestArgs', - 'config', - 'currentSnapshot', - 'uploadId', - 'partsCompleted', - 'source', - 'objectSize', - 'partSize', - 'isFullObjectChecksum', - ]; - foreach ($requiredFields as $field) { - if (!array_key_exists($field, $data)) { - throw new S3TransferException( - "Invalid resume file: missing required field '$field'" - ); - } - } - - return new self( - $data['resumeFilePath'], - $data['requestArgs'], - $data['config'], - $data['currentSnapshot'], - $data['uploadId'], - $data['partsCompleted'], - $data['source'], - $data['objectSize'], - $data['partSize'], - $data['isFullObjectChecksum'], - ); - } - - /** - * @param string $filePath - * - * @return self - */ - public static function fromFile(string $filePath): self - { - if (!file_exists($filePath)) { - throw new S3TransferException( - "Resume file does not exist: $filePath" - ); - } - $content = file_get_contents($filePath); - if ($content === false) { - throw new S3TransferException( - "Failed to read resume file: $filePath" - ); - } - - $fileData = json_decode($content, true); - if (json_last_error() !== JSON_ERROR_NONE) { - throw new S3TransferException( - 'Failed to parse resume file: ' . json_last_error_msg() - ); - } - - // Validate signature if present - if (isset($fileData['signature'], $fileData['data'])) { - $expectedSignature = hash( - self::SIGNATURE_CHECKSUM_ALGORITHM, - json_encode( - $fileData['data'], - JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES - ) - ); - - if (!hash_equals($fileData['signature'], $expectedSignature)) { - throw new S3TransferException( - 'Resume file integrity check failed: signature mismatch' - ); - } - - $json = json_encode($fileData['data']); - } else { - // Legacy format without signature - $json = $content; - } - - return self::fromJson($json); - } - - /** - * @return string - */ - public function getUploadId(): string - { - return $this->uploadId; - } - - /** - * @return array - */ - public function getPartsCompleted(): array - { - return $this->partsCompleted; - } - - /** - * @return string - */ - public function getSource(): string - { - return $this->source; - } - - /** - * @return int - */ - public function getObjectSize(): int - { - return $this->objectSize; - } - - /** - * @return int - */ - public function getPartSize(): int - { - return $this->partSize; - } - - /** - * @return bool - */ - public function isFullObjectChecksum(): bool - { - return $this->isFullObjectChecksum; - } - - /** - * Mark a part as completed. - * - * @param int $partNumber The part number to mark as completed - */ - public function markPartCompleted(int $partNumber, array $part): void - { - $this->partsCompleted[$partNumber] = $part; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeDownloadRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeDownloadRequest.php deleted file mode 100644 index 926b52234..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeDownloadRequest.php +++ /dev/null @@ -1,71 +0,0 @@ -resumableDownload = $resumableDownload; - $this->downloadHandlerClass = $downloadHandlerClass; - $this->listeners = $listeners; - $this->progressTracker = $progressTracker; - } - - /** - * @return string|ResumableDownload - */ - public function getResumableDownload(): string|ResumableDownload - { - return $this->resumableDownload; - } - - /** - * @return string - */ - public function getDownloadHandlerClass(): string - { - return $this->downloadHandlerClass; - } - - /** - * @return array - */ - public function getListeners(): array - { - return $this->listeners; - } - - /** - * @return AbstractTransferListener|null - */ - public function getProgressTracker(): ?AbstractTransferListener - { - return $this->progressTracker; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeUploadRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeUploadRequest.php deleted file mode 100644 index befd58ace..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeUploadRequest.php +++ /dev/null @@ -1,56 +0,0 @@ -resumableUpload = $resumableUpload; - $this->listeners = $listeners; - $this->progressTracker = $progressTracker; - } - - /** - * @return string|ResumableUpload - */ - public function getResumableUpload(): string|ResumableUpload - { - return $this->resumableUpload; - } - - /** - * @return array - */ - public function getListeners(): array - { - return $this->listeners; - } - - /** - * @return AbstractTransferListener|null - */ - public function getProgressTracker(): ?AbstractTransferListener - { - return $this->progressTracker; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/S3TransferManagerConfig.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/S3TransferManagerConfig.php deleted file mode 100644 index 04669cb7f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/S3TransferManagerConfig.php +++ /dev/null @@ -1,186 +0,0 @@ -targetPartSizeBytes = $targetPartSizeBytes; - $this->multipartUploadThresholdBytes = $multipartUploadThresholdBytes; - $this->requestChecksumCalculation = $requestChecksumCalculation; - $this->responseChecksumValidation = $responseChecksumValidation; - $this->multipartDownloadType = $multipartDownloadType; - $this->concurrency = $concurrency; - $this->trackProgress = $trackProgress; - $this->defaultRegion = $defaultRegion; - } - - /** $config: - * - target_part_size_bytes: (int, default=(8388608 `8MB`)) - * The minimum part size to be used in a multipart upload/download. - * - multipart_upload_threshold_bytes: (int, default=(16777216 `16 MB`)) - * The threshold to decided whether a multipart upload is needed. - * - request_checksum_calculation: (string, default=`when_supported`) - * To decide whether a checksum validation will be applied to the response. - * - response_checksum_validation: (string, default=`when_supported`) - * - multipart_download_type: (string, default='part') - * The download type to be used in a multipart download. - * - concurrency: (int, default=5) - * Maximum number of concurrent operations allowed during a multipart - * upload/download. - * - track_progress: (bool, default=false) - * To enable progress tracker in a multipart upload/download, and or - * a directory upload/download operation. - * - default_region: (string, default="us-east-2") - */ - public static function fromArray(array $config): self { - return new self( - $config['target_part_size_bytes'] - ?? self::DEFAULT_TARGET_PART_SIZE_BYTES, - $config['multipart_upload_threshold_bytes'] - ?? self::DEFAULT_MULTIPART_UPLOAD_THRESHOLD_BYTES, - $config['request_checksum_calculation'] - ?? self::DEFAULT_REQUEST_CHECKSUM_CALCULATION, - $config['response_checksum_validation'] - ?? self::DEFAULT_RESPONSE_CHECKSUM_VALIDATION, - $config['multipart_download_type'] - ?? self::DEFAULT_MULTIPART_DOWNLOAD_TYPE, - $config['concurrency'] - ?? self::DEFAULT_CONCURRENCY, - $config['track_progress'] ?? self::DEFAULT_TRACK_PROGRESS, - $config['default_region'] ?? null - ); - } - - /** - * @return int - */ - public function getTargetPartSizeBytes(): int - { - return $this->targetPartSizeBytes; - } - - /** - * @return int - */ - public function getMultipartUploadThresholdBytes(): int - { - return $this->multipartUploadThresholdBytes; - } - - /** - * @return string - */ - public function getRequestChecksumCalculation(): string - { - return $this->requestChecksumCalculation; - } - - /** - * @return string - */ - public function getResponseChecksumValidation(): string - { - return $this->responseChecksumValidation; - } - - /** - * @return string - */ - public function getMultipartDownloadType(): string - { - return $this->multipartDownloadType; - } - - /** - * @return int - */ - public function getConcurrency(): int - { - return $this->concurrency; - } - - /** - * @return bool - */ - public function isTrackProgress(): bool - { - return $this->trackProgress; - } - - /** - * @return string|null - */ - public function getDefaultRegion(): ?string - { - return $this->defaultRegion; - } - - /** - * @return array - */ - public function toArray(): array - { - return [ - 'target_part_size_bytes' => $this->targetPartSizeBytes, - 'multipart_upload_threshold_bytes' => $this->multipartUploadThresholdBytes, - 'request_checksum_calculation' => $this->requestChecksumCalculation, - 'response_checksum_validation' => $this->responseChecksumValidation, - 'multipart_download_type' => $this->multipartDownloadType, - 'concurrency' => $this->concurrency, - 'track_progress' => $this->trackProgress, - 'default_region' => $this->defaultRegion, - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryRequest.php deleted file mode 100644 index 97da34893..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryRequest.php +++ /dev/null @@ -1,122 +0,0 @@ - 'bool', - 'recursive' => 'bool', - 's3_prefix' => 'string', - 'filter' => 'callable', - 's3_delimiter' => 'string', - 'upload_object_request_modifier' => 'callable', - 'failure_policy' => 'callable', - 'max_concurrency' => 'int', - 'max_depth' => 'int', - 'track_progress' => 'bool', - ]; - public const DEFAULT_MAX_CONCURRENCY = 100; - - /** @var string */ - private string $sourceDirectory; - - /** @var string */ - private string $targetBucket; - - /** @var array */ - private readonly array $uploadRequestArgs; - - /** - * @param string $sourceDirectory The source directory to upload. - * @param string $targetBucket The name of the bucket to upload objects to. - * @param array $uploadRequestArgs The extract arguments to be passed in - * each upload request. - * @param array $config - * - follow_symbolic_links: (boolean, optional) Whether to follow symbolic links when - * traversing the file tree. - * - recursive: (boolean, optional) Whether to upload directories recursively. - * - s3_prefix: (string, optional) The S3 key prefix to use for each object. - * If not provided, files will be uploaded to the root of the bucket. - * - filter: (callable, optional) A callback to allow users to filter out unwanted files. - * It is invoked for each file. An example implementation is a predicate - * that takes a file and returns a boolean indicating whether this file - * should be uploaded. - * - s3_delimiter: The S3 delimiter. A delimiter causes a list operation - * to roll up all the keys that share a common prefix into a single summary list result. - * - upload_object_request_modifier: (callable, optional) A callback mechanism - * to allow customers to update individual putObjectRequest that the S3 Transfer Manager generates. - * - failure_policy: (callable, optional) The failure policy to handle failed requests. - * - max_concurrency: (int, optional) The max number of concurrent uploads. - * - max_depth: (int, optional) To indicate the maximum depth of the recursive - * file tree walk. By default, it will use the built-in default value which is -1. - * @param array $listeners Directory-level listeners that receive directory snapshots. - * @param AbstractTransferListener|null $progressTracker Directory-level progress tracker. - * @param array $singleObjectListeners Per-object listeners that receive single-object snapshots. - */ - public function __construct( - string $sourceDirectory, - string $targetBucket, - array $uploadRequestArgs = [], - array $config = [], - array $listeners = [], - ?AbstractTransferListener $progressTracker = null, - array $singleObjectListeners = [] - ) { - parent::__construct( - $listeners, - $progressTracker, - $config, - $singleObjectListeners - ); - $this->sourceDirectory = $sourceDirectory; - if (ArnParser::isArn($targetBucket)) { - $targetBucket = ArnParser::parse($targetBucket)->getResource(); - } - $this->targetBucket = $targetBucket; - $this->uploadRequestArgs = $uploadRequestArgs; - $this->config = $config; - } - - /** - * @return string - */ - public function getSourceDirectory(): string - { - return $this->sourceDirectory; - } - - /** - * @return string - */ - public function getTargetBucket(): string - { - return $this->targetBucket; - } - - /** - * @return array - */ - public function getUploadRequestArgs(): array - { - return $this->uploadRequestArgs; - } - - /** - * Helper method to validate source directory - * @return void - */ - public function validateSourceDirectory(): void - { - if (!is_dir($this->sourceDirectory)) { - throw new InvalidArgumentException( - "Please provide a valid directory path. " - . "Provided = " . $this->sourceDirectory - ); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryResult.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryResult.php deleted file mode 100644 index 2b4f58f80..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryResult.php +++ /dev/null @@ -1,69 +0,0 @@ -objectsUploaded = $objectsUploaded; - $this->objectsFailed = $objectsFailed; - $this->reason = $exception; - } - - /** - * @return int - */ - public function getObjectsUploaded(): int - { - return $this->objectsUploaded; - } - - /** - * @return int - */ - public function getObjectsFailed(): int - { - return $this->objectsFailed; - } - - /** - * @return Throwable|null - */ - public function getReason(): ?Throwable - { - return $this->reason; - } - - /** - * @return string - */ - public function __toString(): string - { - return sprintf( - "UploadDirectoryResult: %d objects uploaded, %d objects failed", - $this->objectsUploaded, - $this->objectsFailed - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadRequest.php deleted file mode 100644 index fcce23396..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadRequest.php +++ /dev/null @@ -1,128 +0,0 @@ - 'int', - 'target_part_size_bytes' => 'int', - 'track_progress' => 'bool', - 'concurrency' => 'int', - 'request_checksum_calculation' => 'string', - 'resume_enabled' => 'bool', - 'resume_file_path' => 'string', - ]; - - /** @var StreamInterface|string */ - private StreamInterface|string $source; - - /** @var array */ - private array $uploadRequestArgs; - - /** - * @param string|StreamInterface $source - * @param array $uploadRequestArgs The putObject request arguments. - * Required parameters would be: - * - Bucket: (string, required) - * - Key: (string, required) - * @param array $config The config options for this upload operation. - * - multipart_upload_threshold_bytes: (int, optional) - * To override the default threshold for when to use multipart upload. - * - target_part_size_bytes: (int, optional) To override the default - * target part size in bytes. - * - track_progress: (bool, optional) To override the default option for - * enabling progress tracking. If this option is resolved as true and - * a progressTracker parameter is not provided then, a default implementation - * will be resolved. This option is intended to make the operation to use - * a default progress tracker implementation when $progressTracker is null. - * - concurrency: (int, optional) To override default value for concurrency. - * - request_checksum_calculation: (string, optional, defaulted to `when_supported`) - * - resume_enabled: (bool): To enable resuming a multipart download when a - * failure occurs. - * - resume_file_path (string, optional): To override the default resume file - * location to be generated. If specified the file name must end in `.resume` - * otherwise it will be added automatically. - * @param AbstractTransferListener[]|null $listeners - * @param AbstractTransferListener|null $progressTracker - * - */ - public function __construct( - StreamInterface|string $source, - array $uploadRequestArgs, - array $config = [], - array $listeners = [], - ?AbstractTransferListener $progressTracker = null - ) { - parent::__construct($listeners, $progressTracker, $config); - $this->source = $source; - $this->uploadRequestArgs = $uploadRequestArgs; - } - - /** - * Get the source. - * - * @return StreamInterface|string - */ - public function getSource(): StreamInterface|string - { - return $this->source; - } - - /** - * Get the put object request. - * - * @return array - */ - public function getUploadRequestArgs(): array - { - return $this->uploadRequestArgs; - } - - /** - * Helper method for validating the given source. - * - * @return void - */ - public function validateSource(): void - { - if (is_string($this->getSource()) && !is_readable($this->getSource())) { - throw new InvalidArgumentException( - "Invalid source `". $this->getSource() . "` provided. \n". - "Please provide a valid readable file path or a valid stream as source." - ); - } - } - - /** - * Helper method for validating required parameters. - * - * @param string|null $customMessage - * @return void - */ - public function validateRequiredParameters( - ?string $customMessage = null - ): void - { - $requiredParametersWithArgs = [ - 'Bucket' => $this->uploadRequestArgs['Bucket'] ?? null, - 'Key' => $this->uploadRequestArgs['Key'] ?? null, - ]; - foreach ($requiredParametersWithArgs as $key => $value) { - if (empty($value)) { - if ($customMessage !== null) { - throw new InvalidArgumentException($customMessage); - } - - // Fallback to default error message - throw new InvalidArgumentException( - "The `$key` parameter must be provided as part of the request arguments." - ); - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadResult.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadResult.php deleted file mode 100644 index 30029082b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadResult.php +++ /dev/null @@ -1,16 +0,0 @@ -resumableUpload = $resumableUpload; - $this->isResuming = $resumableUpload !== null; - if ($this->isResuming) { - $config = $resumableUpload->getConfig(); - $uploadId = $resumableUpload->getUploadId(); - $partsCompleted = $resumableUpload->getPartsCompleted(); - $snapshotData = $resumableUpload->getCurrentSnapshot(); - if (!empty($snapshotData)) { - $currentSnapshot = TransferProgressSnapshot::fromArray( - $snapshotData - ); - } - $calculatedObjectSize = $resumableUpload->getObjectSize(); - $isFullObjectChecksum = $resumableUpload->isFullObjectChecksum(); - } - - parent::__construct( - $s3Client, - $requestArgs, - $config, - $uploadId, - $partsCompleted, - $currentSnapshot, - $listenerNotifier - ); - $this->source = $source; - $this->body = $this->parseBody($source); - $this->calculatedObjectSize = $calculatedObjectSize; - $this->isFullObjectChecksum = $isFullObjectChecksum; - $this->evaluateCustomChecksum(); - } - - /** - * @inheritDoc - * - * @return PromiseInterface - */ - protected function createMultipartOperation(): PromiseInterface - { - $createMultipartUploadArgs = $this->requestArgs; - if ($this->requestChecksum !== null) { - $createMultipartUploadArgs['ChecksumType'] = self::CHECKSUM_TYPE_FULL_OBJECT; - $createMultipartUploadArgs['ChecksumAlgorithm'] = $this->requestChecksumAlgorithm; - $this->isFullObjectChecksum = true; - } elseif ($this->config['request_checksum_calculation'] === 'when_supported') { - $this->requestChecksumAlgorithm = $createMultipartUploadArgs['ChecksumAlgorithm'] - ?? self::DEFAULT_CHECKSUM_CALCULATION_ALGORITHM; - $createMultipartUploadArgs['ChecksumAlgorithm'] = $this->requestChecksumAlgorithm; - } - - // Make sure algorithm with full object is a supported one - if (($createMultipartUploadArgs['ChecksumType'] ?? '') === self::CHECKSUM_TYPE_FULL_OBJECT) { - if (stripos($this->requestChecksumAlgorithm, 'crc') !== 0) { - return Create::rejectionFor( - new S3TransferException( - "Full object checksum algorithm must be `CRC` family base." - ) - ); - } - } - - if ($this->isResuming && $this->uploadId !== null) { - // Not need to initialize multipart - return Create::promiseFor(""); - } - - $this->operationInitiated($createMultipartUploadArgs); - $command = $this->s3Client->getCommand( - 'CreateMultipartUpload', - $createMultipartUploadArgs - ); - - return $this->s3Client->executeAsync($command) - ->then(function (ResultInterface $result) { - $this->uploadId = $result['UploadId']; - }); - } - - /** - * Process a multipart upload operation. - * - * @return PromiseInterface - */ - protected function processMultipartOperation(): PromiseInterface - { - $uploadPartCommandArgs = $this->requestArgs; - $this->calculatedObjectSize = 0; - $partSize = $this->calculatePartSize(); - $partsCount = ceil($this->getTotalSize() / $partSize); - $uploadPartCommandArgs['UploadId'] = $this->uploadId; - // Customer provided checksum - if ($this->requestChecksum !== null) { - // To avoid default calculation for individual parts - $uploadPartCommandArgs['@context']['request_checksum_calculation'] = 'when_required'; - unset($uploadPartCommandArgs['Checksum'. strtoupper($this->requestChecksumAlgorithm)]); - } elseif ($this->requestChecksumAlgorithm !== null) { - $uploadPartCommandArgs['ChecksumAlgorithm'] = $this->requestChecksumAlgorithm; - } - - $promises = $this->createUploadPartPromises( - $uploadPartCommandArgs, - $partSize, - $partsCount, - ); - - return Each::ofLimitAll($promises, $this->config['concurrency']); - } - - /** - * @inheritDoc - * - * @return PromiseInterface - */ - protected function completeMultipartOperation(): PromiseInterface - { - $this->sortParts(); - $completeMultipartUploadArgs = $this->requestArgs; - $completeMultipartUploadArgs['UploadId'] = $this->uploadId; - $completeMultipartUploadArgs['MultipartUpload'] = [ - 'Parts' => array_values($this->partsCompleted) - ]; - $completeMultipartUploadArgs['MpuObjectSize'] = $this->getTotalSize(); - - if ($this->isFullObjectChecksum && $this->requestChecksum !== null) { - $completeMultipartUploadArgs['ChecksumType'] = self::CHECKSUM_TYPE_FULL_OBJECT; - $completeMultipartUploadArgs[ - 'Checksum' . strtoupper($this->requestChecksumAlgorithm) - ] = $this->requestChecksum; - } - - $command = $this->s3Client->getCommand( - 'CompleteMultipartUpload', - $completeMultipartUploadArgs - ); - - return $this->s3Client->executeAsync($command) - ->then(function (ResultInterface $result) { - $this->operationCompleted($result); - - // Clean resume file on completion - if ($this->allowResume()) { - $this->resumableUpload?->deleteResumeFile(); - } - - return $result; - }); - } - - /** - * @return PromiseInterface - */ - protected function abortMultipartOperation(): PromiseInterface - { - // When resume is enabled then we skip aborting. - if ($this->allowResume()) { - return Create::promiseFor(""); - } - - $abortMultipartUploadArgs = $this->requestArgs; - $abortMultipartUploadArgs['UploadId'] = $this->uploadId; - $command = $this->s3Client->getCommand( - 'AbortMultipartUpload', - $abortMultipartUploadArgs - ); - - return $this->s3Client->executeAsync($command); - } - - /** - * Sync upload method. - * - * @return UploadResult - */ - public function upload(): UploadResult - { - return $this->promise()->wait(); - } - - /** - * Parses the source into an instance of - * StreamInterface to be read. - * - * @param string|StreamInterface $source - * - * @return StreamInterface - */ - private function parseBody( - string|StreamInterface $source - ): StreamInterface - { - if (is_string($source)) { - // Make sure the files exists - if (!is_readable($source)) { - throw new \InvalidArgumentException( - "The source for this upload must be either a" - . " readable file path or a valid stream." - ); - } - $body = new LazyOpenStream($source, 'r'); - // To make sure the resource is closed. - $this->onCompletionCallbacks[] = function () use ($body) { - $body->close(); - }; - } elseif ($source instanceof StreamInterface) { - $body = $source; - } else { - throw new \InvalidArgumentException( - "The source must be a valid string file path or a StreamInterface." - ); - } - - return $body; - } - - /** - * Evaluates if custom checksum has been provided, - * and if so then, the values are placed in the - * respective properties. - * - * @return void - */ - private function evaluateCustomChecksum(): void - { - // Evaluation for custom provided checksums - $checksumName = ApplyChecksumMiddleware::filterChecksum( - $this->requestArgs - ); - if ($checksumName !== null) { - $this->requestChecksum = $this->requestArgs[$checksumName]; - $this->requestChecksumAlgorithm = str_replace( - 'Checksum', - '', - $checksumName - ); - $this->requestChecksumAlgorithm = strtolower( - $this->requestChecksumAlgorithm - ); - } else { - $this->requestChecksum = null; - $this->requestChecksumAlgorithm = null; - } - } - - /** - * @param array $uploadPartCommandArgs - * @param int $partSize - * @param int $partsCount - * - * @return \Generator - */ - private function createUploadPartPromises( - array $uploadPartCommandArgs, - int $partSize, - int $partsCount - ): \Generator - { - $bytesRead = 0; - $isSeekable = $this->body->isSeekable() - && $this->body->getMetadata('wrapper_type') - === self::STREAM_WRAPPER_TYPE_PLAIN_FILE; - - if ($isSeekable) { - $this->body->rewind(); - } - - $partNo = 0; - while (!$this->body->eof()) { - if ($isSeekable) { - $partBody = new LimitStream( - new LazyOpenStream( - $this->body->getMetadata('uri'), - 'r' - ), - $partSize, - $bytesRead, - ); - } else { - $body = new LimitStream( - $this->body, - $partSize, - $bytesRead, - ); - $body = $this->decorateWithHashes($body, $uploadPartCommandArgs); - $partBody = Utils::streamFor(); - Utils::copyToStream($body, $partBody); - } - - $bodyLength = $partBody->getSize(); - if ($bodyLength === 0) { - $partBody->close(); - break; - } - - $partNo++; - $bytesRead += $bodyLength; - - $uploadPartCommandArgs['PartNumber'] = $partNo; - $uploadPartCommandArgs['ContentLength'] = $bodyLength; - // Attach body - if ($isSeekable) { - $partBody->rewind(); - } - $uploadPartCommandArgs['Body'] = $partBody; - - $this->calculatedObjectSize += $bodyLength; - if ($partNo > self::PART_MAX_NUM) { - return Create::rejectionFor( - "The max number of parts has been exceeded. " . - "Max = " . self::PART_MAX_NUM - ); - } - - if ($isSeekable && $partNo > $partsCount) { - return Create::rejectionFor( - "The current part `$partNo` is over " - . "the expected number of parts `$partsCount`" - ); - } - - $command = $this->s3Client->getCommand( - 'UploadPart', - $uploadPartCommandArgs - ); - - // Advance if behind - if ($bytesRead < $this->body->tell()) { - $this->body->seek($bytesRead); - } - - if (isset($this->partsCompleted[$partNo])) { - // Part already uploaded - continue; - } - - yield $this->s3Client->executeAsync($command) - ->then(function (ResultInterface $result) - use ($command, $partBody) { - $partBody->close(); - // To make sure we don't continue when a failure occurred - if ($this->currentSnapshot->getReason() !== null) { - throw $this->currentSnapshot->getReason(); - } - - $partData = $this->collectPart( - $result, - $command - ); - - // Part Upload Completed Event - $this->partCompleted( - $command['ContentLength'], - $command->toArray(), - $partData, - ); - })->otherwise(function (Throwable $e) use ($partBody) { - $partBody->close(); - $this->partFailed($e); - - throw $e; - }); - } - } - - /** - * @param int $partSize - * @param array $requestArgs - * @param array $partData - * - * @return void - */ - protected function partCompleted( - int $partSize, - array $requestArgs, - array $partData - ): void - { - $newSnapshot = new TransferProgressSnapshot( - $this->currentSnapshot->getIdentifier(), - $this->currentSnapshot->getTransferredBytes() + $partSize, - $this->currentSnapshot->getTotalBytes(), - $this->currentSnapshot->getResponse(), - $this->currentSnapshot->getReason(), - ); - - $this->currentSnapshot = $newSnapshot; - - // Persist resume state if allowed - if ($this->allowResume()) { - $this->persistResumeState($partData); - } - - $this->listenerNotifier?->bytesTransferred([ - AbstractTransferListener::REQUEST_ARGS_KEY => $requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => $this->currentSnapshot - ]); - } - - /** - * Resume works just when the source is a file path and is enabled. - * - * @return bool - */ - private function allowResume(): bool - { - return ($this->config['resume_enabled'] ?? false) - && is_string($this->source); - } - - /** - * Persist the current upload state to a resume file. - * - * @param array $partData - */ - private function persistResumeState(array $partData): void - { - if ($this->resumableUpload === null) { - if ($this->config['resume_file_path'] ?? false) { - $resumeFilePath = $this->config['resume_file_path']; - } else { - $resumeFilePath = $this->source . '.resume'; - } - - $sourceSize = $this->body->getSize() - ?? $this->calculatedObjectSize; - $this->resumableUpload = new ResumableUpload( - $resumeFilePath, - $this->requestArgs, - $this->config, - $this->currentSnapshot->toArray(), - $this->uploadId, - $this->partsCompleted, - $this->source, - $sourceSize, - $this->calculatePartSize(), - $this->isFullObjectChecksum - ); - } - - // Update the completed parts and current snapshot - $this->resumableUpload->markPartCompleted( - $partData['PartNumber'], - $partData - ); - $this->resumableUpload->updateCurrentSnapshot( - $this->currentSnapshot->toArray() - ); - - // Save to file - $this->resumableUpload->toFile(); - } - - /** - * @return int - */ - protected function getTotalSize(): int - { - if ($this->calculatedObjectSize > 0) { - return $this->calculatedObjectSize; - } - - return $this->body->getSize(); - } - - /** - * @param ResultInterface $result - * - * @return UploadResult - */ - protected function createResponse(ResultInterface $result): UploadResult - { - return new UploadResult( - $result->toArray() - ); - } - - /** - * @param StreamInterface $stream - * @param array $data - * - * @return StreamInterface - */ - private function decorateWithHashes( - StreamInterface $stream, - array &$data - ): StreamInterface - { - // Decorate source with a hashing stream - $hash = new PhpHash('sha256'); - return new HashingStream($stream, $hash, function ($result) use (&$data) { - $data['ContentSHA256'] = bin2hex($result); - }); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/PartGetMultipartDownloader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/PartGetMultipartDownloader.php deleted file mode 100644 index a5765e547..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/PartGetMultipartDownloader.php +++ /dev/null @@ -1,44 +0,0 @@ -downloadRequestArgs; - $nextCommandArgs['PartNumber'] = $this->currentPartNo; - - return $nextCommandArgs; - } - - /** - * @inheritDoc - * - * @param Result $result - * - * @return void - */ - protected function computeObjectDimensions(ResultInterface $result): void - { - if (!empty($result['PartsCount'])) { - $this->objectPartsCount = $result['PartsCount']; - } else { - $this->objectPartsCount = 1; - } - - $this->objectSizeInBytes = self::computeObjectSizeFromContentRange( - $result['ContentRange'] ?? "" - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractProgressBarFormat.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractProgressBarFormat.php deleted file mode 100644 index a41cde87c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractProgressBarFormat.php +++ /dev/null @@ -1,90 +0,0 @@ -args = $args; - } - - public function getArgs(): array - { - return $this->args; - } - - /** - * To set multiple arguments at once. - * It does not override all the values, instead - * it adds the arguments individually and if a value - * already exists then that value will be overridden. - * - * @param array $args - * - * @return void - */ - public function setArgs(array $args): void - { - foreach ($args as $key => $value) { - $this->args[$key] = $value; - } - } - - /** - * @param string $key - * @param mixed $value - * - * @return void - */ - public function setArg(string $key, mixed $value): void - { - $this->args[$key] = $value; - } - - /** - * @return string - */ - public function format(): string - { - $parameters = $this->getFormatParameters(); - $defaultParameterValues = $this->getFormatDefaultParameterValues(); - foreach ($parameters as $param) { - if (!array_key_exists($param, $this->args)) { - $this->args[$param] = $defaultParameterValues[$param] ?? ''; - } - } - - $replacements = []; - foreach ($parameters as $param) { - $replacements["|$param|"] = $this->args[$param] ?? ''; - } - - return strtr($this->getFormatTemplate(), $replacements); - } - - /** - * @return string - */ - abstract public function getFormatTemplate(): string; - - /** - * @return array - */ - abstract public function getFormatParameters(): array; - - /** - * @return array - */ - abstract protected function getFormatDefaultParameterValues(): array; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractTransferListener.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractTransferListener.php deleted file mode 100644 index 95403d1b2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractTransferListener.php +++ /dev/null @@ -1,64 +0,0 @@ - ColoredTransferProgressBarFormat::BLACK_COLOR_CODE, - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ConsoleProgressBar.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ConsoleProgressBar.php deleted file mode 100644 index 9a32b9585..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ConsoleProgressBar.php +++ /dev/null @@ -1,103 +0,0 @@ -progressBarChar = $progressBarChar; - $this->progressBarWidth = min( - $progressBarWidth, - self::MAX_PROGRESS_BAR_WIDTH - ); - $this->percentCompleted = $percentCompleted; - $this->progressBarFormat = $progressBarFormat; - } - - /** - * @return string - */ - public function getProgressBarChar(): string - { - return $this->progressBarChar; - } - - /** - * @return int - */ - public function getProgressBarWidth(): int - { - return $this->progressBarWidth; - } - - /** - * @return int - */ - public function getPercentCompleted(): int - { - return $this->percentCompleted; - } - - /** - * @return AbstractProgressBarFormat - */ - public function getProgressBarFormat(): AbstractProgressBarFormat - { - return $this->progressBarFormat; - } - - /** - * Set current progress percent. - * - * @param int $percent - * - * @return void - */ - public function setPercentCompleted(int $percent): void - { - $this->percentCompleted = max(0, min(100, $percent)); - } - - /** - * @inheritDoc - */ - public function render(): string - { - $filledWidth = (int) round(($this->progressBarWidth * $this->percentCompleted) / 100); - $progressBar = str_repeat($this->progressBarChar, $filledWidth) - . str_repeat(' ', $this->progressBarWidth - $filledWidth); - - // Common arguments - $this->progressBarFormat->setArg('progress_bar', $progressBar); - $this->progressBarFormat->setArg('percent', $this->percentCompleted); - - return $this->progressBarFormat->format(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryProgressTracker.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryProgressTracker.php deleted file mode 100644 index 2e933bdba..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryProgressTracker.php +++ /dev/null @@ -1,127 +0,0 @@ -progressBar = $progressBar; - if (get_resource_type($output) !== 'stream') { - throw new \InvalidArgumentException("The type for $output must be a stream"); - } - $this->output = $output; - $this->clear = $clear; - $this->currentSnapshot = $currentSnapshot; - $this->showProgressOnUpdate = $showProgressOnUpdate; - } - - public function getProgressBar(): ProgressBarInterface - { - return $this->progressBar; - } - - public function transferInitiated(array $context): void - { - $this->currentSnapshot = $context[self::PROGRESS_SNAPSHOT_KEY]; - $progressFormat = $this->progressBar->getProgressBarFormat(); - // Probably a common argument - $progressFormat->setArg( - 'object_name', - $this->currentSnapshot->getIdentifier() - ); - $this->updateProgressBar(); - } - - public function bytesTransferred(array $context): bool - { - $this->currentSnapshot = $context[self::PROGRESS_SNAPSHOT_KEY]; - $this->updateProgressBar(); - - return true; - } - - public function transferComplete(array $context): void - { - $this->currentSnapshot = $context[self::PROGRESS_SNAPSHOT_KEY]; - $this->updateProgressBar(true); - } - - public function transferFail(array $context): void - { - $this->currentSnapshot = $context[self::PROGRESS_SNAPSHOT_KEY]; - $this->updateProgressBar(); - } - - public function showProgress(): void - { - if ($this->currentSnapshot === null) { - throw new ProgressTrackerException("There is not snapshot to show progress for."); - } - - if ($this->clear) { - fwrite($this->output, "\033[2J\033[H"); - } - - fwrite($this->output, sprintf( - "\r\n%s", - $this->progressBar->render() - )); - fflush($this->output); - } - - private function updateProgressBar(bool $forceCompletion = false): void - { - if ($this->currentSnapshot === null) { - return; - } - - if (!$forceCompletion) { - $percent = (int) floor($this->currentSnapshot->ratioTransferred() * 100); - $this->progressBar->setPercentCompleted($percent); - } else { - $this->progressBar->setPercentCompleted(100); - } - - $this->progressBar->getProgressBarFormat()->setArgs([ - 'transferred' => min( - $this->currentSnapshot->getTransferredBytes(), - $this->currentSnapshot->getTotalBytes() - ), - 'to_be_transferred' => $this->currentSnapshot->getTotalBytes(), - 'unit' => 'B', - ]); - - if ($this->showProgressOnUpdate) { - $this->showProgress(); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressAggregator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressAggregator.php deleted file mode 100644 index 420d71205..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressAggregator.php +++ /dev/null @@ -1,216 +0,0 @@ - */ - private array $objectBytes = []; - - /** @var array */ - private array $objectTerminal = []; - - /** @var TransferListenerNotifier */ - private TransferListenerNotifier $directoryNotifier; - - public function __construct( - string $identifier, - int $totalBytes, - int $totalFiles, - array $directoryListeners = [], - ?AbstractTransferListener $directoryProgressTracker = null - ) { - if ($directoryProgressTracker !== null) { - $directoryListeners[] = $directoryProgressTracker; - } - - $this->identifier = $identifier; - $this->totalBytes = $totalBytes; - $this->totalFiles = $totalFiles; - $this->directoryNotifier = new TransferListenerNotifier($directoryListeners); - } - - /** - * Notify directory listeners that the directory transfer has been initiated. - * - * @param array $requestArgs - * - * @return void - */ - public function notifyDirectoryInitiated(array $requestArgs): void - { - $this->directoryNotifier->transferInitiated([ - self::REQUEST_ARGS_KEY => $requestArgs, - self::PROGRESS_SNAPSHOT_KEY => $this->getSnapshot(), - ]); - } - - /** - * Notify directory listeners that the directory transfer completed. - * - * @param array|null $response - * - * @return void - */ - public function notifyDirectoryComplete(?array $response = null): void - { - $snapshot = $this->getSnapshot(); - if ($response !== null) { - $snapshot = $snapshot->withResponse($response); - } - - $this->directoryNotifier->transferComplete([ - self::REQUEST_ARGS_KEY => [], - self::PROGRESS_SNAPSHOT_KEY => $snapshot, - ]); - } - - /** - * Notify directory listeners that the directory transfer failed. - * - * @param Throwable|string $reason - * - * @return void - */ - public function notifyDirectoryFail(Throwable|string $reason): void - { - $snapshot = $this->getSnapshot(); - $this->directoryNotifier->transferFail([ - self::REQUEST_ARGS_KEY => [], - self::PROGRESS_SNAPSHOT_KEY => $snapshot, - self::REASON_KEY => $reason, - ]); - } - - /** - * Update totals, useful when object list is streamed. - * - * @param int $bytes - * @param int $files - * - * @return void - */ - public function incrementTotals(int $bytes, int $files = 1): void - { - $this->totalBytes += $bytes; - $this->totalFiles += $files; - } - - /** - * @inheritDoc - */ - public function bytesTransferred(array $context): bool - { - /** @var TransferProgressSnapshot $snapshot */ - $snapshot = $context[self::PROGRESS_SNAPSHOT_KEY]; - $this->updateObjectProgress($snapshot); - $this->directoryNotifier->bytesTransferred([ - self::REQUEST_ARGS_KEY => $context[self::REQUEST_ARGS_KEY] ?? [], - self::PROGRESS_SNAPSHOT_KEY => $this->getSnapshot(), - ]); - - return true; - } - - /** - * @inheritDoc - */ - public function transferComplete(array $context): void - { - /** @var TransferProgressSnapshot $snapshot */ - $snapshot = $context[self::PROGRESS_SNAPSHOT_KEY]; - $this->markObjectTerminal($snapshot); - $this->directoryNotifier->bytesTransferred([ - self::REQUEST_ARGS_KEY => $context[self::REQUEST_ARGS_KEY] ?? [], - self::PROGRESS_SNAPSHOT_KEY => $this->getSnapshot(), - ]); - } - - /** - * @inheritDoc - */ - public function transferFail(array $context): void - { - /** @var TransferProgressSnapshot $snapshot */ - $snapshot = $context[self::PROGRESS_SNAPSHOT_KEY]; - $this->markObjectTerminal($snapshot); - $this->directoryNotifier->bytesTransferred([ - self::REQUEST_ARGS_KEY => $context[self::REQUEST_ARGS_KEY] ?? [], - self::PROGRESS_SNAPSHOT_KEY => $this->getSnapshot(), - self::REASON_KEY => $context[self::REASON_KEY] ?? null, - ]); - } - - /** - * @return DirectoryTransferProgressSnapshot - */ - public function getSnapshot(): DirectoryTransferProgressSnapshot - { - return new DirectoryTransferProgressSnapshot( - $this->identifier, - $this->transferredBytes, - $this->totalBytes, - $this->transferredFiles, - $this->totalFiles, - ); - } - - /** - * @param TransferProgressSnapshot $snapshot - * - * @return void - */ - private function updateObjectProgress(TransferProgressSnapshot $snapshot): void - { - $identifier = $snapshot->getIdentifier(); - $previous = $this->objectBytes[$identifier] ?? 0; - $current = $snapshot->getTransferredBytes(); - // Avoid double counting when updates decrease (should not happen, but guard) - $delta = $current - $previous; - if ($delta < 0) { - $delta = 0; - } - - $this->objectBytes[$identifier] = $current; - $this->transferredBytes += $delta; - } - - /** - * @param TransferProgressSnapshot $snapshot - * - * @return void - */ - private function markObjectTerminal(TransferProgressSnapshot $snapshot): void - { - $this->updateObjectProgress($snapshot); - $identifier = $snapshot->getIdentifier(); - if (!($this->objectTerminal[$identifier] ?? false)) { - $this->objectTerminal[$identifier] = true; - $this->transferredFiles++; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressSnapshot.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressSnapshot.php deleted file mode 100644 index 53e535451..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressSnapshot.php +++ /dev/null @@ -1,156 +0,0 @@ -identifier = $identifier; - $this->transferredBytes = $transferredBytes; - $this->totalBytes = $totalBytes; - $this->transferredFiles = $transferredFiles; - $this->totalFiles = $totalFiles; - $this->response = $response; - $this->reason = $reason; - } - - public function getIdentifier(): string - { - return $this->identifier; - } - - public function getTransferredBytes(): int - { - return $this->transferredBytes; - } - - public function getTotalBytes(): int - { - return $this->totalBytes; - } - - public function getTransferredFiles(): int - { - return $this->transferredFiles; - } - - public function getTotalFiles(): int - { - return $this->totalFiles; - } - - public function getResponse(): ?array - { - return $this->response; - } - - public function ratioTransferred(): float - { - if ($this->totalBytes === 0) { - return 0; - } - - return $this->transferredBytes / $this->totalBytes; - } - - public function getReason(): Throwable|string|null - { - return $this->reason; - } - - public function toArray(): array - { - return [ - 'identifier' => $this->identifier, - 'transferredBytes' => $this->transferredBytes, - 'totalBytes' => $this->totalBytes, - 'transferredFiles' => $this->transferredFiles, - 'totalFiles' => $this->totalFiles, - 'response' => $this->response, - 'reason' => $this->reason, - ]; - } - - public function withResponse(array $response): DirectoryTransferProgressSnapshot - { - return new self( - $this->identifier, - $this->transferredBytes, - $this->totalBytes, - $this->transferredFiles, - $this->totalFiles, - $response, - $this->reason, - ); - } - - public function withTotals(int $totalBytes, int $totalFiles): DirectoryTransferProgressSnapshot - { - return new self( - $this->identifier, - $this->transferredBytes, - $totalBytes, - $this->transferredFiles, - $totalFiles, - $this->response, - $this->reason, - ); - } - - public function withProgress(int $transferredBytes, int $transferredFiles): DirectoryTransferProgressSnapshot - { - return new self( - $this->identifier, - $transferredBytes, - $this->totalBytes, - $transferredFiles, - $this->totalFiles, - $this->response, - $this->reason, - ); - } - - public static function fromArray(array $data): DirectoryTransferProgressSnapshot - { - return new self( - $data['identifier'] ?? '', - $data['transferredBytes'] ?? 0, - $data['totalBytes'] ?? 0, - $data['transferredFiles'] ?? 0, - $data['totalFiles'] ?? 0, - $data['response'] ?? null, - $data['reason'] ?? null, - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/MultiProgressBarFormat.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/MultiProgressBarFormat.php deleted file mode 100644 index 0f86a3207..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/MultiProgressBarFormat.php +++ /dev/null @@ -1,40 +0,0 @@ -singleProgressTrackers = $singleProgressTrackers; - $this->output = $output; - $this->transferCount = $transferCount; - $this->completed = $completed; - $this->failed = $failed; - $this->progressBarFactory = $progressBarFactory; - } - - /** - * @return array - */ - public function getSingleProgressTrackers(): array - { - return $this->singleProgressTrackers; - } - - /** - * @return mixed - */ - public function getOutput(): mixed - { - return $this->output; - } - - /** - * @return int - */ - public function getTransferCount(): int - { - return $this->transferCount; - } - - /** - * @return int - */ - public function getCompleted(): int - { - return $this->completed; - } - - /** - * @return int - */ - public function getFailed(): int - { - return $this->failed; - } - - /** - * @return ProgressBarFactoryInterface|Closure|null - */ - public function getProgressBarFactory(): ProgressBarFactoryInterface|Closure|null - { - return $this->progressBarFactory; - } - - /** - * @inheritDoc - */ - public function transferInitiated(array $context): void - { - $this->transferCount++; - $snapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - if (isset($this->singleProgressTrackers[$snapshot->getIdentifier()])) { - $progressTracker = $this->singleProgressTrackers[$snapshot->getIdentifier()]; - } else { - if ($this->progressBarFactory === null) { - $progressTracker = new SingleProgressTracker( - output: $this->output, - clear: false, - showProgressOnUpdate: false, - ); - } else { - $progressBarFactoryFn = $this->progressBarFactory; - $progressTracker = new SingleProgressTracker( - progressBar: $progressBarFactoryFn(), - output: $this->output, - clear: false, - showProgressOnUpdate: false, - ); - } - - $this->singleProgressTrackers[$snapshot->getIdentifier()] = $progressTracker; - } - - $progressTracker->transferInitiated($context); - $this->showProgress(); - } - - /** - * @inheritDoc - */ - public function bytesTransferred(array $context): bool - { - $snapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $progressTracker = $this->singleProgressTrackers[$snapshot->getIdentifier()]; - $progressTracker->bytesTransferred($context); - $this->showProgress(); - - return true; - } - - /** - * @inheritDoc - */ - public function transferComplete(array $context): void - { - $this->completed++; - $snapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $progressTracker = $this->singleProgressTrackers[$snapshot->getIdentifier()]; - $progressTracker->transferComplete($context); - $this->showProgress(); - } - - /** - * @inheritDoc - */ - public function transferFail(array $context): void - { - $this->failed++; - $snapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $progressTracker = $this->singleProgressTrackers[$snapshot->getIdentifier()]; - $progressTracker->transferFail($context); - $this->showProgress(); - } - - /** - * @inheritDoc - */ - public function showProgress(): void - { - fwrite($this->output, self::CLEAR_ASCII_CODE); - $percentsSum = 0; - foreach ($this->singleProgressTrackers as $_ => $progressTracker) { - $progressTracker->showProgress(); - $percentsSum += $progressTracker->getProgressBar()->getPercentCompleted(); - } - - $allProgressBarWidth = ConsoleProgressBar::DEFAULT_PROGRESS_BAR_WIDTH; - if (count($this->singleProgressTrackers) !== 0) { - $firstKey = array_key_first($this->singleProgressTrackers); - $allProgressBarWidth = $this->singleProgressTrackers[$firstKey] - ->getProgressBar()->getProgressBarWidth(); - } - - $percent = (int) floor($percentsSum / $this->transferCount); - $multiProgressBarFormat = new MultiProgressBarFormat(); - $multiProgressBarFormat->setArgs([ - 'completed' => $this->completed, - 'failed' => $this->failed, - 'total' => $this->transferCount, - ]); - $allTransferProgressBar = new ConsoleProgressBar( - progressBarWidth: $allProgressBarWidth, - percentCompleted: $percent, - progressBarFormat: $multiProgressBarFormat - ); - fwrite( - $this->output, - sprintf( - "\n%s\n", - str_repeat( - '-', - $allTransferProgressBar->getProgressBarWidth() - ) - ) - ); - fwrite( - $this->output, - sprintf( - "%s\n", - $allTransferProgressBar->render(), - ) - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/PlainProgressBarFormat.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/PlainProgressBarFormat.php deleted file mode 100644 index 4df070b9d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/PlainProgressBarFormat.php +++ /dev/null @@ -1,28 +0,0 @@ -progressBar = $progressBar; - if (get_resource_type($output) !== 'stream') { - throw new \InvalidArgumentException("The type for $output must be a stream"); - } - $this->output = $output; - $this->clear = $clear; - $this->currentSnapshot = $currentSnapshot; - $this->showProgressOnUpdate = $showProgressOnUpdate; - } - - /** - * @return ProgressBarInterface - */ - public function getProgressBar(): ProgressBarInterface - { - return $this->progressBar; - } - - /** - * @return mixed - */ - public function getOutput(): mixed - { - return $this->output; - } - - /** - * @return bool - */ - public function isClear(): bool - { - return $this->clear; - } - - /** - * @return TransferProgressSnapshot|null - */ - public function getCurrentSnapshot(): ?TransferProgressSnapshot - { - return $this->currentSnapshot; - } - - /** - * @return bool - */ - public function isShowProgressOnUpdate(): bool - { - return $this->showProgressOnUpdate; - } - - /** - * @inheritDoc - * - * @return void - */ - public function transferInitiated(array $context): void - { - $this->currentSnapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $progressFormat = $this->progressBar->getProgressBarFormat(); - // Probably a common argument - $progressFormat->setArg( - 'object_name', - $this->currentSnapshot->getIdentifier() - ); - - $this->updateProgressBar(); - } - - /** - * @inheritDoc - */ - public function bytesTransferred(array $context): bool - { - $this->currentSnapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $progressFormat = $this->progressBar->getProgressBarFormat(); - if ($progressFormat instanceof ColoredTransferProgressBarFormat) { - $progressFormat->setArg( - 'color_code', - ColoredTransferProgressBarFormat::BLUE_COLOR_CODE - ); - } - - $this->updateProgressBar(); - - return true; - } - - /** - * @inheritDoc - * - * @return void - */ - public function transferComplete(array $context): void - { - $this->currentSnapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $progressFormat = $this->progressBar->getProgressBarFormat(); - if ($progressFormat instanceof ColoredTransferProgressBarFormat) { - $progressFormat->setArg( - 'color_code', - ColoredTransferProgressBarFormat::GREEN_COLOR_CODE - ); - } - - $this->updateProgressBar( - $this->currentSnapshot->getTotalBytes() === 0 - ); - } - - /** - * @inheritDoc - * - * @return void - */ - public function transferFail(array $context): void - { - $this->currentSnapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $progressFormat = $this->progressBar->getProgressBarFormat(); - if ($progressFormat instanceof ColoredTransferProgressBarFormat) { - $progressFormat->setArg( - 'color_code', - ColoredTransferProgressBarFormat::RED_COLOR_CODE - ); - $progressFormat->setArg( - 'message', - $context[AbstractTransferListener::REASON_KEY] - ); - } - - $this->updateProgressBar(); - } - - /** - * Updates the progress bar with the transfer snapshot - * and also call showProgress. - * - * @param bool $forceCompletion To force the progress bar to be - * completed. This is useful for files where its size is zero, - * for which a ratio will return zero, and hence the percent - * will be zero. - * - * @return void - */ - private function updateProgressBar( - bool $forceCompletion = false - ): void - { - if (!$forceCompletion) { - $this->progressBar->setPercentCompleted( - ((int)floor($this->currentSnapshot->ratioTransferred() * 100)) - ); - } else { - $this->progressBar->setPercentCompleted(100); - } - - $this->progressBar->getProgressBarFormat()->setArgs([ - 'transferred' => min( - $this->currentSnapshot->getTransferredBytes(), - $this->currentSnapshot->getTotalBytes() - ), - 'to_be_transferred' => $this->currentSnapshot->getTotalBytes(), - 'unit' => 'B', - ]); - // Display progress - if ($this->showProgressOnUpdate) { - $this->showProgress(); - } - } - - /** - * @inheritDoc - * - * @return void - */ - public function showProgress(): void - { - if ($this->currentSnapshot === null) { - throw new ProgressTrackerException( - "There is not snapshot to show progress for." - ); - } - - if ($this->clear) { - fwrite($this->output, "\033[2J\033[H"); - } - - fwrite($this->output, sprintf( - "\r\n%s", - $this->progressBar->render() - )); - fflush($this->output); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferListenerNotifier.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferListenerNotifier.php deleted file mode 100644 index 6fc7f6f20..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferListenerNotifier.php +++ /dev/null @@ -1,84 +0,0 @@ - $a->priority() <=> $b->priority()); - foreach ($listeners as $listener) { - if (!$listener instanceof AbstractTransferListener) { - throw new \InvalidArgumentException( - "Listener must implement " . AbstractTransferListener::class . "." - ); - } - } - - $this->listeners = $listeners; - } - - /** - * @param AbstractTransferListener $listener - * - * @return void - */ - public function addListener(AbstractTransferListener $listener): void - { - $this->listeners[] = $listener; - } - - /** - * @inheritDoc - * - * @return void - */ - public function transferInitiated(array $context): void - { - foreach ($this->listeners as $listener) { - $listener->transferInitiated($context); - } - } - - /** - * @inheritDoc - */ - public function bytesTransferred(array $context): bool - { - foreach ($this->listeners as $listener) { - $listener->bytesTransferred($context); - } - - return true; - } - - /** - * @inheritDoc - * - * @return void - */ - public function transferComplete(array $context): void - { - foreach ($this->listeners as $listener) { - $listener->transferComplete($context); - } - } - - /** - * @inheritDoc - * - * @return void - */ - public function transferFail(array $context): void - { - foreach ($this->listeners as $listener) { - $listener->transferFail($context); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferProgressBarFormat.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferProgressBarFormat.php deleted file mode 100644 index 6e0a19b14..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferProgressBarFormat.php +++ /dev/null @@ -1,38 +0,0 @@ -identifier = $identifier; - $this->transferredBytes = $transferredBytes; - $this->totalBytes = $totalBytes; - $this->response = $response; - $this->reason = $reason; - } - - public function getIdentifier(): string - { - return $this->identifier; - } - - /** - * @return int - */ - public function getTransferredBytes(): int - { - return $this->transferredBytes; - } - - /** - * @return int - */ - public function getTotalBytes(): int - { - return $this->totalBytes; - } - - /** - * @return array|null - */ - public function getResponse(): array|null - { - return $this->response; - } - - /** - * @return float - */ - public function ratioTransferred(): float - { - if ($this->totalBytes === 0) { - // Unable to calculate ratio - return 0; - } - - return $this->transferredBytes / $this->totalBytes; - } - - /** - * @return Throwable|string|null - */ - public function getReason(): Throwable|string|null - { - return $this->reason; - } - - /** - * @return array - */ - public function toArray(): array - { - return [ - 'identifier' => $this->identifier, - 'transferredBytes' => $this->transferredBytes, - 'totalBytes' => $this->totalBytes, - 'reason' => $this->reason, - 'response' => $this->response, - ]; - } - - /** - * @param array $response - * - * @return TransferProgressSnapshot - */ - public function withResponse(array $response): TransferProgressSnapshot - { - return new self( - $this->identifier, - $this->transferredBytes, - $this->totalBytes, - $response, - ); - } - - /** - * @param array $data - * - * @return TransferProgressSnapshot - */ - public static function fromArray(array $data): TransferProgressSnapshot - { - return new self( - $data['identifier'] ?? null, - $data['transferredBytes'] ?? 0, - $data['totalBytes'] ?? 0, - $data['response'] ?? null, - $data['reason'] ?? null - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/RangeGetMultipartDownloader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/RangeGetMultipartDownloader.php deleted file mode 100644 index 561141e43..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/RangeGetMultipartDownloader.php +++ /dev/null @@ -1,57 +0,0 @@ -downloadRequestArgs; - $partSize = $this->config['target_part_size_bytes']; - $from = ($this->currentPartNo - 1) * $partSize; - $to = ($this->currentPartNo * $partSize) - 1; - - if ($this->objectSizeInBytes !== 0) { - $to = min($this->objectSizeInBytes, $to); - } - - $nextCommandArgs['Range'] = "bytes=$from-$to"; - - return $nextCommandArgs; - } - - /** - * @inheritDoc - * - * @param Result $result - * - * @return void - */ - protected function computeObjectDimensions(ResultInterface $result): void - { - // Assign object size just if needed. - if ($this->objectSizeInBytes === 0) { - $this->objectSizeInBytes = self::computeObjectSizeFromContentRange( - $result['ContentRange'] ?? "" - ); - } - - $partSize = $this->config['target_part_size_bytes']; - if ($this->objectSizeInBytes > $partSize) { - $this->objectPartsCount = intval( - ceil($this->objectSizeInBytes / $partSize) - ); - } else { - // Single download since partSize will be set to full object size. - $this->objectPartsCount = 1; - $this->currentPartNo = 1; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/S3TransferManager.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/S3TransferManager.php deleted file mode 100644 index 57d7ac88e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/S3TransferManager.php +++ /dev/null @@ -1,684 +0,0 @@ -config = S3TransferManagerConfig::fromArray($config ?? []); - } else { - $this->config = $config; - } - - if ($s3Client === null) { - $this->s3Client = $this->defaultS3Client(); - } else { - $this->s3Client = $s3Client; - } - - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->s3Client->getHandlerList(), - MetricsBuilder::S3_TRANSFER - ); - } - - /** - * @return S3ClientInterface - */ - public function getS3Client(): S3ClientInterface - { - return $this->s3Client; - } - - /** - * @return S3TransferManagerConfig - */ - public function getConfig(): S3TransferManagerConfig - { - return $this->config; - } - - /** - * @param UploadRequest $uploadRequest - * @param S3ClientInterface|null $s3Client - * - * @return PromiseInterface - */ - public function upload( - UploadRequest $uploadRequest, - ?S3ClientInterface $s3Client = null - ): PromiseInterface - { - $client = $s3Client ?? $this->s3Client; - // Make sure it is a valid in path in case of a string - $uploadRequest->validateSource(); - - // Valid required parameters - $uploadRequest->validateRequiredParameters(); - - $uploadRequest->updateConfigWithDefaults( - $this->config->toArray() - ); - - $uploadRequest->validateConfig(); - - $config = $uploadRequest->getConfig(); - - // Validate progress tracker - $progressTracker = $uploadRequest->getProgressTracker(); - if ($progressTracker === null - && ($config['track_progress'] - ?? $this->config->isTrackProgress())) { - $progressTracker = new SingleProgressTracker(); - } - - // Append progress tracker to listeners if not null - $listeners = $uploadRequest->getListeners(); - if ($progressTracker !== null) { - $listeners[] = $progressTracker; - } - - $listenerNotifier = new TransferListenerNotifier($listeners); - - // Validate multipart upload threshold - $mupThreshold = $config['multipart_upload_threshold_bytes'] - ?? $this->config->getMultipartUploadThresholdBytes(); - if ($mupThreshold < AbstractMultipartUploader::PART_MIN_SIZE) { - throw new InvalidArgumentException( - "The provided config `multipart_upload_threshold_bytes`" - ."must be greater than or equal to " . AbstractMultipartUploader::PART_MIN_SIZE - ); - } - - if ($this->requiresMultipartUpload($uploadRequest->getSource(), $mupThreshold)) { - return $this->tryMultipartUpload( - $uploadRequest, - $client, - $listenerNotifier - ); - } - - return $this->trySingleUpload( - $uploadRequest->getSource(), - $uploadRequest->getUploadRequestArgs(), - $listenerNotifier, - $client - ); - } - - /** - * @param UploadDirectoryRequest $uploadDirectoryRequest - * - * @return PromiseInterface - */ - public function uploadDirectory( - UploadDirectoryRequest $uploadDirectoryRequest, - ): PromiseInterface - { - return (new DirectoryUploader( - $this->s3Client, - $this->config->toArray(), - fn(S3ClientInterface $client, UploadRequest $request): PromiseInterface => $this->upload($request, $client), - $uploadDirectoryRequest, - ))->promise(); - } - - /** - * @param DownloadRequest $downloadRequest - * - * @return PromiseInterface - */ - public function download(DownloadRequest $downloadRequest): PromiseInterface - { - return $this->downloadInternal($downloadRequest, $this->s3Client); - } - - /** - * @param DownloadRequest $downloadRequest - * @param S3ClientInterface $s3Client - * - * @return PromiseInterface - */ - private function downloadInternal( - DownloadRequest $downloadRequest, - S3ClientInterface $s3Client - ): PromiseInterface { - $sourceArgs = $downloadRequest->normalizeSourceAsArray(); - $getObjectRequestArgs = $downloadRequest->getObjectRequestArgs(); - - $downloadRequest->updateConfigWithDefaults($this->config->toArray()); - - $downloadRequest->validateConfig(); - - $config = $downloadRequest->getConfig(); - - $progressTracker = $downloadRequest->getProgressTracker(); - if ($progressTracker === null && $config['track_progress']) { - $progressTracker = new SingleProgressTracker(); - } - - $listeners = $downloadRequest->getListeners(); - if ($progressTracker !== null) { - $listeners[] = $progressTracker; - } - - $listenerNotifier = new TransferListenerNotifier($listeners); - - foreach ($sourceArgs as $key => $value) { - $getObjectRequestArgs[$key] = $value; - } - - return $this->tryMultipartDownload( - $getObjectRequestArgs, - $config, - $downloadRequest->getDownloadHandler(), - $listenerNotifier, - $s3Client, - ); - } - - /** - * @param ResumeDownloadRequest $resumeDownloadRequest - * - * @return PromiseInterface - */ - public function resumeDownload( - ResumeDownloadRequest $resumeDownloadRequest - ): PromiseInterface - { - $resumableDownload = $resumeDownloadRequest->getResumableDownload(); - if (is_string($resumableDownload)) { - if (!AbstractResumableTransfer::isResumeFile($resumableDownload)) { - throw new S3TransferException( - "Resume file `$resumableDownload` is not a valid resumable file." - ); - } - - $resumableDownload = ResumableDownload::fromFile($resumableDownload); - } - - // Verify that temporary file still exists - if (!file_exists($resumableDownload->getTemporaryFile())) { - throw new S3TransferException( - "Cannot resume download: temporary file does not exist: " - . $resumableDownload->getTemporaryFile() - ); - } - - // Verify object ETag hasn't changed - $headResult = $this->s3Client->headObject([ - 'Bucket' => $resumableDownload->getBucket(), - 'Key' => $resumableDownload->getKey(), - ]); - - $currentETag = $headResult['ETag'] ?? null; - $resumeETag = $resumableDownload->getETag(); - if (empty($currentETag) || empty($resumeETag)) { - throw new S3TransferException( - "Cannot resume download: missing eTag in resumable download" - ); - } - - if ($currentETag !== $resumableDownload->getETag()) { - throw new S3TransferException( - "Cannot resume download: S3 object has changed (ETag mismatch). " - . "Expected: {$resumableDownload->getETag()}, " - . "Current: {$currentETag}" - ); - } - - // Make sure it uses a supported file download handler - $downloadHandlerClass = $resumeDownloadRequest->getDownloadHandlerClass(); - if (!class_exists($downloadHandlerClass)) { - throw new S3TransferException( - "Download handler class `$downloadHandlerClass` does not exist" - ); - } - - if ($downloadHandlerClass !== FileDownloadHandler::class - && !is_subclass_of($downloadHandlerClass, FileDownloadHandler::class)) { - throw new S3TransferException( - "Download handler class `$downloadHandlerClass` must extend `FileDownloadHandler`" - ); - } - - $config = $resumableDownload->getConfig(); - $downloadHandler = new $downloadHandlerClass( - $resumableDownload->getDestination(), - $config['fails_when_destination_exists'] ?? false, - $config['resume_enabled'] ?? false, - $resumableDownload->getTemporaryFile(), - $resumableDownload->getFixedPartSize() - ); - - $progressTracker = $resumeDownloadRequest->getProgressTracker(); - $listeners = $resumeDownloadRequest->getListeners(); - - if ($progressTracker === null - && ($resumableDownload->getConfig()['track_progress'] - ?? $this->config->isTrackProgress())) { - $progressTracker = new SingleProgressTracker(); - $listeners[] = $progressTracker; - } - - $listenerNotifier = new TransferListenerNotifier( - $listeners, - ); - - return $this->tryMultipartDownload( - $resumableDownload->getRequestArgs(), - $resumableDownload->getConfig(), - $downloadHandler, - $listenerNotifier, - null, - $resumableDownload, - ); - } - - /** - * @param ResumeUploadRequest $resumeUploadRequest - * - * @return PromiseInterface - */ - public function resumeUpload( - ResumeUploadRequest $resumeUploadRequest - ): PromiseInterface - { - $resumableUpload = $resumeUploadRequest->getResumableUpload(); - if (is_string($resumableUpload)) { - if (!AbstractResumableTransfer::isResumeFile($resumableUpload)) { - throw new S3TransferException( - "Resume file `$resumableUpload` is not a valid resumable file." - ); - } - - $resumableUpload = ResumableUpload::fromFile($resumableUpload); - } - - // Verify that source file still exists - if (!file_exists($resumableUpload->getSource())) { - throw new S3TransferException( - "Cannot resume upload: source file does not exist: " - . $resumableUpload->getSource() - ); - } - - // Verify if source still matches the same size - $objectSizeAtFailure = $resumableUpload->getObjectSize(); - $currentObjectSize = filesize($resumableUpload->getSource()); - if ($objectSizeAtFailure !== $currentObjectSize) { - throw new S3TransferException( - "Cannot resume upload: source file size has changed since the upload failed. " - . "Size at failure: {$objectSizeAtFailure}, current size: {$currentObjectSize}." - ); - } - - // Verify upload still exists in S3 by checking uploadId - $uploads = $this->s3Client->getPaginator( - 'ListMultipartUploads', - [ - 'Bucket' => $resumableUpload->getBucket(), - 'Prefix' => $resumableUpload->getKey(), - ] - )->search('Uploads[]'); - $uploadExists = false; - foreach ($uploads as $upload) { - if ($upload['UploadId'] === $resumableUpload->getUploadId() - && $upload['Key'] === $resumableUpload->getKey()) { - $uploadExists = true; - break; - } - } - - if (!$uploadExists) { - throw new S3TransferException( - "Cannot resume upload: multipart upload no longer exists (UploadId: " - . $resumableUpload->getUploadId() . ")" - ); - } - - $config = $resumableUpload->getConfig(); - $progressTracker = $resumeUploadRequest->getProgressTracker(); - $listeners = $resumeUploadRequest->getListeners(); - - if ($progressTracker === null - && ($config['track_progress'] ?? $this->config->isTrackProgress())) { - $progressTracker = new SingleProgressTracker(); - $listeners[] = $progressTracker; - } - - $listenerNotifier = new TransferListenerNotifier($listeners); - - return (new MultipartUploader( - $this->s3Client, - $resumableUpload->getRequestArgs(), - $resumableUpload->getSource(), - $config, - listenerNotifier: $listenerNotifier, - resumableUpload: $resumableUpload, - ))->promise(); - } - - /** - * @param DownloadFileRequest $downloadFileRequest - * @param S3ClientInterface|null $s3Client - * - * @return PromiseInterface - */ - public function downloadFile( - DownloadFileRequest $downloadFileRequest, - ?S3ClientInterface $s3Client = null - ): PromiseInterface - { - $client = $s3Client ?? $this->s3Client; - return $this->downloadInternal($downloadFileRequest->getDownloadRequest(), $client); - } - - /** - * @param DownloadDirectoryRequest $downloadDirectoryRequest - * - * @return PromiseInterface - */ - public function downloadDirectory( - DownloadDirectoryRequest $downloadDirectoryRequest - ): PromiseInterface - { - return (new DirectoryDownloader( - $this->s3Client, - $this->config->toArray(), - fn(S3ClientInterface $client, DownloadFileRequest $request): PromiseInterface => $this->downloadFile($request, $client), - $downloadDirectoryRequest, - ))->promise(); - } - - /** - * Tries an object multipart download. - * - * @param array $getObjectRequestArgs - * @param array $config - * @param AbstractDownloadHandler $downloadHandler - * @param TransferListenerNotifier|null $listenerNotifier - * @param S3ClientInterface|null $s3Client - * @param ResumableDownload|null $resumableDownload - * @return PromiseInterface - */ - private function tryMultipartDownload( - array $getObjectRequestArgs, - array $config, - AbstractDownloadHandler $downloadHandler, - ?TransferListenerNotifier $listenerNotifier = null, - ?S3ClientInterface $s3Client = null, - ?ResumableDownload $resumableDownload = null, - ): PromiseInterface - { - $client = $s3Client ?? $this->s3Client; - $downloaderClassName = AbstractMultipartDownloader::chooseDownloaderClass( - strtolower($config['multipart_download_type']) - ); - $multipartDownloader = new $downloaderClassName( - $client, - $getObjectRequestArgs, - $config, - $downloadHandler, - listenerNotifier: $listenerNotifier, - resumableDownload: $resumableDownload, - ); - - return $multipartDownloader->promise(); - } - - /** - * @param string|StreamInterface $source - * @param array $requestArgs - * @param TransferListenerNotifier|null $listenerNotifier - * @param S3ClientInterface|null $s3Client - * - * @return PromiseInterface - */ - private function trySingleUpload( - string|StreamInterface $source, - array $requestArgs, - ?TransferListenerNotifier $listenerNotifier = null, - ?S3ClientInterface $s3Client = null - ): PromiseInterface - { - $client = $s3Client ?? $this->s3Client; - if (is_string($source) && is_readable($source)) { - $requestArgs['SourceFile'] = $source; - $objectSize = filesize($source); - } elseif ($source instanceof StreamInterface && $source->isSeekable()) { - $requestArgs['Body'] = $source; - $objectSize = $source->getSize(); - } else { - throw new S3TransferException( - "Unable to process upload request due to the type of the source" - ); - } - - if (!empty($listenerNotifier)) { - $listenerNotifier->transferInitiated( - [ - AbstractTransferListener::REQUEST_ARGS_KEY => $requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => new TransferProgressSnapshot( - $requestArgs['Key'], - 0, - $objectSize, - ), - ] - ); - - $command = $client->getCommand('PutObject', $requestArgs); - return $client->executeAsync($command)->then( - function (ResultInterface $result) - use ($objectSize, $listenerNotifier, $requestArgs) { - $listenerNotifier->bytesTransferred( - [ - AbstractTransferListener::REQUEST_ARGS_KEY => $requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => new TransferProgressSnapshot( - $requestArgs['Key'], - $objectSize, - $objectSize, - ), - ] - ); - - $listenerNotifier->transferComplete( - [ - AbstractTransferListener::REQUEST_ARGS_KEY => $requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => new TransferProgressSnapshot( - $requestArgs['Key'], - $objectSize, - $objectSize, - $result->toArray() - ), - ] - ); - - return new UploadResult( - $result->toArray() - ); - } - )->otherwise(function (Throwable $reason) - use ($objectSize, $requestArgs, $listenerNotifier) { - $listenerNotifier->transferFail( - [ - AbstractTransferListener::REQUEST_ARGS_KEY => $requestArgs, - AbstractTransferListener::PROGRESS_SNAPSHOT_KEY => new TransferProgressSnapshot( - $requestArgs['Key'], - 0, - $objectSize, - ), - 'reason' => $reason, - ] - ); - - throw $reason; - }); - } - - $command = $client->getCommand('PutObject', $requestArgs); - - return $client->executeAsync($command) - ->then(function (ResultInterface $result) { - return new UploadResult($result->toArray()); - }); - } - - /** - * @param UploadRequest $uploadRequest - * @param S3ClientInterface|null $s3Client - * @param TransferListenerNotifier|null $listenerNotifier - * - * @return PromiseInterface - */ - private function tryMultipartUpload( - UploadRequest $uploadRequest, - ?S3ClientInterface $s3Client = null, - ?TransferListenerNotifier $listenerNotifier = null, - ): PromiseInterface - { - $client = $s3Client ?? $this->s3Client; - return (new MultipartUploader( - $client, - $uploadRequest->getUploadRequestArgs(), - $uploadRequest->getSource(), - $uploadRequest->getConfig(), - listenerNotifier: $listenerNotifier, - ))->promise(); - } - - /** - * @param string|StreamInterface $source - * @param int $mupThreshold - * - * @return bool - */ - private function requiresMultipartUpload( - string|StreamInterface $source, - int $mupThreshold - ): bool - { - if (is_string($source) && is_readable($source)) { - return filesize($source) >= $mupThreshold; - } elseif ($source instanceof StreamInterface) { - // When the stream's size is unknown then we could try a multipart upload. - if (empty($source->getSize())) { - return true; - } - - return $source->getSize() >= $mupThreshold; - } - - throw new S3TransferException( - "Unable to determine if a multipart is required" - ); - } - - /** - * Returns a default instance of S3Client. - * - * @return S3Client - */ - private function defaultS3Client(): S3ClientInterface - { - $defaultRegion = $this->config->getDefaultRegion(); - if (empty($defaultRegion)) { - throw new S3TransferException( - "When using the default S3 Client you must define a default region." - . "\nThe config parameter is `default_region`.`" - ); - } - - return new S3Client([ - 'region' => $defaultRegion, - ]); - } - - /** - * Validates a string value is a valid S3 URI. - * Valid S3 URI Example: S3://mybucket.dev/myobject.txt - * - * @param string $uri - * - * @return bool - */ - public static function isValidS3URI(string $uri): bool - { - // in the expression `substr($uri, 5)))` the 5 belongs to the size of `s3://`. - return str_starts_with(strtolower($uri), 's3://') - && count(explode('/', substr($uri, 5))) > 1; - } - - /** - * Converts a S3 URI into an array with a Bucket and Key - * properties set. - * - * @param string $uri: The S3 URI. - * - * @return array - */ - public static function s3UriAsBucketAndKey(string $uri): array - { - $errorMessage = "Invalid URI: `$uri` provided. \nA valid S3 URI looks as `s3://bucket/key`"; - if (!self::isValidS3URI($uri)) { - throw new InvalidArgumentException($errorMessage); - } - - $path = substr($uri, 5); // without s3:// - $parts = explode('/', $path, 2); - - if (count($parts) < 2) { - throw new InvalidArgumentException($errorMessage); - } - - return [ - 'Bucket' => $parts[0], - 'Key' => $parts[1], - ]; - } - -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Utils/AbstractDownloadHandler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Utils/AbstractDownloadHandler.php deleted file mode 100644 index a68dae308..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Utils/AbstractDownloadHandler.php +++ /dev/null @@ -1,28 +0,0 @@ -destination = $destination; - $this->failsWhenDestinationExists = $failsWhenDestinationExists; - $this->resumeEnabled = $resumeEnabled; - $this->temporaryFilePath = $temporaryFilePath; - $this->fixedPartSize = $fixedPartSize; - $this->handle = null; - $this->transferFailed = false; - } - - /** - * @return string - */ - public function getDestination(): string - { - return $this->destination; - } - - /** - * @return bool - */ - public function isFailsWhenDestinationExists(): bool - { - return $this->failsWhenDestinationExists; - } - - /** - * @param array $context - * - * @return void - */ - public function transferInitiated(array $context): void - { - $this->validateDestination(); - $this->ensureDirectoryExists(); - // temporary destination may have been set by resume - if (empty($this->temporaryFilePath)) { - $this->temporaryFilePath = $this->generateTemporaryFilePath(); - } else { - $this->openExistingFile(); - } - } - - /** - * Open an existing temporary file for resuming. - * Opens in 'r+' mode which allows reading and writing without truncating. - * - * @return void - */ - private function openExistingFile(): void - { - if ($this->handle !== null) { - return; - } - - $handle = fopen($this->temporaryFilePath, 'r+'); - - if ($handle === false) { - throw new FileDownloadException( - "Failed to open existing temporary file '{$this->temporaryFilePath}' for resuming." - ); - } - - $this->handle = $handle; - } - - /** - * @param array $context - * - * @return bool - */ - public function bytesTransferred(array $context): bool - { - if ($this->transferFailed) { - return false; - } - - $snapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $response = $snapshot->getResponse(); - - if ($this->handle === null) { - $this->fixedPartSize = $response['ContentLength']; - $this->initializeDestination($response); - } - - if ($this->handle === null) { - throw new FileDownloadException( - "Failed to initialize destination for downloading." - ); - } - - return $this->writePartToDestinationHandle($response); - } - - /** - * @param array $context - * - * @return void - */ - public function transferComplete(array $context): void - { - $this->closeDestinationHandle(); - $this->replaceDestinationFile(); - } - - /** - * @param array $context - * - * @return void - */ - public function transferFail(array $context): void - { - $this->transferFailed = true; - $this->closeDestinationHandle(); - $this->cleanupAfterFailure($context); - } - - /** - * @param array $response - * - * @return void - */ - public function initializeDestination(array $response): void - { - $objectSize = AbstractMultipartDownloader::computeObjectSizeFromContentRange( - $response['ContentRange'] ?? "" - ); - - $this->createTruncatedFile($objectSize); - } - - /** - * @param array $response - * - * @return bool - */ - private function writePartToDestinationHandle(array $response): bool - { - $contentRange = $response['ContentRange'] ?? null; - if ($contentRange === null) { - throw new FileDownloadException( - "Unable to get content range from response." - ); - } - - $partNo = (int) ceil( - AbstractMultipartDownloader::getRangeTo($contentRange) / $this->fixedPartSize - ); - $position = ($partNo - 1) * $this->fixedPartSize; - - if (!flock($this->handle, LOCK_EX)) { - throw new FileDownloadException("Failed to acquire file lock."); - } - - try { - fseek($this->handle, $position); - - $body = $response['Body']; - // In case body was already consumed by another process - if ($body->isSeekable()) { - $body->rewind(); - } - - // Try to validate a checksum when writting to disk - $checksumParameter = ApplyChecksumMiddleware::filterChecksum( - $response - ); - $hashContext = null; - if ($checksumParameter !== null) { - $checksumAlgorithm = strtolower( - str_replace( - "Checksum", - "", - $checksumParameter - ) - ); - $checksumAlgorithm = $checksumAlgorithm === 'crc32' - ? 'crc32b' - : $checksumAlgorithm; - $hashContext = hash_init($checksumAlgorithm); - } - - while (!$body->eof()) { - $chunk = $body->read(self::READ_BUFFER_SIZE); - - if (fwrite($this->handle, $chunk) === false) { - throw new FileDownloadException("Failed to write data to temporary file."); - } - - if ($hashContext !== null) { - hash_update($hashContext, $chunk); - } - } - - if ($hashContext !== null) { - $calculatedChecksum = base64_encode( - hash_final($hashContext, true) - ); - if ($calculatedChecksum !== $response[$checksumParameter]) { - throw new FileDownloadException( - "Checksum mismatch when writing part to destination file." - ); - } - } - - fflush($this->handle); - - return true; - } finally { - flock($this->handle, LOCK_UN); - } - } - - /** - * @return void - */ - private function closeDestinationHandle(): void - { - if (is_resource($this->handle)) { - fclose($this->handle); - $this->handle = null; - } - } - - /** - * @return string - */ - public function getHandlerResult(): string - { - return $this->destination; - } - - /** - * @return void - */ - private function validateDestination(): void - { - if ($this->failsWhenDestinationExists && file_exists($this->destination)) { - throw new FileDownloadException( - "The destination '{$this->destination}' already exists." - ); - } - - if (is_dir($this->destination)) { - throw new FileDownloadException( - "The destination '{$this->destination}' can't be a directory." - ); - } - } - - /** - * @return void - */ - private function ensureDirectoryExists(): void - { - $directory = dirname($this->destination); - - if (!is_dir($directory) && !mkdir($directory, 0755, true) - && !is_dir($directory)) { - throw new FileDownloadException( - "Failed to create directory '{$directory}'." - ); - } - } - - /** - * @return string - */ - private function generateTemporaryFilePath(): string - { - for ($attempt = 0; $attempt < self::MAX_UNIQUE_ID_ATTEMPTS; $attempt++) { - $uniqueId = $this->generateUniqueIdentifier(); - $temporaryPath = $this->destination . self::TEMP_INFIX . $uniqueId; - - if (!file_exists($temporaryPath)) { - return $temporaryPath; - } - } - - throw new FileDownloadException( - "Unable to generate a unique temporary file name after " . self::MAX_UNIQUE_ID_ATTEMPTS . " attempts." - ); - } - - /** - * @return string - */ - private function generateUniqueIdentifier(): string - { - $uniqueId = uniqid(); - - if (strlen($uniqueId) > self::IDENTIFIER_LENGTH) { - return substr($uniqueId, 0, self::IDENTIFIER_LENGTH); - } - - return str_pad($uniqueId, self::IDENTIFIER_LENGTH, "0"); - } - - /** - * @param int $size - * - * @return void - */ - private function createTruncatedFile(int $size): void - { - $handle = fopen($this->temporaryFilePath, 'w+'); - - if ($handle === false) { - throw new FileDownloadException( - "Failed to open temporary file '{$this->temporaryFilePath}' for writing." - ); - } - - $this->handle = $handle; - - if (!ftruncate($this->handle, $size)) { - throw new FileDownloadException( - "Failed to allocate {$size} bytes for temporary file." - ); - } - } - - /** - * @return void - */ - private function replaceDestinationFile(): void - { - if (file_exists($this->destination)) { - if ($this->failsWhenDestinationExists) { - throw new FileDownloadException( - "The destination '{$this->destination}' already exists." - ); - } - - if (!unlink($this->destination)) { - throw new FileDownloadException( - "Failed to delete existing file '{$this->destination}'." - ); - } - } - - if (!rename($this->temporaryFilePath, $this->destination)) { - throw new FileDownloadException( - "Unable to rename the file '{$this->temporaryFilePath}' to '{$this->destination}'." - ); - } - } - - /** - * @param array $context - * - * @return void - */ - private function cleanupAfterFailure(array $context): void - { - if (!$this->resumeEnabled && file_exists($this->temporaryFilePath)) { - unlink($this->temporaryFilePath); - return; - } - - $reason = $context[self::REASON_KEY] ?? ''; - $isDestinationExistsError = str_contains( - $reason, - "The destination '{$this->destination}' already exists." - ); - - if (file_exists($this->destination) && !$isDestinationExistsError) { - unlink($this->destination); - } - } - - /** - * @inheritDoc - */ - public function isConcurrencySupported(): bool - { - return true; - } - - /** - * @return string - */ - public function getResumeFilePath(): string - { - return $this->temporaryFilePath . self::RESUME_SUFFIX; - } - - /** - * @return string - */ - public function getTemporaryFilePath(): string - { - return $this->temporaryFilePath; - } - - /** - * @return int - */ - public function getFixedPartSize(): int - { - return $this->fixedPartSize; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Utils/ResumableDownloadHandlerInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Utils/ResumableDownloadHandlerInterface.php deleted file mode 100644 index 507eac8f0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3Transfer/Utils/ResumableDownloadHandlerInterface.php +++ /dev/null @@ -1,26 +0,0 @@ -seek($stream->getSize()); - } - - $this->stream = $stream; - } - - /** - * @return int - */ - public function priority(): int - { - return -1; - } - - /** - * @inheritDoc - */ - public function bytesTransferred(array $context): bool - { - $snapshot = $context[AbstractTransferListener::PROGRESS_SNAPSHOT_KEY]; - $response = $snapshot->getResponse(); - $partBody = $response['Body']; - - if ($partBody->isSeekable()) { - $partBody->rewind(); - } - - Utils::copyToStream( - $partBody, - $this->stream - ); - - return true; - } - - /** - * @param array $context - * - * @return void - */ - public function transferComplete(array $context): void - { - $this->stream->rewind(); - } - - /** - * @param array $context - * - * @return void - */ - public function transferFail(array $context): void - { - $this->stream->close(); - $this->stream = null; - } - - /** - * @inheritDoc - * - * @return StreamInterface - */ - public function getHandlerResult(): StreamInterface - { - return $this->stream; - } - - /** - * @inheritDoc - */ - public function isConcurrencySupported(): bool - { - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3UriParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3UriParser.php deleted file mode 100644 index 508bff14c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/S3UriParser.php +++ /dev/null @@ -1,163 +0,0 @@ - true, - 'bucket' => null, - 'key' => null, - 'region' => null - ]; - - /** - * Parses a URL or S3 StreamWrapper Uri (s3://) into an associative array - * of Amazon S3 data including: - * - * - bucket: The Amazon S3 bucket (null if none) - * - key: The Amazon S3 key (null if none) - * - path_style: Set to true if using path style, or false if not - * - region: Set to a string if a non-class endpoint is used or null. - * - * @param string|UriInterface $uri - * - * @return array - * @throws \InvalidArgumentException|InvalidArnException - */ - public function parse($uri) - { - // Attempt to parse host component of uri as an ARN - $components = $this->parseS3UrlComponents($uri); - if (!empty($components)) { - if (ArnParser::isArn($components['host'])) { - $arn = new AccessPointArn($components['host']); - return [ - 'bucket' => $components['host'], - 'key' => $components['path'], - 'path_style' => false, - 'region' => $arn->getRegion() - ]; - } - } - - $url = Psr7\Utils::uriFor($uri); - - if ($url->getScheme() == $this->streamWrapperScheme) { - return $this->parseStreamWrapper($url); - } - - if (!$url->getHost()) { - throw new \InvalidArgumentException('No hostname found in URI: ' - . $uri); - } - - if (!preg_match($this->pattern, $url->getHost(), $matches)) { - return $this->parseCustomEndpoint($url); - } - - // Parse the URI based on the matched format (path / virtual) - $result = empty($matches[1]) - ? $this->parsePathStyle($url) - : $this->parseVirtualHosted($url, $matches); - - // Add the region if one was found and not the classic endpoint - $result['region'] = $matches[2] == 'amazonaws' ? null : $matches[2]; - - return $result; - } - - private function parseS3UrlComponents($uri) - { - preg_match("/^([a-zA-Z0-9]*):\/\/([a-zA-Z0-9:-]*)\/(.*)/", $uri, $components); - if (empty($components)) { - return []; - } - return [ - 'scheme' => $components[1], - 'host' => $components[2], - 'path' => $components[3], - ]; - } - - private function parseStreamWrapper(UriInterface $url) - { - $result = self::$defaultResult; - $result['path_style'] = false; - - $result['bucket'] = $url->getHost(); - if ($url->getPath()) { - $key = ltrim($url->getPath(), '/ '); - if (!empty($key)) { - $result['key'] = $key; - } - } - - return $result; - } - - private function parseCustomEndpoint(UriInterface $url) - { - $result = self::$defaultResult; - $path = ltrim($url->getPath(), '/ '); - $segments = explode('/', $path, 2); - - if (isset($segments[0])) { - $result['bucket'] = $segments[0]; - if (isset($segments[1])) { - $result['key'] = $segments[1]; - } - } - - return $result; - } - - private function parsePathStyle(UriInterface $url) - { - $result = self::$defaultResult; - - if ($url->getPath() != '/') { - $path = ltrim($url->getPath(), '/'); - if ($path) { - $pathPos = strpos($path, '/'); - if ($pathPos === false) { - // https://s3.amazonaws.com/bucket - $result['bucket'] = $path; - } elseif ($pathPos == strlen($path) - 1) { - // https://s3.amazonaws.com/bucket/ - $result['bucket'] = substr($path, 0, -1); - } else { - // https://s3.amazonaws.com/bucket/key - $result['bucket'] = substr($path, 0, $pathPos); - $result['key'] = substr($path, $pathPos + 1) ?: null; - } - } - } - - return $result; - } - - private function parseVirtualHosted(UriInterface $url, array $matches) - { - $result = self::$defaultResult; - $result['path_style'] = false; - // Remove trailing "." from the prefix to get the bucket - $result['bucket'] = substr($matches[1], 0, -1); - $path = $url->getPath(); - // Check if a key was present, and if so, removing the leading "/" - $result['key'] = !$path || $path == '/' ? null : substr($path, 1); - - return $result; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/SSECMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/SSECMiddleware.php deleted file mode 100644 index 628ddef15..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/SSECMiddleware.php +++ /dev/null @@ -1,75 +0,0 @@ -nextHandler = $nextHandler; - $this->endpointScheme = $endpointScheme; - } - - public function __invoke( - CommandInterface $command, - ?RequestInterface $request = null - ) { - // Allows only HTTPS connections when using SSE-C - if (($command['SSECustomerKey'] || $command['CopySourceSSECustomerKey']) - && $this->endpointScheme !== 'https' - ) { - throw new \RuntimeException('You must configure your S3 client to ' - . 'use HTTPS in order to use the SSE-C features.'); - } - - // Prepare the normal SSE-CPK headers - if ($command['SSECustomerKey']) { - $this->prepareSseParams($command); - } - - // If it's a copy operation, prepare the SSE-CPK headers for the source. - if ($command['CopySourceSSECustomerKey']) { - $this->prepareSseParams($command, 'CopySource'); - } - - $f = $this->nextHandler; - return $f($command, $request); - } - - private function prepareSseParams(CommandInterface $command, $prefix = '') - { - // Base64 encode the provided key - $key = $command[$prefix . 'SSECustomerKey']; - $command[$prefix . 'SSECustomerKey'] = base64_encode($key); - - // Base64 the provided MD5 or, generate an MD5 if not provided - if ($md5 = $command[$prefix . 'SSECustomerKeyMD5']) { - $command[$prefix . 'SSECustomerKeyMD5'] = base64_encode($md5); - } else { - $command[$prefix . 'SSECustomerKeyMD5'] = base64_encode(md5($key, true)); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php deleted file mode 100644 index af7d22907..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/StreamWrapper.php +++ /dev/null @@ -1,1005 +0,0 @@ -/" files with PHP - * streams, supporting "r", "w", "a", "x". - * - * # Opening "r" (read only) streams: - * - * Read only streams are truly streaming by default and will not allow you to - * seek. This is because data read from the stream is not kept in memory or on - * the local filesystem. You can force a "r" stream to be seekable by setting - * the "seekable" stream context option true. This will allow true streaming of - * data from Amazon S3, but will maintain a buffer of previously read bytes in - * a 'php://temp' stream to allow seeking to previously read bytes from the - * stream. - * - * You may pass any GetObject parameters as 's3' stream context options. These - * options will affect how the data is downloaded from Amazon S3. - * - * # Opening "w" and "x" (write only) streams: - * - * Because Amazon S3 requires a Content-Length header, write only streams will - * maintain a 'php://temp' stream to buffer data written to the stream until - * the stream is flushed (usually by closing the stream with fclose). - * - * You may pass any PutObject parameters as 's3' stream context options. These - * options will affect how the data is uploaded to Amazon S3. - * - * When opening an "x" stream, the file must exist on Amazon S3 for the stream - * to open successfully. - * - * # Opening "a" (write only append) streams: - * - * Similar to "w" streams, opening append streams requires that the data be - * buffered in a "php://temp" stream. Append streams will attempt to download - * the contents of an object in Amazon S3, seek to the end of the object, then - * allow you to append to the contents of the object. The data will then be - * uploaded using a PutObject operation when the stream is flushed (usually - * with fclose). - * - * You may pass any GetObject and/or PutObject parameters as 's3' stream - * context options. These options will affect how the data is downloaded and - * uploaded from Amazon S3. - * - * Stream context options: - * - * - "seekable": Set to true to create a seekable "r" (read only) stream by - * using a php://temp stream buffer - * - For "unlink" only: Any option that can be passed to the DeleteObject - * operation - */ -class StreamWrapper -{ - /** @var resource|null Stream context (this is set by PHP) */ - public $context; - - /** @var StreamInterface Underlying stream resource */ - private $body; - - /** @var int Size of the body that is opened */ - private $size; - - /** @var array Hash of opened stream parameters */ - private $params = []; - - /** @var string Mode in which the stream was opened */ - private $mode; - - /** @var \Iterator Iterator used with opendir() related calls */ - private $objectIterator; - - /** @var string The bucket that was opened when opendir() was called */ - private $openedBucket; - - /** @var string The prefix of the bucket that was opened with opendir() */ - private $openedBucketPrefix; - - /** @var string Opened bucket path */ - private $openedPath; - - /** @var CacheInterface Cache for object and dir lookups */ - private $cache; - - /** @var string The opened protocol (e.g., "s3") */ - private $protocol = 's3'; - - /** @var bool Keeps track of whether stream has been flushed since opening */ - private $isFlushed = false; - - /** @var bool Whether or not to use V2 bucket and object existence methods */ - private static $useV2Existence = false; - - /** - * Register the 's3://' stream wrapper - * - * @param S3ClientInterface $client Client to use with the stream wrapper - * @param string $protocol Protocol to register as. - * @param CacheInterface $cache Default cache for the protocol. - */ - public static function register( - S3ClientInterface $client, - $protocol = 's3', - ?CacheInterface $cache = null, - $v2Existence = false - ) { - self::$useV2Existence = $v2Existence; - if (in_array($protocol, stream_get_wrappers())) { - stream_wrapper_unregister($protocol); - } - - // Set the client passed in as the default stream context client - stream_wrapper_register($protocol, get_called_class(), STREAM_IS_URL); - $default = stream_context_get_options(stream_context_get_default()); - $default[$protocol]['client'] = $client; - - if ($cache) { - $default[$protocol]['cache'] = $cache; - } elseif (!isset($default[$protocol]['cache'])) { - // Set a default cache adapter. - $default[$protocol]['cache'] = new LruArrayCache(); - } - - stream_context_set_default($default); - } - - public function stream_close() - { - if (!$this->isFlushed - && empty($this->body->getSize()) - && $this->mode !== 'r' - ) { - $this->stream_flush(); - } - $this->body = $this->cache = null; - } - - public function stream_open($path, $mode, $options, &$opened_path) - { - $this->initProtocol($path); - $this->isFlushed = false; - $this->params = $this->getBucketKey($path); - $this->mode = rtrim($mode, 'bt'); - - if ($errors = $this->validate($path, $this->mode)) { - return $this->triggerError($errors); - } - - return $this->boolCall(function() { - switch ($this->mode) { - case 'r': return $this->openReadStream(); - case 'a': return $this->openAppendStream(); - default: return $this->openWriteStream(); - } - }); - } - - public function stream_eof() - { - return $this->body->eof(); - } - - public function stream_flush() - { - // Check if stream body size has been - // calculated via a flush or close - if($this->body->getSize() === null && $this->mode !== 'r') { - return $this->triggerError( - "Unable to determine stream size. Did you forget to close or flush the stream?" - ); - } - - $this->isFlushed = true; - if ($this->mode == 'r') { - return false; - } - - if ($this->body->isSeekable()) { - $this->body->seek(0); - } - $params = $this->getOptions(true); - $params['Body'] = $this->body; - - // Attempt to guess the ContentType of the upload based on the - // file extension of the key - if (!isset($params['ContentType']) && - ($type = Psr7\MimeType::fromFilename($params['Key'])) - ) { - $params['ContentType'] = $type; - } - - $this->clearCacheKey("{$this->protocol}://{$params['Bucket']}/{$params['Key']}"); - return $this->boolCall(function () use ($params) { - return (bool) $this->getClient()->putObject($params); - }); - } - - public function stream_read($count) - { - return $this->body->read($count); - } - - public function stream_seek($offset, $whence = SEEK_SET) - { - return !$this->body->isSeekable() - ? false - : $this->boolCall(function () use ($offset, $whence) { - $this->body->seek($offset, $whence); - return true; - }); - } - - public function stream_tell() - { - return $this->boolCall(function() { return $this->body->tell(); }); - } - - public function stream_write($data) - { - return $this->body->write($data); - } - - public function unlink($path) - { - $this->initProtocol($path); - - return $this->boolCall(function () use ($path) { - $this->clearCacheKey($path); - $this->getClient()->deleteObject($this->withPath($path)); - return true; - }); - } - - public function stream_stat() - { - $stat = $this->getStatTemplate(); - $stat[7] = $stat['size'] = $this->getSize(); - $stat[2] = $stat['mode'] = $this->mode; - - return $stat; - } - - /** - * Provides information for is_dir, is_file, filesize, etc. Works on - * buckets, keys, and prefixes. - * @link http://www.php.net/manual/en/streamwrapper.url-stat.php - */ - public function url_stat($path, $flags) - { - $this->initProtocol($path); - - // Some paths come through as S3:// for some reason. - $split = explode('://', $path, 2); - $path = strtolower($split[0]) . '://' . $split[1]; - - // Check if this path is in the url_stat cache - if ($value = $this->getCacheStorage()->get($path)) { - return $value; - } - - $stat = $this->createStat($path, $flags); - - if (is_array($stat)) { - $this->getCacheStorage()->set($path, $stat); - } - - return $stat; - } - - /** - * Parse the protocol out of the given path. - * - * @param $path - */ - private function initProtocol($path) - { - $parts = explode('://', $path, 2); - $this->protocol = $parts[0] ?: 's3'; - } - - private function createStat($path, $flags) - { - $this->initProtocol($path); - $parts = $this->withPath($path); - - if (!$parts['Key']) { - return $this->statDirectory($parts, $path, $flags); - } - - return $this->boolCall(function () use ($parts, $path) { - try { - $result = $this->getClient()->headObject($parts); - if (substr($parts['Key'], -1, 1) == '/' && - $result['ContentLength'] == 0 - ) { - // Return as if it is a bucket to account for console - // bucket objects (e.g., zero-byte object "foo/") - return $this->formatUrlStat($path); - } - - // Attempt to stat and cache regular object - return $this->formatUrlStat($result->toArray()); - } catch (S3Exception $e) { - // Maybe this isn't an actual key, but a prefix. Do a prefix - // listing of objects to determine. - $result = $this->getClient()->listObjects([ - 'Bucket' => $parts['Bucket'], - 'Prefix' => rtrim($parts['Key'], '/') . '/', - 'MaxKeys' => 1 - ]); - if (!$result['Contents'] && !$result['CommonPrefixes']) { - throw new \Exception("File or directory not found: $path"); - } - return $this->formatUrlStat($path); - } - }, $flags); - } - - private function statDirectory($parts, $path, $flags) - { - // Stat "directories": buckets, or "s3://" - $method = self::$useV2Existence ? 'doesBucketExistV2' : 'doesBucketExist'; - - if (!$parts['Bucket'] || - $this->getClient()->$method($parts['Bucket']) - ) { - return $this->formatUrlStat($path); - } - - return $this->triggerError("File or directory not found: $path", $flags); - } - - /** - * Support for mkdir(). - * - * @param string $path Directory which should be created. - * @param int $mode Permissions. 700-range permissions map to - * ACL_PUBLIC. 600-range permissions map to - * ACL_AUTH_READ. All other permissions map to - * ACL_PRIVATE. Expects octal form. - * @param int $options A bitwise mask of values, such as - * STREAM_MKDIR_RECURSIVE. - * - * @return bool - * @link http://www.php.net/manual/en/streamwrapper.mkdir.php - */ - public function mkdir($path, $mode, $options) - { - $this->initProtocol($path); - $params = $this->withPath($path); - $this->clearCacheKey($path); - if (!$params['Bucket']) { - return false; - } - - if (!isset($params['ACL'])) { - $params['ACL'] = $this->determineAcl($mode); - } - - return empty($params['Key']) - ? $this->createBucket($path, $params) - : $this->createSubfolder($path, $params); - } - - public function rmdir($path, $options) - { - $this->initProtocol($path); - $this->clearCacheKey($path); - $params = $this->withPath($path); - $client = $this->getClient(); - - if (!$params['Bucket']) { - return $this->triggerError('You must specify a bucket'); - } - - return $this->boolCall(function () use ($params, $path, $client) { - if (!$params['Key']) { - $client->deleteBucket(['Bucket' => $params['Bucket']]); - return true; - } - return $this->deleteSubfolder($path, $params); - }); - } - - /** - * Support for opendir(). - * - * The opendir() method of the Amazon S3 stream wrapper supports a stream - * context option of "listFilter". listFilter must be a callable that - * accepts an associative array of object data and returns true if the - * object should be yielded when iterating the keys in a bucket. - * - * @param string $path The path to the directory - * (e.g. "s3://dir[]") - * @param string $options Unused option variable - * - * @return bool true on success - * @see http://www.php.net/manual/en/function.opendir.php - */ - public function dir_opendir($path, $options) - { - $this->initProtocol($path); - $this->openedPath = $path; - $params = $this->withPath($path); - $delimiter = $this->getOption('delimiter'); - /** @var callable $filterFn */ - $filterFn = $this->getOption('listFilter'); - $op = ['Bucket' => $params['Bucket']]; - $this->openedBucket = $params['Bucket']; - - if ($delimiter === null) { - $delimiter = '/'; - } - - if ($delimiter) { - $op['Delimiter'] = $delimiter; - } - - if ($params['Key']) { - $params['Key'] = rtrim($params['Key'], $delimiter) . $delimiter; - $op['Prefix'] = $params['Key']; - } - - $this->openedBucketPrefix = $params['Key']; - - // Filter our "/" keys added by the console as directories, and ensure - // that if a filter function is provided that it passes the filter. - $this->objectIterator = \Aws\flatmap( - $this->getClient()->getPaginator('ListObjects', $op), - function (Result $result) use ($filterFn) { - $contentsAndPrefixes = $result->search('[Contents[], CommonPrefixes[]][]'); - // Filter out dir place holder keys and use the filter fn. - return array_filter( - $contentsAndPrefixes, - function ($key) use ($filterFn) { - return (!$filterFn || call_user_func($filterFn, $key)) - && (!isset($key['Key']) || substr($key['Key'], -1, 1) !== '/'); - } - ); - } - ); - - return true; - } - - /** - * Close the directory listing handles - * - * @return bool true on success - */ - public function dir_closedir() - { - $this->objectIterator = null; - gc_collect_cycles(); - - return true; - } - - /** - * This method is called in response to rewinddir() - * - * @return boolean true on success - */ - public function dir_rewinddir() - { - return $this->boolCall(function() { - $this->objectIterator = null; - $this->dir_opendir($this->openedPath, null); - return true; - }); - } - - /** - * This method is called in response to readdir() - * - * @return string Should return a string representing the next filename, or - * false if there is no next file. - * @link http://www.php.net/manual/en/function.readdir.php - */ - public function dir_readdir() - { - // Skip empty result keys - if (!$this->objectIterator->valid()) { - return false; - } - - // First we need to create a cache key. This key is the full path to - // then object in s3: protocol://bucket/key. - // Next we need to create a result value. The result value is the - // current value of the iterator without the opened bucket prefix to - // emulate how readdir() works on directories. - // The cache key and result value will depend on if this is a prefix - // or a key. - $cur = $this->objectIterator->current(); - if (isset($cur['Prefix'])) { - // Include "directories". Be sure to strip a trailing "/" - // on prefixes. - $result = rtrim($cur['Prefix'], '/'); - $key = $this->formatKey($result); - $stat = $this->formatUrlStat($key); - } else { - $result = $cur['Key']; - $key = $this->formatKey($cur['Key']); - $stat = $this->formatUrlStat($cur); - } - - // Cache the object data for quick url_stat lookups used with - // RecursiveDirectoryIterator. - $this->getCacheStorage()->set($key, $stat); - $this->objectIterator->next(); - - // Remove the prefix from the result to emulate other stream wrappers. - return $this->openedBucketPrefix - ? substr($result, strlen($this->openedBucketPrefix)) - : $result; - } - - private function formatKey($key) - { - $protocol = explode('://', $this->openedPath)[0]; - return "{$protocol}://{$this->openedBucket}/{$key}"; - } - - /** - * Called in response to rename() to rename a file or directory. Currently - * only supports renaming objects. - * - * @param string $path_from the path to the file to rename - * @param string $path_to the new path to the file - * - * @return bool true if file was successfully renamed - * @link http://www.php.net/manual/en/function.rename.php - */ - public function rename($path_from, $path_to) - { - // PHP will not allow rename across wrapper types, so we can safely - // assume $path_from and $path_to have the same protocol - $this->initProtocol($path_from); - $partsFrom = $this->withPath($path_from); - $partsTo = $this->withPath($path_to); - $this->clearCacheKey($path_from); - $this->clearCacheKey($path_to); - - if (!$partsFrom['Key'] || !$partsTo['Key']) { - return $this->triggerError('The Amazon S3 stream wrapper only ' - . 'supports copying objects'); - } - - return $this->boolCall(function () use ($partsFrom, $partsTo) { - $options = $this->getOptions(true); - // Copy the object and allow overriding default parameters if - // desired, but by default copy metadata - $this->getClient()->copy( - $partsFrom['Bucket'], - $partsFrom['Key'], - $partsTo['Bucket'], - $partsTo['Key'], - isset($options['acl']) ? $options['acl'] : 'private', - $options - ); - // Delete the original object - $this->getClient()->deleteObject([ - 'Bucket' => $partsFrom['Bucket'], - 'Key' => $partsFrom['Key'] - ] + $options); - return true; - }); - } - - public function stream_cast($cast_as) - { - return false; - } - - public function stream_set_option($option, $arg1, $arg2) - { - return false; - } - - public function stream_metadata($path, $option, $value) - { - return false; - } - - public function stream_lock($operation) - { - trigger_error( - 'stream_lock() is not supported by the Amazon S3 stream wrapper', - E_USER_WARNING - ); - return false; - } - - public function stream_truncate($new_size) - { - return false; - } - - /** - * Validates the provided stream arguments for fopen and returns an array - * of errors. - */ - private function validate($path, $mode) - { - $errors = []; - - if (!$this->getOption('Key')) { - $errors[] = 'Cannot open a bucket. You must specify a path in the ' - . 'form of s3://bucket/key'; - } - - if (!in_array($mode, ['r', 'w', 'a', 'x'])) { - $errors[] = "Mode not supported: {$mode}. " - . "Use one 'r', 'w', 'a', or 'x'."; - } - - if ($mode === 'x') { - $method = self::$useV2Existence ? 'doesObjectExistV2' : 'doesObjectExist'; - - if ($this->getClient()->$method( - $this->getOption('Bucket'), - $this->getOption('Key'), - $this->getOptions(true) - )) { - $errors[] = "{$path} already exists on Amazon S3"; - } - } - - return $errors; - } - - /** - * Get the stream context options available to the current stream - * - * @param bool $removeContextData Set to true to remove contextual kvp's - * like 'client' from the result. - * - * @return array - */ - private function getOptions($removeContextData = false) - { - // Context is not set when doing things like stat - if ($this->context === null) { - $options = []; - } else { - $options = stream_context_get_options($this->context); - $options = isset($options[$this->protocol]) - ? $options[$this->protocol] - : []; - } - - $default = stream_context_get_options(stream_context_get_default()); - $default = isset($default[$this->protocol]) - ? $default[$this->protocol] - : []; - $result = $this->params + $options + $default; - - if ($removeContextData) { - unset($result['client'], $result['seekable'], $result['cache']); - } - - return $result; - } - - /** - * Get a specific stream context option - * - * @param string $name Name of the option to retrieve - * - * @return mixed|null - */ - private function getOption($name) - { - $options = $this->getOptions(); - - return isset($options[$name]) ? $options[$name] : null; - } - - /** - * Gets the client from the stream context - * - * @return S3ClientInterface - * @throws \RuntimeException if no client has been configured - */ - private function getClient() - { - if (!$client = $this->getOption('client')) { - throw new \RuntimeException('No client in stream context'); - } - - return $client; - } - - private function getBucketKey($path) - { - // Remove the protocol - $parts = explode('://', $path, 2); - // Get the bucket, key - $parts = explode('/', $parts[1], 2); - - return [ - 'Bucket' => $parts[0], - 'Key' => isset($parts[1]) ? $parts[1] : null - ]; - } - - /** - * Get the bucket and key from the passed path (e.g. s3://bucket/key) - * - * @param string $path Path passed to the stream wrapper - * - * @return array Hash of 'Bucket', 'Key', and custom params from the context - */ - private function withPath($path) - { - $params = $this->getOptions(true); - - return $this->getBucketKey($path) + $params; - } - - private function openReadStream() - { - $client = $this->getClient(); - $command = $client->getCommand('GetObject', $this->getOptions(true)); - $command['@http']['stream'] = true; - $result = $client->execute($command); - $this->size = $result['ContentLength']; - $this->body = $result['Body']; - - // Wrap the body in a caching entity body if seeking is allowed - if ($this->getOption('seekable') && !$this->body->isSeekable()) { - $this->body = new CachingStream($this->body); - } - - return true; - } - - private function openWriteStream() - { - $this->body = new Stream(fopen('php://temp', 'r+')); - return true; - } - - private function openAppendStream() - { - try { - // Get the body of the object and seek to the end of the stream - $client = $this->getClient(); - $this->body = $client->getObject($this->getOptions(true))['Body']; - $this->body->seek(0, SEEK_END); - return true; - } catch (S3Exception $e) { - // The object does not exist, so use a simple write stream - return $this->openWriteStream(); - } - } - - /** - * Trigger one or more errors - * - * @param string|array $errors Errors to trigger - * @param mixed $flags If set to STREAM_URL_STAT_QUIET, then no - * error or exception occurs - * - * @return bool Returns false - * @throws \RuntimeException if throw_errors is true - */ - private function triggerError($errors, $flags = null) - { - // This is triggered with things like file_exists() - if ($flags & STREAM_URL_STAT_QUIET) { - return $flags & STREAM_URL_STAT_LINK - // This is triggered for things like is_link() - ? $this->formatUrlStat(false) - : false; - } - - // This is triggered when doing things like lstat() or stat() - trigger_error(implode("\n", (array) $errors), E_USER_WARNING); - - return false; - } - - /** - * Prepare a url_stat result array - * - * @param string|array $result Data to add - * - * @return array Returns the modified url_stat result - */ - private function formatUrlStat($result = null) - { - $stat = $this->getStatTemplate(); - switch (gettype($result)) { - case 'NULL': - case 'string': - // Directory with 0777 access - see "man 2 stat". - $stat['mode'] = $stat[2] = 0040777; - break; - case 'array': - // Regular file with 0777 access - see "man 2 stat". - $stat['mode'] = $stat[2] = 0100777; - // Pluck the content-length if available. - if (isset($result['ContentLength'])) { - $stat['size'] = $stat[7] = $result['ContentLength']; - } elseif (isset($result['Size'])) { - $stat['size'] = $stat[7] = $result['Size']; - } - if (isset($result['LastModified'])) { - // ListObjects or HeadObject result - $stat['mtime'] = $stat[9] = $stat['ctime'] = $stat[10] - = strtotime($result['LastModified']); - } - } - - return $stat; - } - - /** - * Creates a bucket for the given parameters. - * - * @param string $path Stream wrapper path - * @param array $params A result of StreamWrapper::withPath() - * - * @return bool Returns true on success or false on failure - */ - private function createBucket($path, array $params) - { - $method = self::$useV2Existence ? 'doesBucketExistV2' : 'doesBucketExist'; - - if ($this->getClient()->$method($params['Bucket'])) { - return $this->triggerError("Bucket already exists: {$path}"); - } - - unset($params['ACL']); - return $this->boolCall(function () use ($params, $path) { - $this->getClient()->createBucket($params); - $this->clearCacheKey($path); - return true; - }); - } - - /** - * Creates a pseudo-folder by creating an empty "/" suffixed key - * - * @param string $path Stream wrapper path - * @param array $params A result of StreamWrapper::withPath() - * - * @return bool - */ - private function createSubfolder($path, array $params) - { - // Ensure the path ends in "/" and the body is empty. - $params['Key'] = rtrim($params['Key'], '/') . '/'; - $params['Body'] = ''; - - // Fail if this pseudo directory key already exists - $method = self::$useV2Existence ? 'doesObjectExistV2' : 'doesObjectExist'; - - if ($this->getClient()->$method( - $params['Bucket'], - $params['Key'] - )) { - return $this->triggerError("Subfolder already exists: {$path}"); - } - - return $this->boolCall(function () use ($params, $path) { - $this->getClient()->putObject($params); - $this->clearCacheKey($path); - return true; - }); - } - - /** - * Deletes a nested subfolder if it is empty. - * - * @param string $path Path that is being deleted (e.g., 's3://a/b/c') - * @param array $params A result of StreamWrapper::withPath() - * - * @return bool - */ - private function deleteSubfolder($path, $params) - { - // Use a key that adds a trailing slash if needed. - $prefix = rtrim($params['Key'], '/') . '/'; - $result = $this->getClient()->listObjects([ - 'Bucket' => $params['Bucket'], - 'Prefix' => $prefix, - 'MaxKeys' => 1 - ]); - - // Check if the bucket contains keys other than the placeholder - if ($contents = $result['Contents']) { - return (count($contents) > 1 || $contents[0]['Key'] != $prefix) - ? $this->triggerError('Subfolder is not empty') - : $this->unlink(rtrim($path, '/') . '/'); - } - - return $result['CommonPrefixes'] - ? $this->triggerError('Subfolder contains nested folders') - : true; - } - - /** - * Determine the most appropriate ACL based on a file mode. - * - * @param int $mode File mode - * - * @return string - */ - private function determineAcl($mode) - { - switch (substr(decoct($mode), 0, 1)) { - case '7': return 'public-read'; - case '6': return 'authenticated-read'; - default: return 'private'; - } - } - - /** - * Gets a URL stat template with default values - * - * @return array - */ - private function getStatTemplate() - { - return [ - 0 => 0, 'dev' => 0, - 1 => 0, 'ino' => 0, - 2 => 0, 'mode' => 0, - 3 => 0, 'nlink' => 0, - 4 => 0, 'uid' => 0, - 5 => 0, 'gid' => 0, - 6 => -1, 'rdev' => -1, - 7 => 0, 'size' => 0, - 8 => 0, 'atime' => 0, - 9 => 0, 'mtime' => 0, - 10 => 0, 'ctime' => 0, - 11 => -1, 'blksize' => -1, - 12 => -1, 'blocks' => -1, - ]; - } - - /** - * Invokes a callable and triggers an error if an exception occurs while - * calling the function. - * - * @param callable $fn - * @param int $flags - * - * @return bool - */ - private function boolCall(callable $fn, $flags = null) - { - try { - return $fn(); - } catch (\Exception $e) { - return $this->triggerError($e->getMessage(), $flags); - } - } - - /** - * @return LruArrayCache - */ - private function getCacheStorage() - { - if (!$this->cache) { - $this->cache = $this->getOption('cache') ?: new LruArrayCache(); - } - - return $this->cache; - } - - /** - * Clears a specific stat cache value from the stat cache and LRU cache. - * - * @param string $key S3 path (s3://bucket/key). - */ - private function clearCacheKey($key) - { - clearstatcache(true, $key); - $this->getCacheStorage()->remove($key); - } - - /** - * Returns the size of the opened object body. - * - * @return int|null - */ - private function getSize() - { - $size = $this->body->getSize(); - - return !empty($size) ? $size : $this->size; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Transfer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Transfer.php deleted file mode 100644 index 417f692d4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/Transfer.php +++ /dev/null @@ -1,460 +0,0 @@ -client = $client; - - // Prepare the destination. - $this->destination = $this->prepareTarget($dest); - if ($this->destination['scheme'] === 's3') { - $this->s3Args = $this->getS3Args($this->destination['path']); - } - - // Prepare the source. - if (is_string($source)) { - $this->sourceMetadata = $this->prepareTarget($source); - $this->source = $source; - } elseif ($source instanceof Iterator) { - if (empty($options['base_dir'])) { - throw new \InvalidArgumentException('You must provide the source' - . ' argument as a string or provide the "base_dir" option.'); - } - - $this->sourceMetadata = $this->prepareTarget($options['base_dir']); - $this->source = $source; - } else { - throw new \InvalidArgumentException('source must be the path to a ' - . 'directory or an iterator that yields file names.'); - } - - // Validate schemes. - if ($this->sourceMetadata['scheme'] === $this->destination['scheme']) { - throw new \InvalidArgumentException("You cannot copy from" - . " {$this->sourceMetadata['scheme']} to" - . " {$this->destination['scheme']}." - ); - } - - // Handle multipart-related options. - $this->concurrency = isset($options['concurrency']) - ? $options['concurrency'] - : MultipartUploader::DEFAULT_CONCURRENCY; - $this->mupThreshold = isset($options['mup_threshold']) - ? $options['mup_threshold'] - : 16777216; - if ($this->mupThreshold < MultipartUploader::PART_MIN_SIZE) { - throw new \InvalidArgumentException('mup_threshold must be >= 5MB'); - } - - // Handle "before" callback option. - if (isset($options['before'])) { - $this->before = $options['before']; - if (!is_callable($this->before)) { - throw new \InvalidArgumentException('before must be a callable.'); - } - } - - // Handle "after" callback option. - if (isset($options['after'])) { - $this->after = $options['after']; - if (!is_callable($this->after)) { - throw new \InvalidArgumentException('after must be a callable.'); - } - } - - // Handle "debug" option. - if (isset($options['debug'])) { - if ($options['debug'] === true) { - $options['debug'] = fopen('php://output', 'w'); - } - if (is_resource($options['debug'])) { - $this->addDebugToBefore($options['debug']); - } - } - - // Handle "add_content_md5" option. - $this->addContentMD5 = isset($options['add_content_md5']) - && $options['add_content_md5'] === true; - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->client->getHandlerList(), - MetricsBuilder::S3_TRANSFER - ); - } - - /** - * Transfers the files. - * - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - // If the promise has been created, just return it. - if (!$this->promise) { - // Create an upload/download promise for the transfer. - $this->promise = $this->sourceMetadata['scheme'] === 'file' - ? $this->createUploadPromise() - : $this->createDownloadPromise(); - } - - return $this->promise; - } - - /** - * Transfers the files synchronously. - */ - public function transfer() - { - $this->promise()->wait(); - } - - private function prepareTarget($targetPath) - { - $target = [ - 'path' => $this->normalizePath($targetPath), - 'scheme' => $this->determineScheme($targetPath), - ]; - - if ($target['scheme'] !== 's3' && $target['scheme'] !== 'file') { - throw new \InvalidArgumentException('Scheme must be "s3" or "file".'); - } - - return $target; - } - - /** - * Creates an array that contains Bucket and Key by parsing the filename. - * - * @param string $path Path to parse. - * - * @return array - */ - private function getS3Args($path) - { - $parts = explode('/', str_replace('s3://', '', $path), 2); - $args = ['Bucket' => $parts[0]]; - if (isset($parts[1])) { - $args['Key'] = $parts[1]; - } - - return $args; - } - - /** - * Parses the scheme from a filename. - * - * @param string $path Path to parse. - * - * @return string - */ - private function determineScheme($path) - { - return !strpos($path, '://') ? 'file' : explode('://', $path)[0]; - } - - /** - * Normalize a path so that it has UNIX-style directory separators and no trailing / - * - * @param string $path - * - * @return string - */ - private function normalizePath($path) - { - return rtrim(str_replace('\\', '/', $path), '/'); - } - - private function resolvesOutsideTargetDirectory($sink, $objectKey) - { - // Split on both '/' and '\'. PHP on Windows treats '\' as a directory - // separator in fopen/mkdir/dirname, so a key containing a raw - // backslash byte can escape the destination if we only split on '/'. - $separators = '#[/\\\\]#'; - $resolved = []; - $sections = preg_split($separators, $sink); - $targetSectionsLength = count(preg_split($separators, $objectKey)); - $targetSections = array_slice($sections, -($targetSectionsLength + 1)); - $targetDirectory = $targetSections[0]; - - foreach ($targetSections as $section) { - if ($section === '.' || $section === '') { - continue; - } - if ($section === '..') { - array_pop($resolved); - if (empty($resolved) || $resolved[0] !== $targetDirectory) { - return true; - } - } else { - $resolved []= $section; - } - } - return false; - } - - private function createDownloadPromise() - { - $parts = $this->getS3Args($this->sourceMetadata['path']); - $prefix = "s3://{$parts['Bucket']}/" - . (isset($parts['Key']) ? $parts['Key'] . '/' : ''); - - $commands = []; - foreach ($this->getDownloadsIterator() as $object) { - // Prepare the sink. - $objectKey = preg_replace('/^' . preg_quote($prefix, '/') . '/', '', $object); - $sink = $this->destination['path'] . '/' . $objectKey; - - $command = $this->client->getCommand( - 'GetObject', - $this->getS3Args($object) + ['@http' => ['sink' => $sink]] - ); - - if ($this->resolvesOutsideTargetDirectory($sink, $objectKey)) { - throw new AwsException( - 'Cannot download key ' . $objectKey - . ', its relative path resolves outside the' - . ' parent directory', $command); - } - - // Create the directory if needed. - $dir = dirname($sink); - if (!is_dir($dir) && !mkdir($dir, 0777, true)) { - throw new \RuntimeException("Could not create dir: {$dir}"); - } - - // Create the command. - $commands []= $command; - } - - // Create a GetObject command pool and return the promise. - return (new Aws\CommandPool($this->client, $commands, [ - 'concurrency' => $this->concurrency, - 'before' => $this->before, - 'fulfill' => $this->after, - 'rejected' => function ($reason, $idx, Promise\PromiseInterface $p) { - $p->reject($reason); - } - ]))->promise(); - } - - private function createUploadPromise() - { - // Map each file into a promise that performs the actual transfer. - $files = \Aws\map($this->getUploadsIterator(), function ($file) { - return (filesize($file) >= $this->mupThreshold) - ? $this->uploadMultipart($file) - : $this->upload($file); - }); - - // Create an EachPromise, that will concurrently handle the upload - // operations' yielded promises from the iterator. - return Promise\Each::ofLimitAll($files, $this->concurrency, $this->after); - } - - /** @return Iterator */ - private function getUploadsIterator() - { - if (is_string($this->source)) { - return Aws\filter( - Aws\recursive_dir_iterator($this->sourceMetadata['path']), - function ($file) { return !is_dir($file); } - ); - } - - return $this->source; - } - - /** @return Iterator */ - private function getDownloadsIterator() - { - if (is_string($this->source)) { - $listArgs = $this->getS3Args($this->sourceMetadata['path']); - if (isset($listArgs['Key'])) { - $listArgs['Prefix'] = $listArgs['Key'] . '/'; - unset($listArgs['Key']); - } - - $files = $this->client - ->getPaginator('ListObjects', $listArgs) - ->search('Contents[].Key'); - $files = Aws\map($files, function ($key) use ($listArgs) { - return "s3://{$listArgs['Bucket']}/$key"; - }); - return Aws\filter($files, function ($key) { - return substr($key, -1, 1) !== '/'; - }); - } - - return $this->source; - } - - private function upload($filename) - { - $args = $this->s3Args; - $args['SourceFile'] = $filename; - $args['Key'] = $this->createS3Key($filename); - $args['AddContentMD5'] = $this->addContentMD5; - $command = $this->client->getCommand('PutObject', $args); - $this->before and call_user_func($this->before, $command); - - return $this->client->executeAsync($command); - } - - private function uploadMultipart($filename) - { - $args = $this->s3Args; - $args['Key'] = $this->createS3Key($filename); - $filename = $filename instanceof \SplFileInfo ? $filename->getPathname() : $filename; - - return (new MultipartUploader($this->client, $filename, [ - 'bucket' => $args['Bucket'], - 'key' => $args['Key'], - 'before_initiate' => $this->before, - 'before_upload' => $this->before, - 'before_complete' => $this->before, - 'concurrency' => $this->concurrency, - 'add_content_md5' => $this->addContentMD5 - ]))->promise(); - } - - private function createS3Key($filename) - { - $filename = $this->normalizePath($filename); - $relative_file_path = ltrim( - preg_replace('#^' . preg_quote($this->sourceMetadata['path']) . '#', '', $filename), - '/\\' - ); - - if (isset($this->s3Args['Key'])) { - return rtrim($this->s3Args['Key'], '/').'/'.$relative_file_path; - } - - return $relative_file_path; - } - - private function addDebugToBefore($debug) - { - $before = $this->before; - $sourcePath = $this->sourceMetadata['path']; - $s3Args = $this->s3Args; - - $this->before = static function ( - CommandInterface $command - ) use ($before, $debug, $sourcePath, $s3Args) { - // Call the composed before function. - $before and $before($command); - - // Determine the source and dest values based on operation. - switch ($operation = $command->getName()) { - case 'GetObject': - $source = "s3://{$command['Bucket']}/{$command['Key']}"; - $dest = $command['@http']['sink']; - break; - case 'PutObject': - $source = $command['SourceFile']; - $dest = "s3://{$command['Bucket']}/{$command['Key']}"; - break; - case 'UploadPart': - $part = $command['PartNumber']; - case 'CreateMultipartUpload': - case 'CompleteMultipartUpload': - $sourceKey = $command['Key']; - if (isset($s3Args['Key']) && strpos($sourceKey, $s3Args['Key']) === 0) { - $sourceKey = substr($sourceKey, strlen($s3Args['Key']) + 1); - } - $source = "{$sourcePath}/{$sourceKey}"; - $dest = "s3://{$command['Bucket']}/{$command['Key']}"; - break; - default: - throw new \UnexpectedValueException( - "Transfer encountered an unexpected operation: {$operation}." - ); - } - - // Print the debugging message. - $context = sprintf('%s -> %s (%s)', $source, $dest, $operation); - if (isset($part)) { - $context .= " : Part={$part}"; - } - fwrite($debug, "Transferring {$context}\n"); - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/Configuration.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/Configuration.php deleted file mode 100644 index 91277d61e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/Configuration.php +++ /dev/null @@ -1,37 +0,0 @@ -useArnRegion = Aws\boolean_value($useArnRegion); - if (is_null($this->useArnRegion)) { - throw new ConfigurationException("'use_arn_region' config option" - . " must be a boolean value."); - } - } - - /** - * {@inheritdoc} - */ - public function isUseArnRegion() - { - return $this->useArnRegion; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'use_arn_region' => $this->isUseArnRegion(), - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationInterface.php deleted file mode 100644 index c7f3b24d9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationInterface.php +++ /dev/null @@ -1,19 +0,0 @@ - - * use Aws\S3\UseArnRegion\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see Aws\S3\UseArnRegion\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const ENV_USE_ARN_REGION = 'AWS_S3_USE_ARN_REGION'; - const INI_USE_ARN_REGION = 's3_use_arn_region'; - const DEFAULT_USE_ARN_REGION = true; - - public static $cacheKey = 'aws_s3_use_arn_region_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback(); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['use_arn_region']) - && $config['use_arn_region'] instanceof CacheInterface - ) { - return self::cache($memo, $config['use_arn_region'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates config from environment variables. - * - * @return callable - */ - public static function env() - { - return function () { - // Use config from environment variables, if available - $useArnRegion = getenv(self::ENV_USE_ARN_REGION); - if (!empty($useArnRegion)) { - return Promise\Create::promiseFor( - new Configuration($useArnRegion) - ); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_USE_ARN_REGION); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini($profile = null, $filename = null) - { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - - // Use INI_SCANNER_NORMAL instead of INI_SCANNER_TYPED for PHP 5.5 compatibility - $data = \Aws\parse_ini_file($filename, true, INI_SCANNER_NORMAL); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile][self::INI_USE_ARN_REGION])) { - return self::reject("Required S3 Use Arn Region config values - not present in INI profile '{$profile}' ({$filename})"); - } - - // INI_SCANNER_NORMAL parses false-y values as an empty string - if ($data[$profile][self::INI_USE_ARN_REGION] === "") { - $data[$profile][self::INI_USE_ARN_REGION] = false; - } - - return Promise\Create::promiseFor( - new Configuration($data[$profile][self::INI_USE_ARN_REGION]) - ); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback() - { - return function () { - return Promise\Create::promiseFor( - new Configuration(self::DEFAULT_USE_ARN_REGION) - ); - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/Exception/ConfigurationException.php deleted file mode 100644 index 15d06a9c2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/S3/UseArnRegion/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -api = $api; - $this->parser = $parser; - } - - public function __invoke( - CommandInterface $command, - ResponseInterface $response - ) { - $fn = $this->parser; - $result = $fn($command, $response); - - //Skip this middleware if the operation doesn't have an httpChecksum - $op = $this->api->getOperation($command->getName()); - $checksumInfo = isset($op['httpChecksum']) - ? $op['httpChecksum'] - : []; - if (empty($checksumInfo)) { - return $result; - } - - //Skip this middleware if the operation doesn't send back a checksum, or the user doesn't opt in - $checksumModeEnabledMember = isset($checksumInfo['requestValidationModeMember']) - ? $checksumInfo['requestValidationModeMember'] - : ""; - $checksumModeEnabled = isset($command[$checksumModeEnabledMember]) - ? $command[$checksumModeEnabledMember] - : ""; - $responseAlgorithms = isset($checksumInfo['responseAlgorithms']) - ? $checksumInfo['responseAlgorithms'] - : []; - if (empty($responseAlgorithms) - || strtolower($checksumModeEnabled) !== "enabled" - ) { - return $result; - } - - if (extension_loaded('awscrt')) { - $checksumPriority = ['CRC32C', 'CRC32', 'SHA1', 'SHA256']; - } else { - $checksumPriority = ['CRC32', 'SHA1', 'SHA256']; - } - $checksumsToCheck = array_intersect($responseAlgorithms, $checksumPriority); - $checksumValidationInfo = $this->validateChecksum($checksumsToCheck, $response); - - if ($checksumValidationInfo['status'] == "SUCCEEDED") { - $result['ChecksumValidated'] = $checksumValidationInfo['checksum']; - } else if ($checksumValidationInfo['status'] == "FAILED"){ - //Ignore failed validations on GetObject if it's a multipart get which returned a full multipart object - if ($command->getName() == "GetObject" - && !empty($checksumValidationInfo['checksumHeaderValue']) - ) { - $headerValue = $checksumValidationInfo['checksumHeaderValue']; - $lastDashPos = strrpos($headerValue, '-'); - $endOfChecksum = substr($headerValue, $lastDashPos + 1); - if (is_numeric($endOfChecksum) - && intval($endOfChecksum) > 1 - && intval($endOfChecksum) < 10000) { - return $result; - } - } - throw new S3Exception( - "Calculated response checksum did not match the expected value", - $command - ); - } - return $result; - } - - public function parseMemberFromStream( - StreamInterface $stream, - StructureShape $member, - $response - ) { - return $this->parser->parseMemberFromStream($stream, $member, $response); - } - - /** - * @param $checksumPriority - * @param ResponseInterface $response - */ - public function validateChecksum($checksumPriority, ResponseInterface $response) - { - $checksumToValidate = $this->chooseChecksumHeaderToValidate( - $checksumPriority, - $response - ); - $validationStatus = "SKIPPED"; - $checksumHeaderValue = null; - if (!empty($checksumToValidate)) { - $checksumHeaderValue = $response->getHeader( - 'x-amz-checksum-' . $checksumToValidate - ); - if (isset($checksumHeaderValue)) { - $checksumHeaderValue = $checksumHeaderValue[0]; - $calculatedChecksumValue = $this->getEncodedValue( - $checksumToValidate, - $response->getBody() - ); - $validationStatus = $checksumHeaderValue == $calculatedChecksumValue - ? "SUCCEEDED" - : "FAILED"; - } - } - return [ - "status" => $validationStatus, - "checksum" => $checksumToValidate, - "checksumHeaderValue" => $checksumHeaderValue, - ]; - } - - /** - * @param $checksumPriority - * @param ResponseInterface $response - */ - public function chooseChecksumHeaderToValidate( - $checksumPriority, - ResponseInterface $response - ) { - foreach ($checksumPriority as $checksum) { - $checksumHeader = 'x-amz-checksum-' . $checksum; - if ($response->hasHeader($checksumHeader)) { - return $checksum; - } - } - return null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/SSO/Exception/SSOException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/SSO/Exception/SSOException.php deleted file mode 100644 index 6392a3f05..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/SSO/Exception/SSOException.php +++ /dev/null @@ -1,9 +0,0 @@ - true, - 'S3' => true , - 'SSO' => true, - 'SSOOIDC' => true, - 'Sts' => true, - 'Signin' => true - ]; - - public static function removeUnusedServicesInDev(Event $event, ?Filesystem $filesystem = null) - { - self::removeUnusedServicesWithConfig($event, $filesystem, true); - } - - public static function removeUnusedServices(Event $event, ?Filesystem $filesystem = null) - { - self::removeUnusedServicesWithConfig($event, $filesystem, false); - } - - private static function removeUnusedServicesWithConfig(Event $event, ?Filesystem $filesystem = null, $isDev = false) - { - if ($isDev && !$event->isDevMode()){ - return; - } - - $composer = $event->getComposer(); - $extra = $composer->getPackage()->getExtra(); - $listedServices = $extra['aws/aws-sdk-php'] ?? []; - - if ($listedServices) { - $serviceMapping = self::buildServiceMapping(); - self::verifyListedServices($serviceMapping, $listedServices); - $filesystem = $filesystem ?: new Filesystem(); - $vendorPath = $composer->getConfig()->get('vendor-dir'); - self::removeServiceDirs( - $event, - $filesystem, - $serviceMapping, - $listedServices, - $vendorPath - ); - } else { - throw new \InvalidArgumentException( - 'There are no services listed. Did you intend to use this script?' - ); - } - } - - public static function buildServiceMapping() - { - $serviceMapping = []; - $manifest = require(__DIR__ . '/../../data/manifest.json.php'); - - foreach ($manifest as $service => $attributes) { - $serviceMapping[$attributes['namespace']] = $service; - } - - return $serviceMapping; - } - - private static function verifyListedServices($serviceMapping, $listedServices) - { - foreach ($listedServices as $serviceToKeep) { - if (!isset($serviceMapping[$serviceToKeep])) { - throw new \InvalidArgumentException( - "'$serviceToKeep' is not a valid AWS service namespace. Please check spelling and casing." - ); - } - } - } - - private static function removeServiceDirs( - $event, - $filesystem, - $serviceMapping, - $listedServices, - $vendorPath - ) { - $unsafeForDeletion = self::$unsafeForDeletion; - if (in_array('DynamoDbStreams', $listedServices)) { - $unsafeForDeletion['DynamoDb'] = true; - } - - $clientPath = $vendorPath . '/aws/aws-sdk-php/src/'; - $modelPath = $clientPath . 'data/'; - $deleteCount = 0; - - foreach ($serviceMapping as $clientName => $modelName) { - if (!in_array($clientName, $listedServices) && - !isset($unsafeForDeletion[$clientName]) - ) { - $clientDir = $clientPath . $clientName; - $modelDir = $modelPath . $modelName; - - if ($filesystem->exists([$clientDir, $modelDir])) { - $attempts = 3; - $delay = 2; - - while ($attempts) { - try { - $filesystem->remove([$clientDir, $modelDir]); - $deleteCount++; - break; - } catch (IOException $e) { - $attempts--; - - if (!$attempts) { - throw new IOException( - "Removal failed after several attempts. Last error: " . $e->getMessage() - ); - } else { - sleep($delay); - $event->getIO()->write( - "Error encountered: " . $e->getMessage() . ". Retrying..." - ); - $delay += 2; - } - } - } - - } - } - } - $event->getIO()->write( - "Removed $deleteCount AWS service" . ($deleteCount === 1 ? '' : 's') - ); - } -} \ No newline at end of file diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sdk.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sdk.php deleted file mode 100644 index a60d5fa3e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sdk.php +++ /dev/null @@ -1,978 +0,0 @@ -args = $args; - - if (!isset($args['handler']) && !isset($args['http_handler'])) { - $this->args['http_handler'] = default_http_handler(); - } - } - - public function __call($name, array $args) - { - $args = isset($args[0]) ? $args[0] : []; - if (strpos($name, 'createMultiRegion') === 0) { - return $this->createMultiRegionClient(substr($name, 17), $args); - } - - if (strpos($name, 'create') === 0) { - return $this->createClient(substr($name, 6), $args); - } - - throw new \BadMethodCallException("Unknown method: {$name}."); - } - - /** - * Get a client by name using an array of constructor options. - * - * @param string $name Service name or namespace (e.g., DynamoDb, s3). - * @param array $args Arguments to configure the client. - * - * @return AwsClientInterface - * @throws \InvalidArgumentException if any required options are missing or - * the service is not supported. - * @see Aws\AwsClient::__construct for a list of available options for args. - */ - public function createClient($name, array $args = []) - { - // Get information about the service from the manifest file. - $service = manifest($name); - $namespace = $service['namespace']; - - // Instantiate the client class. - $client = "Aws\\{$namespace}\\{$namespace}Client"; - return new $client($this->mergeArgs($namespace, $service, $args)); - } - - public function createMultiRegionClient($name, array $args = []) - { - // Get information about the service from the manifest file. - $service = manifest($name); - $namespace = $service['namespace']; - - $klass = "Aws\\{$namespace}\\{$namespace}MultiRegionClient"; - $klass = class_exists($klass) ? $klass : MultiRegionClient::class; - - return new $klass($this->mergeArgs($namespace, $service, $args)); - } - - /** - * Clone existing SDK instance with ability to pass an associative array - * of extra client settings. - * - * @param array $args - * - * @return self - */ - public function copy(array $args = []) - { - return new self($args + $this->args); - } - - private function mergeArgs($namespace, array $manifest, array $args = []) - { - // Merge provided args with stored, service-specific args. - if (isset($this->args[$namespace])) { - $args += $this->args[$namespace]; - } - - // Provide the endpoint prefix in the args. - if (!isset($args['service'])) { - $args['service'] = $manifest['endpoint']; - } - - return $args + $this->args; - } - - /** - * Determine the endpoint prefix from a client namespace. - * - * @param string $name Namespace name - * - * @return string - * @internal - * @deprecated Use the `\Aws\manifest()` function instead. - */ - public static function getEndpointPrefix($name) - { - return manifest($name)['endpoint']; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/AnonymousSignature.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/AnonymousSignature.php deleted file mode 100644 index 9ccc8df61..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/AnonymousSignature.php +++ /dev/null @@ -1,33 +0,0 @@ - true]; - private const EXT_OPENSSL = 'openssl'; - private const CURVE_NAME = 'prime256v1'; - private const HEADER_DPOP = 'DPop'; - private const HEADER_TYP = 'dpop+jwt'; - private const HEADER_ALG = 'ES256'; - private const HEADER_JWK_KTY = 'EC'; - private const HEADER_JWK_CRV = 'P-256'; - private const PAYLOAD_HTM = 'POST'; - private const JWK_SCHEMA = [ - 'kty' => self::HEADER_JWK_KTY, - 'crv' => self::HEADER_JWK_CRV, - ]; - private const HEADER_SCHEMA = [ - 'typ' => self::HEADER_TYP, - 'alg' => self::HEADER_ALG, - 'jwk' => self::JWK_SCHEMA - ]; - private const PAYLOAD_SCHEMA = [ - 'htm' => self::PAYLOAD_HTM, - ]; - - /** - * Creates a new DpopSignature instance for the specified service - * - * @param string $serviceName The name of the AWS service (must be in the allow list) - * - * @throws \RuntimeException If the OpenSSL extension is not loaded - * @throws \InvalidArgumentException If the service is not in the allow list - */ - public function __construct(string $serviceName) - { - if (!extension_loaded(self::EXT_OPENSSL)) { - throw new \RuntimeException( - 'the `openssl` extension is required to generate DPop signatures. ' - . 'Please install or enable the `openssl` extension.' - ); - } - - if (!isset(self::ALLOW_LISTED_SERVICES[$serviceName])) { - throw new \InvalidArgumentException( - "The '{$serviceName}' service does not support DPop signatures. " - . 'Please configure a signature version this service supports.' - ); - } - } - - /** - * Signs an HTTP request with a DPoP header - * - * @param RequestInterface $request The HTTP request to sign - * @param \OpenSSLAsymmetricKey $key The private key for signing - * - * @return RequestInterface The request with the DPoP header added - * @throws \RuntimeException|\Exception If signature generation fails - */ - public function signRequest( - RequestInterface $request, - \OpenSSLAsymmetricKey $key, - ) { - $dpopHeaderValue = $this->generateDpopProof($key, $request->getUri()); - - return $request->withHeader(self::HEADER_DPOP, $dpopHeaderValue); - } - - /** - * Generates the DPoP JWT header value for the request - * - * @param \OpenSSLAsymmetricKey $key The private key for signing - * @param UriInterface $uri The URI of the request - * - * @return string The complete DPoP JWT token - * @throws \RuntimeException|\Exception If signature generation fails - */ - private function generateDpopProof( - \OpenSSLAsymmetricKey $key, - UriInterface $uri - ): string - { - $keyDetails = openssl_pkey_get_details($key); - if (($keyDetails['ec']['curve_name'] ?? '') !== self::CURVE_NAME) { - throw new \InvalidArgumentException( - 'DPoP signature keys must use P-256 curve. ' - . 'Please check your configuration and try again.' - ); - } - - ['x' => $x, 'y' => $y] = $keyDetails['ec']; - $header = $this->buildDpopHeader($x, $y); - $payload = $this->buildDpopPayload((string) $uri); - - $message = $this->base64url_encode(json_encode($header)) - . '.' . $this->base64url_encode(json_encode($payload)); - $signature = ''; - if (!openssl_sign($message, $signature, $key, OPENSSL_ALGO_SHA256)) { - $error = openssl_error_string(); - - throw new \RuntimeException( - 'Failed to generate signature.' . ($error ? ": $error" : '.') - ); - } - - $signature = $this->derToRaw($signature); - - return $message . '.' . $this->base64url_encode($signature); - } - - /** - * Builds the DPoP JWT header with the public key coordinates - * - * @param string $x The x-coordinate of the EC public key - * @param string $y The y-coordinate of the EC public key - * - * @return array The complete DPoP header with JWK - */ - private function buildDpopHeader(string $x, string $y): array - { - return array_merge_recursive(self::HEADER_SCHEMA, [ - 'jwk' => [ - 'x' => $this->base64url_encode($x), - 'y' => $this->base64url_encode($y) - ] - ]); - } - - /** - * Builds the DPoP JWT payload with request-specific claims - * - * @param string $uri The target URI for the HTTP request - * - * @return array The complete DPoP payload with jti, htm, htu, and iat claims - * @throws RandomException - */ - private function buildDpopPayload(string $uri): array - { - return array_merge(self::PAYLOAD_SCHEMA, [ - 'jti' => $this->uuidv4(), - 'htu' => $uri, - 'iat' => time() - ]); - } - - /** - * Generates a version 4 UUID - * - * @return string A UUID v4 string - * @throws RandomException - */ - private function uuidv4(): string - { - $data = random_bytes(16); - $data[6] = chr(ord($data[6]) & 0x0f | 0x40); - $data[8] = chr(ord($data[8]) & 0x3f | 0x80); - - return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); - } - - /** - * Encodes data to Base64URL format (RFC 4648) - * - * @param string $data The data to encode - * - * @return string Base64URL encoded string (no padding, URL-safe characters) - */ - private function base64url_encode(string $data): string - { - return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); - } - - /** - * Convert DER-encoded ECDSA signature to raw R||S format (64 bytes for ES256) - * - * @param string $derSignature DER-encoded signature from openssl_sign - * - * @return string Raw signature (64 bytes: 32 bytes R + 32 bytes S) - * @throws \Exception If the DER signature is invalid - */ - private function derToRaw(string $derSignature): string - { - $hex = bin2hex($derSignature); - $pos = 0; - - // Parse SEQUENCE tag (0x30) - if (substr($hex, $pos, 2) !== '30') { - throw new \Exception('Invalid DER signature format: missing SEQUENCE tag'); - } - $pos += 2; - - // Parse SEQUENCE length - $seqLen = hexdec(substr($hex, $pos, 2)); - $pos += 2; - - // Parse first INTEGER tag (0x02) for R - if (substr($hex, $pos, 2) !== '02') { - throw new \Exception('Invalid DER signature format: missing R INTEGER tag'); - } - $pos += 2; - - // Parse R length - $rLen = hexdec(substr($hex, $pos, 2)); - $pos += 2; - - // Extract R value - $r = substr($hex, $pos, $rLen * 2); - if (strlen($r) !== $rLen * 2) { - throw new \Exception('Invalid DER signature: R length mismatch'); - } - $pos += $rLen * 2; - - // Parse second INTEGER tag (0x02) for S - if (substr($hex, $pos, 2) !== '02') { - throw new \Exception('Invalid DER signature format: missing S INTEGER tag'); - } - $pos += 2; - - // Parse S length - $sLen = hexdec(substr($hex, $pos, 2)); - $pos += 2; - - // Extract S value - $s = substr($hex, $pos, $sLen * 2); - if (strlen($s) !== $sLen * 2) { - throw new \Exception('Invalid DER signature: S length mismatch'); - } - - // Remove leading zeros (if any) and pad to 32 bytes - $r = str_pad(ltrim($r, '0'), 64, '0', STR_PAD_LEFT); - $s = str_pad(ltrim($s, '0'), 64, '0', STR_PAD_LEFT); - - // Ensure exactly 32 bytes each - if (strlen($r) !== 64 || strlen($s) !== 64) { - throw new \Exception('Invalid signature component length'); - } - - return hex2bin($r . $s); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/S3ExpressSignature.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/S3ExpressSignature.php deleted file mode 100644 index 08d811493..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/S3ExpressSignature.php +++ /dev/null @@ -1,47 +0,0 @@ -modifyTokenHeaders($request, $credentials); - $credentials = $this->getSigningCredentials($credentials); - return parent::signRequest($request, $credentials, $signingService); - } - - public function presign(RequestInterface $request, CredentialsInterface $credentials, $expires, array $options = []) - { - $request = $this->modifyTokenHeaders($request, $credentials); - $credentials = $this->getSigningCredentials($credentials); - return parent::presign($request, $credentials, $expires, $options); - } - - private function modifyTokenHeaders( - RequestInterface $request, - CredentialsInterface $credentials - ) { - //The x-amz-security-token header is not supported by s3 express - $request = $request->withoutHeader('X-Amz-Security-Token'); - return $request->withHeader( - 'x-amz-s3session-token', - $credentials->getSecurityToken() - ); - } - - private function getSigningCredentials(CredentialsInterface $credentials) - { - return new Credentials( - $credentials->getAccessKeyId(), - $credentials->getSecretKey() - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/S3SignatureV4.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/S3SignatureV4.php deleted file mode 100644 index c99b281cf..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/S3SignatureV4.php +++ /dev/null @@ -1,125 +0,0 @@ -hasHeader('x-amz-content-sha256')) { - $request = $request->withHeader( - 'x-amz-content-sha256', - $this->getPayload($request) - ); - } - $useCrt = - strpos($request->getUri()->getHost(), "accesspoint.s3-global") - !== false; - if (!$useCrt) { - if (strpos($request->getUri()->getHost(), "s3-object-lambda")) { - return parent::signRequest($request, $credentials, "s3-object-lambda"); - } - return parent::signRequest($request, $credentials); - } - $signingService = $signingService ?: 's3'; - return $this->signWithV4a($credentials, $request, $signingService); - } - - /** - * @param CredentialsInterface $credentials - * @param RequestInterface $request - * @param $signingService - * @param SigningConfigAWS|null $signingConfig - * @return RequestInterface - * - * Instantiates a separate sigv4a signing config. All services except S3 - * use double encoding. All services except S3 require path normalization. - */ - protected function signWithV4a( - CredentialsInterface $credentials, - RequestInterface $request, - $signingService, - ?SigningConfigAWS $signingConfig = null - ){ - $this->verifyCRTLoaded(); - $credentials_provider = $this->createCRTStaticCredentialsProvider($credentials); - $signingConfig = new SigningConfigAWS([ - 'algorithm' => SigningAlgorithm::SIGv4_ASYMMETRIC, - 'signature_type' => SignatureType::HTTP_REQUEST_HEADERS, - 'credentials_provider' => $credentials_provider, - 'signed_body_value' => $this->getPayload($request), - 'region' => $this->region, - 'should_normalize_uri_path' => false, - 'use_double_uri_encode' => false, - 'service' => $signingService, - 'date' => time(), - ]); - - return parent::signWithV4a($credentials, $request, $signingService, $signingConfig); - } - - /** - * Always add a x-amz-content-sha-256 for data integrity. - * - * {@inheritdoc} - */ - public function presign( - RequestInterface $request, - CredentialsInterface $credentials, - $expires, - array $options = [] - ) { - if (!$request->hasHeader('x-amz-content-sha256')) { - $request = $request->withHeader( - 'X-Amz-Content-Sha256', - $this->getPresignedPayload($request) - ); - } - - if (strpos($request->getUri()->getHost(), "accesspoint.s3-global")) { - $request = $request->withHeader("x-amz-region-set", "*"); - } - - return parent::presign($request, $credentials, $expires, $options); - } - - /** - * Override used to allow pre-signed URLs to be created for an - * in-determinate request payload. - */ - protected function getPresignedPayload(RequestInterface $request) - { - return SignatureV4::UNSIGNED_PAYLOAD; - } - - /** - * Amazon S3 does not double-encode the path component in the canonical request - */ - protected function createCanonicalizedPath($path) - { - // Only remove one slash in case of keys that have a preceding slash - if (substr($path, 0, 1) === '/') { - $path = substr($path, 1); - } - return '/' . $path; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureInterface.php deleted file mode 100644 index cedfc45e8..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureInterface.php +++ /dev/null @@ -1,45 +0,0 @@ - true, - 's3control' => true, - 's3-outposts' => true, - 's3-object-lambda' => true, - 's3express' => true - ]; - - /** - * Resolves and signature provider and ensures a non-null return value. - * - * @param callable $provider Provider function to invoke. - * @param string $version Signature version. - * @param string $service Service name. - * @param string $region Region name. - * - * @return SignatureInterface - * @throws UnresolvedSignatureException - */ - public static function resolve(callable $provider, $version, $service, $region) - { - $result = $provider($version, $service, $region); - if ($result instanceof SignatureInterface - || $result instanceof BearerTokenAuthorization - || $result instanceof DpopSignature - ) { - return $result; - } - - throw new UnresolvedSignatureException( - "Unable to resolve a signature for $version/$service/$region.\n" - . "Valid signature versions include v4 and anonymous." - ); - } - - /** - * Default SDK signature provider. - * - * @return callable - */ - public static function defaultProvider() - { - return self::memoize(self::version()); - } - - /** - * Creates a signature provider that caches previously created signature - * objects. The computed cache key is the concatenation of the version, - * service, and region. - * - * @param callable $provider Signature provider to wrap. - * - * @return callable - */ - public static function memoize(callable $provider) - { - $cache = []; - return function ($version, $service, $region) use (&$cache, $provider) { - $key = "($version)($service)($region)"; - if (!isset($cache[$key])) { - $cache[$key] = $provider($version, $service, $region); - } - return $cache[$key]; - }; - } - - /** - * Creates signature objects from known signature versions. - * - * This provider currently recognizes the following signature versions: - * - * - v4: Signature version 4. - * - anonymous: Does not sign requests. - * - * @return callable - */ - public static function version() - { - return function ($version, $service, $region) { - switch ($version) { - case 'v4-s3express': - return new S3ExpressSignature($service, $region); - case 's3v4': - case 'v4': - return !empty(self::$s3v4SignedServices[$service]) - ? new S3SignatureV4($service, $region) - : new SignatureV4($service, $region); - case 'v4a': - return !empty(self::$s3v4SignedServices[$service]) - ? new S3SignatureV4($service, $region, ['use_v4a' => true]) - : new SignatureV4($service, $region, ['use_v4a' => true]); - case 'v4-unsigned-body': - return !empty(self::$s3v4SignedServices[$service]) - ? new S3SignatureV4($service, $region, ['unsigned-body' => 'true']) - : new SignatureV4($service, $region, ['unsigned-body' => 'true']); - case 'bearer': - return new BearerTokenAuthorization(); - case 'anonymous': - return new AnonymousSignature(); - case 'dpop': - return new DpopSignature($service); - default: - return null; - } - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureTrait.php deleted file mode 100644 index 5dcfe9dfa..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureTrait.php +++ /dev/null @@ -1,48 +0,0 @@ -cache[$k])) { - // Clear the cache when it reaches 50 entries - if (++$this->cacheSize > 50) { - $this->cache = []; - $this->cacheSize = 0; - } - - $dateKey = hash_hmac( - 'sha256', - $shortDate, - "AWS4{$secretKey}", - true - ); - $regionKey = hash_hmac('sha256', $region, $dateKey, true); - $serviceKey = hash_hmac('sha256', $service, $regionKey, true); - $this->cache[$k] = hash_hmac( - 'sha256', - 'aws4_request', - $serviceKey, - true - ); - } - return $this->cache[$k]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureV4.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureV4.php deleted file mode 100644 index 7e13c81d7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signature/SignatureV4.php +++ /dev/null @@ -1,613 +0,0 @@ - true, - 'content-length' => true, - 'expect' => true, - 'max-forwards' => true, - 'pragma' => true, - 'range' => true, - 'te' => true, - 'if-match' => true, - 'if-none-match' => true, - 'if-modified-since' => true, - 'if-unmodified-since' => true, - 'if-range' => true, - 'accept' => true, - 'authorization' => true, - 'proxy-authorization' => true, - 'from' => true, - 'referer' => true, - 'user-agent' => true, - 'x-amzn-trace-id' => true, - 'amz-sdk-invocation-id' => true, - 'amz-sdk-request' => true, - ]; - } - - /** - * Headers that must be excluded from presigned URLs (in addition to - * the regular header blacklist). These headers are excluded because the - * consumer of the presigned URL cannot reliably reproduce them at the - * time the URL is used: - * - content-type: caller-determined at upload time - * - x-amz-user-agent: specific to the SDK that generated the URL - * - * @return array - */ - protected function getPresignHeaderDenyList() - { - return [ - 'content-type' => true, - 'x-amz-user-agent' => true, - ]; - } - - - /** - * @param string $service Service name to use when signing - * @param string $region Region name to use when signing - * @param array $options Array of configuration options used when signing - * - unsigned-body: Flag to make request have unsigned payload. - * Unsigned body is used primarily for streaming requests. - */ - public function __construct($service, $region, array $options = []) - { - $this->service = $service; - $this->region = $region; - $this->unsigned = isset($options['unsigned-body']) ? $options['unsigned-body'] : false; - $this->useV4a = isset($options['use_v4a']) && $options['use_v4a'] === true; - } - - /** - * {@inheritdoc} - */ - public function signRequest( - RequestInterface $request, - CredentialsInterface $credentials, - $signingService = null - ) { - $ldt = gmdate(self::ISO8601_BASIC); - $sdt = substr($ldt, 0, 8); - $parsed = $this->parseRequest($request); - $parsed['headers']['X-Amz-Date'] = [$ldt]; - - if ($token = $credentials->getSecurityToken()) { - $parsed['headers']['X-Amz-Security-Token'] = [$token]; - } - $service = isset($signingService) ? $signingService : $this->service; - - if ($this->useV4a) { - return $this->signWithV4a($credentials, $request, $service); - } - - $cs = $this->createScope($sdt, $this->region, $service); - $payload = $this->getPayload($request); - - if ($payload == self::UNSIGNED_PAYLOAD) { - $parsed['headers'][self::AMZ_CONTENT_SHA256_HEADER] = [$payload]; - } - - $context = $this->createContext($parsed, $payload); - $toSign = $this->createStringToSign($ldt, $cs, $context['creq']); - $signingKey = $this->getSigningKey( - $sdt, - $this->region, - $service, - $credentials->getSecretKey() - ); - $signature = hash_hmac('sha256', $toSign, $signingKey); - $parsed['headers']['Authorization'] = [ - "AWS4-HMAC-SHA256 " - . "Credential={$credentials->getAccessKeyId()}/{$cs}, " - . "SignedHeaders={$context['headers']}, Signature={$signature}" - ]; - - return $this->buildRequest($parsed); - } - - /** - * Get the headers that were used to pre-sign the request. - * Used for the X-Amz-SignedHeaders header. - * - * @param array $headers - * @return array - */ - private function getPresignHeaders(array $headers) - { - $presignHeaders = []; - $blacklist = $this->getHeaderBlacklist(); - foreach ($headers as $name => $value) { - $lName = strtolower($name); - if (!isset($blacklist[$lName]) - && $name !== self::AMZ_CONTENT_SHA256_HEADER - ) { - $presignHeaders[] = $lName; - } - } - - sort($presignHeaders); - - return $presignHeaders; - } - - /** - * {@inheritdoc} - */ - public function presign( - RequestInterface $request, - CredentialsInterface $credentials, - $expires, - array $options = [] - ) { - $startTimestamp = isset($options['start_time']) - ? $this->convertToTimestamp($options['start_time'], null) - : time(); - $expiresTimestamp = $this->convertToTimestamp($expires, $startTimestamp); - - if ($this->useV4a) { - return $this->presignWithV4a( - $request, - $credentials, - $this->convertExpires($expiresTimestamp, $startTimestamp) - ); - } - - $parsed = $this->createPresignedRequest($request, $credentials); - - $payload = $this->getPresignedPayload($request); - $httpDate = gmdate(self::ISO8601_BASIC, $startTimestamp); - $shortDate = substr($httpDate, 0, 8); - $scope = $this->createScope($shortDate, $this->region, $this->service); - $credential = $credentials->getAccessKeyId() . '/' . $scope; - if ($credentials->getSecurityToken()) { - unset($parsed['headers']['X-Amz-Security-Token']); - } - $parsed['query']['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'; - $parsed['query']['X-Amz-Credential'] = $credential; - $parsed['query']['X-Amz-Date'] = gmdate('Ymd\THis\Z', $startTimestamp); - $parsed['query']['X-Amz-SignedHeaders'] = implode(';', $this->getPresignHeaders($parsed['headers'])); - $parsed['query']['X-Amz-Expires'] = $this->convertExpires($expiresTimestamp, $startTimestamp); - $context = $this->createContext($parsed, $payload); - $stringToSign = $this->createStringToSign($httpDate, $scope, $context['creq']); - $key = $this->getSigningKey( - $shortDate, - $this->region, - $this->service, - $credentials->getSecretKey() - ); - $parsed['query']['X-Amz-Signature'] = hash_hmac('sha256', $stringToSign, $key); - - return $this->buildRequest($parsed); - } - - /** - * Converts a POST request to a GET request by moving POST fields into the - * query string. - * - * Useful for pre-signing query protocol requests. - * - * @param RequestInterface $request Request to clone - * - * @return RequestInterface - * @throws \InvalidArgumentException if the method is not POST - */ - public static function convertPostToGet(RequestInterface $request, $additionalQueryParams = "") - { - if ($request->getMethod() !== 'POST') { - throw new \InvalidArgumentException('Expected a POST request but ' - . 'received a ' . $request->getMethod() . ' request.'); - } - - $sr = $request->withMethod('GET') - ->withBody(Psr7\Utils::streamFor('')) - ->withoutHeader('Content-Type') - ->withoutHeader('Content-Length'); - - // Move POST fields to the query if they are present - if ($request->getHeaderLine('Content-Type') === 'application/x-www-form-urlencoded') { - $body = (string) $request->getBody() . $additionalQueryParams; - $sr = $sr->withUri($sr->getUri()->withQuery($body)); - } - - return $sr; - } - - protected function getPayload(RequestInterface $request) - { - if ($this->unsigned && $request->getUri()->getScheme() == 'https') { - return self::UNSIGNED_PAYLOAD; - } - // Calculate the request signature payload - if ($request->hasHeader(self::AMZ_CONTENT_SHA256_HEADER)) { - // Handle streaming operations (e.g. Glacier.UploadArchive) - return $request->getHeaderLine(self::AMZ_CONTENT_SHA256_HEADER); - } - - if (!$request->getBody()->isSeekable()) { - throw new CouldNotCreateChecksumException('sha256'); - } - - try { - return Psr7\Utils::hash($request->getBody(), 'sha256'); - } catch (\Exception $e) { - throw new CouldNotCreateChecksumException('sha256', $e); - } - } - - protected function getPresignedPayload(RequestInterface $request) - { - return $this->getPayload($request); - } - - protected function createCanonicalizedPath($path) - { - $doubleEncoded = rawurlencode(ltrim($path, '/')); - - return '/' . str_replace('%2F', '/', $doubleEncoded); - } - - private function createStringToSign($longDate, $credentialScope, $creq) - { - $hash = hash('sha256', $creq); - - return "AWS4-HMAC-SHA256\n{$longDate}\n{$credentialScope}\n{$hash}"; - } - - private function createPresignedRequest( - RequestInterface $request, - CredentialsInterface $credentials - ) { - $parsedRequest = $this->parseRequest($request); - - // Make sure to handle temporary credentials - if ($token = $credentials->getSecurityToken()) { - $parsedRequest['headers']['X-Amz-Security-Token'] = [$token]; - } - - return $this->moveHeadersToQuery($parsedRequest); - } - - /** - * @param array $parsedRequest - * @param string $payload Hash of the request payload - * @return array Returns an array of context information - */ - private function createContext(array $parsedRequest, $payload) - { - $blacklist = $this->getHeaderBlacklist(); - - // Normalize the path as required by SigV4 - $canon = $parsedRequest['method'] . "\n" - . $this->createCanonicalizedPath($parsedRequest['path']) . "\n" - . $this->getCanonicalizedQuery($parsedRequest['query']) . "\n"; - - // Case-insensitively aggregate all of the headers. - $aggregate = []; - foreach ($parsedRequest['headers'] as $key => $values) { - $key = strtolower($key); - if (!isset($blacklist[$key])) { - foreach ($values as $v) { - $aggregate[$key][] = $v; - } - } - } - - ksort($aggregate); - $canonHeaders = []; - foreach ($aggregate as $k => $v) { - if (count($v) > 0) { - sort($v); - } - $canonHeaders[] = $k . ':' . preg_replace('/\s+/', ' ', implode(',', $v)); - } - - $signedHeadersString = implode(';', array_keys($aggregate)); - $canon .= implode("\n", $canonHeaders) . "\n\n" - . $signedHeadersString . "\n" - . $payload; - - return ['creq' => $canon, 'headers' => $signedHeadersString]; - } - - private function getCanonicalizedQuery(array $query) - { - unset($query['X-Amz-Signature']); - - if (!$query) { - return ''; - } - - $qs = ''; - uksort($query, static function (string $a, string $b): int { - return strcmp(rawurlencode($a), rawurlencode($b)); - }); - foreach ($query as $k => $v) { - if (!is_array($v)) { - $qs .= rawurlencode($k) . '=' . rawurlencode($v !== null ? $v : '') . '&'; - } else { - sort($v, SORT_STRING); - foreach ($v as $value) { - $qs .= rawurlencode($k) . '=' . rawurlencode($value !== null ? $value : '') . '&'; - } - } - } - - return substr($qs, 0, -1); - } - - private function convertToTimestamp($dateValue, $relativeTimeBase = null) - { - if ($dateValue instanceof \DateTimeInterface) { - $timestamp = $dateValue->getTimestamp(); - } elseif (!is_numeric($dateValue)) { - $timestamp = strtotime($dateValue, - $relativeTimeBase === null ? time() : $relativeTimeBase - ); - } else { - $timestamp = $dateValue; - } - - return $timestamp; - } - - private function convertExpires($expiresTimestamp, $startTimestamp) - { - $duration = $expiresTimestamp - $startTimestamp; - - // Ensure that the duration of the signature is not longer than a week - if ($duration > 604800) { - throw new \InvalidArgumentException('The expiration date of a ' - . 'signature version 4 presigned URL must be less than one ' - . 'week'); - } - - return $duration; - } - - private function moveHeadersToQuery(array $parsedRequest) - { - $presignDenyList = $this->getPresignHeaderDenyList(); - $blacklist = $this->getHeaderBlacklist() + $presignDenyList; - - foreach ($parsedRequest['headers'] as $name => $header) { - $lname = strtolower($name); - // Move x-amz-* headers into the query string, but skip those that - // must not appear in presigned URLs (e.g. x-amz-user-agent). - if (substr($lname, 0, 5) == 'x-amz' && !isset($presignDenyList[$lname])) { - $parsedRequest['query'][$name] = $header; - } - if (isset($blacklist[$lname]) - || $lname === strtolower(self::AMZ_CONTENT_SHA256_HEADER) - ) { - unset($parsedRequest['headers'][$name]); - } - } - - return $parsedRequest; - } - - - private function parseRequest(RequestInterface $request) - { - // Clean up any previously set headers. - /** @var RequestInterface $request */ - $request = $request - ->withoutHeader('X-Amz-Date') - ->withoutHeader('Date') - ->withoutHeader('Authorization'); - $uri = $request->getUri(); - - $path = method_exists(Psr7\Uri::class, 'rawPath') - ? Psr7\Uri::rawPath($uri) - : $uri->getPath(); - - return [ - 'method' => $request->getMethod(), - 'path' => $path, - 'query' => Psr7\Query::parse($uri->getQuery()), - 'uri' => $uri, - 'headers' => $request->getHeaders(), - 'body' => $request->getBody(), - 'version' => $request->getProtocolVersion() - ]; - } - - private function buildRequest(array $req) - { - if ($req['query']) { - $req['uri'] = $req['uri']->withQuery(Psr7\Query::build($req['query'])); - } - - return new Psr7\Request( - $req['method'], - $req['uri'], - $req['headers'], - $req['body'], - $req['version'] - ); - } - - protected function verifyCRTLoaded() - { - if (!extension_loaded('awscrt')) { - throw new CommonRuntimeException( - "AWS Common Runtime for PHP is required to use Signature V4A" - . ". Please install it using the instructions found at" - . " https://github.com/aws/aws-sdk-php/blob/master/CRT_INSTRUCTIONS.md" - ); - } - } - - protected function createCRTStaticCredentialsProvider($credentials) - { - return new StaticCredentialsProvider([ - 'access_key_id' => $credentials->getAccessKeyId(), - 'secret_access_key' => $credentials->getSecretKey(), - 'session_token' => $credentials->getSecurityToken(), - ]); - } - - private function removeIllegalV4aHeaders(&$request) - { - static $illegalV4aHeaders = [ - self::AMZ_CONTENT_SHA256_HEADER, - 'amz-sdk-invocation-id', - 'amz-sdk-request', - 'x-amz-region-set', - 'transfer-encoding', - ]; - $storedHeaders = []; - - foreach ($illegalV4aHeaders as $header) { - if ($request->hasHeader($header)) { - $storedHeaders[$header] = $request->getHeader($header); - $request = $request->withoutHeader($header); - } - } - - return $storedHeaders; - } - - private function CRTRequestFromGuzzleRequest($request) - { - return new Request( - $request->getMethod(), - (string) $request->getUri(), - [], //leave empty as the query is parsed from the uri object - array_map(function ($header) {return $header[0];}, $request->getHeaders()) - ); - } - - /** - * @param CredentialsInterface $credentials - * @param RequestInterface $request - * @param $signingService - * @param SigningConfigAWS|null $signingConfig - * @return RequestInterface - */ - protected function signWithV4a( - CredentialsInterface $credentials, - RequestInterface $request, - $signingService, - ?SigningConfigAWS $signingConfig = null - ){ - $this->verifyCRTLoaded(); - $signingConfig = $signingConfig ?? new SigningConfigAWS([ - 'algorithm' => SigningAlgorithm::SIGv4_ASYMMETRIC, - 'signature_type' => SignatureType::HTTP_REQUEST_HEADERS, - 'credentials_provider' => $this->createCRTStaticCredentialsProvider($credentials), - 'signed_body_value' => $this->getPayload($request), - 'should_normalize_uri_path' => true, - 'use_double_uri_encode' => true, - 'region' => $this->region, - 'service' => $signingService, - 'date' => time(), - ]); - - $removedIllegalHeaders = $this->removeIllegalV4aHeaders($request); - $http_request = $this->CRTRequestFromGuzzleRequest($request); - - Signing::signRequestAws( - Signable::fromHttpRequest($http_request), - $signingConfig, function ($signing_result, $error_code) use (&$http_request) { - $signing_result->applyToHttpRequest($http_request); - }); - foreach ($removedIllegalHeaders as $header => $value) { - $request = $request->withHeader($header, $value); - } - - $sigV4AHeaders = $http_request->headers(); - foreach ($sigV4AHeaders->toArray() as $h => $v) { - $request = $request->withHeader($h, $v); - } - - return $request; - } - - protected function presignWithV4a( - RequestInterface $request, - CredentialsInterface $credentials, - $expires - ) - { - $this->verifyCRTLoaded(); - $credentials_provider = $this->createCRTStaticCredentialsProvider($credentials); - $signingConfig = new SigningConfigAWS([ - 'algorithm' => SigningAlgorithm::SIGv4_ASYMMETRIC, - 'signature_type' => SignatureType::HTTP_REQUEST_QUERY_PARAMS, - 'credentials_provider' => $credentials_provider, - 'signed_body_value' => $this->getPresignedPayload($request), - 'region' => "*", - 'service' => $this->service, - 'date' => time(), - 'expiration_in_seconds' => $expires - ]); - - $this->removeIllegalV4aHeaders($request); - $denyList = $this->getHeaderBlacklist() + $this->getPresignHeaderDenyList(); - foreach ($denyList as $headerName => $headerValue) { - if ($request->hasHeader($headerName)) { - $request = $request->withoutHeader($headerName); - } - } - - $http_request = $this->CRTRequestFromGuzzleRequest($request); - - Signing::signRequestAws( - Signable::fromHttpRequest($http_request), - $signingConfig, function ($signing_result, $error_code) use (&$http_request) { - $signing_result->applyToHttpRequest($http_request); - }); - - return $request->withUri( - new Psr7\Uri($http_request->pathAndQuery()) - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signin/Exception/SigninException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signin/Exception/SigninException.php deleted file mode 100644 index c473366f2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Signin/Exception/SigninException.php +++ /dev/null @@ -1,9 +0,0 @@ -nextHandler = $nextHandler; - $this->service = $service; - } - - public function __invoke(CommandInterface $command, RequestInterface $request) - { - $nextHandler = $this->nextHandler; - - $operation = $this->service->getOperation($command->getName()); - $contentLength = $request->getHeader('content-length'); - $hasStreaming = false; - $requiresLength = false; - - // Check if any present input member is a stream and requires the - // content length - foreach ($operation->getInput()->getMembers() as $name => $member) { - if (!empty($member['streaming']) && isset($command[$name])) { - $hasStreaming = true; - if (!empty($member['requiresLength'])) { - $requiresLength = true; - } - } - } - - if ($hasStreaming) { - - // Add 'transfer-encoding' header if payload size not required to - // to be calculated and not already known - if (empty($requiresLength) - && empty($contentLength) - && isset($operation['authtype']) - && $operation['authtype'] == 'v4-unsigned-body' - ) { - $request = $request->withHeader('transfer-encoding', 'chunked'); - - // Otherwise, make sure 'content-length' header is added - } else { - if (empty($contentLength)) { - $size = $request->getBody()->getSize(); - if (is_null($size)) { - throw new IncalculablePayloadException('Payload' - . ' content length is required and can not be' - . ' calculated.'); - } - $request = $request->withHeader( - 'Content-Length', - (string) $size - ); - } - } - } - - return $nextHandler($command, $request); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/Exception/StsException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/Exception/StsException.php deleted file mode 100644 index 81cff402e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/Exception/StsException.php +++ /dev/null @@ -1,9 +0,0 @@ -endpointsType = strtolower($endpointsType); - $this->isFallback = $isFallback; - if (!in_array($this->endpointsType, ['legacy', 'regional'])) { - throw new \InvalidArgumentException( - "Configuration parameter must either be 'legacy' or 'regional'." - ); - } - } - - /** - * {@inheritdoc} - */ - public function getEndpointsType() - { - return $this->endpointsType; - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return [ - 'endpoints_type' => $this->getEndpointsType() - ]; - } - - public function isFallback() - { - return $this->isFallback; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php deleted file mode 100644 index 41d543b8c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php +++ /dev/null @@ -1,22 +0,0 @@ - - * use Aws\Sts\RegionalEndpoints\ConfigurationProvider; - * $provider = ConfigurationProvider::defaultProvider(); - * // Returns a ConfigurationInterface or throws. - * $config = $provider()->wait(); - * - * - * Configuration providers can be composed to create configuration using - * conditional logic that can create different configurations in different - * environments. You can compose multiple providers into a single provider using - * {@see \Aws\Sts\RegionalEndpoints\ConfigurationProvider::chain}. This function - * accepts providers as variadic arguments and returns a new function that will - * invoke each provider until a successful configuration is returned. - * - * - * // First try an INI file at this location. - * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); - * // Then try an INI file at this location. - * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); - * // Then try loading from environment variables. - * $c = ConfigurationProvider::env(); - * // Combine the three providers together. - * $composed = ConfigurationProvider::chain($a, $b, $c); - * // Returns a promise that is fulfilled with a configuration or throws. - * $promise = $composed(); - * // Wait on the configuration to resolve. - * $config = $promise->wait(); - * - */ -class ConfigurationProvider extends AbstractConfigurationProvider - implements ConfigurationProviderInterface -{ - const DEFAULT_ENDPOINTS_TYPE = 'regional'; - const ENV_ENDPOINTS_TYPE = 'AWS_STS_REGIONAL_ENDPOINTS'; - const ENV_PROFILE = 'AWS_PROFILE'; - const INI_ENDPOINTS_TYPE = 'sts_regional_endpoints'; - - public static $cacheKey = 'aws_sts_regional_endpoints_config'; - - protected static $interfaceClass = ConfigurationInterface::class; - protected static $exceptionClass = ConfigurationException::class; - - /** - * Create a default config provider that first checks for environment - * variables, then checks for a specified profile in the environment-defined - * config file location (env variable is 'AWS_CONFIG_FILE', file location - * defaults to ~/.aws/config), then checks for the "default" profile in the - * environment-defined config file location, and failing those uses a default - * fallback set of configuration options. - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided config options. - * - * @param array $config - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $configProviders = [self::env()]; - if ( - !isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] != false - ) { - $configProviders[] = self::ini(); - } - $configProviders[] = self::fallback(); - - $memo = self::memoize( - call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) - ); - - if (isset($config['sts_regional_endpoints']) - && $config['sts_regional_endpoints'] instanceof CacheInterface - ) { - return self::cache($memo, $config['sts_regional_endpoints'], self::$cacheKey); - } - - return $memo; - } - - /** - * Provider that creates config from environment variables. - * - * @return callable - */ - public static function env() - { - return function () { - // Use config from environment variables, if available - $endpointsType = getenv(self::ENV_ENDPOINTS_TYPE); - if (!empty($endpointsType)) { - return Promise\Create::promiseFor( - new Configuration($endpointsType) - ); - } - - return self::reject('Could not find environment variable config' - . ' in ' . self::ENV_ENDPOINTS_TYPE); - }; - } - - /** - * Fallback config options when other sources are not set. - * - * @return callable - */ - public static function fallback() - { - return function () { - return Promise\Create::promiseFor( - new Configuration(self::DEFAULT_ENDPOINTS_TYPE, true) - ); - }; - } - - /** - * Config provider that creates config using a config file whose location - * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to - * ~/.aws/config if not specified - * - * @param string|null $profile Profile to use. If not specified will use - * the "default" profile. - * @param string|null $filename If provided, uses a custom filename rather - * than looking in the default directory. - * - * @return callable - */ - public static function ini( - $profile = null, - $filename = null - ) { - $filename = $filename ?: (self::getDefaultConfigFilename()); - $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); - - return function () use ($profile, $filename) { - if (!@is_readable($filename)) { - return self::reject("Cannot read configuration from $filename"); - } - $data = \Aws\parse_ini_file($filename, true); - if ($data === false) { - return self::reject("Invalid config file: $filename"); - } - if (!isset($data[$profile])) { - return self::reject("'$profile' not found in config file"); - } - if (!isset($data[$profile][self::INI_ENDPOINTS_TYPE])) { - return self::reject("Required STS regional endpoints config values - not present in INI profile '{$profile}' ({$filename})"); - } - - return Promise\Create::promiseFor( - new Configuration($data[$profile][self::INI_ENDPOINTS_TYPE]) - ); - }; - } - - /** - * Unwraps a configuration object in whatever valid form it is in, - * always returning a ConfigurationInterface object. - * - * @param mixed $config - * @return ConfigurationInterface - * @throws \InvalidArgumentException - */ - public static function unwrap($config) - { - if (is_callable($config)) { - $config = $config(); - } - if ($config instanceof PromiseInterface) { - $config = $config->wait(); - } - if ($config instanceof ConfigurationInterface) { - return $config; - } - if (is_string($config)) { - return new Configuration($config); - } - if (is_array($config) && isset($config['endpoints_type'])) { - return new Configuration($config['endpoints_type']); - } - - throw new \InvalidArgumentException('Not a valid STS regional endpoints ' - . 'configuration argument.'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php deleted file mode 100644 index 668426672..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php +++ /dev/null @@ -1,14 +0,0 @@ -addBuiltIns($args); - parent::__construct($args); - } - - public static function getArguments() - { - $args = parent::getArguments(); - // Off-path STS keeps the default ClientResolver retry handling. The - // override below adds IDPCommunicationError as a transient error and - // is only registered when the AWS_NEW_RETRIES_2026 flag is on. - if (NewRetriesOptIn::isEnabled()) { - $args['retries']['fn'] = [__CLASS__, '_applyRetryConfig']; - } - return $args; - } - - /** - * @internal Only invoked when AWS_NEW_RETRIES_2026=true. The off-path - * uses the default ClientResolver::_apply_retries. - */ - public static function _applyRetryConfig( - $value, - array &$args, - HandlerList $list - ): void - { - if (!$value) { - return; - } - - $config = RetryConfigurationProvider::unwrap($value); - - if ($config->getMode() === 'legacy') { - $decider = RetryMiddleware::createDefaultDecider($config->getMaxAttempts() - 1); - $list->appendSign( - Middleware::retry($decider, null, $args['stats']['retries']), - 'retry' - ); - return; - } - - $list->appendSign( - RetryV3Middleware::wrap( - $config, - [ - 'collect_stats' => $args['stats']['retries'], - 'service' => $args['service'], - 'transient_error_codes' => ['IDPCommunicationError'], - ] - ), - 'retry' - ); - } - - /** - * Creates credentials from the result of an STS operations - * - * @param Result $result Result of an STS operation - * - * @return Credentials - * @throws \InvalidArgumentException if the result contains no credentials - */ - public function createCredentials(Result $result, $source=null) - { - if (!$result->hasKey('Credentials')) { - throw new \InvalidArgumentException('Result contains no credentials'); - } - - $accountId = null; - if ($result->hasKey('AssumedRoleUser')) { - $parsedArn = ArnParser::parse($result->get('AssumedRoleUser')['Arn']); - $accountId = $parsedArn->getAccountId(); - } elseif ($result->hasKey('FederatedUser')) { - $parsedArn = ArnParser::parse($result->get('FederatedUser')['Arn']); - $accountId = $parsedArn->getAccountId(); - } - - $credentials = $result['Credentials']; - $expiration = isset($credentials['Expiration']) && $credentials['Expiration'] instanceof \DateTimeInterface - ? (int) $credentials['Expiration']->format('U') - : null; - - return new Credentials( - $credentials['AccessKeyId'], - $credentials['SecretAccessKey'], - isset($credentials['SessionToken']) ? $credentials['SessionToken'] : null, - $expiration, - $accountId, - $source - ); - } - - /** - * Adds service-specific client built-in value - * - * @return void - */ - private function addBuiltIns($args) - { - $key = 'AWS::STS::UseGlobalEndpoint'; - $result = $args['sts_regional_endpoints'] instanceof \Closure ? - $args['sts_regional_endpoints']()->wait() : $args['sts_regional_endpoints']; - - if (is_string($result)) { - if ($result === 'regional') { - $value = false; - } else if ($result === 'legacy') { - $value = true; - } else { - return; - } - } else { - if ($result->getEndpointsType() === 'regional') { - $value = false; - } else { - $value = true; - } - } - - $this->clientBuiltIns[$key] = $value; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/BearerTokenAuthorization.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/BearerTokenAuthorization.php deleted file mode 100644 index 7d830f3b2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/BearerTokenAuthorization.php +++ /dev/null @@ -1,33 +0,0 @@ -getToken())) { - throw new InvalidArgumentException( - "Cannot authorize a request with an empty token" - ); - } - $accessToken = $token->getToken(); - return $request->withHeader('Authorization', "Bearer {$accessToken}"); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/BedrockTokenProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/BedrockTokenProvider.php deleted file mode 100644 index bfcf113fa..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/BedrockTokenProvider.php +++ /dev/null @@ -1,105 +0,0 @@ - self::env(self::TOKEN_ENV_KEY)]; - - return self::memoize( - call_user_func_array( - [TokenProvider::class, 'chain'], - array_values($defaultChain) - ) - ); - } - - /** - * Token provider that creates a token from an environment variable. - * - * @param string $configKey The configuration key that will be transformed - * to an environment variable name by ConfigurationResolver - * - * @return callable - */ - public static function env(string $configKey): callable - { - return static function () use ($configKey) { - $tokenValue = ConfigurationResolver::env($configKey); - if (empty($tokenValue)) { - return Promise\Create::rejectionFor( - new TokenException( - "No token found in environment variable " . - ConfigurationResolver::$envPrefix . strtoupper($configKey) - ) - ); - } - - return Promise\Create::promiseFor(new Token($tokenValue)); - }; - } - - /** - * Create a token provider from a raw token value string. - * Bedrock bearer tokens sourced from env do not have an expiration - * - * @param string $tokenValue The bearer token value - * - * @return callable - */ - public static function fromTokenValue( - string $tokenValue, - ?TokenSource $source = null - ): callable - { - $token = new Token($tokenValue, null, $source); - return self::fromToken($token); - } - - /** - * Create a Bedrock token provider if the service is 'bedrock' and a token is available. - * Sets auth scheme preference to `bearer` auth. - * - * @param array $args Configuration arguments containing 'config' array - * - * @return callable|null Returns a token provider if conditions are met, null otherwise - */ - public static function createIfAvailable(array &$args): ?callable - { - $tokenValue = ConfigurationResolver::env(self::TOKEN_ENV_KEY); - - if ($tokenValue) { - $authSchemePreference = $args['config']['auth_scheme_preference'] ?? []; - array_unshift($authSchemePreference, self::BEARER_AUTH); - $args['config']['auth_scheme_preference'] = $authSchemePreference; - - return self::fromTokenValue($tokenValue, TokenSource::BEARER_SERVICE_ENV_VARS); - } - - return null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/ParsesIniTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/ParsesIniTrait.php deleted file mode 100644 index b96a6d97b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/ParsesIniTrait.php +++ /dev/null @@ -1,44 +0,0 @@ - $profile) { - // standardize config profile names - $name = str_replace('profile ', '', $name); - $profileData[$name] = $profile; - } - - return $profileData; - } - - /** - * Gets the environment's HOME directory if available. - * - * @return null|string - */ - private static function getHomeDir() - { - // On Linux/Unix-like systems, use the HOME environment variable - if ($homeDir = getenv('HOME')) { - return $homeDir; - } - - // Get the HOMEDRIVE and HOMEPATH values for Windows hosts - $homeDrive = getenv('HOMEDRIVE'); - $homePath = getenv('HOMEPATH'); - - return ($homeDrive && $homePath) ? $homeDrive . $homePath : null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/RefreshableTokenProviderInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/RefreshableTokenProviderInterface.php deleted file mode 100644 index 4c88f3f02..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/RefreshableTokenProviderInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -refreshToken = $refreshToken; - $this->clientId = $clientId; - $this->clientSecret = $clientSecret; - $this->registrationExpiresAt = $registrationExpiresAt; - $this->region = $region; - $this->startUrl = $startUrl; - } - - /** - * @return bool - */ - public function isExpired() - { - if (isset($this->registrationExpiresAt) - && time() >= $this->registrationExpiresAt - ) { - return false; - } - return $this->expires !== null && time() >= $this->expires; - } - - /** - * @return string|null - */ - public function getRefreshToken() - { - return $this->refreshToken; - } - - /** - * @return string|null - */ - public function getClientId() - { - return $this->clientId; - } - - /** - * @return string|null - */ - public function getClientSecret() - { - return $this->clientSecret; - } - - /** - * @return int|null - */ - public function getRegistrationExpiresAt() - { - return $this->registrationExpiresAt; - } - - /** - * @return string|null - */ - public function getRegion() - { - return $this->region; - } - - /** - * @return string|null - */ - public function getStartUrl() - { - return $this->startUrl; - } - - /** - * Creates an instance of SsoToken from a token data. - * - * @param $tokenData - * - * @return SsoToken - */ - public static function fromTokenData($tokenData): SsoToken - { - return new SsoToken( - $tokenData['accessToken'], - \strtotime($tokenData['expiresAt']), - isset($tokenData['refreshToken']) ? $tokenData['refreshToken'] : null, - isset($tokenData['clientId']) ? $tokenData['clientId'] : null, - isset($tokenData['clientSecret']) ? $tokenData['clientSecret'] : null, - isset($tokenData['registrationExpiresAt']) ? $tokenData['registrationExpiresAt'] : null, - isset($tokenData['region']) ? $tokenData['region'] : null, - isset($tokenData['startUrl']) ? $tokenData['startUrl'] : null - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/SsoTokenProvider.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/SsoTokenProvider.php deleted file mode 100644 index 13345a7cd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/SsoTokenProvider.php +++ /dev/null @@ -1,280 +0,0 @@ -profileName = $this->resolveProfileName($profileName); - $this->configFilePath = $this->resolveConfigFile($configFilePath); - $this->ssoOidcClient = $ssoOidcClient; - } - - /** - * This method resolves the profile name to be used. The - * profile provided as instantiation argument takes precedence, - * followed by AWS_PROFILE env variable, otherwise `default` is - * used. - * - * @param string|null $argProfileName The profile provided as argument. - * - * @return string - */ - private function resolveProfileName($argProfileName): string - { - if (empty($argProfileName)) { - return getenv(self::ENV_PROFILE) ?: 'default'; - } else { - return $argProfileName; - } - } - - /** - * This method resolves the config file from where the profiles - * are going to be loaded from. If $argFileName is not empty then, - * it takes precedence over the default config file location. - * - * @param string|null $argConfigFilePath The config path provided as argument. - * - * @return string - */ - private function resolveConfigFile($argConfigFilePath): string - { - if (empty($argConfigFilePath)) { - return self::getHomeDir() . '/.aws/config'; - } else{ - return $argConfigFilePath; - } - } - - /** - * Loads cached sso credentials. - * - * @return Promise\PromiseInterface - */ - public function __invoke() - { - return Promise\Coroutine::of(function () { - if (empty($this->configFilePath) || !is_readable($this->configFilePath)) { - throw new TokenException("Cannot read profiles from {$this->configFilePath}"); - } - - $profiles = self::loadProfiles($this->configFilePath); - if (!isset($profiles[$this->profileName])) { - throw new TokenException("Profile `{$this->profileName}` does not exist in {$this->configFilePath}."); - } - - $profile = $profiles[$this->profileName]; - if (empty($profile['sso_session'])) { - throw new TokenException( - "Profile `{$this->profileName}` in {$this->configFilePath} must contain an sso_session." - ); - } - - $ssoSessionName = $profile['sso_session']; - $this->ssoSessionName = $ssoSessionName; - $profileSsoSession = 'sso-session ' . $ssoSessionName; - if (empty($profiles[$profileSsoSession])) { - throw new TokenException( - "Sso session `{$ssoSessionName}` does not exist in {$this->configFilePath}" - ); - } - - $sessionProfileData = $profiles[$profileSsoSession]; - foreach (['sso_start_url', 'sso_region'] as $requiredProp) { - if (empty($sessionProfileData[$requiredProp])) { - throw new TokenException( - "Sso session `{$ssoSessionName}` in {$this->configFilePath} is missing the required property `{$requiredProp}`" - ); - } - } - - $tokenData = $this->refresh(); - $tokenLocation = self::getTokenLocation($ssoSessionName); - $this->validateTokenData($tokenLocation, $tokenData); - $ssoToken = SsoToken::fromTokenData($tokenData); - // To make sure the token is not expired - if ($ssoToken->isExpired()) { - throw new TokenException("Cached SSO token returned an expired token."); - } - - yield $ssoToken; - }); - } - - /** - * This method attempt to refresh when possible. - * If a refresh is not possible then it just returns - * the current token data as it is. - * - * @return array - * @throws TokenException - */ - public function refresh(): array - { - $tokenLocation = self::getTokenLocation($this->ssoSessionName); - $tokenData = $this->getTokenData($tokenLocation); - if (!$this->shouldAttemptRefresh()) { - return $tokenData; - } - - if (null === $this->ssoOidcClient) { - throw new TokenException( - "Cannot refresh this token without an 'ssooidcClient' " - ); - } - - foreach (['clientId', 'clientSecret', 'refreshToken'] as $requiredProp) { - if (empty($tokenData[$requiredProp])) { - throw new TokenException( - "Cannot refresh this token without `{$requiredProp}` being set" - ); - } - } - - $response = $this->ssoOidcClient->createToken([ - 'clientId' => $tokenData['clientId'], - 'clientSecret' => $tokenData['clientSecret'], - 'grantType' => 'refresh_token', // REQUIRED - 'refreshToken' => $tokenData['refreshToken'], - ]); - if ($response['@metadata']['statusCode'] !== 200) { - throw new TokenException('Unable to create a new sso token'); - } - - $tokenData['accessToken'] = $response['accessToken']; - $tokenData['expiresAt'] = time () + $response['expiresIn']; - $tokenData['refreshToken'] = $response['refreshToken']; - - return $this->writeNewTokenDataToDisk($tokenData, $tokenLocation); - } - - /** - * This method checks for whether a token refresh should happen. - * It will return true just if more than 30 seconds has happened - * since last refresh, and if the expiration is within a 5-minutes - * window from the current time. - * - * @return bool - */ - public function shouldAttemptRefresh(): bool - { - $tokenLocation = self::getTokenLocation($this->ssoSessionName); - $tokenData = $this->getTokenData($tokenLocation); - if (empty($tokenData['expiresAt'])) { - throw new TokenException( - "Token file at $tokenLocation must contain an expiration date" - ); - } - - $tokenExpiresAt = strtotime($tokenData['expiresAt']); - $lastRefreshAt = filemtime($tokenLocation); - $now = \time(); - - // If last refresh happened after 30 seconds - // and if the token expiration is in the 5 minutes window - return ($now - $lastRefreshAt) > self::REFRESH_ATTEMPT_WINDOW_IN_SECS - && ($tokenExpiresAt - $now) < self::REFRESH_WINDOW_IN_SECS; - } - - /** - * @param $sso_session - * @return string - */ - public static function getTokenLocation($sso_session): string - { - return self::getHomeDir() - . '/.aws/sso/cache/' - . mb_convert_encoding(sha1($sso_session), "UTF-8") - . ".json"; - } - - /** - * @param $tokenLocation - * @return array - */ - function getTokenData($tokenLocation): array - { - if (empty($tokenLocation) || !is_readable($tokenLocation)) { - throw new TokenException("Unable to read token file at {$tokenLocation}"); - } - - return json_decode(file_get_contents($tokenLocation), true); - } - - /** - * @param $tokenData - * @param $tokenLocation - * @return mixed - */ - private function validateTokenData($tokenLocation, $tokenData) - { - foreach (['accessToken', 'expiresAt'] as $requiredProp) { - if (empty($tokenData[$requiredProp])) { - throw new TokenException( - "Token file at {$tokenLocation} must contain the required property `{$requiredProp}`" - ); - } - } - - $expiration = strtotime($tokenData['expiresAt']); - if ($expiration === false) { - throw new TokenException("Cached SSO token returned an invalid expiration"); - } elseif ($expiration < time()) { - throw new TokenException("Cached SSO token returned an expired token"); - } - - return $tokenData; - } - - /** - * @param array $tokenData - * @param string $tokenLocation - * - * @return array - */ - private function writeNewTokenDataToDisk(array $tokenData, $tokenLocation): array - { - $tokenData['expiresAt'] = gmdate( - 'Y-m-d\TH:i:s\Z', - $tokenData['expiresAt'] - ); - file_put_contents($tokenLocation, json_encode(array_filter($tokenData))); - - return $tokenData; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/Token.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/Token.php deleted file mode 100644 index 69b09dd65..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/Token.php +++ /dev/null @@ -1,127 +0,0 @@ -token = $token; - $this->expires = $expires; - $this->source = $source; - } - - /** - * Sets the state of a token object - * - * @param array $state array containing 'token' and 'expires' - */ - public static function __set_state(array $state) - { - return new self( - $state['token'], - $state['expires'] - ); - } - - /** - * @return string - */ - public function getToken() - { - return $this->token; - } - - /** - * @return int - */ - public function getExpiration() - { - return $this->expires; - } - - /** - * @return string|null - */ - public function getSource(): ?string - { - return $this->source?->value; - } - - /** - * @return bool - */ - public function isExpired() - { - return $this->expires !== null && time() >= $this->expires; - } - - /** - * @return array - */ - public function toArray() - { - return [ - 'token' => $this->token, - 'expires' => $this->expires, - 'source' => $this->source?->value - ]; - } - - /** - * @return string - */ - public function serialize() - { - return json_encode($this->__serialize()); - } - - /** - * Sets the state of the object from serialized json data - */ - public function unserialize($serialized) - { - $data = json_decode($serialized, true); - - $this->__unserialize($data); - } - - /** - * @return array - */ - public function __serialize() - { - return $this->toArray(); - } - - /** - * Sets the state of this object from an array - */ - public function __unserialize($data) - { - $this->token = $data['token']; - $this->expires = $data['expires']; - $this->source = isset($data['source']) - ? TokenSource::from($data['source']) - : null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/TokenAuthorization.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/TokenAuthorization.php deleted file mode 100644 index 3fab516fd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/TokenAuthorization.php +++ /dev/null @@ -1,24 +0,0 @@ - - * use Aws\Token\TokenProvider; - * $provider = TokenProvider::defaultProvider(); - * // Returns a TokenInterface or throws. - * $token = $provider()->wait(); - * - * - * Token providers can be composed to create a token using conditional - * logic that can create different tokens in different environments. You - * can compose multiple providers into a single provider using - * {@see Aws\Token\TokenProvider::chain}. This function accepts - * providers as variadic arguments and returns a new function that will invoke - * each provider until a token is successfully returned. - */ -class TokenProvider -{ - const ENV_PROFILE = 'AWS_PROFILE'; - - use ParsesIniTrait; - - /** - * Create a default token provider tha checks for cached a SSO token from - * the CLI - * - * This provider is automatically wrapped in a memoize function that caches - * previously provided tokens. - * - * @param array $config Optional array of token provider options. - * - * @return callable - */ - public static function defaultProvider(array $config = []) - { - $cacheable = [ - 'sso', - ]; - - $defaultChain = []; - - if (!isset($config['use_aws_shared_config_files']) - || $config['use_aws_shared_config_files'] !== false - ) { - $profileName = getenv(self::ENV_PROFILE) ?: 'default'; - $defaultChain['sso'] = self::sso( - $profileName, - self::getHomeDir() . '/.aws/config', - $config - ); - } - - if (isset($config['token']) - && $config['token'] instanceof CacheInterface - ) { - foreach ($cacheable as $provider) { - if (isset($defaultChain[$provider])) { - $defaultChain[$provider] = self::cache( - $defaultChain[$provider], - $config['token'], - 'aws_cached_' . $provider . '_token' - ); - } - } - } - - return self::memoize( - call_user_func_array( - [__CLASS__, 'chain'], - array_values($defaultChain) - ) - ); - } - - /** - * Create a token provider function from a static token. - * - * @param TokenInterface $token - * - * @return callable - */ - public static function fromToken(TokenInterface $token) - { - $promise = Promise\Create::promiseFor($token); - - return static function () use ($promise) { - return $promise; - }; - } - - /** - * Creates an aggregate token provider that invokes the provided - * variadic providers one after the other until a provider returns - * a token. - * - * @return callable - */ - public static function chain() - { - $links = func_get_args(); - //Common use case for when aws_shared_config_files is false - if (empty($links)) { - return static function () { - return Promise\Create::promiseFor(false); - }; - } - - return static function () use ($links) { - /** @var callable $parent */ - $parent = array_shift($links); - $promise = $parent(); - while ($next = array_shift($links)) { - $promise = $promise->otherwise($next); - } - return $promise; - }; - } - - /** - * Wraps a token provider and caches a previously provided token. - * Ensures that cached tokens are refreshed when they expire. - * - * @param callable $provider Token provider function to wrap. - * @return callable - */ - public static function memoize(callable $provider) - { - return static function () use ($provider) { - static $result; - static $isConstant; - - // Constant tokens will be returned constantly. - if ($isConstant) { - return $result; - } - - // Create the initial promise that will be used as the cached value - // until it expires. - if (null === $result) { - $result = $provider(); - } - - // Return a token that could expire and refresh when needed. - return $result - ->then(function (TokenInterface $token) use ($provider, &$isConstant, &$result) { - // Determine if the token is constant. - if (!$token->getExpiration()) { - $isConstant = true; - return $token; - } - - if (!$token->isExpired()) { - return $token; - } - return $result = $provider(); - }) - ->otherwise(function($reason) use (&$result) { - // Cleanup rejected promise. - $result = null; - return Promise\Create::promiseFor(null); - }); - }; - } - - /** - * Wraps a token provider and saves provided token in an - * instance of Aws\CacheInterface. Forwards calls when no token found - * in cache and updates cache with the results. - * - * @param callable $provider Token provider function to wrap - * @param CacheInterface $cache Cache to store the token - * @param string|null $cacheKey (optional) Cache key to use - * - * @return callable - */ - public static function cache( - callable $provider, - CacheInterface $cache, - $cacheKey = null - ){ - $cacheKey = $cacheKey ?: 'aws_cached_token'; - - return static function () use ($provider, $cache, $cacheKey) { - $found = $cache->get($cacheKey); - if (is_array($found) && isset($found['token'])) { - $foundToken = $found['token']; - if ($foundToken instanceof TokenInterface) { - if (!$foundToken->isExpired()) { - return Promise\Create::promiseFor($foundToken); - } - if (isset($found['refreshMethod']) && is_callable($found['refreshMethod'])) { - return Promise\Create::promiseFor($found['refreshMethod']()); - } - } - } - - return $provider() - ->then(function (TokenInterface $token) use ( - $cache, - $cacheKey - ) { - $cache->set( - $cacheKey, - ['token' => $token], - null === $token->getExpiration() ? - 0 : $token->getExpiration() - time() - ); - - return $token; - }); - }; - } - - /** - * Gets profiles from the ~/.aws/config ini file - */ - private static function loadDefaultProfiles() - { - $profiles = []; - $configFile = self::getHomeDir() . '/.aws/config'; - - if (file_exists($configFile)) { - $configProfileData = \Aws\parse_ini_file($configFile, true, INI_SCANNER_RAW); - foreach ($configProfileData as $name => $profile) { - // standardize config profile names - $name = str_replace('profile ', '', $name); - if (!isset($profiles[$name])) { - $profiles[$name] = $profile; - } - } - } - - return $profiles; - } - - private static function reject($msg) - { - return new Promise\RejectedPromise(new TokenException($msg)); - } - - /** - * Token provider that creates a token from cached sso credentials - * - * @param string $profileName the name of the ini profile name - * @param string $filename the location of the ini file - * @param array $config configuration options - * - * @return SsoTokenProvider - * @see Aws\Token\SsoTokenProvider for $config details. - */ - public static function sso( - $profileName, - $filename, - $config = [] - ){ - $ssoClient = $config['ssoClient'] ?? null; - - return new SsoTokenProvider($profileName, $filename, $ssoClient); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/TokenSource.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/TokenSource.php deleted file mode 100644 index b9e1abe79..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Token/TokenSource.php +++ /dev/null @@ -1,7 +0,0 @@ - '[TOKEN]', - ]; - - private static $authStrings = [ - // S3Signature - '/AWSAccessKeyId=[A-Z0-9]{20}&/i' => 'AWSAccessKeyId=[KEY]&', - // SignatureV4 Signature and S3Signature - '/Signature=.+/i' => 'Signature=[SIGNATURE]', - // SignatureV4 access key ID - '/Credential=[A-Z0-9]{20}\//i' => 'Credential=[KEY]/', - // S3 signatures - '/AWS [A-Z0-9]{20}:.+/' => 'AWS AKI[KEY]:[SIGNATURE]', - // STS Presigned URLs - '/X-Amz-Security-Token=[^&]+/i' => 'X-Amz-Security-Token=[TOKEN]', - // Crypto *Stream Keys - '/\["key.{27,36}Stream.{9}\]=>\s+.{7}\d{2}\) "\X{16,64}"/U' => '["key":[CONTENT KEY]]', - ]; - - /** - * Configuration array can contain the following key value pairs. - * - * - logfn: (callable) Function that is invoked with log messages. By - * default, PHP's "echo" function will be utilized. - * - stream_size: (int) When the size of a stream is greater than this - * number, the stream data will not be logged. Set to "0" to not log any - * stream data. - * - scrub_auth: (bool) Set to false to disable the scrubbing of auth data - * from the logged messages. - * - http: (bool) Set to false to disable the "debug" feature of lower - * level HTTP adapters (e.g., verbose curl output). - * - auth_strings: (array) A mapping of authentication string regular - * expressions to scrubbed strings. These mappings are passed directly to - * preg_replace (e.g., preg_replace($key, $value, $debugOutput) if - * "scrub_auth" is set to true. - * - auth_headers: (array) A mapping of header names known to contain - * sensitive data to what the scrubbed value should be. The value of any - * headers contained in this array will be replaced with the if - * "scrub_auth" is set to true. - */ - public function __construct(array $config = [], ?Service $service = null) - { - $this->config = $config + [ - 'logfn' => function ($value) { echo $value; }, - 'stream_size' => 524288, - 'scrub_auth' => true, - 'http' => true, - 'auth_strings' => [], - 'auth_headers' => [], - ]; - - $this->config['auth_strings'] += self::$authStrings; - $this->config['auth_headers'] += self::$authHeaders; - $this->service = $service; - } - - public function __invoke($step, $name) - { - $this->prevOutput = $this->prevInput = []; - - return function (callable $next) use ($step, $name) { - return function ( - CommandInterface $command, - $request = null - ) use ($next, $step, $name) { - $this->createHttpDebug($command); - $start = microtime(true); - $this->stepInput([ - 'step' => $step, - 'name' => $name, - 'request' => $this->requestArray($request), - 'command' => $this->commandArray($command) - ]); - - return $next($command, $request)->then( - function ($value) use ($step, $name, $command, $start) { - $this->flushHttpDebug($command); - $this->stepOutput($start, [ - 'step' => $step, - 'name' => $name, - 'result' => $this->resultArray($value), - 'error' => null - ]); - return $value; - }, - function ($reason) use ($step, $name, $start, $command) { - $this->flushHttpDebug($command); - $this->stepOutput($start, [ - 'step' => $step, - 'name' => $name, - 'result' => null, - 'error' => $this->exceptionArray($reason) - ]); - return new RejectedPromise($reason); - } - ); - }; - }; - } - - private function stepInput($entry) - { - static $keys = ['command', 'request']; - $this->compareStep($this->prevInput, $entry, '-> Entering', $keys); - $this->write("\n"); - $this->prevInput = $entry; - } - - private function stepOutput($start, $entry) - { - static $keys = ['result', 'error']; - $this->compareStep($this->prevOutput, $entry, '<- Leaving', $keys); - $totalTime = microtime(true) - $start; - $this->write(" Inclusive step time: " . $totalTime . "\n\n"); - $this->prevOutput = $entry; - } - - private function compareStep(array $a, array $b, $title, array $keys) - { - $changes = []; - foreach ($keys as $key) { - $av = isset($a[$key]) ? $a[$key] : null; - $bv = isset($b[$key]) ? $b[$key] : null; - $this->compareArray($av, $bv, $key, $changes); - } - $str = "\n{$title} step {$b['step']}, name '{$b['name']}'"; - $str .= "\n" . str_repeat('-', strlen($str) - 1) . "\n\n "; - $str .= $changes - ? implode("\n ", str_replace("\n", "\n ", $changes)) - : 'no changes'; - $this->write($str . "\n"); - } - - private function commandArray(CommandInterface $cmd) - { - return [ - 'instance' => spl_object_hash($cmd), - 'name' => $cmd->getName(), - 'params' => $this->getRedactedArray($cmd) - ]; - } - - private function requestArray($request = null) - { - return !$request instanceof RequestInterface - ? [] - : array_filter([ - 'instance' => spl_object_hash($request), - 'method' => $request->getMethod(), - 'headers' => $this->redactHeaders($request->getHeaders()), - 'body' => $this->streamStr($request->getBody()), - 'scheme' => $request->getUri()->getScheme(), - 'port' => $request->getUri()->getPort(), - 'path' => $request->getUri()->getPath(), - 'query' => $request->getUri()->getQuery(), - ]); - } - - private function responseArray(?ResponseInterface $response = null) - { - return !$response ? [] : [ - 'instance' => spl_object_hash($response), - 'statusCode' => $response->getStatusCode(), - 'headers' => $this->redactHeaders($response->getHeaders()), - 'body' => $this->streamStr($response->getBody()) - ]; - } - - private function resultArray($value) - { - return $value instanceof ResultInterface - ? [ - 'instance' => spl_object_hash($value), - 'data' => $value->toArray() - ] : $value; - } - - private function exceptionArray($e) - { - if (!($e instanceof \Exception)) { - return $e; - } - - $result = [ - 'instance' => spl_object_hash($e), - 'class' => get_class($e), - 'message' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'trace' => $e->getTraceAsString(), - ]; - - if ($e instanceof AwsException) { - $result += [ - 'type' => $e->getAwsErrorType(), - 'code' => $e->getAwsErrorCode(), - 'requestId' => $e->getAwsRequestId(), - 'statusCode' => $e->getStatusCode(), - 'result' => $this->resultArray($e->getResult()), - 'request' => $this->requestArray($e->getRequest()), - 'response' => $this->responseArray($e->getResponse()), - ]; - } - - return $result; - } - - private function compareArray($a, $b, $path, array &$diff) - { - if ($a === $b) { - return; - } - - if (is_array($a)) { - $b = (array) $b; - $keys = array_unique(array_merge(array_keys($a), array_keys($b))); - foreach ($keys as $k) { - if (!array_key_exists($k, $a)) { - $this->compareArray(null, $b[$k], "{$path}.{$k}", $diff); - } elseif (!array_key_exists($k, $b)) { - $this->compareArray($a[$k], null, "{$path}.{$k}", $diff); - } else { - $this->compareArray($a[$k], $b[$k], "{$path}.{$k}", $diff); - } - } - } elseif ($a !== null && $b === null) { - $diff[] = "{$path} was unset"; - } elseif ($a === null && $b !== null) { - $diff[] = sprintf("%s was set to %s", $path, $this->str($b)); - } else { - $diff[] = sprintf("%s changed from %s to %s", $path, $this->str($a), $this->str($b)); - } - } - - private function str($value) - { - if (is_scalar($value)) { - return (string) $value; - } - - if ($value instanceof \Exception) { - $value = $this->exceptionArray($value); - } - - ob_start(); - var_dump($value); - return ob_get_clean(); - } - - private function streamStr(StreamInterface $body) - { - return $body->getSize() < $this->config['stream_size'] - ? (string) $body - : 'stream(size=' . $body->getSize() . ')'; - } - - private function createHttpDebug(CommandInterface $command) - { - if ($this->config['http'] && !isset($command['@http']['debug'])) { - $command['@http']['debug'] = fopen('php://temp', 'w+'); - } - } - - private function flushHttpDebug(CommandInterface $command) - { - if ($res = $command['@http']['debug']) { - if (is_resource($res)) { - rewind($res); - $this->write(stream_get_contents($res)); - fclose($res); - } - $command['@http']['debug'] = null; - } - } - - private function write($value) - { - if ($this->config['scrub_auth']) { - foreach ($this->config['auth_strings'] as $pattern => $replacement) { - $value = preg_replace_callback( - $pattern, - function ($matches) use ($replacement) { - return $replacement; - }, - $value - ); - } - } - - call_user_func($this->config['logfn'], $value); - } - - private function redactHeaders(array $headers) - { - if ($this->config['scrub_auth']) { - $headers = $this->config['auth_headers'] + $headers; - } - - return $headers; - } - - /** - * @param CommandInterface $cmd - * @return array - */ - private function getRedactedArray(CommandInterface $cmd) - { - if (!isset($this->service["shapes"])) { - return $cmd->toArray(); - } - $shapes = $this->service["shapes"]; - $cmdArray = $cmd->toArray(); - $iterator = new RecursiveIteratorIterator( - new RecursiveArrayIterator($cmdArray), - RecursiveIteratorIterator::SELF_FIRST - ); - foreach ($iterator as $parameter => $value) { - if (isset($shapes[$parameter]['sensitive']) && - $shapes[$parameter]['sensitive'] === true - ) { - $redactedValue = is_string($value) ? "[{$parameter}]" : ["[{$parameter}]"]; - $currentDepth = $iterator->getDepth(); - for ($subDepth = $currentDepth; $subDepth >= 0; $subDepth--) { - $subIterator = $iterator->getSubIterator($subDepth); - $subIterator->offsetSet( - $subIterator->key(), - ($subDepth === $currentDepth - ? $redactedValue - : $iterator->getSubIterator(($subDepth+1))->getArrayCopy() - ) - ); - } - } - } - return $iterator->getArrayCopy(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/UserAgentMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/UserAgentMiddleware.php deleted file mode 100644 index ce04f6345..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/UserAgentMiddleware.php +++ /dev/null @@ -1,269 +0,0 @@ -nextHandler = $nextHandler; - $this->args = $args; - } - - /** - * When invoked, its injects the user agent header into the - * request headers. - * - * @param CommandInterface $command - * @param RequestInterface $request - * - * @return mixed - */ - public function __invoke(CommandInterface $command, RequestInterface $request) - { - $handler = $this->nextHandler; - $this->metricsBuilder = MetricsBuilder::fromCommand($command); - $request = $this->requestWithUserAgentHeader($request); - - return $handler($command, $request); - } - - /** - * Builds the user agent header value, and injects it into the request - * headers. Then, it returns the mutated request. - * - * @param RequestInterface $request - * - * @return RequestInterface - */ - private function requestWithUserAgentHeader(RequestInterface $request): RequestInterface - { - $uaAppend = $this->args['ua_append'] ?? []; - $userAgentValue = array_merge( - $this->buildUserAgentValue(), - $uaAppend - ); - // It includes the user agent values just for the User-Agent header. - // The reason is that the SEP does not mention appending the - // metrics into the X-Amz-User-Agent header. - return $request->withHeader( - 'User-Agent', - implode(' ', array_merge( - $userAgentValue, - $request->getHeader('User-Agent') - )) - ); - } - - /** - * Builds the different user agent values. - * - * @return array - */ - private function buildUserAgentValue(): array - { - $userAgentValue = []; - foreach (self::$userAgentFnList as $fn) { - $val = $this->{$fn}(); - if (!empty($val)) { - $userAgentValue[] = $val; - } - } - - return $userAgentValue; - } - - /** - * Returns the user agent value for SDK version. - * - * @return string - */ - private function getSdkVersion(): string - { - return 'aws-sdk-php/' . Sdk::VERSION; - } - - /** - * Returns the user agent value for the agent version. - * - * @return string - */ - private function getUserAgentVersion(): string - { - return 'ua/' . self::AGENT_VERSION; - } - - /** - * Returns the user agent value for the hhvm version, but just - * when it is defined. - * - * @return string - */ - private function getHhvmVersion(): string - { - if (defined('HHVM_VERSION')) { - return 'HHVM/' . HHVM_VERSION; - } - - return ""; - } - - /** - * Returns the user agent value for the os version. - * - * @return string - */ - private function getOsName(): string - { - $disabledFunctions = explode(',', ini_get('disable_functions')); - if (function_exists('php_uname') - && !in_array('php_uname', $disabledFunctions, true) - ) { - // Replace spaces with underscores to prevent breaking the user agent format - $os = str_replace(' ', '_', php_uname('s')); - $release = php_uname('r'); - $osName = "OS/{$os}#{$release}"; - - if (!empty($osName)) { - return $osName; - } - } - - return ""; - } - - /** - * Returns the user agent value for the php language used. - * - * @return string - */ - private function getLangVersion(): string - { - return 'lang/php#' . phpversion(); - } - - /** - * Returns the user agent value for the execution env. - * - * @return string - */ - private function getExecEnv(): string - { - if ($executionEnvironment = getenv('AWS_EXECUTION_ENV')) { - return $executionEnvironment; - } - - return ""; - } - - /** - * Returns the user agent value for endpoint discovery as cfg. - * This feature is deprecated. - * - * @return string - */ - private function getEndpointDiscovery(): string - { - $args = $this->args; - if (isset($args['endpoint_discovery'])) { - if (($args['endpoint_discovery'] instanceof Configuration - && $args['endpoint_discovery']->isEnabled()) - ) { - return 'cfg/endpoint-discovery'; - } elseif (is_array($args['endpoint_discovery']) - && isset($args['endpoint_discovery']['enabled']) - && $args['endpoint_discovery']['enabled'] - ) { - return 'cfg/endpoint-discovery'; - } - } - - return ""; - } - - /** - * Returns the user agent value for app id, but just when an - * app id was provided as a client argument. - * - * @return string - */ - private function getAppId(): string - { - if (empty($this->args['app_id'])) { - return ""; - } - - return 'app/' . $this->args['app_id']; - } - - /** - * Returns the user agent value for metrics. - * - * @return string - */ - private function getMetrics(): string - { - // Resolve first metrics related to client arguments. - $this->metricsBuilder->resolveAndAppendFromArgs($this->args); - // Build the metrics. - $metricsEncoded = $this->metricsBuilder->build(); - if (empty($metricsEncoded)) { - return ""; - } - - return "m/" . $metricsEncoded; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Waiter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Waiter.php deleted file mode 100644 index 59abdcca5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/Waiter.php +++ /dev/null @@ -1,285 +0,0 @@ - 0, 'before' => null]; - - /** @var array Required configuration options. */ - private static $required = [ - 'acceptors', - 'delay', - 'maxAttempts', - 'operation', - ]; - - /** - * The array of configuration options include: - * - * - acceptors: (array) Array of acceptor options - * - delay: (int) Number of seconds to delay between attempts - * - maxAttempts: (int) Maximum number of attempts before failing - * - operation: (string) Name of the API operation to use for polling - * - before: (callable) Invoked before attempts. Accepts command and tries. - * - * @param AwsClientInterface $client Client used to execute commands. - * @param string $name Waiter name. - * @param array $args Command arguments. - * @param array $config Waiter config that overrides defaults. - * - * @throws \InvalidArgumentException if the configuration is incomplete. - */ - public function __construct( - AwsClientInterface $client, - $name, - array $args = [], - array $config = [] - ) { - $this->client = $client; - $this->name = $name; - $this->args = $args; - - // Prepare and validate config. - $this->config = $config + self::$defaults; - foreach (self::$required as $key) { - if (!isset($this->config[$key])) { - throw new \InvalidArgumentException( - 'The provided waiter configuration was incomplete.' - ); - } - } - if ($this->config['before'] && !is_callable($this->config['before'])) { - throw new \InvalidArgumentException( - 'The provided "before" callback is not callable.' - ); - } - MetricsBuilder::appendMetricsCaptureMiddleware( - $this->client->getHandlerList(), - MetricsBuilder::WAITER - ); - } - - /** - * @return Coroutine - */ - public function promise(): PromiseInterface - { - return Coroutine::of(function () { - $name = $this->config['operation']; - for ($state = 'retry', $attempt = 1; $state === 'retry'; $attempt++) { - // Execute the operation. - $args = $this->getArgsForAttempt($attempt); - $command = $this->client->getCommand($name, $args); - try { - if ($this->config['before']) { - $this->config['before']($command, $attempt); - } - $result = (yield $this->client->executeAsync($command)); - } catch (AwsException $e) { - $result = $e; - } - - // Determine the waiter's state and what to do next. - $state = $this->determineState($result); - if ($state === 'success') { - yield $command; - } elseif ($state === 'failed') { - $msg = "The {$this->name} waiter entered a failure state."; - if ($result instanceof \Exception) { - $msg .= ' Reason: ' . $result->getMessage(); - } - yield new RejectedPromise(new \RuntimeException($msg)); - } elseif ($state === 'retry' - && $attempt >= $this->config['maxAttempts'] - ) { - $state = 'failed'; - yield new RejectedPromise(new \RuntimeException( - "The {$this->name} waiter failed after attempt #{$attempt}." - )); - } - } - }); - } - - /** - * Gets the operation arguments for the attempt, including the delay. - * - * @param $attempt Number of the current attempt. - * - * @return mixed integer - */ - private function getArgsForAttempt($attempt) - { - $args = $this->args; - - // Determine the delay. - $delay = ($attempt === 1) - ? $this->config['initDelay'] - : $this->config['delay']; - if (is_callable($delay)) { - $delay = $delay($attempt); - } - - // Set the delay. (Note: handlers except delay in milliseconds.) - if (!isset($args['@http'])) { - $args['@http'] = []; - } - $args['@http']['delay'] = $delay * 1000; - - return $args; - } - - /** - * Determines the state of the waiter attempt, based on the result of - * polling the resource. A waiter can have the state of "success", "failed", - * or "retry". - * - * @param mixed $result - * - * @return string Will be "success", "failed", or "retry" - */ - private function determineState($result) - { - foreach ($this->config['acceptors'] as $acceptor) { - $matcher = 'matches' . ucfirst($acceptor['matcher']); - if ($this->{$matcher}($result, $acceptor)) { - return $acceptor['state']; - } - } - - return $result instanceof \Exception ? 'failed' : 'retry'; - } - - /** - * @param Result $result Result or exception. - * @param array $acceptor Acceptor configuration being checked. - * - * @return bool - */ - private function matchesPath($result, array $acceptor) - { - return $result instanceof ResultInterface - && $acceptor['expected'] === $result->search($acceptor['argument']); - } - - /** - * @param Result $result Result or exception. - * @param array $acceptor Acceptor configuration being checked. - * - * @return bool - */ - private function matchesPathAll($result, array $acceptor) - { - if (!($result instanceof ResultInterface)) { - return false; - } - - $actuals = $result->search($acceptor['argument']) ?: []; - // If is empty or not evaluates to an array it must return false. - if (empty($actuals) || !is_array($actuals)) { - return false; - } - - foreach ($actuals as $actual) { - if ($actual != $acceptor['expected']) { - return false; - } - } - - return true; - } - - /** - * @param Result $result Result or exception. - * @param array $acceptor Acceptor configuration being checked. - * - * @return bool - */ - private function matchesPathAny($result, array $acceptor) - { - if (!($result instanceof ResultInterface)) { - return false; - } - - $actuals = $result->search($acceptor['argument']) ?: []; - // If is empty or not evaluates to an array it must return false. - if (empty($actuals) || !is_array($actuals)) { - return false; - } - - return in_array($acceptor['expected'], $actuals); - } - - /** - * @param Result $result Result or exception. - * @param array $acceptor Acceptor configuration being checked. - * - * @return bool - */ - private function matchesStatus($result, array $acceptor) - { - if ($result instanceof ResultInterface) { - return $acceptor['expected'] == $result['@metadata']['statusCode']; - } - - if ($result instanceof AwsException && $response = $result->getResponse()) { - return $acceptor['expected'] == $response->getStatusCode(); - } - - return false; - } - - /** - * @param Result $result Result or exception. - * @param array $acceptor Acceptor configuration being checked. - * - * @return bool - */ - private function matchesError($result, array $acceptor) - { - // If expected is true then the $result should be an instance of - // AwsException, otherwise it should not. - if (isset($acceptor['expected']) && is_bool($acceptor['expected'])) { - return $acceptor['expected'] === ($result instanceof AwsException); - } - - if ($result instanceof AwsException) { - return $result->isConnectionError() - || $result->getAwsErrorCode() == $acceptor['expected']; - } - - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php deleted file mode 100644 index c6cfa3260..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php +++ /dev/null @@ -1,210 +0,0 @@ -httpHandler = $httpHandler; - $this->parser = $parser; - $this->errorParser = $errorParser; - $this->exceptionClass = $exceptionClass; - $this->collectStats = $collectStats; - } - - /** - * Calls the simpler HTTP specific handler and wraps the returned promise - * with AWS specific values (e.g., a result object or AWS exception). - * - * @param CommandInterface $command Command being executed. - * @param RequestInterface $request Request to send. - * - * @return Promise\PromiseInterface - */ - public function __invoke( - CommandInterface $command, - RequestInterface $request - ) { - $fn = $this->httpHandler; - $options = $command['@http'] ?: []; - $stats = []; - if ($this->collectStats || !empty($options['collect_stats'])) { - $options['http_stats_receiver'] = static function ( - array $transferStats - ) use (&$stats) { - $stats = $transferStats; - }; - } elseif (isset($options['http_stats_receiver'])) { - throw new \InvalidArgumentException('Providing a custom HTTP stats' - . ' receiver to Aws\WrappedHttpHandler is not supported.'); - } - - return Promise\Create::promiseFor($fn($request, $options)) - ->then( - function ( - ResponseInterface $res - ) use ($command, $request, &$stats) { - return $this->parseResponse($command, $request, $res, $stats); - }, - function ($err) use ($request, $command, &$stats) { - if (is_array($err)) { - $err = $this->parseError( - $err, - $request, - $command, - $stats - ); - } - return new Promise\RejectedPromise($err); - } - ); - } - - /** - * @param CommandInterface $command - * @param RequestInterface $request - * @param ResponseInterface $response - * @param array $stats - * - * @return ResultInterface - */ - private function parseResponse( - CommandInterface $command, - RequestInterface $request, - ResponseInterface $response, - array $stats - ) { - $parser = $this->parser; - $status = $response->getStatusCode(); - $result = $status < 300 - ? $parser($command, $response) - : new Result(); - - $metadata = [ - 'statusCode' => $status, - 'effectiveUri' => (string) $request->getUri(), - 'headers' => [], - 'transferStats' => [], - ]; - if (!empty($stats)) { - $metadata['transferStats']['http'] = [$stats]; - } - - // Bring headers into the metadata array. - foreach ($response->getHeaders() as $name => $values) { - $metadata['headers'][strtolower($name)] = $values[0]; - } - - $result['@metadata'] = $metadata; - - return $result; - } - - /** - * Parses a rejection into an AWS error. - * - * @param array $err Rejection error array. - * @param RequestInterface $request Request that was sent. - * @param CommandInterface $command Command being sent. - * @param array $stats Transfer statistics - * - * @return \Exception - */ - private function parseError( - array $err, - RequestInterface $request, - CommandInterface $command, - array $stats - ) { - if (!isset($err['exception'])) { - throw new \RuntimeException('The HTTP handler was rejected without an "exception" key value pair.'); - } - - $serviceError = "AWS HTTP error:\n"; - - if (!isset($err['response'])) { - $parts = ['response' => null]; - $serviceError .= $err['exception']->getMessage(); - } else { - try { - $parts = call_user_func( - $this->errorParser, - $err['response'], - $command - ); - - $serviceError .= "{$parts['code']} ({$parts['type']}): " - . "{$parts['message']}"; - } catch (ParserException $e) { - $parts = []; - $serviceError .= ' Unable to parse error information from ' - . "response - {$e->getMessage()}"; - } - - $parts['response'] = $err['response']; - } - - $parts['exception'] = $err['exception']; - $parts['request'] = $request; - $parts['connection_error'] = !empty($err['connection_error']); - $parts['transfer_stats'] = $stats; - - return new $this->exceptionClass( - sprintf( - 'Error executing "%s" on "%s"; %s', - $command->getName(), - $request->getUri(), - $serviceError - ), - $command, - $parts, - $err['exception'] - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/aliases.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/aliases.json.php deleted file mode 100644 index 95dfe4473..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/aliases.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'ApiGatewayV2' => [ '2018-11-29' => [ 'GetApi' => 'GetApiResource', ], ], 'CloudHSM' => [ '2014-05-30' => [ 'GetConfig' => 'GetConfigFiles', ], ], 'GroundStation' => [ '2019-05-23' => [ 'GetConfig' => 'GetMissionProfileConfig', ], ], 'Pinpoint' => [ '2016-12-01' => [ 'GetEndpoint' => 'GetUserEndpoint', 'UpdateEndpoint' => 'UpdateUserEndpoint', 'UpdateEndpointsBatch' => 'UpdateUserEndpointsBatch', ], ], 'AppSync' => [ '2017-07-25' => [ 'GetApi' => 'GetApiResource', ], ], 'AmplifyBackend' => [ '2020-08-11' => [ 'GetToken' => 'GetChallengeToken', ], ], 'IotDeviceAdvisor' => [ '2020-09-18' => [ 'GetEndpoint' => 'GetDeviceAdvisorEndpoint', ], ], 'IoT' => [ '2015-05-28' => [ 'GetCommand' => 'GetDeviceCommand', ], ], 'Redshift Serverless' => [ '2021-04-21' => [ 'GetCredentials' => 'GetDbCredentials', ], ], 'Lambda' => [ '2015-03-31' => [ 'InvokeAsync' => 'InvokeAsynchronous', ], ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/endpoints.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/endpoints.json.php deleted file mode 100644 index 762a8b196..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/endpoints.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'dnsSuffix' => 'amazonaws.com', 'partition' => 'aws', 'partitionName' => 'AWS Standard', 'regionRegex' => '^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$', 'regions' => [ 'af-south-1' => [ 'description' => 'Africa (Cape Town)', ], 'ap-east-1' => [ 'description' => 'Asia Pacific (Hong Kong)', ], 'ap-east-2' => [ 'description' => 'Asia Pacific (Taipei)', ], 'ap-northeast-1' => [ 'description' => 'Asia Pacific (Tokyo)', ], 'ap-northeast-2' => [ 'description' => 'Asia Pacific (Seoul)', ], 'ap-northeast-3' => [ 'description' => 'Asia Pacific (Osaka)', ], 'ap-south-1' => [ 'description' => 'Asia Pacific (Mumbai)', ], 'ap-south-2' => [ 'description' => 'Asia Pacific (Hyderabad)', ], 'ap-southeast-1' => [ 'description' => 'Asia Pacific (Singapore)', ], 'ap-southeast-2' => [ 'description' => 'Asia Pacific (Sydney)', ], 'ap-southeast-3' => [ 'description' => 'Asia Pacific (Jakarta)', ], 'ap-southeast-4' => [ 'description' => 'Asia Pacific (Melbourne)', ], 'ap-southeast-5' => [ 'description' => 'Asia Pacific (Malaysia)', ], 'ap-southeast-6' => [ 'description' => 'Asia Pacific (New Zealand)', ], 'ap-southeast-7' => [ 'description' => 'Asia Pacific (Thailand)', ], 'ca-central-1' => [ 'description' => 'Canada (Central)', ], 'ca-west-1' => [ 'description' => 'Canada West (Calgary)', ], 'eu-central-1' => [ 'description' => 'Europe (Frankfurt)', ], 'eu-central-2' => [ 'description' => 'Europe (Zurich)', ], 'eu-north-1' => [ 'description' => 'Europe (Stockholm)', ], 'eu-south-1' => [ 'description' => 'Europe (Milan)', ], 'eu-south-2' => [ 'description' => 'Europe (Spain)', ], 'eu-west-1' => [ 'description' => 'Europe (Ireland)', ], 'eu-west-2' => [ 'description' => 'Europe (London)', ], 'eu-west-3' => [ 'description' => 'Europe (Paris)', ], 'il-central-1' => [ 'description' => 'Israel (Tel Aviv)', ], 'me-central-1' => [ 'description' => 'Middle East (UAE)', ], 'me-south-1' => [ 'description' => 'Middle East (Bahrain)', ], 'mx-central-1' => [ 'description' => 'Mexico (Central)', ], 'sa-east-1' => [ 'description' => 'South America (Sao Paulo)', ], 'us-east-1' => [ 'description' => 'US East (N. Virginia)', ], 'us-east-2' => [ 'description' => 'US East (Ohio)', ], 'us-west-1' => [ 'description' => 'US West (N. California)', ], 'us-west-2' => [ 'description' => 'US West (Oregon)', ], ], 'services' => [ 'access-analyzer' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'access-analyzer.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'access-analyzer.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'access-analyzer-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'access-analyzer-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'access-analyzer-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'access-analyzer-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'access-analyzer-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'access-analyzer-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'access-analyzer.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'access-analyzer.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'access-analyzer.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'access-analyzer-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'access-analyzer.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'account' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'account.us-east-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'acm' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'acm-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'acm-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'acm-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'acm-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'acm-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'acm-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'acm-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'acm-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'acm-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'acm-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'acm-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'acm-fips.us-west-2.amazonaws.com', ], ], ], 'acm-pca' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'acm-pca-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'acm-pca-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'acm-pca-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'acm-pca-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'acm-pca-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'acm-pca-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'acm-pca-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'acm-pca-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'acm-pca-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'acm-pca-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'acm-pca-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'acm-pca-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'agreement-marketplace' => [ 'endpoints' => [ 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'agreement-marketplace.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'airflow' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'amplify' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'amplifybackend' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'amplifyuibuilder' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'aoss' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'api.detective' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'detective.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'detective.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'detective.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'detective.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'detective.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'detective.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'detective.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'api.detective-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'detective-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'detective.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'api.detective-fips.ca-central-1.amazonaws.com', ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'detective.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'detective.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'detective.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'detective.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'detective.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'detective.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'detective.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'detective.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'detective.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'api.detective-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'detective-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'detective.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'api.detective-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'api.detective-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'detective-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'detective.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'api.detective-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'api.detective-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'detective-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'detective.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'api.detective-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'api.detective-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'detective-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'detective.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'api.detective-fips.us-west-2.amazonaws.com', ], ], ], 'api.ecr' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'ecr-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 'api.ecr.af-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'api.ecr.ap-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'api.ecr.ap-northeast-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'api.ecr.ap-northeast-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'api.ecr.ap-northeast-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'api.ecr.ap-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'api.ecr.ap-south-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'api.ecr.ap-southeast-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'api.ecr.ap-southeast-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'hostname' => 'api.ecr.ap-southeast-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'hostname' => 'api.ecr.ap-southeast-4.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'credentialScope' => [ 'region' => 'ap-southeast-5', ], 'hostname' => 'api.ecr.ap-southeast-5.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'credentialScope' => [ 'region' => 'ap-southeast-7', ], 'hostname' => 'api.ecr.ap-southeast-7.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'api.ecr.ca-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'hostname' => 'api.ecr.ca-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'dkr-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ecr-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'dkr-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ecr-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'dkr-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ecr-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'dkr-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ecr-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'api.ecr.eu-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'api.ecr.eu-central-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'api.ecr.eu-north-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'api.ecr.eu-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'api.ecr.eu-south-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'api.ecr.eu-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'api.ecr.eu-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'api.ecr.eu-west-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-dkr-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-east-1.amazonaws.com', ], 'fips-dkr-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-east-2.amazonaws.com', ], 'fips-dkr-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-west-1.amazonaws.com', ], 'fips-dkr-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-west-2.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 'api.ecr.il-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'hostname' => 'api.ecr.me-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'api.ecr.me-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'credentialScope' => [ 'region' => 'mx-central-1', ], 'hostname' => 'api.ecr.mx-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'api.ecr.sa-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'api.ecr.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ecr-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ecr.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'api.ecr.us-east-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ecr-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ecr.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'api.ecr.us-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ecr-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ecr.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'api.ecr.us-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ecr-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ecr.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'api.ecr-public' => [ 'endpoints' => [ 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'api.ecr-public.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr-public.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'api.ecr-public.us-west-2.amazonaws.com', ], ], ], 'api.iotdeviceadvisor' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'api.iotdeviceadvisor.ap-northeast-1.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'api.iotdeviceadvisor.eu-west-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'api.iotdeviceadvisor.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'api.iotdeviceadvisor.us-west-2.amazonaws.com', ], ], ], 'api.iotwireless' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'api.iotwireless.ap-northeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'api.iotwireless.ap-southeast-2.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'api.iotwireless.eu-central-1.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'api.iotwireless.eu-west-1.amazonaws.com', ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'api.iotwireless.sa-east-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'api.iotwireless.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'api.iotwireless.us-west-2.amazonaws.com', ], ], ], 'api.mediatailor' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'api.pricing' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'pricing', ], ], 'endpoints' => [ 'ap-south-1' => [], 'eu-central-1' => [], 'us-east-1' => [], ], ], 'api.sagemaker' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.us-west-2.amazonaws.com', ], ], ], 'api.tunneling.iot' => [ 'defaults' => [ 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => 'api.tunneling.iot-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => 'api.iot-tunneling-fips.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => 'api.iot-tunneling.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'api.iot-tunneling.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'api.tunneling.iot-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'api.iot-tunneling.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'api.tunneling.iot-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'api.iot-tunneling.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'api.tunneling.iot-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'api.iot-tunneling.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'api.tunneling.iot-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'api.iot-tunneling.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'api.tunneling.iot-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'apigateway' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'apigateway-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'apigateway-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'apigateway-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'apigateway-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'apigateway-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'apigateway-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'apigateway-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'apigateway-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'apigateway-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'apigateway-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'apigateway-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'apigateway-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'app-integrations' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'appconfigdata' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'appflow' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'appflow-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'appflow-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'appflow-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'appflow-fips.us-west-2.amazonaws.com', ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'appflow-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'appflow-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'appflow-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'appflow-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'application-autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'applicationinsights' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'appmesh' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'appmesh.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'appmesh-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'appmesh-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'appmesh.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'appmesh-fips.ca-central-1.amazonaws.com', ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'appmesh.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'appmesh-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'appmesh-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'appmesh.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'appmesh-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'appmesh-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'appmesh-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'appmesh.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'appmesh-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'appmesh-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'appmesh-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'appmesh.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'appmesh-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'appmesh-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'appmesh-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'appmesh.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'appmesh-fips.us-west-2.amazonaws.com', ], ], ], 'apprunner' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'apprunner-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'apprunner-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'apprunner-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'apprunner-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'apprunner-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'apprunner-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'appstream2' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'appstream', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'appstream2-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'appstream2-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'appstream2-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'appstream2-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'appstream2-fips.us-west-2.amazonaws.com', ], ], ], 'appsync' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'appsync.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'appsync.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'appsync.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'appsync.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'appsync.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'appsync.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'appsync.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'appsync.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'appsync.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'appsync.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'appsync.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'appsync.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'aps' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [], 'ap-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [], 'ap-southeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [], 'eu-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'deprecated' => true, ], 'us-east-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'deprecated' => true, ], 'us-west-1' => [], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'deprecated' => true, ], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'athena' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'athena.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'athena.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'athena.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'athena.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'athena.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'athena.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'athena.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'athena.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'athena.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'athena.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'athena.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'athena.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'athena-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'athena-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'athena.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'athena.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'athena.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'athena.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'athena.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'athena.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'athena.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'athena.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'athena-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'athena-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'athena-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'athena-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'athena-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'athena-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'athena.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'athena.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'athena.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'athena.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'athena-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'athena-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'athena-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'athena-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'auditmanager' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'auditmanager-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'auditmanager-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'auditmanager-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'auditmanager-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'auditmanager-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'auditmanager-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'auditmanager-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'auditmanager-fips.us-west-2.amazonaws.com', ], ], ], 'autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'autoscaling-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'autoscaling-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'autoscaling-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'autoscaling-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'autoscaling-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'autoscaling-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'autoscaling-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'autoscaling-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'autoscaling-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'autoscaling-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'autoscaling-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'autoscaling-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'autoscaling-plans' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'backup' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'backup-gateway' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'batch' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'fips.batch.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'fips.batch.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'fips.batch.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'fips.batch.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'fips.batch.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'fips.batch.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'fips.batch.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'fips.batch.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'fips.batch.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'bedrock' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'bedrock-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'bedrock.ap-northeast-1.amazonaws.com', ], 'bedrock-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'bedrock.ap-northeast-2.amazonaws.com', ], 'bedrock-ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'bedrock.ap-northeast-3.amazonaws.com', ], 'bedrock-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'bedrock.ap-south-1.amazonaws.com', ], 'bedrock-ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'bedrock.ap-south-2.amazonaws.com', ], 'bedrock-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'bedrock.ap-southeast-1.amazonaws.com', ], 'bedrock-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'bedrock.ap-southeast-2.amazonaws.com', ], 'bedrock-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'bedrock.ca-central-1.amazonaws.com', ], 'bedrock-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'bedrock.eu-central-1.amazonaws.com', ], 'bedrock-eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'bedrock.eu-central-2.amazonaws.com', ], 'bedrock-eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'bedrock.eu-north-1.amazonaws.com', ], 'bedrock-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'bedrock.eu-south-1.amazonaws.com', ], 'bedrock-eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'bedrock.eu-south-2.amazonaws.com', ], 'bedrock-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'bedrock.eu-west-1.amazonaws.com', ], 'bedrock-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'bedrock.eu-west-2.amazonaws.com', ], 'bedrock-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'bedrock.eu-west-3.amazonaws.com', ], 'bedrock-fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'bedrock-fips.ca-central-1.amazonaws.com', ], 'bedrock-fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'bedrock-fips.us-east-1.amazonaws.com', ], 'bedrock-fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'bedrock-fips.us-east-2.amazonaws.com', ], 'bedrock-fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'bedrock-fips.us-west-2.amazonaws.com', ], 'bedrock-runtime-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'bedrock-runtime.ap-northeast-1.amazonaws.com', ], 'bedrock-runtime-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'bedrock-runtime.ap-northeast-2.amazonaws.com', ], 'bedrock-runtime-ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'bedrock-runtime.ap-northeast-3.amazonaws.com', ], 'bedrock-runtime-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'bedrock-runtime.ap-south-1.amazonaws.com', ], 'bedrock-runtime-ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'bedrock-runtime.ap-south-2.amazonaws.com', ], 'bedrock-runtime-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'bedrock-runtime.ap-southeast-1.amazonaws.com', ], 'bedrock-runtime-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'bedrock-runtime.ap-southeast-2.amazonaws.com', ], 'bedrock-runtime-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'bedrock-runtime.ca-central-1.amazonaws.com', ], 'bedrock-runtime-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'bedrock-runtime.eu-central-1.amazonaws.com', ], 'bedrock-runtime-eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'bedrock-runtime.eu-central-2.amazonaws.com', ], 'bedrock-runtime-eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'bedrock-runtime.eu-north-1.amazonaws.com', ], 'bedrock-runtime-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'bedrock-runtime.eu-south-1.amazonaws.com', ], 'bedrock-runtime-eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'bedrock-runtime.eu-south-2.amazonaws.com', ], 'bedrock-runtime-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'bedrock-runtime.eu-west-1.amazonaws.com', ], 'bedrock-runtime-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'bedrock-runtime.eu-west-2.amazonaws.com', ], 'bedrock-runtime-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'bedrock-runtime.eu-west-3.amazonaws.com', ], 'bedrock-runtime-fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'bedrock-runtime-fips.ca-central-1.amazonaws.com', ], 'bedrock-runtime-fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'bedrock-runtime-fips.us-east-1.amazonaws.com', ], 'bedrock-runtime-fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'bedrock-runtime-fips.us-east-2.amazonaws.com', ], 'bedrock-runtime-fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'bedrock-runtime-fips.us-west-2.amazonaws.com', ], 'bedrock-runtime-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'bedrock-runtime.sa-east-1.amazonaws.com', ], 'bedrock-runtime-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'bedrock-runtime.us-east-1.amazonaws.com', ], 'bedrock-runtime-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'bedrock-runtime.us-east-2.amazonaws.com', ], 'bedrock-runtime-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'bedrock-runtime.us-west-2.amazonaws.com', ], 'bedrock-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'bedrock.sa-east-1.amazonaws.com', ], 'bedrock-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'bedrock.us-east-1.amazonaws.com', ], 'bedrock-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'bedrock.us-east-2.amazonaws.com', ], 'bedrock-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'bedrock.us-west-2.amazonaws.com', ], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'billingconductor' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'billingconductor.us-east-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'braket' => [ 'endpoints' => [ 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'braket.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'braket.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'braket.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'braket.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'braket.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'budgets' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'budgets.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'cases' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-2' => [], 'fips-us-east-1' => [ 'deprecated' => true, ], 'fips-us-west-2' => [ 'deprecated' => true, ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], ], ], 'cassandra' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cassandra-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cassandra-fips.us-west-2.amazonaws.com', ], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cassandra-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cassandra-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'catalog.marketplace' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'ce' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'ce.us-east-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'chime' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'chime.us-east-1.amazonaws.com', 'protocols' => [ 'https', ], ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'cleanrooms' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'cleanrooms.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cleanrooms-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'cleanrooms-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cleanrooms-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cleanrooms-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cleanrooms-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cleanrooms.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'cleanrooms-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cleanrooms-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cleanrooms.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cleanrooms-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cleanrooms-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cleanrooms.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'cloud9' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'cloud9-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloud9-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'cloud9-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cloud9-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'cloud9-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'cloud9-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cloud9-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'cloud9-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloud9-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'cloud9-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloud9-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'cloud9-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloud9-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'cloud9-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloud9-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], ], ], 'cloudcontrolapi' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'clouddirectory' => [ 'endpoints' => [ 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'cloudformation' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudformation-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cloudformation-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'cloudformation-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'cloudformation-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudformation-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'cloudformation-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cloudformation-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cloudformation-fips.us-west-2.amazonaws.com', ], ], ], 'cloudfront' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'cloudfront.amazonaws.com', 'protocols' => [ 'http', 'https', ], ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'cloudhsm' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'cloudhsmv2' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'cloudhsm', ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'cloudsearch' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'cloudtrail' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cloudtrail-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'cloudtrail-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'cloudtrail-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cloudtrail-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudtrail-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'cloudtrail-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudtrail-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cloudtrail-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'cloudtrail-data' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'codeartifact' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'codebuild' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'codebuild-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'codebuild-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'codebuild-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'codebuild-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'codebuild-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'codebuild-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'codebuild-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'codebuild-fips.us-west-2.amazonaws.com', ], ], ], 'codecatalyst' => [ 'endpoints' => [ 'aws-global' => [ 'hostname' => 'codecatalyst.global.api.aws', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'codecommit' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'codecommit-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.ca-central-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.ca-central-1.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'codecommit-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'codecommit-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'codecommit-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'codecommit-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.us-west-2.amazonaws.com', ], ], ], 'codedeploy' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'codedeploy-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'codedeploy-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'codedeploy-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'codedeploy-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'codedeploy-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'codedeploy-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'codedeploy-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'codedeploy-fips.us-west-2.amazonaws.com', ], ], ], 'codeguru-profiler' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'codeguru-reviewer' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'codepipeline' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'codepipeline-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'codepipeline-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'codepipeline-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'codepipeline-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'codepipeline-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'codepipeline-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'codepipeline-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'codepipeline-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'codepipeline-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'codepipeline-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'codestar-connections' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'codestar-notifications' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'cognito-identity' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.af-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-northeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-northeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-northeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-southeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-southeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-southeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-southeast-4.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ap-southeast-5.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ca-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.ca-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-central-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-north-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.eu-west-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cognito-identity-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'cognito-identity-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'cognito-identity-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cognito-identity-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.il-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.me-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.me-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.sa-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity-fips.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-identity-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-identity.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity-fips.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-identity-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-identity.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity-fips.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-identity-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-identity.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cognito-identity-fips.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-identity-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-identity.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'cognito-idp' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.af-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-northeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-northeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-northeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-southeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-southeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-southeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-southeast-4.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ap-southeast-5.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ca-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.ca-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-central-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-north-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.eu-west-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'cognito-idp-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'cognito-idp-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'cognito-idp-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'cognito-idp-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.il-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.me-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.me-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.sa-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp-fips.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-idp-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-idp.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp-fips.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-idp-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-idp.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp-fips.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-idp-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-idp.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'cognito-idp-fips.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-idp-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-idp.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'cognito-sync' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'comprehend' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'comprehend.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'comprehend.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'comprehend.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'comprehend.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'comprehend.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'comprehend-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'comprehend-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'comprehend.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'comprehend.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'comprehend.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'comprehend.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'comprehend-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'comprehend-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'comprehend-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'comprehend-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'comprehend-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'comprehend-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'comprehend.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'comprehend-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'comprehend-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'comprehend.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'comprehend-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'comprehend-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'comprehend.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'comprehendmedical' => [ 'endpoints' => [ 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'comprehendmedical-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'comprehendmedical-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'comprehendmedical-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'comprehendmedical-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'comprehendmedical-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'comprehendmedical-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'comprehendmedical-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'comprehendmedical-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 'compute-optimizer.af-south-1.amazonaws.com', ], 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'compute-optimizer.ap-east-1.amazonaws.com', ], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'compute-optimizer.ap-northeast-1.amazonaws.com', ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'compute-optimizer.ap-northeast-2.amazonaws.com', ], 'ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'compute-optimizer.ap-northeast-3.amazonaws.com', ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'compute-optimizer.ap-south-1.amazonaws.com', ], 'ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'compute-optimizer.ap-south-2.amazonaws.com', ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'compute-optimizer.ap-southeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'compute-optimizer.ap-southeast-2.amazonaws.com', ], 'ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'hostname' => 'compute-optimizer.ap-southeast-3.amazonaws.com', ], 'ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'hostname' => 'compute-optimizer.ap-southeast-4.amazonaws.com', ], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'compute-optimizer.ca-central-1.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'compute-optimizer.eu-central-1.amazonaws.com', ], 'eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'compute-optimizer.eu-central-2.amazonaws.com', ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'compute-optimizer.eu-north-1.amazonaws.com', ], 'eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'compute-optimizer.eu-south-1.amazonaws.com', ], 'eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'compute-optimizer.eu-south-2.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'compute-optimizer.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'compute-optimizer.eu-west-2.amazonaws.com', ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'compute-optimizer.eu-west-3.amazonaws.com', ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 'compute-optimizer.il-central-1.amazonaws.com', ], 'me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'hostname' => 'compute-optimizer.me-central-1.amazonaws.com', ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'compute-optimizer.me-south-1.amazonaws.com', ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'compute-optimizer.sa-east-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'compute-optimizer.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'compute-optimizer.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'compute-optimizer.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'compute-optimizer.us-west-2.amazonaws.com', ], ], ], 'config' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'config-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'config-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'config-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'config-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'config-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'config-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'config-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'config-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'connect' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'connect-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'connect-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'connect-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'connect-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'connect-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'connect-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'connect-campaigns' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-2' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'connect-campaigns-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'connect-campaigns-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'connect-campaigns-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'connect-campaigns-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'contact-lens' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'controltower' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'controltower-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'controltower-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'controltower-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'controltower-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'controltower-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'controltower-fips.us-west-2.amazonaws.com', ], ], ], 'cost-optimization-hub' => [ 'endpoints' => [ 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'cost-optimization-hub.us-east-1.amazonaws.com', ], ], ], 'cur' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'data-ats.iot' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'data.iot' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-west-2.amazonaws.com', ], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'data.jobs.iot' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'data.jobs.iot-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'data.jobs.iot-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'data.jobs.iot-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'data.jobs.iot-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'data.jobs.iot-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'data.jobs.iot-fips.us-west-2.amazonaws.com', ], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'data.jobs.iot-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'data.jobs.iot-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'data.jobs.iot-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'data.jobs.iot-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'data.mediastore' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'databrew' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'databrew-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'databrew-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'databrew-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'databrew-fips.us-west-2.amazonaws.com', ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'databrew-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'databrew-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'databrew-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'databrew-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'dataexchange' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'datapipeline' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-2' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'datasync' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'datasync.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'datasync.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'datasync.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'datasync.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'datasync.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'datasync.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'datasync.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'datasync.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'datazone' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 'datazone.ap-northeast-1.api.aws', ], 'ap-northeast-2' => [ 'hostname' => 'datazone.ap-northeast-2.api.aws', ], 'ap-northeast-3' => [ 'hostname' => 'datazone.ap-northeast-3.api.aws', ], 'ap-south-1' => [ 'hostname' => 'datazone.ap-south-1.api.aws', ], 'ap-south-2' => [ 'hostname' => 'datazone.ap-south-2.api.aws', ], 'ap-southeast-1' => [ 'hostname' => 'datazone.ap-southeast-1.api.aws', ], 'ap-southeast-2' => [ 'hostname' => 'datazone.ap-southeast-2.api.aws', ], 'ap-southeast-3' => [ 'hostname' => 'datazone.ap-southeast-3.api.aws', ], 'ap-southeast-4' => [ 'hostname' => 'datazone.ap-southeast-4.api.aws', ], 'ap-southeast-5' => [ 'hostname' => 'datazone.ap-southeast-5.api.aws', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'hostname' => 'datazone.ap-southeast-7.api.aws', ], 'ca-central-1' => [ 'hostname' => 'datazone.ca-central-1.api.aws', 'variants' => [ [ 'hostname' => 'datazone-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'hostname' => 'datazone.ca-west-1.api.aws', ], 'eu-central-1' => [ 'hostname' => 'datazone.eu-central-1.api.aws', ], 'eu-central-2' => [], 'eu-north-1' => [ 'hostname' => 'datazone.eu-north-1.api.aws', ], 'eu-south-1' => [ 'hostname' => 'datazone.eu-south-1.api.aws', ], 'eu-south-2' => [], 'eu-west-1' => [ 'hostname' => 'datazone.eu-west-1.api.aws', ], 'eu-west-2' => [ 'hostname' => 'datazone.eu-west-2.api.aws', ], 'eu-west-3' => [ 'hostname' => 'datazone.eu-west-3.api.aws', ], 'il-central-1' => [ 'hostname' => 'datazone.il-central-1.api.aws', ], 'me-central-1' => [ 'hostname' => 'datazone.me-central-1.api.aws', ], 'me-south-1' => [ 'hostname' => 'datazone.me-south-1.api.aws', ], 'mx-central-1' => [ 'hostname' => 'datazone.mx-central-1.api.aws', ], 'sa-east-1' => [ 'hostname' => 'datazone.sa-east-1.api.aws', ], 'us-east-1' => [ 'hostname' => 'datazone.us-east-1.api.aws', 'variants' => [ [ 'hostname' => 'datazone-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'hostname' => 'datazone.us-east-2.api.aws', 'variants' => [ [ 'hostname' => 'datazone-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'hostname' => 'datazone.us-west-1.api.aws', ], 'us-west-2' => [ 'hostname' => 'datazone.us-west-2.api.aws', 'variants' => [ [ 'hostname' => 'datazone-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'dax' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'devicefarm' => [ 'endpoints' => [ 'us-west-2' => [], ], ], 'devops-guru' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'devops-guru-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'devops-guru-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'devops-guru-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'devops-guru-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'devops-guru-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'devops-guru-fips.us-west-2.amazonaws.com', ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'devops-guru-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'devops-guru-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'devops-guru-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'devops-guru-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'directconnect' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'discovery' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'dlm' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'dlm.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'dlm.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'dlm.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'dlm.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'dlm.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'dlm.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'dlm.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'dlm.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'dms' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'dms' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'dms-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'dms-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'dms-fips.us-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'dms-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'dms-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'dms-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'dms-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'dms-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'dms-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'dms-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'dms-fips.us-west-2.amazonaws.com', ], ], ], 'docdb' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'rds.ap-northeast-1.amazonaws.com', ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'rds.ap-northeast-2.amazonaws.com', ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'rds.ap-south-1.amazonaws.com', ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'rds.ap-southeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'rds.ap-southeast-2.amazonaws.com', ], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'rds.ca-central-1.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'rds.eu-central-1.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'rds.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'rds.eu-west-2.amazonaws.com', ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'rds.eu-west-3.amazonaws.com', ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'rds.sa-east-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'rds.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'rds.us-east-2.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'rds.us-west-2.amazonaws.com', ], ], ], 'drs' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'drs-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'drs-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'drs-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'drs-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'drs-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'drs-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'drs-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'drs-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ds' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'dynamodb' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'local' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'localhost:8000', 'protocols' => [ 'http', ], ], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.us-west-2.amazonaws.com', ], ], ], 'ebs' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'ebs-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'ebs-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ebs-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'ebs-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ebs-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ebs-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ebs-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ebs-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ebs-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ebs-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ebs-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ebs-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ec2' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'ec2.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'ec2.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'ec2.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'ec2.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'ec2.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'ec2.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'ec2.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'ec2-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ec2.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'ec2-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'ec2.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'ec2.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'ec2.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'ec2.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'ec2.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'ec2.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ec2-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'ec2-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ec2-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ec2-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ec2-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ec2-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'ec2.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'ec2.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ec2-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ec2.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ec2-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ec2.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ec2-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ec2.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ec2-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ec2.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'ecs' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ecs-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ecs-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ecs-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ecs-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ecs-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ecs-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ecs-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ecs-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'edge.sagemaker' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'eks' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'fips.eks.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'fips.eks.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'fips.eks.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'fips.eks.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'fips.eks.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'fips.eks.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'fips.eks.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'fips.eks.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'fips.eks.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'eks-auth' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'hostname' => 'eks-auth.af-south-1.api.aws', ], 'ap-east-1' => [ 'hostname' => 'eks-auth.ap-east-1.api.aws', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 'eks-auth.ap-northeast-1.api.aws', ], 'ap-northeast-2' => [ 'hostname' => 'eks-auth.ap-northeast-2.api.aws', ], 'ap-northeast-3' => [ 'hostname' => 'eks-auth.ap-northeast-3.api.aws', ], 'ap-south-1' => [ 'hostname' => 'eks-auth.ap-south-1.api.aws', ], 'ap-south-2' => [ 'hostname' => 'eks-auth.ap-south-2.api.aws', ], 'ap-southeast-1' => [ 'hostname' => 'eks-auth.ap-southeast-1.api.aws', ], 'ap-southeast-2' => [ 'hostname' => 'eks-auth.ap-southeast-2.api.aws', ], 'ap-southeast-3' => [ 'hostname' => 'eks-auth.ap-southeast-3.api.aws', ], 'ap-southeast-4' => [ 'hostname' => 'eks-auth.ap-southeast-4.api.aws', ], 'ap-southeast-5' => [ 'hostname' => 'eks-auth.ap-southeast-5.api.aws', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'hostname' => 'eks-auth.ap-southeast-7.api.aws', ], 'ca-central-1' => [ 'hostname' => 'eks-auth.ca-central-1.api.aws', ], 'ca-west-1' => [ 'hostname' => 'eks-auth.ca-west-1.api.aws', ], 'eu-central-1' => [ 'hostname' => 'eks-auth.eu-central-1.api.aws', ], 'eu-central-2' => [ 'hostname' => 'eks-auth.eu-central-2.api.aws', ], 'eu-north-1' => [ 'hostname' => 'eks-auth.eu-north-1.api.aws', ], 'eu-south-1' => [ 'hostname' => 'eks-auth.eu-south-1.api.aws', ], 'eu-south-2' => [ 'hostname' => 'eks-auth.eu-south-2.api.aws', ], 'eu-west-1' => [ 'hostname' => 'eks-auth.eu-west-1.api.aws', ], 'eu-west-2' => [ 'hostname' => 'eks-auth.eu-west-2.api.aws', ], 'eu-west-3' => [ 'hostname' => 'eks-auth.eu-west-3.api.aws', ], 'il-central-1' => [ 'hostname' => 'eks-auth.il-central-1.api.aws', ], 'me-central-1' => [ 'hostname' => 'eks-auth.me-central-1.api.aws', ], 'me-south-1' => [ 'hostname' => 'eks-auth.me-south-1.api.aws', ], 'mx-central-1' => [ 'hostname' => 'eks-auth.mx-central-1.api.aws', ], 'sa-east-1' => [ 'hostname' => 'eks-auth.sa-east-1.api.aws', ], 'us-east-1' => [ 'hostname' => 'eks-auth.us-east-1.api.aws', ], 'us-east-2' => [ 'hostname' => 'eks-auth.us-east-2.api.aws', ], 'us-west-1' => [ 'hostname' => 'eks-auth.us-west-1.api.aws', ], 'us-west-2' => [ 'hostname' => 'eks-auth.us-west-2.api.aws', ], ], ], 'elasticache' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'elasticache-fips.us-west-1.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticache-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'elasticache-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'elasticache-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'elasticache-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticache-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'elasticache-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'elasticache-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'elasticache-fips.us-west-2.amazonaws.com', ], ], ], 'elasticbeanstalk' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'elasticbeanstalk-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'elasticbeanstalk-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'elasticbeanstalk-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'elasticbeanstalk-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticbeanstalk-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'elasticbeanstalk.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticbeanstalk-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'elasticbeanstalk.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticbeanstalk-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'elasticbeanstalk.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticbeanstalk-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'elasticbeanstalk.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.af-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-northeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-northeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-northeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-southeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-southeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-southeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-southeast-4.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-southeast-5.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ap-southeast-7.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-central-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-north-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-west-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.af-south-1.amazonaws.com', ], 'fips-ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-east-1.amazonaws.com', ], 'fips-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-northeast-1.amazonaws.com', ], 'fips-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-northeast-2.amazonaws.com', ], 'fips-ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-northeast-3.amazonaws.com', ], 'fips-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-south-1.amazonaws.com', ], 'fips-ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-south-2.amazonaws.com', ], 'fips-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-southeast-1.amazonaws.com', ], 'fips-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-southeast-2.amazonaws.com', ], 'fips-ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-southeast-3.amazonaws.com', ], 'fips-ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-southeast-4.amazonaws.com', ], 'fips-ap-southeast-5' => [ 'credentialScope' => [ 'region' => 'ap-southeast-5', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-southeast-5.amazonaws.com', ], 'fips-ap-southeast-7' => [ 'credentialScope' => [ 'region' => 'ap-southeast-7', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ap-southeast-7.amazonaws.com', ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.ca-west-1.amazonaws.com', ], 'fips-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-central-1.amazonaws.com', ], 'fips-eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-central-2.amazonaws.com', ], 'fips-eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-north-1.amazonaws.com', ], 'fips-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-south-1.amazonaws.com', ], 'fips-eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-south-2.amazonaws.com', ], 'fips-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-west-1.amazonaws.com', ], 'fips-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-west-2.amazonaws.com', ], 'fips-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-west-3.amazonaws.com', ], 'fips-il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.il-central-1.amazonaws.com', ], 'fips-me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.me-central-1.amazonaws.com', ], 'fips-me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.me-south-1.amazonaws.com', ], 'fips-mx-central-1' => [ 'credentialScope' => [ 'region' => 'mx-central-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.mx-central-1.amazonaws.com', ], 'fips-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.sa-east-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.il-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.me-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.me-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.mx-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.sa-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'elasticloadbalancing' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'elasticloadbalancing-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'elasticloadbalancing-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'elasticloadbalancing-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'elasticloadbalancing-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticloadbalancing-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'elasticloadbalancing-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticloadbalancing-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'elasticloadbalancing-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'elasticmapreduce' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'sslCommonName' => '{region}.{service}.{dnsSuffix}', ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'sslCommonName' => '{service}.{region}.{dnsSuffix}', ], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'sslCommonName' => '{service}.{region}.{dnsSuffix}', 'variants' => [ [ 'hostname' => 'elasticmapreduce-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticmapreduce.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'email' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'email-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'email-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'email-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'email-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'email-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'email-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'email-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'email-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'email-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'email-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'emr-containers' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'emr-containers-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'emr-containers-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'emr-containers-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'emr-containers-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'emr-containers-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'emr-containers-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'emr-containers-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'emr-containers-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'emr-containers-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'emr-containers-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'emr-serverless' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'emr-serverless-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'emr-serverless-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'emr-serverless-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'emr-serverless-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'emr-serverless-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'emr-serverless-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'emr-serverless-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'emr-serverless-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'emr-serverless-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'emr-serverless-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'entitlement.marketplace' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'aws-marketplace', ], ], 'endpoints' => [ 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'entitlement-marketplace.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'es' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'aos.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'aos.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'aos.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'aos.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'aos.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'aos.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'aos.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'aos.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'aos.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'aos.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'aos.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'aos.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'aos.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'aos.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'aos.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'aos.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'aos.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'aos.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'aos.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'aos.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'aos.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'aos.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'aos.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'es-fips.us-west-1.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'aos.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'aos.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'aos.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'aos.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'aos.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'aos.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'es-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'es-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'aos.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'es-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'es-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'aos.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'es-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'es-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'aos.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'es-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'es-fips.us-west-2.amazonaws.com', ], ], ], 'events' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'events.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'events.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'events.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'events.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'events.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'events.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'events.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'events.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'events.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'events.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'events.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'events.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'events.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'events.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'events.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'events.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'events.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'events.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'events.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'events.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'events.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'events.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'events.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'events-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'events-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'events-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'events-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'events.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'events.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'events.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'events.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'events.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'events-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'events-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'events.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'events-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'events-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'events.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'events-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'events-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'events.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'events-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'events-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'events.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'finspace' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'finspace-api' => [ 'endpoints' => [ 'ca-central-1' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'firehose' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'firehose.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'firehose.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'firehose.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'firehose.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'firehose.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'firehose-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'firehose-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'firehose-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'firehose-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'firehose.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'firehose.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'firehose.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'firehose.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'firehose.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'firehose-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'firehose-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'firehose.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'firehose-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'firehose-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'firehose.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'firehose-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'firehose-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'firehose.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'firehose-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'firehose-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'firehose.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'fms' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.af-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ap-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ap-northeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ap-northeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-3' => [], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ap-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-2' => [], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ap-southeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ap-southeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.eu-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.eu-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-2' => [], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.eu-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'fms-fips.eu-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'fms-fips.eu-west-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.af-south-1.amazonaws.com', ], 'fips-ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.ap-east-1.amazonaws.com', ], 'fips-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.ap-northeast-1.amazonaws.com', ], 'fips-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'deprecated' => true, 'hostname' => 'fms-fips.ap-northeast-2.amazonaws.com', ], 'fips-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.ap-south-1.amazonaws.com', ], 'fips-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.ap-southeast-1.amazonaws.com', ], 'fips-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'deprecated' => true, 'hostname' => 'fms-fips.ap-southeast-2.amazonaws.com', ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.ca-west-1.amazonaws.com', ], 'fips-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.eu-central-1.amazonaws.com', ], 'fips-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.eu-south-1.amazonaws.com', ], 'fips-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.eu-west-1.amazonaws.com', ], 'fips-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'deprecated' => true, 'hostname' => 'fms-fips.eu-west-2.amazonaws.com', ], 'fips-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'deprecated' => true, 'hostname' => 'fms-fips.eu-west-3.amazonaws.com', ], 'fips-me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.me-south-1.amazonaws.com', ], 'fips-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.sa-east-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'fms-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'fms-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.me-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.sa-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'fms-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'fms-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'forecast' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'forecast-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'forecast-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'forecast-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'forecast-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'forecast-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'forecast-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'forecastquery' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'forecastquery-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'forecastquery-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'forecastquery-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'forecastquery-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'forecastquery-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'forecastquery-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'frauddetector' => [ 'endpoints' => [ 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'fsx' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.ca-west-1.amazonaws.com', ], 'fips-prod-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.ca-central-1.amazonaws.com', ], 'fips-prod-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.ca-west-1.amazonaws.com', ], 'fips-prod-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-east-1.amazonaws.com', ], 'fips-prod-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-east-2.amazonaws.com', ], 'fips-prod-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-west-1.amazonaws.com', ], 'fips-prod-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-west-2.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'prod-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'prod-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'prod-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'prod-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'prod-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'prod-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'gamelift' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'gameliftstreams' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'hostname' => 'gameliftstreams.af-south-1.api.aws', ], 'ap-east-1' => [ 'hostname' => 'gameliftstreams.ap-east-1.api.aws', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 'gameliftstreams.ap-northeast-1.api.aws', ], 'ap-northeast-2' => [ 'hostname' => 'gameliftstreams.ap-northeast-2.api.aws', ], 'ap-northeast-3' => [ 'hostname' => 'gameliftstreams.ap-northeast-3.api.aws', ], 'ap-south-1' => [ 'hostname' => 'gameliftstreams.ap-south-1.api.aws', ], 'ap-south-2' => [ 'hostname' => 'gameliftstreams.ap-south-2.api.aws', ], 'ap-southeast-1' => [ 'hostname' => 'gameliftstreams.ap-southeast-1.api.aws', ], 'ap-southeast-2' => [ 'hostname' => 'gameliftstreams.ap-southeast-2.api.aws', ], 'ap-southeast-3' => [ 'hostname' => 'gameliftstreams.ap-southeast-3.api.aws', ], 'ap-southeast-4' => [ 'hostname' => 'gameliftstreams.ap-southeast-4.api.aws', ], 'ap-southeast-5' => [ 'hostname' => 'gameliftstreams.ap-southeast-5.api.aws', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'hostname' => 'gameliftstreams.ap-southeast-7.api.aws', ], 'ca-central-1' => [ 'hostname' => 'gameliftstreams.ca-central-1.api.aws', ], 'ca-west-1' => [ 'hostname' => 'gameliftstreams.ca-west-1.api.aws', ], 'eu-central-1' => [ 'hostname' => 'gameliftstreams.eu-central-1.api.aws', ], 'eu-central-2' => [ 'hostname' => 'gameliftstreams.eu-central-2.api.aws', ], 'eu-north-1' => [ 'hostname' => 'gameliftstreams.eu-north-1.api.aws', ], 'eu-south-1' => [ 'hostname' => 'gameliftstreams.eu-south-1.api.aws', ], 'eu-south-2' => [ 'hostname' => 'gameliftstreams.eu-south-2.api.aws', ], 'eu-west-1' => [ 'hostname' => 'gameliftstreams.eu-west-1.api.aws', ], 'eu-west-2' => [ 'hostname' => 'gameliftstreams.eu-west-2.api.aws', ], 'eu-west-3' => [ 'hostname' => 'gameliftstreams.eu-west-3.api.aws', ], 'il-central-1' => [ 'hostname' => 'gameliftstreams.il-central-1.api.aws', ], 'me-central-1' => [ 'hostname' => 'gameliftstreams.me-central-1.api.aws', ], 'me-south-1' => [ 'hostname' => 'gameliftstreams.me-south-1.api.aws', ], 'mx-central-1' => [ 'hostname' => 'gameliftstreams.mx-central-1.api.aws', ], 'sa-east-1' => [ 'hostname' => 'gameliftstreams.sa-east-1.api.aws', ], 'us-east-1' => [ 'hostname' => 'gameliftstreams.us-east-1.api.aws', ], 'us-east-2' => [ 'hostname' => 'gameliftstreams.us-east-2.api.aws', ], 'us-west-1' => [ 'hostname' => 'gameliftstreams.us-west-1.api.aws', ], 'us-west-2' => [ 'hostname' => 'gameliftstreams.us-west-2.api.aws', ], ], ], 'geo' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'glacier' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'glacier-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'glacier-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'glacier-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'glacier-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'glacier-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'glacier-fips.us-west-2.amazonaws.com', ], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'glacier-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'glacier-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'glacier-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'glacier-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'globalaccelerator' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'globalaccelerator-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'glue' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'glue.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'glue.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'glue.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'glue.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'glue.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'glue.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'glue.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'glue.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'glue.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'glue.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'glue.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'glue.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'glue.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'glue.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'glue.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'glue.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'glue.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'glue.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'glue.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'glue.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'glue.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'glue.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'glue.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'glue-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'glue-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'glue-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'glue-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'glue.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'glue.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'glue.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'glue.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'glue.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'glue-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'glue-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'glue.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'glue-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'glue-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'glue.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'glue-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'glue-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'glue.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'glue-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'glue-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'glue.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'grafana' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'grafana.ap-northeast-1.amazonaws.com', ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'grafana.ap-northeast-2.amazonaws.com', ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'grafana.ap-southeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'grafana.ap-southeast-2.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'grafana.eu-central-1.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'grafana.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'grafana.eu-west-2.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'grafana.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'grafana.us-east-2.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'grafana.us-west-2.amazonaws.com', ], ], ], 'greengrass' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'greengrass-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'greengrass-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'greengrass-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'greengrass-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'greengrass-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'greengrass-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'greengrass-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'greengrass-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], 'isRegionalized' => true, ], 'groundstation' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'groundstation-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'groundstation-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'groundstation-fips.us-west-2.amazonaws.com', ], 'me-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'groundstation-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'groundstation-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'groundstation-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'groundstation-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'groundstation-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'groundstation-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], ], ], 'guardduty' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'guardduty-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'guardduty-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'guardduty-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'guardduty-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'guardduty-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'guardduty-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'guardduty-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'guardduty-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'guardduty-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'guardduty-fips.us-west-2.amazonaws.com', ], ], 'isRegionalized' => true, ], 'health' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'sslCommonName' => 'health.us-east-1.amazonaws.com', ], 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'global.health.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'health-fips.us-east-2.amazonaws.com', ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'health-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'healthlake' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-south-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'iam' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'iam.amazonaws.com', 'variants' => [ [ 'hostname' => 'iam-fips.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'iam.global.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'aws-global-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'iam-fips.amazonaws.com', ], 'iam' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'iam-fips.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'iam-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'iam-fips.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'identity-chime' => [ 'endpoints' => [ 'eu-central-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'identity-chime-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'identity-chime-fips.us-east-1.amazonaws.com', ], ], ], 'identitystore' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'importexport' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', 'service' => 'IngestionService', ], 'hostname' => 'importexport.amazonaws.com', 'signatureVersions' => [ 'v2', 'v4', ], ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'ingest.timestream' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'ingest-fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ingest.timestream-fips.us-east-1.amazonaws.com', ], 'ingest-fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ingest.timestream-fips.us-east-2.amazonaws.com', ], 'ingest-fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ingest.timestream-fips.us-west-2.amazonaws.com', ], 'ingest-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ingest.timestream-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ingest-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ingest.timestream-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ingest-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ingest.timestream-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'inspector' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'inspector-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'inspector-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'inspector-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'inspector-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'inspector-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'inspector-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'inspector-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'inspector-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'inspector2' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'inspector2-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'inspector2-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'inspector2-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'inspector2-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'inspector2-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'inspector2-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'inspector2-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'inspector2-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'internetmonitor' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'hostname' => 'internetmonitor.af-south-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'hostname' => 'internetmonitor.ap-east-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 'internetmonitor.ap-northeast-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'hostname' => 'internetmonitor.ap-northeast-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'hostname' => 'internetmonitor.ap-northeast-3.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'hostname' => 'internetmonitor.ap-south-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'hostname' => 'internetmonitor.ap-south-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'hostname' => 'internetmonitor.ap-southeast-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'hostname' => 'internetmonitor.ap-southeast-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'hostname' => 'internetmonitor.ap-southeast-3.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'hostname' => 'internetmonitor.ap-southeast-4.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'hostname' => 'internetmonitor.ap-southeast-5.api.aws', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'hostname' => 'internetmonitor.ap-southeast-7.api.aws', ], 'ca-central-1' => [ 'hostname' => 'internetmonitor.ca-central-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'internetmonitor-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'internetmonitor.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'hostname' => 'internetmonitor.ca-west-1.api.aws', ], 'eu-central-1' => [ 'hostname' => 'internetmonitor.eu-central-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'hostname' => 'internetmonitor.eu-central-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'hostname' => 'internetmonitor.eu-north-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'hostname' => 'internetmonitor.eu-south-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'hostname' => 'internetmonitor.eu-south-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'hostname' => 'internetmonitor.eu-west-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'hostname' => 'internetmonitor.eu-west-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'hostname' => 'internetmonitor.eu-west-3.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'hostname' => 'internetmonitor.il-central-1.api.aws', ], 'me-central-1' => [ 'hostname' => 'internetmonitor.me-central-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'hostname' => 'internetmonitor.me-south-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'hostname' => 'internetmonitor.mx-central-1.api.aws', ], 'sa-east-1' => [ 'hostname' => 'internetmonitor.sa-east-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'hostname' => 'internetmonitor.us-east-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'internetmonitor-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'internetmonitor.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'hostname' => 'internetmonitor.us-east-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'internetmonitor-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'internetmonitor.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'hostname' => 'internetmonitor.us-west-1.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'internetmonitor-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'internetmonitor.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'hostname' => 'internetmonitor.us-west-2.api.aws', 'variants' => [ [ 'hostname' => 'internetmonitor-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'internetmonitor-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'internetmonitor.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'iot' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'iot-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'deprecated' => true, 'hostname' => 'iot-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'deprecated' => true, 'hostname' => 'iot-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'deprecated' => true, 'hostname' => 'iot-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'deprecated' => true, 'hostname' => 'iot-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'deprecated' => true, 'hostname' => 'iot-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'iot-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'iot-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'iot-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'iot-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iotfleetwise' => [ 'endpoints' => [ 'ap-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], ], ], 'iotsecuredtunneling' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-west-2.amazonaws.com', ], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iotsitewise' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'iotsitewise-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-west-1' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'iotsitewise-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'iotsitewise-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'iotsitewise-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'iotsitewise-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'iotsitewise-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'iotsitewise-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'iotsitewise-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iotthingsgraph' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'iotthingsgraph', ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-2' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'iottwinmaker' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'api-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'api.iottwinmaker.ap-northeast-1.amazonaws.com', ], 'api-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'api.iottwinmaker.ap-northeast-2.amazonaws.com', ], 'api-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'api.iottwinmaker.ap-south-1.amazonaws.com', ], 'api-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'api.iottwinmaker.ap-southeast-1.amazonaws.com', ], 'api-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'api.iottwinmaker.ap-southeast-2.amazonaws.com', ], 'api-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'api.iottwinmaker.eu-central-1.amazonaws.com', ], 'api-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'api.iottwinmaker.eu-west-1.amazonaws.com', ], 'api-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'api.iottwinmaker.us-east-1.amazonaws.com', ], 'api-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'api.iottwinmaker.us-west-2.amazonaws.com', ], 'data-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'data.iottwinmaker.ap-northeast-1.amazonaws.com', ], 'data-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'data.iottwinmaker.ap-northeast-2.amazonaws.com', ], 'data-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'data.iottwinmaker.ap-south-1.amazonaws.com', ], 'data-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'data.iottwinmaker.ap-southeast-1.amazonaws.com', ], 'data-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'data.iottwinmaker.ap-southeast-2.amazonaws.com', ], 'data-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'data.iottwinmaker.eu-central-1.amazonaws.com', ], 'data-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'data.iottwinmaker.eu-west-1.amazonaws.com', ], 'data-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'data.iottwinmaker.us-east-1.amazonaws.com', ], 'data-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'data.iottwinmaker.us-west-2.amazonaws.com', ], 'eu-central-1' => [], 'eu-west-1' => [], 'fips-api-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'api.iottwinmaker-fips.us-east-1.amazonaws.com', ], 'fips-api-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'api.iottwinmaker-fips.us-west-2.amazonaws.com', ], 'fips-data-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'data.iottwinmaker-fips.us-east-1.amazonaws.com', ], 'fips-data-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'data.iottwinmaker-fips.us-west-2.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'iottwinmaker-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'iottwinmaker-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'iottwinmaker-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'iottwinmaker-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iotwireless' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'api.iotwireless.ap-northeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'api.iotwireless.ap-southeast-2.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'api.iotwireless.eu-west-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'api.iotwireless.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'api.iotwireless.us-west-2.amazonaws.com', ], ], ], 'ivs' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'ivschat' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'ivsrealtime' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'kafka' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'kafka-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'kafka-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'kafka-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'kafka-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'kafka-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'kafka-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'kafka-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'kafka-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'kafka-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'kafka-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'kafka-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'kafka-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kafkaconnect' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'kendra' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'kendra-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'kendra-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'kendra-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'kendra-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'kendra-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'kendra-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'kendra-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'kendra-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kendra-ranking' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'hostname' => 'kendra-ranking.af-south-1.api.aws', ], 'ap-east-1' => [ 'hostname' => 'kendra-ranking.ap-east-1.api.aws', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 'kendra-ranking.ap-northeast-1.api.aws', ], 'ap-northeast-2' => [ 'hostname' => 'kendra-ranking.ap-northeast-2.api.aws', ], 'ap-northeast-3' => [ 'hostname' => 'kendra-ranking.ap-northeast-3.api.aws', ], 'ap-south-1' => [ 'hostname' => 'kendra-ranking.ap-south-1.api.aws', ], 'ap-south-2' => [ 'hostname' => 'kendra-ranking.ap-south-2.api.aws', ], 'ap-southeast-1' => [ 'hostname' => 'kendra-ranking.ap-southeast-1.api.aws', ], 'ap-southeast-2' => [ 'hostname' => 'kendra-ranking.ap-southeast-2.api.aws', ], 'ap-southeast-3' => [ 'hostname' => 'kendra-ranking.ap-southeast-3.api.aws', ], 'ap-southeast-4' => [ 'hostname' => 'kendra-ranking.ap-southeast-4.api.aws', ], 'ap-southeast-5' => [ 'hostname' => 'kendra-ranking.ap-southeast-5.api.aws', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'hostname' => 'kendra-ranking.ap-southeast-7.api.aws', ], 'ca-central-1' => [ 'hostname' => 'kendra-ranking.ca-central-1.api.aws', 'variants' => [ [ 'hostname' => 'kendra-ranking-fips.ca-central-1.api.aws', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'hostname' => 'kendra-ranking.ca-west-1.api.aws', ], 'eu-central-2' => [ 'hostname' => 'kendra-ranking.eu-central-2.api.aws', ], 'eu-north-1' => [ 'hostname' => 'kendra-ranking.eu-north-1.api.aws', ], 'eu-south-1' => [ 'hostname' => 'kendra-ranking.eu-south-1.api.aws', ], 'eu-south-2' => [ 'hostname' => 'kendra-ranking.eu-south-2.api.aws', ], 'eu-west-1' => [ 'hostname' => 'kendra-ranking.eu-west-1.api.aws', ], 'eu-west-3' => [ 'hostname' => 'kendra-ranking.eu-west-3.api.aws', ], 'il-central-1' => [ 'hostname' => 'kendra-ranking.il-central-1.api.aws', ], 'me-central-1' => [ 'hostname' => 'kendra-ranking.me-central-1.api.aws', ], 'me-south-1' => [ 'hostname' => 'kendra-ranking.me-south-1.api.aws', ], 'mx-central-1' => [ 'hostname' => 'kendra-ranking.mx-central-1.api.aws', ], 'sa-east-1' => [ 'hostname' => 'kendra-ranking.sa-east-1.api.aws', ], 'us-east-1' => [ 'hostname' => 'kendra-ranking.us-east-1.api.aws', 'variants' => [ [ 'hostname' => 'kendra-ranking-fips.us-east-1.api.aws', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'hostname' => 'kendra-ranking.us-east-2.api.aws', 'variants' => [ [ 'hostname' => 'kendra-ranking-fips.us-east-2.api.aws', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'hostname' => 'kendra-ranking.us-west-1.api.aws', ], 'us-west-2' => [ 'hostname' => 'kendra-ranking.us-west-2.api.aws', 'variants' => [ [ 'hostname' => 'kendra-ranking-fips.us-west-2.api.aws', 'tags' => [ 'fips', ], ], ], ], ], ], 'kinesis' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'kinesis-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'kinesis-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'kinesis-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'kinesis-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'kinesis-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'kinesis-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'kinesis-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'kinesis-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kinesisanalytics' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kinesisvideo' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'kms' => [ 'endpoints' => [ 'ProdFips' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-central-2.amazonaws.com', ], 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.af-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'af-south-1-fips' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.af-south-1.amazonaws.com', ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-1-fips' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-east-1.amazonaws.com', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-northeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-1-fips' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-northeast-1.amazonaws.com', ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-northeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-2-fips' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-northeast-2.amazonaws.com', ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-northeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-3-fips' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-northeast-3.amazonaws.com', ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-1-fips' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-south-1.amazonaws.com', ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-2-fips' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-south-2.amazonaws.com', ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-southeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-1-fips' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-southeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-southeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-2-fips' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-southeast-2.amazonaws.com', ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-southeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-3-fips' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-southeast-3.amazonaws.com', ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-southeast-4.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-4-fips' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-southeast-4.amazonaws.com', ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-southeast-5.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-5-fips' => [ 'credentialScope' => [ 'region' => 'ap-southeast-5', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-southeast-5.amazonaws.com', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ap-southeast-7.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-7-fips' => [ 'credentialScope' => [ 'region' => 'ap-southeast-7', ], 'deprecated' => true, 'hostname' => 'kms-fips.ap-southeast-7.amazonaws.com', ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1-fips' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-central-1.amazonaws.com', ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-central-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-2-fips' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-central-2.amazonaws.com', ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-north-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-north-1-fips' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-north-1.amazonaws.com', ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-1-fips' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-south-1.amazonaws.com', ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-2-fips' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-south-2.amazonaws.com', ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-1-fips' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-2-fips' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-west-2.amazonaws.com', ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-west-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-3-fips' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-west-3.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.il-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'il-central-1-fips' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.il-central-1.amazonaws.com', ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.me-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-central-1-fips' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.me-central-1.amazonaws.com', ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.me-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-south-1-fips' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.me-south-1.amazonaws.com', ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.mx-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'mx-central-1-fips' => [ 'credentialScope' => [ 'region' => 'mx-central-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.mx-central-1.amazonaws.com', ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.sa-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'sa-east-1-fips' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.sa-east-1.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-west-2.amazonaws.com', ], ], ], 'lakeformation' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'lakeformation.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'lakeformation-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'lakeformation-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'lakeformation-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'lakeformation-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lakeformation-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'lakeformation.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lakeformation-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'lakeformation.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lakeformation-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'lakeformation.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'lakeformation-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lakeformation-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'lakeformation.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'lambda' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'lambda.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'lambda.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'lambda.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'lambda.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'lambda-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'lambda-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'lambda-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'lambda-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'lambda.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'lambda.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'lambda.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'lambda.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'lambda.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'lambda-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lambda.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'lambda-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lambda.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'lambda-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lambda.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'lambda-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lambda.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'license-manager' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'license-manager-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'license-manager-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'license-manager-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'license-manager-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'license-manager-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'license-manager-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'license-manager-linux-subscriptions' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'license-manager-linux-subscriptions-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'license-manager-linux-subscriptions-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'license-manager-linux-subscriptions-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'license-manager-linux-subscriptions-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-linux-subscriptions-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'license-manager-linux-subscriptions-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-linux-subscriptions-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'license-manager-linux-subscriptions-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'license-manager-user-subscriptions' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'license-manager-user-subscriptions-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'license-manager-user-subscriptions-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'license-manager-user-subscriptions-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'license-manager-user-subscriptions-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-user-subscriptions-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'license-manager-user-subscriptions-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-user-subscriptions-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'license-manager-user-subscriptions-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'lightsail' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'logs' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'logs.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'logs.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'logs.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'logs.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'logs.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'logs.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'logs.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'logs.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'logs.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'logs.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'logs.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'logs-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'logs-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'logs.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'logs.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'logs.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'logs.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'logs.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'logs.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'logs.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'logs.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'logs-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'logs-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'logs-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'logs-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'logs-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'logs-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'logs.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'logs.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'logs.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'logs.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'logs-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'logs-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'logs-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'logs-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'lookoutequipment' => [ 'endpoints' => [ 'ap-northeast-2' => [], 'eu-west-1' => [], 'us-east-1' => [], ], ], 'm2' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'deprecated' => true, ], 'fips-us-east-1' => [ 'deprecated' => true, ], 'fips-us-east-2' => [ 'deprecated' => true, ], 'fips-us-west-1' => [ 'deprecated' => true, ], 'fips-us-west-2' => [ 'deprecated' => true, ], 'il-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], ], ], 'machinelearning' => [ 'endpoints' => [ 'eu-west-1' => [], 'us-east-1' => [], ], ], 'macie2' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'macie2.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'macie2.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'macie2.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'macie2.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'macie2.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'macie2.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'macie2.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'macie2.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'macie2.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'macie2.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'macie2.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'macie2.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'macie2.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'macie2.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'macie2.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'macie2-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'macie2-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'macie2-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'macie2-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'macie2.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'macie2.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'macie2.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'macie2-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'macie2-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'macie2.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'macie2-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'macie2-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'macie2.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'macie2-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'macie2-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'macie2.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'macie2-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'macie2-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'macie2.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'managedblockchain' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], ], ], 'managedblockchain-query' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'marketplacecommerceanalytics' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'media-pipelines-chime' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-2' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'media-pipelines-chime-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'media-pipelines-chime-fips.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'media-pipelines-chime-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'media-pipelines-chime-fips.us-west-2.amazonaws.com', ], ], ], 'mediaconnect' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'mediaconvert' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'mediaconvert-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'mediaconvert.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'mediaconvert-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'mediaconvert-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'mediaconvert-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'mediaconvert-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'mediaconvert-fips.us-west-2.amazonaws.com', ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'mediaconvert-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'mediaconvert.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'mediaconvert-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'mediaconvert-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'mediaconvert.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'mediaconvert-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'mediaconvert.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'mediaconvert-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'mediaconvert-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'mediaconvert.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'medialive' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'medialive-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'medialive-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'medialive-fips.us-west-2.amazonaws.com', ], 'me-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'medialive-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'medialive-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'medialive-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'mediapackage' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-4' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'mediapackage-vod' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-4' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'mediapackagev2' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'mediapackagev2-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'mediapackagev2-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'mediapackagev2-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'mediapackagev2-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'mediapackagev2-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'mediapackagev2-fips.us-west-2.amazonaws.com', ], 'me-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'mediapackagev2-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'mediapackagev2-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'mediapackagev2-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'mediapackagev2-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'mediastore' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'meetings-chime' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'meetings-chime-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'meetings-chime-fips.ca-central-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-west-2' => [], 'il-central-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'meetings-chime-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'meetings-chime-fips.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'meetings-chime-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'meetings-chime-fips.us-west-2.amazonaws.com', ], ], ], 'memory-db' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'memory-db-fips.us-west-1.amazonaws.com', ], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'messaging-chime' => [ 'endpoints' => [ 'eu-central-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'messaging-chime-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'messaging-chime-fips.us-east-1.amazonaws.com', ], ], ], 'metering.marketplace' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'aws-marketplace', ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'metrics-fips.sagemaker.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'metrics-fips.sagemaker.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'metrics-fips.sagemaker.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'metrics-fips.sagemaker.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'metrics-fips.sagemaker.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'metrics-fips.sagemaker.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'metrics-fips.sagemaker.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'metrics-fips.sagemaker.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'metrics-fips.sagemaker.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'metrics-fips.sagemaker.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'metrics-fips.sagemaker.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'metrics-fips.sagemaker.us-west-2.amazonaws.com', ], ], ], 'mgh' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'mgn' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'mgn-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'mgn-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'mgn-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'mgn-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'mgn-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'mgn-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'mgn-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'mgn-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'migrationhub-orchestrator' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'migrationhub-strategy' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'mobileanalytics' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'models-v2-lex' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'models.lex' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'lex', ], 'variants' => [ [ 'hostname' => 'models-fips.lex.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'models-fips.lex.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'models-fips.lex.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'models-fips.lex.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'models-fips.lex.us-west-2.amazonaws.com', ], ], ], 'monitoring' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'monitoring-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'monitoring-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'monitoring-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'monitoring-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'monitoring-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'monitoring-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'monitoring-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'monitoring-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'mq' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'mq-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'mq-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'mq-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'mq-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'mq-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'mq-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'mq-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'mq-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'mturk-requester' => [ 'endpoints' => [ 'sandbox' => [ 'hostname' => 'mturk-requester-sandbox.us-east-1.amazonaws.com', ], 'us-east-1' => [], ], 'isRegionalized' => false, ], 'neptune' => [ 'endpoints' => [ 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'rds.ap-east-1.amazonaws.com', ], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'rds.ap-northeast-1.amazonaws.com', ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'rds.ap-northeast-2.amazonaws.com', ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'rds.ap-south-1.amazonaws.com', ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'rds.ap-southeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'rds.ap-southeast-2.amazonaws.com', ], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'rds.ca-central-1.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'rds.eu-central-1.amazonaws.com', ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'rds.eu-north-1.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'rds.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'rds.eu-west-2.amazonaws.com', ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'rds.eu-west-3.amazonaws.com', ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'rds.me-south-1.amazonaws.com', ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'rds.sa-east-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'rds.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'rds.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'rds.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'rds.us-west-2.amazonaws.com', ], ], ], 'network-firewall' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'network-firewall-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'network-firewall-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'network-firewall-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'network-firewall-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'network-firewall-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'network-firewall-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'network-firewall-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'network-firewall-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'network-firewall-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'network-firewall-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'networkmanager' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'networkmanager.us-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'networkmanager-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'networkmanager-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'networkmanager.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-aws-global' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'networkmanager-fips.us-west-2.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'notifications' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'hostname' => 'notifications.af-south-1.api.aws', ], 'ap-east-1' => [ 'hostname' => 'notifications.ap-east-1.api.aws', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 'notifications.ap-northeast-1.api.aws', ], 'ap-northeast-2' => [ 'hostname' => 'notifications.ap-northeast-2.api.aws', ], 'ap-northeast-3' => [ 'hostname' => 'notifications.ap-northeast-3.api.aws', ], 'ap-south-1' => [ 'hostname' => 'notifications.ap-south-1.api.aws', ], 'ap-south-2' => [ 'hostname' => 'notifications.ap-south-2.api.aws', ], 'ap-southeast-1' => [ 'hostname' => 'notifications.ap-southeast-1.api.aws', ], 'ap-southeast-2' => [ 'hostname' => 'notifications.ap-southeast-2.api.aws', ], 'ap-southeast-3' => [ 'hostname' => 'notifications.ap-southeast-3.api.aws', ], 'ap-southeast-4' => [ 'hostname' => 'notifications.ap-southeast-4.api.aws', ], 'ap-southeast-5' => [ 'hostname' => 'notifications.ap-southeast-5.api.aws', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'hostname' => 'notifications.ap-southeast-7.api.aws', ], 'ca-central-1' => [ 'hostname' => 'notifications.ca-central-1.api.aws', ], 'ca-west-1' => [ 'hostname' => 'notifications.ca-west-1.api.aws', ], 'eu-central-1' => [ 'hostname' => 'notifications.eu-central-1.api.aws', ], 'eu-central-2' => [ 'hostname' => 'notifications.eu-central-2.api.aws', ], 'eu-north-1' => [ 'hostname' => 'notifications.eu-north-1.api.aws', ], 'eu-south-1' => [ 'hostname' => 'notifications.eu-south-1.api.aws', ], 'eu-south-2' => [ 'hostname' => 'notifications.eu-south-2.api.aws', ], 'eu-west-1' => [ 'hostname' => 'notifications.eu-west-1.api.aws', ], 'eu-west-2' => [ 'hostname' => 'notifications.eu-west-2.api.aws', ], 'eu-west-3' => [ 'hostname' => 'notifications.eu-west-3.api.aws', ], 'il-central-1' => [ 'hostname' => 'notifications.il-central-1.api.aws', ], 'me-central-1' => [ 'hostname' => 'notifications.me-central-1.api.aws', ], 'me-south-1' => [ 'hostname' => 'notifications.me-south-1.api.aws', ], 'mx-central-1' => [ 'hostname' => 'notifications.mx-central-1.api.aws', ], 'sa-east-1' => [ 'hostname' => 'notifications.sa-east-1.api.aws', ], 'us-east-1' => [ 'hostname' => 'notifications.us-east-1.api.aws', ], 'us-east-2' => [ 'hostname' => 'notifications.us-east-2.api.aws', ], 'us-west-1' => [ 'hostname' => 'notifications.us-west-1.api.aws', ], 'us-west-2' => [ 'hostname' => 'notifications.us-west-2.api.aws', ], ], ], 'notifications-contacts' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'notifications-contacts.us-east-1.api.aws', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'nova-act' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'oam' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'oidc' => [ 'endpoints' => [ 'af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 'oidc.af-south-1.amazonaws.com', ], 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'oidc.ap-east-1.amazonaws.com', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'oidc.ap-northeast-1.amazonaws.com', ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'oidc.ap-northeast-2.amazonaws.com', ], 'ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'oidc.ap-northeast-3.amazonaws.com', ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'oidc.ap-south-1.amazonaws.com', ], 'ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'oidc.ap-south-2.amazonaws.com', ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'oidc.ap-southeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'oidc.ap-southeast-2.amazonaws.com', ], 'ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'hostname' => 'oidc.ap-southeast-3.amazonaws.com', ], 'ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'hostname' => 'oidc.ap-southeast-4.amazonaws.com', ], 'ap-southeast-5' => [ 'credentialScope' => [ 'region' => 'ap-southeast-5', ], 'hostname' => 'oidc.ap-southeast-5.amazonaws.com', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'oidc.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'hostname' => 'oidc.ca-west-1.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'oidc.eu-central-1.amazonaws.com', ], 'eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'oidc.eu-central-2.amazonaws.com', ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'oidc.eu-north-1.amazonaws.com', ], 'eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'oidc.eu-south-1.amazonaws.com', ], 'eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'oidc.eu-south-2.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'oidc.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'oidc.eu-west-2.amazonaws.com', ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'oidc.eu-west-3.amazonaws.com', ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 'oidc.il-central-1.amazonaws.com', ], 'me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'hostname' => 'oidc.me-central-1.amazonaws.com', ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'oidc.me-south-1.amazonaws.com', ], 'mx-central-1' => [], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'oidc.sa-east-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'oidc.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'oidc.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'oidc.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'oidc.us-west-2.amazonaws.com', ], ], ], 'omics' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'omics.ap-southeast-1.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'omics.eu-central-1.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'omics.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'omics.eu-west-2.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'omics-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'omics-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 'omics.il-central-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'omics.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'omics-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'omics.us-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'omics-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'organizations' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'organizations.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'organizations-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'organizations-fips.us-east-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'osis' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'outposts' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'outposts-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'outposts-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'outposts-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'outposts-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'outposts-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'outposts-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'outposts-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'outposts-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'outposts-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'outposts-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'participant.connect' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-2' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'participant.connect-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'participant.connect-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'participant.connect-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'participant.connect-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'partnercentral-channel' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'personalize' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'pi' => [ 'endpoints' => [ 'af-south-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'pi-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'pi-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'pi-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'pi-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'pi-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'pi-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'pinpoint' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'mobiletargeting', ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'pinpoint.ca-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'pinpoint-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'pinpoint-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'pinpoint-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'pinpoint-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'pinpoint-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'pinpoint.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'pinpoint-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'pinpoint.us-east-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'pinpoint-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'pinpoint.us-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'pinpoint-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'pipes' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'polly' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'polly.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'polly.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'polly.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'polly.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'polly.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'polly.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'polly.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'polly.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'polly.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'polly-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'polly-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'polly.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'polly.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'polly.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'polly.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'polly.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'polly.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'polly.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'polly-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'polly-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'polly-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'polly-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'polly-fips.us-west-2.amazonaws.com', ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'polly.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'polly.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'polly-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'polly-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'polly.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'polly-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'polly-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'polly.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'polly-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'polly-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'polly.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'polly-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'polly-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'polly.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'portal.sso' => [ 'endpoints' => [ 'af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 'portal.sso.af-south-1.amazonaws.com', ], 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'portal.sso.ap-east-1.amazonaws.com', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'portal.sso.ap-northeast-1.amazonaws.com', ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'portal.sso.ap-northeast-2.amazonaws.com', ], 'ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'portal.sso.ap-northeast-3.amazonaws.com', ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'portal.sso.ap-south-1.amazonaws.com', ], 'ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'portal.sso.ap-south-2.amazonaws.com', ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'portal.sso.ap-southeast-1.amazonaws.com', ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'portal.sso.ap-southeast-2.amazonaws.com', ], 'ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'hostname' => 'portal.sso.ap-southeast-3.amazonaws.com', ], 'ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'hostname' => 'portal.sso.ap-southeast-4.amazonaws.com', ], 'ap-southeast-5' => [ 'credentialScope' => [ 'region' => 'ap-southeast-5', ], 'hostname' => 'portal.sso.ap-southeast-5.amazonaws.com', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'portal.sso.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'hostname' => 'portal.sso.ca-west-1.amazonaws.com', ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'portal.sso.eu-central-1.amazonaws.com', ], 'eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'portal.sso.eu-central-2.amazonaws.com', ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'portal.sso.eu-north-1.amazonaws.com', ], 'eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'portal.sso.eu-south-1.amazonaws.com', ], 'eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'portal.sso.eu-south-2.amazonaws.com', ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'portal.sso.eu-west-1.amazonaws.com', ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'portal.sso.eu-west-2.amazonaws.com', ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'portal.sso.eu-west-3.amazonaws.com', ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 'portal.sso.il-central-1.amazonaws.com', ], 'me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'hostname' => 'portal.sso.me-central-1.amazonaws.com', ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'portal.sso.me-south-1.amazonaws.com', ], 'mx-central-1' => [], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'portal.sso.sa-east-1.amazonaws.com', ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'portal.sso.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'portal.sso.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'portal.sso.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'portal.sso.us-west-2.amazonaws.com', ], ], ], 'profile' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'profile-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'profile-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'profile-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'profile-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'profile-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'profile-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'proton' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'qbusiness' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'hostname' => 'qbusiness.af-south-1.api.aws', ], 'ap-east-1' => [ 'hostname' => 'qbusiness.ap-east-1.api.aws', ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 'qbusiness.ap-northeast-1.api.aws', ], 'ap-northeast-2' => [ 'hostname' => 'qbusiness.ap-northeast-2.api.aws', ], 'ap-northeast-3' => [ 'hostname' => 'qbusiness.ap-northeast-3.api.aws', ], 'ap-south-1' => [ 'hostname' => 'qbusiness.ap-south-1.api.aws', ], 'ap-south-2' => [ 'hostname' => 'qbusiness.ap-south-2.api.aws', ], 'ap-southeast-1' => [ 'hostname' => 'qbusiness.ap-southeast-1.api.aws', ], 'ap-southeast-2' => [ 'hostname' => 'qbusiness.ap-southeast-2.api.aws', ], 'ap-southeast-3' => [ 'hostname' => 'qbusiness.ap-southeast-3.api.aws', ], 'ap-southeast-4' => [ 'hostname' => 'qbusiness.ap-southeast-4.api.aws', ], 'ap-southeast-5' => [ 'hostname' => 'qbusiness.ap-southeast-5.api.aws', ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'hostname' => 'qbusiness.ap-southeast-7.api.aws', ], 'ca-central-1' => [ 'hostname' => 'qbusiness.ca-central-1.api.aws', ], 'ca-west-1' => [ 'hostname' => 'qbusiness.ca-west-1.api.aws', ], 'eu-central-1' => [ 'hostname' => 'qbusiness.eu-central-1.api.aws', ], 'eu-central-2' => [ 'hostname' => 'qbusiness.eu-central-2.api.aws', ], 'eu-north-1' => [ 'hostname' => 'qbusiness.eu-north-1.api.aws', ], 'eu-south-1' => [ 'hostname' => 'qbusiness.eu-south-1.api.aws', ], 'eu-south-2' => [ 'hostname' => 'qbusiness.eu-south-2.api.aws', ], 'eu-west-1' => [ 'hostname' => 'qbusiness.eu-west-1.api.aws', ], 'eu-west-2' => [ 'hostname' => 'qbusiness.eu-west-2.api.aws', ], 'eu-west-3' => [ 'hostname' => 'qbusiness.eu-west-3.api.aws', ], 'il-central-1' => [ 'hostname' => 'qbusiness.il-central-1.api.aws', ], 'me-central-1' => [ 'hostname' => 'qbusiness.me-central-1.api.aws', ], 'me-south-1' => [ 'hostname' => 'qbusiness.me-south-1.api.aws', ], 'mx-central-1' => [ 'hostname' => 'qbusiness.mx-central-1.api.aws', ], 'sa-east-1' => [ 'hostname' => 'qbusiness.sa-east-1.api.aws', ], 'us-east-1' => [ 'hostname' => 'qbusiness.us-east-1.api.aws', ], 'us-east-2' => [ 'hostname' => 'qbusiness.us-east-2.api.aws', ], 'us-west-1' => [ 'hostname' => 'qbusiness.us-west-1.api.aws', ], 'us-west-2' => [ 'hostname' => 'qbusiness.us-west-2.api.aws', ], ], ], 'query.timestream' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'quicksight' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'ram' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ram-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ram-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ram-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'ram-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ram-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ram-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ram-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ram-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ram-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ram-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ram-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ram-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], ], ], 'rbin' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'rbin.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'rbin.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'rbin.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'rbin.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'rbin.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'rbin.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'rbin.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'rds' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'rds-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'rds-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'rds-fips.ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.ca-central-1.amazonaws.com', ], 'rds-fips.ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.ca-west-1.amazonaws.com', ], 'rds-fips.us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-east-1.amazonaws.com', ], 'rds-fips.us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-east-2.amazonaws.com', ], 'rds-fips.us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-west-1.amazonaws.com', ], 'rds-fips.us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-west-2.amazonaws.com', ], 'rds.ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rds-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rds.ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rds-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rds.us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rds-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rds.us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rds-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rds.us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rds-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rds.us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rds-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'sa-east-1' => [], 'us-east-1' => [ 'sslCommonName' => '{service}.{dnsSuffix}', 'variants' => [ [ 'hostname' => 'rds-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'rds-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'rds-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'rds-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'rds-fips.us-west-2.amazonaws.com', ], ], ], 'rds-data' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'rds-data-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'rds-data-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'rds-data-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'rds-data-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'rds-data-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'rds-data-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'rds-data-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'rds-data-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'redshift' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'redshift-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'redshift-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'redshift-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'redshift-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'redshift-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'redshift-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'redshift-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'redshift-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'redshift-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'redshift-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'redshift-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'redshift-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'redshift-serverless' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'redshift-serverless-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'redshift-serverless-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'redshift-serverless-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'redshift-serverless-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'redshift-serverless-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'redshift-serverless-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'redshift-serverless-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'redshift-serverless-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'redshift-serverless-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'redshift-serverless-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'rekognition' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'rekognition.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'rekognition.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'rekognition.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'rekognition.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'rekognition.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'rekognition-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rekognition-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rekognition.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.ca-central-1.amazonaws.com', ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'rekognition.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'rekognition.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'rekognition.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'rekognition.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'rekognition.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'rekognition-fips.ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.ca-central-1.amazonaws.com', ], 'rekognition-fips.us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-east-1.amazonaws.com', ], 'rekognition-fips.us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-east-2.amazonaws.com', ], 'rekognition-fips.us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-west-1.amazonaws.com', ], 'rekognition-fips.us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-west-2.amazonaws.com', ], 'rekognition.ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rekognition-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rekognition.us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rekognition-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rekognition.us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rekognition-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rekognition.us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rekognition-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'rekognition.us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rekognition-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'rekognition-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rekognition-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rekognition.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'rekognition-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rekognition-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rekognition.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'rekognition-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rekognition-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rekognition.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'rekognition-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rekognition-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rekognition.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-west-2.amazonaws.com', ], ], ], 'resiliencehub' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'resiliencehub.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'resource-explorer-2' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'resource-explorer-2-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resource-explorer-2-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'resource-explorer-2-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resource-explorer-2-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'resource-explorer-2-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'resource-explorer-2-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'resource-explorer-2-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'resource-explorer-2-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'resource-explorer-2-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'resource-explorer-2-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'resource-explorer-2-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resource-explorer-2-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'resource-explorer-2-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resource-explorer-2-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'resource-explorer-2-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resource-explorer-2-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'resource-explorer-2-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resource-explorer-2-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], ], ], 'resource-groups' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'resource-groups-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'resource-groups-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'resource-groups-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'resource-groups-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'resource-groups-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'resource-groups-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'resource-groups-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'resource-groups-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'rolesanywhere' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'rolesanywhere-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'rolesanywhere-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'rolesanywhere-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'rolesanywhere-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'rolesanywhere-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'rolesanywhere-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'rolesanywhere-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'rolesanywhere-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'route53' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'route53.amazonaws.com', 'variants' => [ [ 'hostname' => 'route53-fips.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'route53-fips.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'route53-recovery-control-config' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'route53-recovery-control-config.us-west-2.amazonaws.com', ], ], ], 'route53domains' => [ 'endpoints' => [ 'us-east-1' => [], ], ], 'route53profiles' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'route53profiles.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'route53profiles.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'route53resolver' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'route53resolver.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53resolver.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'route53resolver-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53resolver.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'route53resolver-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'route53resolver.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53resolver.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'route53resolver-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53resolver.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'route53resolver-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53resolver.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'route53resolver-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'route53resolver-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53resolver.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'route53resolver-fips.us-west-2.amazonaws.com', ], ], ], 'rum' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'runtime-v2-lex' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'runtime.lex' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'lex', ], 'variants' => [ [ 'hostname' => 'runtime-fips.lex.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.lex.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'runtime-fips.lex.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.lex.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'runtime-fips.lex.us-west-2.amazonaws.com', ], ], ], 'runtime.sagemaker' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.sagemaker.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.sagemaker.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'runtime-fips.sagemaker.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.sagemaker.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'runtime-fips.sagemaker.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.sagemaker.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'runtime-fips.sagemaker.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.sagemaker.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'runtime-fips.sagemaker.us-west-2.amazonaws.com', ], ], ], 's3' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}-fips.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.af-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'hostname' => 's3.ap-northeast-1.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3.dualstack.ap-northeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-northeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-northeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'hostname' => 's3.ap-southeast-1.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3.dualstack.ap-southeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'hostname' => 's3.ap-southeast-2.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3.dualstack.ap-southeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-southeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-southeast-4.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-southeast-5.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.ap-southeast-7.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 's3.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 's3-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-fips.dualstack.ca-central-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3.dualstack.ca-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 's3-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-fips.dualstack.ca-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3.dualstack.ca-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.eu-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.eu-central-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.eu-north-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.eu-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.eu-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'hostname' => 's3.eu-west-1.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3.dualstack.eu-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.eu-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.eu-west-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 's3-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 's3-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 's3-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 's3-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 's3-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 's3-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.il-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.me-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.me-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.mx-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 's3-external-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 's3-external-1.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], ], 'sa-east-1' => [ 'hostname' => 's3.sa-east-1.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3.dualstack.sa-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'hostname' => 's3.us-east-1.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3-fips.dualstack.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3.dualstack.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 's3-fips.dualstack.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3.dualstack.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'hostname' => 's3.us-west-1.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3-fips.dualstack.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3.dualstack.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'hostname' => 's3.us-west-2.amazonaws.com', 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'hostname' => 's3-fips.dualstack.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3.dualstack.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], ], 'isRegionalized' => true, 'partitionEndpoint' => 'aws-global', ], 's3-control' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}-fips.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 's3-control.af-south-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.af-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 's3-control.ap-east-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 's3-control.ap-northeast-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-northeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 's3-control.ap-northeast-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-northeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 's3-control.ap-northeast-3.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-northeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 's3-control.ap-south-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 's3-control.ap-south-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 's3-control.ap-southeast-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-southeast-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 's3-control.ap-southeast-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-southeast-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'hostname' => 's3-control.ap-southeast-3.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-southeast-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'hostname' => 's3-control.ap-southeast-4.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.ap-southeast-4.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 's3-control.ca-central-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control-fips.dualstack.ca-central-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control.dualstack.ca-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.ca-central-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], 'ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'hostname' => 's3-control.ca-west-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control-fips.dualstack.ca-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control.dualstack.ca-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.ca-west-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 's3-control.eu-central-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 's3-control.eu-central-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-central-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 's3-control.eu-north-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-north-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 's3-control.eu-south-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 's3-control.eu-south-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-south-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 's3-control.eu-west-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 's3-control.eu-west-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 's3-control.eu-west-3.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.eu-west-3.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 's3-control.il-central-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.il-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'hostname' => 's3-control.me-central-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.me-central-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 's3-control.me-south-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.me-south-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 's3-control.sa-east-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.sa-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 's3-control.us-east-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-east-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 's3-control.us-east-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-east-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-east-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 's3-control.us-west-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-west-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 's3-control.us-west-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-west-2.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-west-2.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], ], ], 's3-outposts' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'deprecated' => true, ], 'fips-us-east-1' => [ 'deprecated' => true, ], 'fips-us-east-2' => [ 'deprecated' => true, ], 'fips-us-west-1' => [ 'deprecated' => true, ], 'fips-us-west-2' => [ 'deprecated' => true, ], 'il-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], ], ], 'sagemaker-geospatial' => [ 'endpoints' => [ 'us-west-2' => [], ], ], 'savingsplans' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'savingsplans.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'scheduler' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'schemas' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'sdb' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'signatureVersions' => [ 'v2', ], ], 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-west-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'hostname' => 'sdb.amazonaws.com', ], 'us-west-1' => [], 'us-west-2' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'deprecated' => true, ], 'ca-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'deprecated' => true, ], 'eu-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'deprecated' => true, ], 'us-east-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'deprecated' => true, ], 'us-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'deprecated' => true, ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'deprecated' => true, ], ], ], 'securityhub' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'securityhub.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'securityhub.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'securityhub-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'securityhub-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'securityhub-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'securityhub-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'securityhub.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'securityhub-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securityhub.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'securityhub-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securityhub.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'securityhub-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securityhub.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'securityhub-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securityhub.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'securitylake' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'securitylake-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'securitylake-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'securitylake-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'securitylake-fips.us-west-2.amazonaws.com', ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'securitylake-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securitylake-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'securitylake-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securitylake-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'securitylake-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securitylake-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'securitylake-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securitylake-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], ], ], 'serverlessrepo' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-east-1' => [ 'protocols' => [ 'https', ], ], 'ap-northeast-1' => [ 'protocols' => [ 'https', ], ], 'ap-northeast-2' => [ 'protocols' => [ 'https', ], ], 'ap-south-1' => [ 'protocols' => [ 'https', ], ], 'ap-southeast-1' => [ 'protocols' => [ 'https', ], ], 'ap-southeast-2' => [ 'protocols' => [ 'https', ], ], 'ca-central-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'serverlessrepo-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'serverlessrepo-fips.ca-central-1.amazonaws.com', ], 'eu-central-1' => [ 'protocols' => [ 'https', ], ], 'eu-north-1' => [ 'protocols' => [ 'https', ], ], 'eu-west-1' => [ 'protocols' => [ 'https', ], ], 'eu-west-2' => [ 'protocols' => [ 'https', ], ], 'eu-west-3' => [ 'protocols' => [ 'https', ], ], 'me-south-1' => [ 'protocols' => [ 'https', ], ], 'sa-east-1' => [ 'protocols' => [ 'https', ], ], 'us-east-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'serverlessrepo-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'serverlessrepo-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'serverlessrepo-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'serverlessrepo-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'serverlessrepo-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'serverlessrepo-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'serverlessrepo-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'serverlessrepo-fips.us-west-2.amazonaws.com', ], ], ], 'servicecatalog' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-6' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'servicecatalog-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'servicecatalog-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'servicecatalog-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'servicecatalog-fips.us-west-2.amazonaws.com', ], ], ], 'servicecatalog-appregistry' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-appregistry-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'servicecatalog-appregistry-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'servicecatalog-appregistry-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'servicecatalog-appregistry-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'servicecatalog-appregistry-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'servicecatalog-appregistry-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-appregistry-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-appregistry-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-appregistry-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-appregistry-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'servicediscovery' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.us-west-2.amazonaws.com', ], ], ], 'servicequotas' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'shield' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'sslCommonName' => 'shield.us-east-1.amazonaws.com', ], 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'shield.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'shield-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'shield-fips.us-east-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'signer' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'signer-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'signer-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'signer-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'signer-fips.us-west-2.amazonaws.com', ], 'fips-verification-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'verification.signer-fips.us-east-1.amazonaws.com', ], 'fips-verification-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'verification.signer-fips.us-east-2.amazonaws.com', ], 'fips-verification-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'verification.signer-fips.us-west-1.amazonaws.com', ], 'fips-verification-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'verification.signer-fips.us-west-2.amazonaws.com', ], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'signer-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'signer-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'signer-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'signer-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'verification-af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 'verification.signer.af-south-1.amazonaws.com', ], 'verification-ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'verification.signer.ap-east-1.amazonaws.com', ], 'verification-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'verification.signer.ap-northeast-1.amazonaws.com', ], 'verification-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'verification.signer.ap-northeast-2.amazonaws.com', ], 'verification-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'verification.signer.ap-south-1.amazonaws.com', ], 'verification-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'verification.signer.ap-southeast-1.amazonaws.com', ], 'verification-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'verification.signer.ap-southeast-2.amazonaws.com', ], 'verification-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'verification.signer.ca-central-1.amazonaws.com', ], 'verification-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'verification.signer.eu-central-1.amazonaws.com', ], 'verification-eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'verification.signer.eu-north-1.amazonaws.com', ], 'verification-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'verification.signer.eu-south-1.amazonaws.com', ], 'verification-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'verification.signer.eu-west-1.amazonaws.com', ], 'verification-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'verification.signer.eu-west-2.amazonaws.com', ], 'verification-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'verification.signer.eu-west-3.amazonaws.com', ], 'verification-me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'verification.signer.me-south-1.amazonaws.com', ], 'verification-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'verification.signer.sa-east-1.amazonaws.com', ], 'verification-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'verification.signer.us-east-1.amazonaws.com', ], 'verification-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'verification.signer.us-east-2.amazonaws.com', ], 'verification-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'verification.signer.us-west-1.amazonaws.com', ], 'verification-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'verification.signer.us-west-2.amazonaws.com', ], ], ], 'sms-voice' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'sms-voice.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'sms-voice.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'snowball' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.af-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.af-south-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-northeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-northeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-northeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-south-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-southeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-southeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ap-southeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.eu-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.eu-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.eu-north-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.eu-north-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.eu-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.eu-south-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.eu-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.eu-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.eu-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.eu-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.eu-west-3.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.eu-west-3.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.af-south-1.amazonaws.com', ], 'fips-ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-east-1.amazonaws.com', ], 'fips-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-northeast-1.amazonaws.com', ], 'fips-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-northeast-2.amazonaws.com', ], 'fips-ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-northeast-3.amazonaws.com', ], 'fips-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-south-1.amazonaws.com', ], 'fips-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-southeast-1.amazonaws.com', ], 'fips-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-southeast-2.amazonaws.com', ], 'fips-ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ap-southeast-3.amazonaws.com', ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.ca-central-1.amazonaws.com', ], 'fips-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.eu-central-1.amazonaws.com', ], 'fips-eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.eu-north-1.amazonaws.com', ], 'fips-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.eu-south-1.amazonaws.com', ], 'fips-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.eu-west-1.amazonaws.com', ], 'fips-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'deprecated' => true, 'hostname' => 'snowball-fips.eu-west-2.amazonaws.com', ], 'fips-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'deprecated' => true, 'hostname' => 'snowball-fips.eu-west-3.amazonaws.com', ], 'fips-il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.il-central-1.amazonaws.com', ], 'fips-me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.me-central-1.amazonaws.com', ], 'fips-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.sa-east-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'snowball-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'snowball-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.il-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.il-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.me-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.me-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.sa-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.sa-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'sns' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'sns.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'sns.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'sns.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'sns.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'sns.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'sns.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'sns.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'sns.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'sns.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'sns.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'sns.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'sns.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'sns.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'sns.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'sns-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sns.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'sns.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'sns.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'sns.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'sns.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'sns.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'sns.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'sns.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'sns.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'sns-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'sns-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'sns-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'sns-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'sns-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'sns.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'sns.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'sns.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'sns.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'sns.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'sns-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sns.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'sns-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sns.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'sns-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sns.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'sns-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sns.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'sqs' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'sslCommonName' => '{region}.queue.{dnsSuffix}', ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'sqs.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'sqs.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'sqs-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sqs.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'sqs-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sqs.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'sqs.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'sqs-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'sqs-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'sqs-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'sqs-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'sqs-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'sqs-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'sqs.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'sqs.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'sqs.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'sqs.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'sqs.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'sslCommonName' => 'queue.{dnsSuffix}', 'variants' => [ [ 'hostname' => 'sqs-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sqs.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'sqs-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sqs.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'sqs-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sqs.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'sqs-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sqs.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'ssm' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ssm-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'ssm-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ssm-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ssm-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ssm-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ssm-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ssm-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ssm-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ssm-contacts' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ssm-contacts-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ssm-contacts-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ssm-contacts-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ssm-contacts-fips.us-west-2.amazonaws.com', ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-contacts-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ssm-contacts-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-contacts-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ssm-contacts-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ssm-incidents' => [ 'endpoints' => [ 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-incidents-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-incidents.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ssm-incidents-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ssm-incidents-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ssm-incidents-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ssm-incidents-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ssm-incidents-fips.us-west-2.amazonaws.com', ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-incidents-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-incidents.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-incidents-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-incidents.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-incidents-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-incidents.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ssm-incidents-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-incidents-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-incidents.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'ssm-quicksetup' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-quicksetup-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ssm-quicksetup-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ssm-quicksetup-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ssm-quicksetup-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ssm-quicksetup-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ssm-quicksetup-fips.us-west-2.amazonaws.com', ], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-quicksetup-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ssm-quicksetup-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-quicksetup-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ssm-quicksetup-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ssm-sap' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-sap-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-sap.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'ssm-sap-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'ssm-sap-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'ssm-sap-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'ssm-sap-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'ssm-sap-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-sap-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-sap.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-sap-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-sap.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm-sap-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-sap-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-sap.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'ssm-sap-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ssm-sap-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ssm-sap.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'sso' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'states' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'states-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'states-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'states-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'states-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'states-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'states-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'storagegateway' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.ca-central-1.amazonaws.com', ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.ca-west-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-west-2.amazonaws.com', ], ], ], 'streams.dynamodb' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'dynamodb', ], 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'local' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'localhost:8000', 'protocols' => [ 'http', ], ], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'sts' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'sts.amazonaws.com', ], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'sts-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'sts-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'sts-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'sts-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'sts-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'sts-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'sts-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'sts-fips.us-west-2.amazonaws.com', ], ], 'partitionEndpoint' => 'aws-global', ], 'support' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'support.us-east-1.amazonaws.com', ], ], 'partitionEndpoint' => 'aws-global', ], 'supportapp' => [ 'endpoints' => [ 'eu-west-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'swf' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'swf-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'swf-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'swf-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'swf-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'swf-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'swf-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'swf-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'swf-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'swf-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'swf-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'swf-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'swf-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'synthetics' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-3' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-northeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-2' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-3' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-southeast-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-4' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-southeast-4.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-southeast-5.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'variants' => [ [ 'hostname' => 'synthetics.ap-southeast-7.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.ca-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.ca-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-central-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'synthetics.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.il-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-central-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.me-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'mx-central-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.mx-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'tagging' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'tax' => [ 'endpoints' => [ 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'tax.us-east-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'textract' => [ 'endpoints' => [ 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'textract.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'textract.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'textract.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'textract.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'textract-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'textract-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'textract.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'textract.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-south-2' => [ 'variants' => [ [ 'hostname' => 'textract.eu-south-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'textract.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'textract.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'textract.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'textract-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'textract-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'textract-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'textract-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'textract-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'textract-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'textract-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'textract.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'textract-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'textract-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'textract.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'textract-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'textract-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'textract.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'textract-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'textract-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'textract.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'thinclient' => [ 'endpoints' => [ 'ap-south-1' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'tnb' => [ 'endpoints' => [ 'ap-northeast-2' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-south-2' => [], 'eu-west-3' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'transcribe' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'fips.transcribe.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'transcribe.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'transcribe.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribe-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribe.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'transcribe.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'transcribe.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.us-west-2.amazonaws.com', ], 'me-south-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.me-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'transcribe.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribe-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribe.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribe-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribe.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribe-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribe.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribe-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribe.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'transcribestreaming' => [ 'endpoints' => [ 'af-south-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.af-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-5' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribestreaming-fips.ca-central-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribestreaming.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-2' => [], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'transcribestreaming-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'transcribestreaming-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'transcribestreaming-fips.us-east-2.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'transcribestreaming-fips.us-west-2.amazonaws.com', ], 'mx-central-1' => [], 'sa-east-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.sa-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribestreaming-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribestreaming.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribestreaming-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribestreaming.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribestreaming-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribestreaming.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'transfer' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'transfer-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'transfer-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'transfer-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'transfer-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'transfer-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'transfer-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'translate' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'ap-east-1' => [ 'variants' => [ [ 'hostname' => 'translate.ap-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-1' => [ 'variants' => [ [ 'hostname' => 'translate.ap-northeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-northeast-2' => [ 'variants' => [ [ 'hostname' => 'translate.ap-northeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-south-1' => [ 'variants' => [ [ 'hostname' => 'translate.ap-south-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-1' => [ 'variants' => [ [ 'hostname' => 'translate.ap-southeast-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ap-southeast-2' => [ 'variants' => [ [ 'hostname' => 'translate.ap-southeast-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'translate.ca-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-central-1' => [ 'variants' => [ [ 'hostname' => 'translate.eu-central-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-north-1' => [ 'variants' => [ [ 'hostname' => 'translate.eu-north-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-1' => [ 'variants' => [ [ 'hostname' => 'translate.eu-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-2' => [ 'variants' => [ [ 'hostname' => 'translate.eu-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'eu-west-3' => [ 'variants' => [ [ 'hostname' => 'translate.eu-west-3.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'translate-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'translate-fips.us-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'translate.us-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'translate-fips.us-east-1.amazonaws.com', ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'translate-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'translate-fips.us-east-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'translate.us-east-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-east-2-fips' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'translate-fips.us-east-2.amazonaws.com', ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'translate-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'translate-fips.us-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'translate.us-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'translate-fips.us-west-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'translate-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'translate-fips.us-west-2.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'translate.us-west-2.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'translate-fips.us-west-2.amazonaws.com', ], ], ], 'trustedadvisor' => [ 'endpoints' => [ 'ap-northeast-2' => [], 'ap-southeast-2' => [], 'eu-west-1' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'trustedadvisor-fips.us-east-1.api.aws', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'trustedadvisor-fips.us-east-2.api.aws', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'trustedadvisor-fips.us-west-2.api.aws', ], 'us-east-1' => [], 'us-east-2' => [], 'us-west-2' => [], ], ], 'verifiedpermissions' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.ca-west-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'voice-chime' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'voice-chime-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1-fips' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'voice-chime-fips.ca-central-1.amazonaws.com', ], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'voice-chime-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'voice-chime-fips.us-east-1.amazonaws.com', ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'voice-chime-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2-fips' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'voice-chime-fips.us-west-2.amazonaws.com', ], ], ], 'voiceid' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'hostname' => 'voiceid-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'voiceid-fips.ca-central-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'voiceid-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'voiceid-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'voiceid-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'voiceid-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'vpc-lattice' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'waf' => [ 'endpoints' => [ 'aws' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'waf-fips.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'aws-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'waf-fips.amazonaws.com', ], 'aws-global' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'waf.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-fips.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'aws-global-fips' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'waf-fips.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-global', ], 'waf-regional' => [ 'endpoints' => [ 'af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 'waf-regional.af-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.af-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'waf-regional.ap-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'waf-regional.ap-northeast-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-northeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'waf-regional.ap-northeast-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-northeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'waf-regional.ap-northeast-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-northeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'waf-regional.ap-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'waf-regional.ap-south-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'waf-regional.ap-southeast-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-southeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'waf-regional.ap-southeast-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-southeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'hostname' => 'waf-regional.ap-southeast-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-southeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'hostname' => 'waf-regional.ap-southeast-4.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ap-southeast-4.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'waf-regional.ca-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'waf-regional.eu-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'waf-regional.eu-central-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-central-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'waf-regional.eu-north-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-north-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'waf-regional.eu-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'waf-regional.eu-south-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'waf-regional.eu-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'waf-regional.eu-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'waf-regional.eu-west-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.eu-west-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.af-south-1.amazonaws.com', ], 'fips-ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-east-1.amazonaws.com', ], 'fips-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-northeast-1.amazonaws.com', ], 'fips-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-northeast-2.amazonaws.com', ], 'fips-ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-northeast-3.amazonaws.com', ], 'fips-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-south-1.amazonaws.com', ], 'fips-ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-south-2.amazonaws.com', ], 'fips-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-southeast-1.amazonaws.com', ], 'fips-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-southeast-2.amazonaws.com', ], 'fips-ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-southeast-3.amazonaws.com', ], 'fips-ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ap-southeast-4.amazonaws.com', ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.ca-central-1.amazonaws.com', ], 'fips-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-central-1.amazonaws.com', ], 'fips-eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-central-2.amazonaws.com', ], 'fips-eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-north-1.amazonaws.com', ], 'fips-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-south-1.amazonaws.com', ], 'fips-eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-south-2.amazonaws.com', ], 'fips-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-west-1.amazonaws.com', ], 'fips-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-west-2.amazonaws.com', ], 'fips-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.eu-west-3.amazonaws.com', ], 'fips-il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.il-central-1.amazonaws.com', ], 'fips-me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.me-central-1.amazonaws.com', ], 'fips-me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.me-south-1.amazonaws.com', ], 'fips-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.sa-east-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 'waf-regional.il-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.il-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'hostname' => 'waf-regional.me-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.me-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'waf-regional.me-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.me-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'waf-regional.sa-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.sa-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'waf-regional.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'waf-regional.us-east-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'waf-regional.us-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'waf-regional.us-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'wafv2' => [ 'endpoints' => [ 'af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'hostname' => 'wafv2.af-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.af-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'hostname' => 'wafv2.ap-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-east-2' => [], 'ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'hostname' => 'wafv2.ap-northeast-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-northeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'hostname' => 'wafv2.ap-northeast-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-northeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'hostname' => 'wafv2.ap-northeast-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-northeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'hostname' => 'wafv2.ap-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'hostname' => 'wafv2.ap-south-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'hostname' => 'wafv2.ap-southeast-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-southeast-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'hostname' => 'wafv2.ap-southeast-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-southeast-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'hostname' => 'wafv2.ap-southeast-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-southeast-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'hostname' => 'wafv2.ap-southeast-4.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-southeast-4.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-5' => [ 'credentialScope' => [ 'region' => 'ap-southeast-5', ], 'hostname' => 'wafv2.ap-southeast-5.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-southeast-5.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ap-southeast-6' => [], 'ap-southeast-7' => [ 'credentialScope' => [ 'region' => 'ap-southeast-7', ], 'hostname' => 'wafv2.ap-southeast-7.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ap-southeast-7.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'hostname' => 'wafv2.ca-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ca-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'hostname' => 'wafv2.ca-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.ca-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'hostname' => 'wafv2.eu-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'hostname' => 'wafv2.eu-central-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-central-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'hostname' => 'wafv2.eu-north-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-north-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'hostname' => 'wafv2.eu-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'hostname' => 'wafv2.eu-south-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-south-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'hostname' => 'wafv2.eu-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'hostname' => 'wafv2.eu-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'hostname' => 'wafv2.eu-west-3.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.eu-west-3.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-af-south-1' => [ 'credentialScope' => [ 'region' => 'af-south-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.af-south-1.amazonaws.com', ], 'fips-ap-east-1' => [ 'credentialScope' => [ 'region' => 'ap-east-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-east-1.amazonaws.com', ], 'fips-ap-northeast-1' => [ 'credentialScope' => [ 'region' => 'ap-northeast-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-northeast-1.amazonaws.com', ], 'fips-ap-northeast-2' => [ 'credentialScope' => [ 'region' => 'ap-northeast-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-northeast-2.amazonaws.com', ], 'fips-ap-northeast-3' => [ 'credentialScope' => [ 'region' => 'ap-northeast-3', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-northeast-3.amazonaws.com', ], 'fips-ap-south-1' => [ 'credentialScope' => [ 'region' => 'ap-south-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-south-1.amazonaws.com', ], 'fips-ap-south-2' => [ 'credentialScope' => [ 'region' => 'ap-south-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-south-2.amazonaws.com', ], 'fips-ap-southeast-1' => [ 'credentialScope' => [ 'region' => 'ap-southeast-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-southeast-1.amazonaws.com', ], 'fips-ap-southeast-2' => [ 'credentialScope' => [ 'region' => 'ap-southeast-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-southeast-2.amazonaws.com', ], 'fips-ap-southeast-3' => [ 'credentialScope' => [ 'region' => 'ap-southeast-3', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-southeast-3.amazonaws.com', ], 'fips-ap-southeast-4' => [ 'credentialScope' => [ 'region' => 'ap-southeast-4', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-southeast-4.amazonaws.com', ], 'fips-ap-southeast-5' => [ 'credentialScope' => [ 'region' => 'ap-southeast-5', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-southeast-5.amazonaws.com', ], 'fips-ap-southeast-7' => [ 'credentialScope' => [ 'region' => 'ap-southeast-7', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ap-southeast-7.amazonaws.com', ], 'fips-ca-central-1' => [ 'credentialScope' => [ 'region' => 'ca-central-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ca-central-1.amazonaws.com', ], 'fips-ca-west-1' => [ 'credentialScope' => [ 'region' => 'ca-west-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.ca-west-1.amazonaws.com', ], 'fips-eu-central-1' => [ 'credentialScope' => [ 'region' => 'eu-central-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-central-1.amazonaws.com', ], 'fips-eu-central-2' => [ 'credentialScope' => [ 'region' => 'eu-central-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-central-2.amazonaws.com', ], 'fips-eu-north-1' => [ 'credentialScope' => [ 'region' => 'eu-north-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-north-1.amazonaws.com', ], 'fips-eu-south-1' => [ 'credentialScope' => [ 'region' => 'eu-south-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-south-1.amazonaws.com', ], 'fips-eu-south-2' => [ 'credentialScope' => [ 'region' => 'eu-south-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-south-2.amazonaws.com', ], 'fips-eu-west-1' => [ 'credentialScope' => [ 'region' => 'eu-west-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-west-1.amazonaws.com', ], 'fips-eu-west-2' => [ 'credentialScope' => [ 'region' => 'eu-west-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-west-2.amazonaws.com', ], 'fips-eu-west-3' => [ 'credentialScope' => [ 'region' => 'eu-west-3', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.eu-west-3.amazonaws.com', ], 'fips-il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.il-central-1.amazonaws.com', ], 'fips-me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.me-central-1.amazonaws.com', ], 'fips-me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.me-south-1.amazonaws.com', ], 'fips-mx-central-1' => [ 'credentialScope' => [ 'region' => 'mx-central-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.mx-central-1.amazonaws.com', ], 'fips-sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.sa-east-1.amazonaws.com', ], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [ 'credentialScope' => [ 'region' => 'il-central-1', ], 'hostname' => 'wafv2.il-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.il-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-central-1' => [ 'credentialScope' => [ 'region' => 'me-central-1', ], 'hostname' => 'wafv2.me-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.me-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'me-south-1' => [ 'credentialScope' => [ 'region' => 'me-south-1', ], 'hostname' => 'wafv2.me-south-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.me-south-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'mx-central-1' => [ 'credentialScope' => [ 'region' => 'mx-central-1', ], 'hostname' => 'wafv2.mx-central-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.mx-central-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'sa-east-1' => [ 'credentialScope' => [ 'region' => 'sa-east-1', ], 'hostname' => 'wafv2.sa-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.sa-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'hostname' => 'wafv2.us-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'hostname' => 'wafv2.us-east-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'hostname' => 'wafv2.us-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'hostname' => 'wafv2.us-west-2.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'wellarchitected' => [ 'endpoints' => [ 'ap-east-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-north-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'me-south-1' => [], 'sa-east-1' => [], 'us-east-1' => [], 'us-east-2' => [], 'us-west-1' => [], 'us-west-2' => [], ], ], 'wisdom' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'eu-central-1' => [], 'eu-west-2' => [], 'fips-ca-central-1' => [ 'deprecated' => true, ], 'fips-us-east-1' => [ 'deprecated' => true, ], 'fips-us-west-2' => [ 'deprecated' => true, ], 'ui-ap-northeast-1' => [], 'ui-ap-northeast-2' => [], 'ui-ap-southeast-1' => [], 'ui-ap-southeast-2' => [], 'ui-ca-central-1' => [], 'ui-eu-central-1' => [], 'ui-eu-west-2' => [], 'ui-us-east-1' => [], 'ui-us-west-2' => [], 'us-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], ], ], 'workdocs' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'eu-west-1' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'workdocs-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'workdocs-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'workdocs-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'workdocs-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'workmail' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'eu-west-1' => [], 'us-east-1' => [], 'us-west-2' => [], ], ], 'workspaces' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-5' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'workspaces-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'workspaces-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'workspaces-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'workspaces-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'workspaces-web' => [ 'endpoints' => [ 'ap-northeast-1' => [], 'ap-south-1' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ca-central-1' => [], 'eu-central-1' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'workspaces-web-fips.us-east-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'workspaces-web-fips.us-west-2.amazonaws.com', ], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'workspaces-web-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'workspaces-web-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'xray' => [ 'endpoints' => [ 'af-south-1' => [], 'ap-east-1' => [], 'ap-east-2' => [], 'ap-northeast-1' => [], 'ap-northeast-2' => [], 'ap-northeast-3' => [], 'ap-south-1' => [], 'ap-south-2' => [], 'ap-southeast-1' => [], 'ap-southeast-2' => [], 'ap-southeast-3' => [], 'ap-southeast-4' => [], 'ap-southeast-5' => [], 'ap-southeast-6' => [], 'ap-southeast-7' => [], 'ca-central-1' => [], 'ca-west-1' => [], 'eu-central-1' => [], 'eu-central-2' => [], 'eu-north-1' => [], 'eu-south-1' => [], 'eu-south-2' => [], 'eu-west-1' => [], 'eu-west-2' => [], 'eu-west-3' => [], 'fips-us-east-1' => [ 'credentialScope' => [ 'region' => 'us-east-1', ], 'deprecated' => true, 'hostname' => 'xray-fips.us-east-1.amazonaws.com', ], 'fips-us-east-2' => [ 'credentialScope' => [ 'region' => 'us-east-2', ], 'deprecated' => true, 'hostname' => 'xray-fips.us-east-2.amazonaws.com', ], 'fips-us-west-1' => [ 'credentialScope' => [ 'region' => 'us-west-1', ], 'deprecated' => true, 'hostname' => 'xray-fips.us-west-1.amazonaws.com', ], 'fips-us-west-2' => [ 'credentialScope' => [ 'region' => 'us-west-2', ], 'deprecated' => true, 'hostname' => 'xray-fips.us-west-2.amazonaws.com', ], 'il-central-1' => [], 'me-central-1' => [], 'me-south-1' => [], 'mx-central-1' => [], 'sa-east-1' => [], 'us-east-1' => [ 'variants' => [ [ 'hostname' => 'xray-fips.us-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-east-2' => [ 'variants' => [ [ 'hostname' => 'xray-fips.us-east-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-1' => [ 'variants' => [ [ 'hostname' => 'xray-fips.us-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-west-2' => [ 'variants' => [ [ 'hostname' => 'xray-fips.us-west-2.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], ], ], [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'dnsSuffix' => 'amazonaws.com.cn', 'partition' => 'aws-cn', 'partitionName' => 'AWS China', 'regionRegex' => '^cn\\-\\w+\\-\\d+$', 'regions' => [ 'cn-north-1' => [ 'description' => 'China (Beijing)', ], 'cn-northwest-1' => [ 'description' => 'China (Ningxia)', ], ], 'services' => [ 'access-analyzer' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'account' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'account.cn-northwest-1.amazonaws.com.cn', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'acm' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'acm-pca' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'airflow' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'api.ecr' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'api.ecr.cn-north-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'ecr.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'api.ecr.cn-northwest-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'ecr.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'api.pricing' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'pricing', ], ], 'endpoints' => [ 'cn-northwest-1' => [], ], ], 'api.sagemaker' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'api.tunneling.iot' => [ 'defaults' => [ 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com.cn', 'hostname' => 'api.tunneling.iot-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => 'api.iot-tunneling-fips.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => 'api.iot-tunneling.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'apigateway' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'appconfigdata' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'application-autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'applicationinsights' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'appmesh' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'appmesh.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'appsync' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'appsync.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'appsync.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'athena' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'athena.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'athena.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'autoscaling-plans' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'backup' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'batch' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'budgets' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'budgets.amazonaws.com.cn', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'cassandra' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'ce' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'ce.cn-northwest-1.amazonaws.com.cn', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'cloudcontrolapi' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'cloudformation' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'cloudfront' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'cloudfront.cn-northwest-1.amazonaws.com.cn', 'protocols' => [ 'http', 'https', ], ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'cloudtrail' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'codebuild' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'codecommit' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'codedeploy' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'codepipeline' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'cognito-identity' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.cn-north-1.amazonaws.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'compute-optimizer.cn-north-1.amazonaws.com.cn', ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'compute-optimizer.cn-northwest-1.amazonaws.com.cn', ], ], ], 'config' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'cur' => [ 'endpoints' => [ 'cn-northwest-1' => [], ], ], 'data-ats.iot' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'data.ats.iot.cn-north-1.amazonaws.com.cn', 'protocols' => [ 'https', ], ], 'cn-northwest-1' => [], ], ], 'data.iot' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'data.jobs.iot' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'databrew' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'datasync' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'datasync.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'datasync.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'datazone' => [ 'defaults' => [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'variants' => [ [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'datazone.cn-north-1.api.amazonwebservices.com.cn', ], 'cn-northwest-1' => [ 'hostname' => 'datazone.cn-northwest-1.api.amazonwebservices.com.cn', ], ], ], 'dax' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'directconnect' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'dlm' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'dlm.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'dlm.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'dms' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'docdb' => [ 'endpoints' => [ 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'rds.cn-northwest-1.amazonaws.com.cn', ], ], ], 'ds' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'dynamodb' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'ebs' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'ec2' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'ecs' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'eks' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'eks-auth' => [ 'defaults' => [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'variants' => [ [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'eks-auth.cn-north-1.api.amazonwebservices.com.cn', ], 'cn-northwest-1' => [ 'hostname' => 'eks-auth.cn-northwest-1.api.amazonwebservices.com.cn', ], ], ], 'elasticache' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'elasticbeanstalk' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'elasticbeanstalk.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.cn-north-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.cn-northwest-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'fips-cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.cn-north-1.amazonaws.com.cn', ], 'fips-cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.cn-northwest-1.amazonaws.com.cn', ], ], ], 'elasticloadbalancing' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'elasticmapreduce' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'emr-containers' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'emr-serverless' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'entitlement.marketplace' => [ 'endpoints' => [ 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'entitlement-marketplace.cn-northwest-1.amazonaws.com.cn', 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'entitlement-marketplace.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'es' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'aos.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'aos.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'events' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'events.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'events.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'firehose' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'firehose.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'firehose.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'fms' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'fsx' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'gamelift' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'gameliftstreams' => [ 'defaults' => [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'variants' => [ [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'gameliftstreams.cn-north-1.api.amazonwebservices.com.cn', ], 'cn-northwest-1' => [ 'hostname' => 'gameliftstreams.cn-northwest-1.api.amazonwebservices.com.cn', ], ], ], 'glacier' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'glue' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'glue.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'glue.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'greengrass' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], ], 'isRegionalized' => true, ], 'guardduty' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], 'isRegionalized' => true, ], 'health' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'sslCommonName' => 'health.cn-northwest-1.amazonaws.com.cn', ], 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'global.health.amazonaws.com.cn', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'iam' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'iam.cn-north-1.amazonaws.com.cn', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'identitystore' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'inspector2' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'internetmonitor' => [ 'defaults' => [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'variants' => [ [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'internetmonitor.cn-north-1.api.amazonwebservices.com.cn', ], 'cn-northwest-1' => [ 'hostname' => 'internetmonitor.cn-northwest-1.api.amazonwebservices.com.cn', ], ], ], 'iot' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'iotsecuredtunneling' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'iotsitewise' => [ 'endpoints' => [ 'cn-north-1' => [], ], ], 'iottwinmaker' => [ 'endpoints' => [ 'api-cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'api.iottwinmaker.cn-north-1.amazonaws.com.cn', ], 'cn-north-1' => [], 'data-cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'data.iottwinmaker.cn-north-1.amazonaws.com.cn', ], ], ], 'kafka' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'kafkaconnect' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'kendra-ranking' => [ 'defaults' => [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'variants' => [ [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'kendra-ranking.cn-north-1.api.amazonwebservices.com.cn', ], 'cn-northwest-1' => [ 'hostname' => 'kendra-ranking.cn-northwest-1.api.amazonwebservices.com.cn', ], ], ], 'kinesis' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'kinesisanalytics' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'kinesisvideo' => [ 'endpoints' => [ 'cn-north-1' => [], ], ], 'kms' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'lakeformation' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'lambda' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'lambda.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'lambda.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'license-manager' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'license-manager-linux-subscriptions' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'logs' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'logs.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'logs.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'mediaconvert' => [ 'endpoints' => [ 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'memory-db' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'metering.marketplace' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'aws-marketplace', ], ], 'endpoints' => [ 'cn-northwest-1' => [], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'monitoring' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'mq' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'neptune' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'rds.cn-north-1.amazonaws.com.cn', ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'rds.cn-northwest-1.amazonaws.com.cn', ], ], ], 'network-firewall' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'notifications' => [ 'defaults' => [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'variants' => [ [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'notifications.cn-north-1.api.amazonwebservices.com.cn', ], 'cn-northwest-1' => [ 'hostname' => 'notifications.cn-northwest-1.api.amazonwebservices.com.cn', ], ], ], 'oam' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'oidc' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'oidc.cn-north-1.amazonaws.com.cn', ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'oidc.cn-northwest-1.amazonaws.com.cn', ], ], ], 'organizations' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'organizations.cn-northwest-1.amazonaws.com.cn', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'personalize' => [ 'endpoints' => [ 'cn-north-1' => [], ], ], 'pi' => [ 'endpoints' => [ 'cn-north-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'pipes' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'polly' => [ 'endpoints' => [ 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'polly.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'portal.sso' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'portal.sso.cn-north-1.amazonaws.com.cn', ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'portal.sso.cn-northwest-1.amazonaws.com.cn', ], ], ], 'qbusiness' => [ 'defaults' => [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'variants' => [ [ 'dnsSuffix' => 'api.amazonwebservices.com.cn', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'hostname' => 'qbusiness.cn-north-1.api.amazonwebservices.com.cn', ], 'cn-northwest-1' => [ 'hostname' => 'qbusiness.cn-northwest-1.api.amazonwebservices.com.cn', ], ], ], 'quicksight' => [ 'endpoints' => [ 'cn-north-1' => [], ], ], 'ram' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], ], ], 'rbin' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'rbin.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'rbin.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'rds' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'redshift' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'redshift-serverless' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'resource-explorer-2' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'resource-groups' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'rolesanywhere' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'route53' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'route53.amazonaws.com.cn', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-cn-global', ], 'route53profiles' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'route53resolver' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'runtime.sagemaker' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 's3' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com.cn', 'hostname' => '{service}.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.cn-north-1.amazonaws.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 's3.dualstack.cn-northwest-1.amazonaws.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 's3-control' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com.cn', 'hostname' => '{service}.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 's3-control.cn-north-1.amazonaws.com.cn', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.cn-north-1.amazonaws.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 's3-control.cn-northwest-1.amazonaws.com.cn', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control.dualstack.cn-northwest-1.amazonaws.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'savingsplans' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'savingsplans.cn-north-1.amazonaws.com.cn', ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'savingsplans.cn-northwest-1.amazonaws.com.cn', ], ], 'isRegionalized' => true, ], 'scheduler' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'schemas' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], ], ], ], ], 'securityhub' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'serverlessrepo' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [ 'protocols' => [ 'https', ], ], 'cn-northwest-1' => [ 'protocols' => [ 'https', ], ], ], ], 'servicecatalog' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'servicediscovery' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'servicequotas' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'signer' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], 'verification-cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'verification.signer.cn-north-1.amazonaws.com.cn', ], 'verification-cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'verification.signer.cn-northwest-1.amazonaws.com.cn', ], ], ], 'snowball' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.cn-north-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.cn-northwest-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'fips-cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.cn-north-1.amazonaws.com.cn', ], 'fips-cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.cn-northwest-1.amazonaws.com.cn', ], ], ], 'sns' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'sns.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'sns.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'sqs' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'sslCommonName' => '{region}.queue.{dnsSuffix}', ], 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'sqs.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'sqs.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'ssm' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'sso' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'states' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'states.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'states.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'storagegateway' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'streams.dynamodb' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'dynamodb', ], 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'sts' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'support' => [ 'endpoints' => [ 'aws-cn-global' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'support.cn-north-1.amazonaws.com.cn', ], ], 'partitionEndpoint' => 'aws-cn-global', ], 'swf' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'synthetics' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'synthetics.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'tagging' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'transcribe' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'cn.transcribe.cn-north-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'transcribe.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'cn.transcribe.cn-northwest-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'transcribe.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'transcribestreaming' => [ 'endpoints' => [ 'cn-north-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.cn-north-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], 'cn-northwest-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming.cn-northwest-1.api.amazonwebservices.com.cn', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'transfer' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'verifiedpermissions' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], 'waf-regional' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'waf-regional.cn-north-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'waf-regional-fips.cn-north-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'waf-regional.cn-northwest-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'waf-regional-fips.cn-northwest-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'fips-cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.cn-north-1.amazonaws.com.cn', ], 'fips-cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.cn-northwest-1.amazonaws.com.cn', ], ], ], 'wafv2' => [ 'endpoints' => [ 'cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'hostname' => 'wafv2.cn-north-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'wafv2-fips.cn-north-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'hostname' => 'wafv2.cn-northwest-1.amazonaws.com.cn', 'variants' => [ [ 'hostname' => 'wafv2-fips.cn-northwest-1.amazonaws.com.cn', 'tags' => [ 'fips', ], ], ], ], 'fips-cn-north-1' => [ 'credentialScope' => [ 'region' => 'cn-north-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.cn-north-1.amazonaws.com.cn', ], 'fips-cn-northwest-1' => [ 'credentialScope' => [ 'region' => 'cn-northwest-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.cn-northwest-1.amazonaws.com.cn', ], ], ], 'workspaces' => [ 'endpoints' => [ 'cn-northwest-1' => [], ], ], 'xray' => [ 'endpoints' => [ 'cn-north-1' => [], 'cn-northwest-1' => [], ], ], ], ], [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'dnsSuffix' => 'amazonaws.com', 'partition' => 'aws-us-gov', 'partitionName' => 'AWS GovCloud (US)', 'regionRegex' => '^us\\-gov\\-\\w+\\-\\d+$', 'regions' => [ 'us-gov-east-1' => [ 'description' => 'AWS GovCloud (US-East)', ], 'us-gov-west-1' => [ 'description' => 'AWS GovCloud (US-West)', ], ], 'services' => [ 'access-analyzer' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'access-analyzer.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'access-analyzer.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'access-analyzer.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'access-analyzer.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'access-analyzer.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'access-analyzer.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'access-analyzer.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'access-analyzer.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'access-analyzer.us-gov-west-1.amazonaws.com', ], ], ], 'acm' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'acm.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'acm.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'acm.us-gov-west-1.amazonaws.com', ], ], ], 'acm-pca' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'acm-pca.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'acm-pca.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'acm-pca.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'acm-pca.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'acm-pca.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'aoss' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'api.detective' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'api.detective-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'detective-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'detective.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'api.detective-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'api.detective-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'detective-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'detective.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'api.detective-fips.us-gov-west-1.amazonaws.com', ], ], ], 'api.ecr' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'ecr-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'dkr-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ecr-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'dkr-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'ecr-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-dkr-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-gov-east-1.amazonaws.com', ], 'fips-dkr-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-gov-west-1.amazonaws.com', ], 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'ecr-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'api.ecr.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ecr-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ecr.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'api.ecr.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ecr-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ecr-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'ecr.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'api.sagemaker' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'api-fips.sagemaker.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'api-fips.sagemaker.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1-fips-secondary' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'api.sagemaker.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1-secondary' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'api.sagemaker.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'api.tunneling.iot' => [ 'defaults' => [ 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => 'api.tunneling.iot-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => 'api.iot-tunneling-fips.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'api.aws', 'hostname' => 'api.iot-tunneling.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'api.iot-tunneling.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'api.tunneling.iot-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'api.iot-tunneling-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'api.iot-tunneling.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'api.tunneling.iot-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'apigateway' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'appconfig.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'appconfig.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'appconfig.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'appconfig.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'appconfigdata' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'appconfigdata.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'appconfigdata.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'appconfigdata.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'appconfigdata.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'application-autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'application-autoscaling.us-gov-east-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'application-autoscaling.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'deprecated' => true, 'hostname' => 'application-autoscaling.us-gov-east-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], ], 'us-gov-west-1' => [ 'hostname' => 'application-autoscaling.us-gov-west-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'application-autoscaling.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'deprecated' => true, 'hostname' => 'application-autoscaling.us-gov-west-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], ], ], ], 'applicationinsights' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'applicationinsights-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'applicationinsights-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'applicationinsights-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'applicationinsights.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'appstream2' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'appstream', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'appstream2-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'appstream2-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'appstream2-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'appstream2-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'appstream2-fips.us-gov-west-1.amazonaws.com', ], ], ], 'aps' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'athena' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'athena-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'athena-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'athena-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'athena-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'athena-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'athena.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'autoscaling' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'autoscaling.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'protocols' => [ 'http', 'https', ], ], 'us-gov-west-1' => [ 'protocols' => [ 'http', 'https', ], ], ], ], 'autoscaling-plans' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'autoscaling-plans.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'deprecated' => true, 'hostname' => 'autoscaling-plans.us-gov-east-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'autoscaling-plans.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'deprecated' => true, 'hostname' => 'autoscaling-plans.us-gov-west-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], ], ], ], 'backup' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'backup-gateway' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'batch' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'batch.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'batch.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'batch.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'batch.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'batch.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'bedrock' => [ 'endpoints' => [ 'bedrock-fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'bedrock-fips.us-gov-east-1.amazonaws.com', ], 'bedrock-fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'bedrock-fips.us-gov-west-1.amazonaws.com', ], 'bedrock-runtime-fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'bedrock-runtime-fips.us-gov-east-1.amazonaws.com', ], 'bedrock-runtime-fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'bedrock-runtime-fips.us-gov-west-1.amazonaws.com', ], 'bedrock-runtime-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'bedrock-runtime.us-gov-east-1.amazonaws.com', ], 'bedrock-runtime-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'bedrock-runtime.us-gov-west-1.amazonaws.com', ], 'bedrock-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'bedrock.us-gov-east-1.amazonaws.com', ], 'bedrock-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'bedrock.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'cassandra' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'cassandra.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'cassandra.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'cassandra.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'cassandra.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'cassandra.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'cassandra.us-gov-west-1.amazonaws.com', ], ], ], 'cloudcontrolapi' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'cloudcontrolapi-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudcontrolapi-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cloudcontrolapi-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cloudcontrolapi.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'clouddirectory' => [ 'endpoints' => [ 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'clouddirectory.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'clouddirectory.us-gov-west-1.amazonaws.com', ], ], ], 'cloudformation' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'cloudformation.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'cloudformation.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'cloudformation.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'cloudformation.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'cloudformation.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'cloudformation.us-gov-west-1.amazonaws.com', ], ], ], 'cloudhsm' => [ 'endpoints' => [ 'us-gov-west-1' => [], ], ], 'cloudhsmv2' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'cloudhsm', ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudhsmv2.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'cloudtrail' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'cloudtrail.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'cloudtrail.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'cloudtrail.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudtrail.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudtrail.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'codebuild' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'codebuild-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'codebuild-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'codebuild-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'codebuild-fips.us-gov-west-1.amazonaws.com', ], ], ], 'codecommit' => [ 'endpoints' => [ 'fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'codecommit-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'codecommit-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'codecommit-fips.us-gov-west-1.amazonaws.com', ], ], ], 'codedeploy' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'codedeploy-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'codedeploy-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'codedeploy-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'codedeploy-fips.us-gov-west-1.amazonaws.com', ], ], ], 'codepipeline' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'codepipeline-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'codepipeline-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'codepipeline-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'codepipeline-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'codestar-connections' => [ 'endpoints' => [ 'us-gov-east-1' => [], ], ], 'cognito-identity' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'cognito-identity-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity.us-gov-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-identity-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-identity-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-identity.us-gov-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'cognito-idp' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'cognito-idp-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp.us-gov-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'cognito-idp-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'cognito-idp-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'cognito-idp.us-gov-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'comprehend' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'comprehend-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'comprehend-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'comprehend-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'comprehend.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'comprehendmedical' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'comprehendmedical-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'comprehendmedical-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'compute-optimizer-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'compute-optimizer-fips.us-gov-west-1.amazonaws.com', ], ], ], 'config' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'config.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'config.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'config.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'config.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'config.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'connect' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'connect.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'connect.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'controltower' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'controltower-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'controltower-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'controltower-fips.us-gov-west-1.amazonaws.com', ], ], ], 'data-ats.iot' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'data.iot' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'protocols' => [ 'https', ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'service' => 'iotdata', ], 'deprecated' => true, 'hostname' => 'data.iot-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'data.iot-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'data.jobs.iot' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'data.jobs.iot-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'data.jobs.iot-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'data.jobs.iot-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'data.jobs.iot-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'databrew' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'databrew.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'databrew.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'datasync' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'datasync-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'datasync.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'datazone' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'datazone.us-gov-east-1.api.aws', ], 'us-gov-west-1' => [ 'hostname' => 'datazone.us-gov-west-1.api.aws', ], ], ], 'directconnect' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'directconnect-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'directconnect-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'dlm' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'dlm.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'dlm.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'dlm-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'dlm.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'dlm.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'dlm.us-gov-west-1.amazonaws.com', ], ], ], 'dms' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'dms.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'dms' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'dms.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'dms-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'dms.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'dms.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'dms.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'dms.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'dms.us-gov-west-1.amazonaws.com', ], ], ], 'docdb' => [ 'endpoints' => [ 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'rds.us-gov-west-1.amazonaws.com', ], ], ], 'drs' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'drs-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'drs-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'drs-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'drs-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ds' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'dynamodb' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'dynamodb.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'dynamodb-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'dynamodb-fips.us-gov-west-1.amazonaws.com', ], ], ], 'ebs' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'ec2' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'ec2.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'ec2.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ec2.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'ec2.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'ec2.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'ecs' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'ecs-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'ecs-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'ecs-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'ecs-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'eks' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'eks.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'eks.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'eks.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'eks.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'eks.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'eks-auth' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'eks-auth.us-gov-east-1.api.aws', ], 'us-gov-west-1' => [ 'hostname' => 'eks-auth.us-gov-west-1.api.aws', ], ], ], 'elasticache' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'elasticache.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'elasticache.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticache.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'elasticache.us-gov-west-1.amazonaws.com', ], ], ], 'elasticbeanstalk' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'elasticbeanstalk.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'elasticbeanstalk.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticbeanstalk.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'elasticbeanstalk.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'elasticbeanstalk.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'elasticbeanstalk.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticbeanstalk.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'elasticbeanstalk.us-gov-west-1.amazonaws.com', ], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'elasticloadbalancing' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'elasticloadbalancing.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'elasticloadbalancing.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'elasticloadbalancing.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticloadbalancing.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'elasticloadbalancing.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'elasticmapreduce' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticmapreduce.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'elasticmapreduce.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'elasticmapreduce.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'email' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'email-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'email-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'email-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'email-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'emr-containers' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'emr-containers.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'emr-containers.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'emr-containers.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'emr-containers.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'emr-serverless' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'emr-serverless.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'emr-serverless.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'emr-serverless.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'emr-serverless.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'es' => [ 'endpoints' => [ 'fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'es-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'aos.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'es-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'es-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'aos.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'es-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'es-fips.us-gov-west-1.amazonaws.com', ], ], ], 'events' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'events.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'events.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'events.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'events.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'firehose' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'firehose-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'firehose-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'firehose-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'firehose-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'fms' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'fms-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'fms-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'fsx' => [ 'endpoints' => [ 'fips-prod-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-gov-east-1.amazonaws.com', ], 'fips-prod-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-gov-west-1.amazonaws.com', ], 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-gov-west-1.amazonaws.com', ], 'prod-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'prod-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'gameliftstreams' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'gameliftstreams.us-gov-east-1.api.aws', ], 'us-gov-west-1' => [ 'hostname' => 'gameliftstreams.us-gov-west-1.api.aws', ], ], ], 'geo' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'geo-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'geo-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'glacier' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'glacier.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'glacier.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'glacier.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'glacier.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'glue' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'glue-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'glue-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'glue-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'glue-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'glue.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'glue-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'glue-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'glue.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'grafana' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'greengrass' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'dataplane-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'greengrass-ats.iot.us-gov-east-1.amazonaws.com', ], 'dataplane-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'greengrass-ats.iot.us-gov-west-1.amazonaws.com', ], 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'greengrass.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'greengrass.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'greengrass.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'greengrass.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], 'isRegionalized' => true, ], 'guardduty' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'guardduty.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'guardduty.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'guardduty.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'guardduty.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'guardduty.us-gov-west-1.amazonaws.com', ], ], 'isRegionalized' => true, ], 'health' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'sslCommonName' => 'health.us-gov-west-1.amazonaws.com', ], 'endpoints' => [ 'aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'global.health.us-gov.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'health-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'health-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iam' => [ 'endpoints' => [ 'aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'iam.us-gov.amazonaws.com', 'variants' => [ [ 'hostname' => 'iam.us-gov.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'aws-us-gov-global-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'iam.us-gov.amazonaws.com', ], 'iam-govcloud' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'iam.us-gov.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'iam-govcloud-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'iam.us-gov.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-us-gov-global', ], 'identitystore' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'identitystore.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'identitystore.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'identitystore.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'identitystore.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'identitystore.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ingest.timestream' => [ 'endpoints' => [ 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'ingest.timestream.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'ingest.timestream.us-gov-west-1.amazonaws.com', ], ], ], 'inspector' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'inspector-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'inspector-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'inspector-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'inspector-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'inspector2' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'inspector2-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'inspector2-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'inspector2-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'inspector2-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'internetmonitor' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'internetmonitor.us-gov-east-1.api.aws', ], 'us-gov-west-1' => [ 'hostname' => 'internetmonitor.us-gov-west-1.api.aws', ], ], ], 'iot' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'deprecated' => true, 'hostname' => 'iot-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'deprecated' => true, 'hostname' => 'iot-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'iot-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'iot-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iotsecuredtunneling' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'api.tunneling.iot-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'api.tunneling.iot-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iotsitewise' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'iotsitewise-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'iotsitewise-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'iottwinmaker' => [ 'endpoints' => [ 'api-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'api.iottwinmaker.us-gov-west-1.amazonaws.com', ], 'data-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'data.iottwinmaker.us-gov-west-1.amazonaws.com', ], 'fips-api-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'api.iottwinmaker-fips.us-gov-west-1.amazonaws.com', ], 'fips-data-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'data.iottwinmaker-fips.us-gov-west-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'iottwinmaker-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'iottwinmaker-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kafka' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'kafka.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'kafka.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'kafka.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'kafka.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'kafka.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'kafka.us-gov-west-1.amazonaws.com', ], ], ], 'kafkaconnect' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'kendra' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'kendra-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'kendra-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kendra-ranking' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'kendra-ranking.us-gov-east-1.api.aws', ], 'us-gov-west-1' => [ 'hostname' => 'kendra-ranking.us-gov-west-1.api.aws', ], ], ], 'kinesis' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'kinesis.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'kinesis.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'kinesis.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'kinesis.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'kinesis.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'kinesis.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kinesisanalytics' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'kinesisanalytics-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'kinesisanalytics-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kinesisvideo' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'kinesisvideo-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'kinesisvideo-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'kinesisvideo-fips.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'kinesisvideo-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'kinesisvideo-fips.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'kinesisvideo-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'kms' => [ 'endpoints' => [ 'ProdFips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-gov-west-1.amazonaws.com', ], ], ], 'lakeformation' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'lakeformation-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'lakeformation-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lakeformation-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'lakeformation.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'lakeformation-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lakeformation-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'lakeformation.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'lambda' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'lambda-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'lambda-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'lambda-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lambda.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'lambda-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'lambda.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'license-manager' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'license-manager-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'license-manager-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'license-manager-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'license-manager-linux-subscriptions' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'license-manager-user-subscriptions' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'logs' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'logs.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'logs.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'logs.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'logs.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'logs.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'm2' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'deprecated' => true, ], 'fips-us-gov-west-1' => [ 'deprecated' => true, ], 'us-gov-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], ], ], 'managedblockchain' => [ 'endpoints' => [ 'us-gov-west-1' => [], ], ], 'mediaconvert' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'mediaconvert.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'mediaconvert.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'mediaconvert.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'mediaconvert.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], ], ], 'meetings-chime' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'meetings-chime-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'meetings-chime-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'meetings-chime-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'meetings-chime-fips.us-gov-west-1.amazonaws.com', ], ], ], 'memory-db' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'metering.marketplace' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'aws-marketplace', ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'metering-marketplace.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'mgn' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'mgn-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'mgn-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'mgn-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'mgn-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'models-v2-lex' => [ 'endpoints' => [ 'us-gov-west-1' => [], ], ], 'models.lex' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'lex', ], 'variants' => [ [ 'hostname' => 'models-fips.lex.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'models-fips.lex.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'models-fips.lex.us-gov-west-1.amazonaws.com', ], ], ], 'monitoring' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'monitoring.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'monitoring.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'monitoring.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'monitoring.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'monitoring.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'mq' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'mq-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'mq-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'mq-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'mq-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'neptune' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'rds.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'rds.us-gov-west-1.amazonaws.com', ], ], ], 'network-firewall' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'network-firewall-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'network-firewall-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'network-firewall-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'network-firewall-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'networkmanager' => [ 'endpoints' => [ 'aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'networkmanager.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'networkmanager.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'networkmanager.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'networkmanager.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'fips-aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'networkmanager.us-gov-west-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-us-gov-global', ], 'notifications' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'notifications.us-gov-east-1.api.aws', ], 'us-gov-west-1' => [ 'hostname' => 'notifications.us-gov-west-1.api.aws', ], ], ], 'oam' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'oidc' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'oidc.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'oidc.us-gov-west-1.amazonaws.com', ], ], ], 'organizations' => [ 'endpoints' => [ 'aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'organizations.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'organizations.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'organizations.us-gov-west-1.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-us-gov-global', ], 'outposts' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'outposts.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'outposts.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'outposts.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'outposts.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'participant.connect' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'participant.connect.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'participant.connect.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'pi' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'pi-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'pi-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'pi-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'pi-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'pi.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'pinpoint' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'mobiletargeting', ], ], 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'pinpoint-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'pinpoint.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'pinpoint-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'polly' => [ 'endpoints' => [ 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'polly-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'polly-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'polly-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'polly.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'portal.sso' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'portal.sso.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'portal.sso.us-gov-west-1.amazonaws.com', ], ], ], 'qbusiness' => [ 'defaults' => [ 'dnsSuffix' => 'api.aws', 'variants' => [ [ 'dnsSuffix' => 'api.aws', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'hostname' => 'qbusiness.us-gov-east-1.api.aws', ], 'us-gov-west-1' => [ 'hostname' => 'qbusiness.us-gov-west-1.api.aws', ], ], ], 'query.timestream' => [ 'endpoints' => [ 'us-gov-west-1' => [], ], ], 'quicksight' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'ram' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'ram.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ramus-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'ram.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'ram.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'ram.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'ramus-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'ram.us-gov-west-1.amazonaws.com', ], ], ], 'rbin' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rbin-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rbin.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'rds' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'rds.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'rds.us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'rds.us-gov-east-1.amazonaws.com', ], 'rds.us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'rds.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'rds.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'rds.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'rds.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'rds.us-gov-west-1.amazonaws.com', ], ], ], 'redshift' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'redshift.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'redshift.us-gov-west-1.amazonaws.com', ], ], ], 'redshift-serverless' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'redshift-serverless-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'redshift-serverless-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'redshift-serverless-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'redshift-serverless-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'rekognition' => [ 'endpoints' => [ 'rekognition-fips.us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-gov-west-1.amazonaws.com', ], 'rekognition.us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'rekognition-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'rekognition-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'rekognition-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'rekognition.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'rekognition-fips.us-gov-west-1.amazonaws.com', ], ], ], 'resiliencehub' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'resiliencehub-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'resiliencehub-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resiliencehub-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'resiliencehub.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'resiliencehub-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'resiliencehub-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'resiliencehub.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'resource-explorer-2' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'resource-groups' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'resource-groups.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'resource-groups.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'resource-groups.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'resource-groups.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'resource-groups.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'rolesanywhere' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'rolesanywhere-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'rolesanywhere-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'rolesanywhere-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'rolesanywhere-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'route53' => [ 'endpoints' => [ 'aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'route53.us-gov.amazonaws.com', 'variants' => [ [ 'hostname' => 'route53.us-gov.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'fips-aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'route53.us-gov.amazonaws.com', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-us-gov-global', ], 'route53profiles' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'route53profiles-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'route53profiles.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'route53resolver' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'route53resolver.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'deprecated' => true, 'hostname' => 'route53resolver.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'route53resolver.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'route53resolver.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], [ 'hostname' => 'route53resolver.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'deprecated' => true, 'hostname' => 'route53resolver.us-gov-west-1.amazonaws.com', ], ], ], 'rum' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'runtime-v2-lex' => [ 'endpoints' => [ 'us-gov-west-1' => [], ], ], 'runtime.lex' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'lex', ], 'variants' => [ [ 'hostname' => 'runtime-fips.lex.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'runtime-fips.lex.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'runtime-fips.lex.us-gov-west-1.amazonaws.com', ], ], ], 'runtime.sagemaker' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'runtime.sagemaker.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'runtime.sagemaker.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'runtime.sagemaker.us-gov-west-1.amazonaws.com', ], ], ], 's3' => [ 'defaults' => [ 'signatureVersions' => [ 's3', 's3v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}-fips.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 's3-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 's3-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'hostname' => 's3.us-gov-east-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 's3-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3.dualstack.us-gov-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'hostname' => 's3.us-gov-west-1.amazonaws.com', 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 's3-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3.dualstack.us-gov-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], ], ], 's3-control' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}-fips.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'amazonaws.com', 'hostname' => '{service}.dualstack.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 's3-control.us-gov-east-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-gov-east-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-gov-east-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-gov-east-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 's3-control.us-gov-west-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-gov-west-1.amazonaws.com', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-gov-west-1.amazonaws.com', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-gov-west-1.amazonaws.com', 'signatureVersions' => [ 's3v4', ], ], ], ], 's3-outposts' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'deprecated' => true, ], 'fips-us-gov-west-1' => [ 'deprecated' => true, ], 'us-gov-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], ], ], 'scheduler' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'schemas' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'deprecated' => true, ], 'us-gov-west-1' => [ 'variants' => [ [ 'tags' => [ 'dualstack', ], ], [ 'tags' => [ 'dualstack', 'fips', ], ], [ 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'deprecated' => true, ], ], ], 'securityhub' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'securityhub-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'securityhub-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'securityhub-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securityhub.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'securityhub-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securityhub.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'securitylake' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'securitylake.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securitylake.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'securitylake.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'securitylake.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'securitylake.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'securitylake.us-gov-west-1.amazonaws.com', ], ], ], 'serverlessrepo' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'serverlessrepo.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'serverlessrepo.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'serverlessrepo.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'serverlessrepo.us-gov-west-1.amazonaws.com', ], ], ], 'servicecatalog' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'servicecatalog-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'servicecatalog-fips.us-gov-west-1.amazonaws.com', ], ], ], 'servicecatalog-appregistry' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'servicecatalog-appregistry.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'servicediscovery' => [ 'endpoints' => [ 'servicediscovery' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'servicediscovery-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'servicediscovery-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'servicediscovery-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'servicediscovery-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'servicediscovery.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'servicediscovery-fips.us-gov-west-1.amazonaws.com', ], ], ], 'servicequotas' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'servicequotas.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'servicequotas.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'servicequotas.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'servicequotas.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'servicequotas.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'signer' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'signer-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'signer-fips.us-gov-west-1.amazonaws.com', ], 'fips-verification-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'verification.signer-fips.us-gov-east-1.amazonaws.com', ], 'fips-verification-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'verification.signer-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'signer-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'signer-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'verification-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'verification.signer.us-gov-east-1.amazonaws.com', ], 'verification-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'verification.signer.us-gov-west-1.amazonaws.com', ], ], ], 'sms-voice' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'sms-voice-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'sms-voice-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'sms-voice-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'sms-voice.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'snowball' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'snowball-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'snowball-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'snowball-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'snowball.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'sns' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'sns.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'sns.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'sns.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'sns.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'sqs' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'sqs.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'sqs.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'sqs.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'sqs.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'protocols' => [ 'http', 'https', ], 'sslCommonName' => '{region}.queue.{dnsSuffix}', 'variants' => [ [ 'hostname' => 'sqs.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'ssm' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'ssm.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'ssm.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'ssm.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'ssm.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'ssm.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'sso' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'sso.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'sso.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'sso.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'sso.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'sso.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'sso.us-gov-west-1.amazonaws.com', ], ], ], 'states' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'states-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'states.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'states.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'storagegateway' => [ 'endpoints' => [ 'fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-gov-west-1.amazonaws.com', ], ], ], 'streams.dynamodb' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'dynamodb', ], 'variants' => [ [ 'hostname' => 'streams.dynamodb.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'sts' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'sts.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'sts.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'sts.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'sts.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'sts.us-gov-west-1.amazonaws.com', ], ], ], 'support' => [ 'endpoints' => [ 'aws-us-gov-global' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'support.us-gov-west-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'support.us-gov-west-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'support.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], 'partitionEndpoint' => 'aws-us-gov-global', ], 'swf' => [ 'endpoints' => [ 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'swf.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'swf.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'swf.us-gov-east-1.amazonaws.com', ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'swf.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'swf.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'swf.us-gov-west-1.amazonaws.com', ], ], ], 'synthetics' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'synthetics-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'synthetics-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'synthetics-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'synthetics.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'tagging' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'textract' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'textract-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'textract-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'textract-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'textract-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'textract.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'textract-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'textract-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'textract.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'transcribe' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'fips.transcribe.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribe-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribe.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribe-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribe.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'transcribestreaming' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'transcribestreaming-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'transcribestreaming-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribestreaming-fips.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribestreaming.us-gov-east-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'transcribestreaming-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'transcribestreaming-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'transcribestreaming.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'transfer' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'transfer-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'transfer-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'transfer-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'translate' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'translate-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], [ 'hostname' => 'translate-fips.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 'translate.us-gov-west-1.api.aws', 'tags' => [ 'dualstack', ], ], ], ], 'us-gov-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'translate-fips.us-gov-west-1.amazonaws.com', ], ], ], 'verifiedpermissions' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'verifiedpermissions-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'verifiedpermissions-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'waf-regional' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'waf-regional-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'waf-regional.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'waf-regional.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'waf-regional-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'wafv2' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'wafv2-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'hostname' => 'wafv2.us-gov-east-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'hostname' => 'wafv2.us-gov-west-1.amazonaws.com', 'variants' => [ [ 'hostname' => 'wafv2-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'wellarchitected' => [ 'endpoints' => [ 'us-gov-east-1' => [], 'us-gov-west-1' => [], ], ], 'workspaces' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'workspaces-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'workspaces-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'workspaces-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'workspaces-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], 'xray' => [ 'endpoints' => [ 'fips-us-gov-east-1' => [ 'credentialScope' => [ 'region' => 'us-gov-east-1', ], 'deprecated' => true, 'hostname' => 'xray-fips.us-gov-east-1.amazonaws.com', ], 'fips-us-gov-west-1' => [ 'credentialScope' => [ 'region' => 'us-gov-west-1', ], 'deprecated' => true, 'hostname' => 'xray-fips.us-gov-west-1.amazonaws.com', ], 'us-gov-east-1' => [ 'variants' => [ [ 'hostname' => 'xray-fips.us-gov-east-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], 'us-gov-west-1' => [ 'variants' => [ [ 'hostname' => 'xray-fips.us-gov-west-1.amazonaws.com', 'tags' => [ 'fips', ], ], ], ], ], ], ], ], [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'c2s.ic.gov', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'dnsSuffix' => 'c2s.ic.gov', 'partition' => 'aws-iso', 'partitionName' => 'AWS ISO (US)', 'regionRegex' => '^us\\-iso\\-\\w+\\-\\d+$', 'regions' => [ 'us-iso-east-1' => [ 'description' => 'US ISO East', ], 'us-iso-west-1' => [ 'description' => 'US ISO WEST', ], ], 'services' => [ 'acm' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'acm-pca' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'agreement-marketplace' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'agreement-marketplace-fips.us-iso-east-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'agreement-marketplace-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'api.ecr' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'api.ecr.us-iso-east-1.c2s.ic.gov', ], 'us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'hostname' => 'api.ecr.us-iso-west-1.c2s.ic.gov', ], ], ], 'api.pricing' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'pricing', ], ], 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'api.sagemaker' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'apigateway' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'appconfigdata' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'application-autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'appstream2' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'athena' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'autoscaling' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'protocols' => [ 'http', 'https', ], ], 'us-iso-west-1' => [], ], ], 'backup' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'batch' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'bedrock' => [ 'endpoints' => [ 'bedrock-runtime-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'bedrock-runtime.us-iso-east-1.c2s.ic.gov', ], 'bedrock-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'bedrock.us-iso-east-1.c2s.ic.gov', ], 'us-iso-east-1' => [], ], ], 'budgets' => [ 'endpoints' => [ 'aws-iso-global' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'budgets.c2s.ic.gov', ], 'us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'budgets.c2s.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-global', ], 'ce' => [ 'endpoints' => [ 'aws-iso-global' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'ce.us-iso-east-1.c2s.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-global', ], 'cloudcontrolapi' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'cloudformation' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'cloudtrail' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'cloudtrail-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'cloudtrail-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudtrail-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'cloudtrail-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'codebuild' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'codedeploy' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'comprehend' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'comprehend-fips.us-iso-east-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'comprehend-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'config' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'config-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'config-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'config-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'config-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'cost-optimization-hub' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'datapipeline' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'datasync' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'datasync-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'datasync-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'directconnect' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'dlm' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'dms' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'dms.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'dms' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'dms.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'dms-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'dms.us-iso-east-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'dms.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'dms.us-iso-east-1.c2s.ic.gov', ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'dms.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'dms.us-iso-west-1.c2s.ic.gov', ], ], ], 'ds' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'dynamodb' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'protocols' => [ 'http', 'https', ], ], 'us-iso-west-1' => [], ], ], 'ebs' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'ec2' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'ecs' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'eks' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'elasticache' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'elasticloadbalancing' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'protocols' => [ 'http', 'https', ], ], 'us-iso-west-1' => [], ], ], 'elasticmapreduce' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'protocols' => [ 'https', ], 'variants' => [ [ 'hostname' => 'elasticmapreduce.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'emr-serverless' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'es' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'events' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'firehose' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'fsx' => [ 'endpoints' => [ 'fips-prod-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'fsx-fips.us-iso-east-1.c2s.ic.gov', ], 'prod-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'fsx-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'fsx-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [], ], ], 'glacier' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'glacier-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'glacier-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'glacier-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'glacier-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'glue' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'guardduty' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], 'isRegionalized' => true, ], 'health' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'iam' => [ 'endpoints' => [ 'aws-iso-global' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'iam.us-iso-east-1.c2s.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-global', ], 'kinesis' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'kinesisanalytics' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'kinesisvideo' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'kms' => [ 'endpoints' => [ 'ProdFips' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-iso-east-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-iso-east-1.c2s.ic.gov', ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-iso-west-1.c2s.ic.gov', ], ], ], 'lakeformation' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'lambda' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'license-manager' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'logs' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'medialive' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'medialive-fips.us-iso-east-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'medialive-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'mediapackage' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'monitoring' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'mq' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'network-firewall' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'oam' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'organizations' => [ 'endpoints' => [ 'aws-iso-global' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'organizations.us-iso-east-1.c2s.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-global', ], 'outposts' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'pi' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'protocols' => [ 'https', ], ], 'us-iso-west-1' => [ 'protocols' => [ 'https', ], ], ], ], 'ram' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'rbin' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'rds' => [ 'endpoints' => [ 'rds.us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'rds.us-iso-east-1.c2s.ic.gov', ], 'rds.us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'rds.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'rds.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'rds.us-iso-east-1.c2s.ic.gov', ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'rds.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'rds.us-iso-west-1.c2s.ic.gov', ], ], ], 'redshift' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'redshift.us-iso-east-1.c2s.ic.gov', ], 'us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'hostname' => 'redshift.us-iso-west-1.c2s.ic.gov', ], ], ], 'resource-groups' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'route53' => [ 'endpoints' => [ 'aws-iso-global' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'route53.c2s.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-global', ], 'route53resolver' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'runtime.sagemaker' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 's3' => [ 'defaults' => [ 'signatureVersions' => [ 's3v4', ], ], 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 's3-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 's3-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'protocols' => [ 'http', 'https', ], 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-fips.dualstack.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 's3-fips.dualstack.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 's3-control' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'signatureVersions' => [ 's3v4', ], ], 'endpoints' => [ 'us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 's3-control.us-iso-east-1.c2s.ic.gov', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'dualstack', ], ], ], ], 'us-iso-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-iso-east-1.c2s.ic.gov', 'signatureVersions' => [ 's3v4', ], ], 'us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'hostname' => 's3-control.us-iso-west-1.c2s.ic.gov', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'dualstack', ], ], ], ], 'us-iso-west-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-iso-west-1.c2s.ic.gov', 'signatureVersions' => [ 's3v4', ], ], ], ], 's3-outposts' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'deprecated' => true, ], 'us-iso-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], ], ], 'scheduler' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-iso-east-1-fips' => [ 'deprecated' => true, ], 'us-iso-west-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1-fips' => [ 'deprecated' => true, ], ], ], 'securityhub' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'servicediscovery' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'servicequotas' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'snowball' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'sns' => [ 'endpoints' => [ 'us-iso-east-1' => [ 'protocols' => [ 'http', 'https', ], ], 'us-iso-west-1' => [], ], ], 'sqs' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'sqs.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'sqs.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'protocols' => [ 'http', 'https', ], 'variants' => [ [ 'hostname' => 'sqs.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'sqs.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'ssm' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'states' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'states-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'states-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'storagegateway' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'streams.dynamodb' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'dynamodb', ], ], 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'sts' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'support' => [ 'endpoints' => [ 'aws-iso-global' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'hostname' => 'support.us-iso-east-1.c2s.ic.gov', ], ], 'partitionEndpoint' => 'aws-iso-global', ], 'swf' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'swf-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'swf-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'swf-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'swf-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'synthetics' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'tagging' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], 'textract' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'transcribe' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'fips.transcribe.us-iso-east-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'fips.transcribe.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'transcribestreaming' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'translate' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'translate-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'translate-fips.us-iso-east-1.c2s.ic.gov', ], ], ], 'wafv2' => [ 'endpoints' => [ 'us-iso-east-1' => [], ], ], 'workspaces' => [ 'endpoints' => [ 'fips-us-iso-east-1' => [ 'credentialScope' => [ 'region' => 'us-iso-east-1', ], 'deprecated' => true, 'hostname' => 'workspaces-fips.us-iso-east-1.c2s.ic.gov', ], 'fips-us-iso-west-1' => [ 'credentialScope' => [ 'region' => 'us-iso-west-1', ], 'deprecated' => true, 'hostname' => 'workspaces-fips.us-iso-west-1.c2s.ic.gov', ], 'us-iso-east-1' => [ 'variants' => [ [ 'hostname' => 'workspaces-fips.us-iso-east-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-iso-west-1' => [ 'variants' => [ [ 'hostname' => 'workspaces-fips.us-iso-west-1.c2s.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'xray' => [ 'endpoints' => [ 'us-iso-east-1' => [], 'us-iso-west-1' => [], ], ], ], ], [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'sc2s.sgov.gov', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'dnsSuffix' => 'sc2s.sgov.gov', 'partition' => 'aws-iso-b', 'partitionName' => 'AWS ISOB (US)', 'regionRegex' => '^us\\-isob\\-\\w+\\-\\d+$', 'regions' => [ 'us-isob-east-1' => [ 'description' => 'US ISOB East (Ohio)', ], 'us-isob-west-1' => [ 'description' => 'US ISOB West', ], ], 'services' => [ 'acm' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'agreement-marketplace' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'api.ecr' => [ 'endpoints' => [ 'us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'api.ecr.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-west-1' => [], ], ], 'api.pricing' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'pricing', ], ], 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'api.sagemaker' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'apigateway' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'appconfigdata' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'application-autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'appstream2' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'athena' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'backup' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'batch' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'bedrock' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'budgets' => [ 'endpoints' => [ 'aws-iso-b-global' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'budgets.global.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'budgets.global.sc2s.sgov.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-b-global', ], 'ce' => [ 'endpoints' => [ 'aws-iso-b-global' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'ce.us-isob-east-1.sc2s.sgov.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-b-global', ], 'cloudcontrolapi' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'cloudformation' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'cloudtrail' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'cloudtrail-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'cloudtrail-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'codebuild' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'codedeploy' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'config' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'config-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'config-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'cost-optimization-hub' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'datasync' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'directconnect' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'dlm' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'dms' => [ 'defaults' => [ 'variants' => [ [ 'hostname' => 'dms.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'endpoints' => [ 'dms' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'dms.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'dms-fips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'dms.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'dms.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'dms.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-west-1' => [], ], ], 'ds' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'ds-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'ds-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'dynamodb' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'ebs' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'ec2' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'ecs' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'eks' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'elasticache' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'elasticloadbalancing' => [ 'endpoints' => [ 'us-isob-east-1' => [ 'protocols' => [ 'https', ], ], 'us-isob-west-1' => [], ], ], 'elasticmapreduce' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'elasticmapreduce.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticmapreduce.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'emr-serverless' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'es' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'events' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'firehose' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'fsx' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'glacier' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'glacier-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'glacier-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'glue' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'guardduty' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'health' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'iam' => [ 'endpoints' => [ 'aws-iso-b-global' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'iam.us-isob-east-1.sc2s.sgov.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-b-global', ], 'kinesis' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'kinesisanalytics' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'kms' => [ 'endpoints' => [ 'ProdFips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-west-1' => [], ], ], 'lakeformation' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'lambda' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'license-manager' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'logs' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'medialive' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'medialive-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'medialive-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'mediapackage' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'metering.marketplace' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'aws-marketplace', ], ], 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'monitoring' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'network-firewall' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'oam' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'organizations' => [ 'endpoints' => [ 'aws-iso-b-global' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'organizations.us-isob-east-1.sc2s.sgov.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-b-global', ], 'outposts' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'pi' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'ram' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'rbin' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'rbin-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'rbin-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'rds' => [ 'endpoints' => [ 'rds.us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'rds.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'rds.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'rds.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-west-1' => [], ], ], 'redshift' => [ 'endpoints' => [ 'us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'redshift.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-west-1' => [], ], ], 'resource-groups' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'route53' => [ 'endpoints' => [ 'aws-iso-b-global' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'route53.sc2s.sgov.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-b-global', ], 'route53resolver' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'runtime.sagemaker' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 's3' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'signatureVersions' => [ 's3v4', ], ], 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 's3-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 's3-fips.dualstack.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 's3-control' => [ 'defaults' => [ 'protocols' => [ 'https', ], 'signatureVersions' => [ 's3v4', ], ], 'endpoints' => [ 'us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 's3-control.us-isob-east-1.sc2s.sgov.gov', 'signatureVersions' => [ 's3v4', ], 'variants' => [ [ 'hostname' => 's3-control-fips.dualstack.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'dualstack', 'fips', ], ], [ 'hostname' => 's3-control-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], [ 'hostname' => 's3-control.dualstack.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'dualstack', ], ], ], ], 'us-isob-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 's3-control-fips.us-isob-east-1.sc2s.sgov.gov', 'signatureVersions' => [ 's3v4', ], ], ], ], 's3-outposts' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'deprecated' => true, ], 'us-isob-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], ], ], 'scheduler' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'us-isob-east-1' => [ 'variants' => [ [ 'tags' => [ 'fips', ], ], ], ], 'us-isob-east-1-fips' => [ 'deprecated' => true, ], 'us-isob-west-1' => [], ], ], 'securityhub' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'servicediscovery' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'servicequotas' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'snowball' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'sns' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'sqs' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'sslCommonName' => '{region}.queue.{dnsSuffix}', ], 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'sqs.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'sqs.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'ssm' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'states' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'states-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'states-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'storagegateway' => [ 'endpoints' => [ 'fips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'storagegateway-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'storagegateway-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-west-1' => [], ], ], 'streams.dynamodb' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'dynamodb', ], 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'sts' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'support' => [ 'endpoints' => [ 'aws-iso-b-global' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'hostname' => 'support.us-isob-east-1.sc2s.sgov.gov', ], ], 'partitionEndpoint' => 'aws-iso-b-global', ], 'swf' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'swf-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'swf-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isob-west-1' => [], ], ], 'synthetics' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'tagging' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], 'wafv2' => [ 'endpoints' => [ 'us-isob-east-1' => [], ], ], 'workspaces' => [ 'endpoints' => [ 'fips-us-isob-east-1' => [ 'credentialScope' => [ 'region' => 'us-isob-east-1', ], 'deprecated' => true, 'hostname' => 'workspaces-fips.us-isob-east-1.sc2s.sgov.gov', ], 'us-isob-east-1' => [ 'variants' => [ [ 'hostname' => 'workspaces-fips.us-isob-east-1.sc2s.sgov.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'xray' => [ 'endpoints' => [ 'us-isob-east-1' => [], 'us-isob-west-1' => [], ], ], ], ], [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'cloud.adc-e.uk', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'dnsSuffix' => 'cloud.adc-e.uk', 'partition' => 'aws-iso-e', 'partitionName' => 'AWS ISOE (Europe)', 'regionRegex' => '^eu\\-isoe\\-\\w+\\-\\d+$', 'regions' => [ 'eu-isoe-west-1' => [ 'description' => 'EU ISOE West', ], ], 'services' => [ 'access-analyzer' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.eu-isoe-west-1.api.cloud-aws.adc-e.uk', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'acm' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'acm-pca' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'api.ecr' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'api.ecr.eu-isoe-west-1.cloud.adc-e.uk', ], ], ], 'api.pricing' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'pricing', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'api.sagemaker' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'apigateway' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'appconfigdata' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'application-autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'athena' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'batch' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'budgets' => [ 'endpoints' => [ 'aws-iso-e-global' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'budgets.global.cloud.adc-e.uk', ], 'eu-isoe-west-1' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'budgets.global.cloud.adc-e.uk', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-e-global', ], 'cloudcontrolapi' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'cloudformation' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'cloudtrail' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'cloudtrail-data' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'codedeploy' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'compute-optimizer.eu-isoe-west-1.cloud.adc-e.uk', ], ], ], 'config' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'cost-optimization-hub' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'cost-optimization-hub.eu-isoe-west-1.cloud.adc-e.uk', ], ], ], 'directconnect' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'dlm' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'dms' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'ds' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'dynamodb' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'ebs' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'ec2' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'ecs' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'eks' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'elasticache' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.eu-isoe-west-1.cloud.adc-e.uk', 'tags' => [ 'fips', ], ], ], ], 'fips-eu-isoe-west-1' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.eu-isoe-west-1.cloud.adc-e.uk', ], ], ], 'elasticloadbalancing' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'elasticmapreduce' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'emr-serverless' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'es' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'events' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'firehose' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'glue' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'health' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'deprecated' => true, ], ], ], 'kinesis' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'kms' => [ 'endpoints' => [ 'ProdFips' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-isoe-west-1.cloud.adc-e.uk', ], 'eu-isoe-west-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.eu-isoe-west-1.cloud.adc-e.uk', 'tags' => [ 'fips', ], ], ], ], 'eu-isoe-west-1-fips' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.eu-isoe-west-1.cloud.adc-e.uk', ], ], ], 'lakeformation' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'lambda' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'variants' => [ [ 'hostname' => 'lambda.eu-isoe-west-1.api.cloud-aws.adc-e.uk', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'license-manager' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'logs' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'monitoring' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'oam' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'organizations' => [ 'endpoints' => [ 'aws-iso-e-global' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'organizations.eu-isoe-west-1.cloud.adc-e.uk', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-e-global', ], 'pi' => [ 'endpoints' => [ 'eu-isoe-west-1' => [ 'protocols' => [ 'https', ], ], ], ], 'pipes' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'ram' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'rbin' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'rds' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'redshift' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'redshift-serverless' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'rekognition' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'resource-groups' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'rolesanywhere' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'route53' => [ 'endpoints' => [ 'aws-iso-e-global' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'route53.cloud.adc-e.uk', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-e-global', ], 'route53profiles' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'route53resolver' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 's3' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'signatureVersions' => [ 's3v4', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'savingsplans' => [ 'endpoints' => [ 'aws-iso-e-global' => [ 'credentialScope' => [ 'region' => 'eu-isoe-west-1', ], 'hostname' => 'savingsplans.cloud.adc-e.uk', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-e-global', ], 'scheduler' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'schemas' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'servicecatalog' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'servicediscovery' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'servicequotas' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'sns' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'sqs' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'sslCommonName' => '{region}.queue.{dnsSuffix}', ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'ssm' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'states' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'streams.dynamodb' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'dynamodb', ], 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'sts' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'swf' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'synthetics' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'tagging' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'trustedadvisor' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], 'xray' => [ 'endpoints' => [ 'eu-isoe-west-1' => [], ], ], ], ], [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'csp.hci.ic.gov', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], ], ], 'dnsSuffix' => 'csp.hci.ic.gov', 'partition' => 'aws-iso-f', 'partitionName' => 'AWS ISOF', 'regionRegex' => '^us\\-isof\\-\\w+\\-\\d+$', 'regions' => [ 'us-isof-east-1' => [ 'description' => 'US ISOF EAST', ], 'us-isof-south-1' => [ 'description' => 'US ISOF SOUTH', ], ], 'services' => [ 'access-analyzer' => [ 'endpoints' => [ 'us-isof-east-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.us-isof-east-1.api.aws.hci.ic.gov', 'tags' => [ 'dualstack', ], ], ], ], 'us-isof-south-1' => [ 'variants' => [ [ 'hostname' => 'access-analyzer.us-isof-south-1.api.aws.hci.ic.gov', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'acm' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'acm-pca' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'agreement-marketplace' => [ 'endpoints' => [ 'us-isof-south-1' => [], ], ], 'api.ecr' => [ 'endpoints' => [ 'us-isof-east-1' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'hostname' => 'api.ecr.us-isof-east-1.csp.hci.ic.gov', ], 'us-isof-south-1' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'api.ecr.us-isof-south-1.csp.hci.ic.gov', ], ], ], 'api.pricing' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'pricing', ], ], 'endpoints' => [ 'us-isof-south-1' => [], ], ], 'api.sagemaker' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'appconfigdata' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'application-autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'athena' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'autoscaling' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'backup' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'batch' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'bedrock' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'budgets' => [ 'endpoints' => [ 'aws-iso-f-global' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'budgets.global.csp.hci.ic.gov', ], 'us-isof-south-1' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'budgets.global.csp.hci.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-f-global', ], 'ce' => [ 'endpoints' => [ 'aws-iso-f-global' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'ce.us-isof-south-1.csp.hci.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-f-global', ], 'cloudcontrolapi' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'cloudformation' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'cloudtrail' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'cloudtrail-data' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'codebuild' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'codedeploy' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'codepipeline' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'comprehend' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'compute-optimizer.us-isof-south-1.csp.hci.ic.gov', ], ], ], 'config' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'cost-optimization-hub' => [ 'endpoints' => [ 'us-isof-south-1' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'cost-optimization-hub.us-isof-south-1.csp.hci.ic.gov', ], ], ], 'directconnect' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'dlm' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'dms' => [ 'endpoints' => [ 'dms' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'deprecated' => true, 'variants' => [ [ 'hostname' => 'dms.us-isof-east-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'dms-fips' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'deprecated' => true, 'hostname' => 'dms.us-isof-east-1.csp.hci.ic.gov', ], 'us-isof-east-1' => [ 'variants' => [ [ 'hostname' => 'dms.us-isof-east-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isof-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'deprecated' => true, 'hostname' => 'dms.us-isof-east-1.csp.hci.ic.gov', ], 'us-isof-south-1' => [ 'variants' => [ [ 'hostname' => 'dms.us-isof-south-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isof-south-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'deprecated' => true, 'hostname' => 'dms.us-isof-south-1.csp.hci.ic.gov', ], ], ], 'ds' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'dynamodb' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'ebs' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'ec2' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'ecs' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'eks' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'elasticache' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'fips-us-isof-east-1' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-isof-east-1.csp.hci.ic.gov', ], 'fips-us-isof-south-1' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'deprecated' => true, 'hostname' => 'elasticfilesystem-fips.us-isof-south-1.csp.hci.ic.gov', ], 'us-isof-east-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-isof-east-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isof-south-1' => [ 'variants' => [ [ 'hostname' => 'elasticfilesystem-fips.us-isof-south-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'elasticloadbalancing' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'elasticmapreduce' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'es' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'events' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'firehose' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'fsx' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'glue' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'guardduty' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], 'isRegionalized' => true, ], 'health' => [ 'endpoints' => [ 'us-isof-south-1' => [ 'deprecated' => true, ], ], ], 'iam' => [ 'endpoints' => [ 'aws-iso-f-global' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'iam.us-isof-south-1.csp.hci.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-f-global', ], 'identitystore' => [ 'endpoints' => [ 'us-isof-east-1' => [], ], ], 'kinesis' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'kms' => [ 'endpoints' => [ 'ProdFips' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-isof-east-1.csp.hci.ic.gov', ], 'us-isof-east-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-isof-east-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isof-east-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-isof-east-1.csp.hci.ic.gov', ], 'us-isof-south-1' => [ 'variants' => [ [ 'hostname' => 'kms-fips.us-isof-south-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isof-south-1-fips' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'deprecated' => true, 'hostname' => 'kms-fips.us-isof-south-1.csp.hci.ic.gov', ], ], ], 'lakeformation' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'lambda' => [ 'endpoints' => [ 'us-isof-east-1' => [ 'variants' => [ [ 'hostname' => 'lambda.us-isof-east-1.api.aws.hci.ic.gov', 'tags' => [ 'dualstack', ], ], ], ], 'us-isof-south-1' => [ 'variants' => [ [ 'hostname' => 'lambda.us-isof-south-1.api.aws.hci.ic.gov', 'tags' => [ 'dualstack', ], ], ], ], ], ], 'license-manager' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'logs' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'monitoring' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'oam' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'organizations' => [ 'endpoints' => [ 'aws-iso-f-global' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'organizations.us-isof-south-1.csp.hci.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-f-global', ], 'pi' => [ 'endpoints' => [ 'us-isof-east-1' => [ 'protocols' => [ 'https', ], ], 'us-isof-south-1' => [ 'protocols' => [ 'https', ], ], ], ], 'pipes' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'quicksight' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'ram' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'rbin' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'rds' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'redshift' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'redshift-serverless' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'rekognition' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'resource-groups' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'rolesanywhere' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'route53' => [ 'endpoints' => [ 'aws-iso-f-global' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'route53.csp.hci.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-f-global', ], 'route53profiles' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'route53resolver' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'runtime.sagemaker' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 's3' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'signatureVersions' => [ 's3v4', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'savingsplans' => [ 'endpoints' => [ 'aws-iso-f-global' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'hostname' => 'savingsplans.csp.hci.ic.gov', ], ], 'isRegionalized' => false, 'partitionEndpoint' => 'aws-iso-f-global', ], 'scheduler' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'schemas' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'securityhub' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'servicediscovery' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'servicequotas' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'sns' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'sqs' => [ 'defaults' => [ 'protocols' => [ 'http', 'https', ], 'sslCommonName' => '{region}.queue.{dnsSuffix}', ], 'endpoints' => [ 'fips-us-isof-east-1' => [ 'credentialScope' => [ 'region' => 'us-isof-east-1', ], 'deprecated' => true, 'hostname' => 'sqs.us-isof-east-1.csp.hci.ic.gov', ], 'fips-us-isof-south-1' => [ 'credentialScope' => [ 'region' => 'us-isof-south-1', ], 'deprecated' => true, 'hostname' => 'sqs.us-isof-south-1.csp.hci.ic.gov', ], 'us-isof-east-1' => [ 'variants' => [ [ 'hostname' => 'sqs.us-isof-east-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], 'us-isof-south-1' => [ 'variants' => [ [ 'hostname' => 'sqs.us-isof-south-1.csp.hci.ic.gov', 'tags' => [ 'fips', ], ], ], ], ], ], 'ssm' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'states' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'streams.dynamodb' => [ 'defaults' => [ 'credentialScope' => [ 'service' => 'dynamodb', ], 'protocols' => [ 'http', 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'sts' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'swf' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'synthetics' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'tagging' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'textract' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'transcribe' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'transcribestreaming' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'translate' => [ 'defaults' => [ 'protocols' => [ 'https', ], ], 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], 'trustedadvisor' => [ 'endpoints' => [ 'us-isof-south-1' => [], ], ], 'xray' => [ 'endpoints' => [ 'us-isof-east-1' => [], 'us-isof-south-1' => [], ], ], ], ], [ 'defaults' => [ 'hostname' => '{service}.{region}.{dnsSuffix}', 'protocols' => [ 'https', ], 'signatureVersions' => [ 'v4', ], 'variants' => [ [ 'dnsSuffix' => 'amazonaws.eu', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'fips', ], ], [ 'dnsSuffix' => 'api.amazonwebservices.eu', 'hostname' => '{service}-fips.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', 'fips', ], ], [ 'dnsSuffix' => 'api.amazonwebservices.eu', 'hostname' => '{service}.{region}.{dnsSuffix}', 'tags' => [ 'dualstack', ], ], ], ], 'dnsSuffix' => 'amazonaws.eu', 'partition' => 'aws-eusc', 'partitionName' => 'AWS EUSC', 'regionRegex' => '^eusc\\-(de)\\-\\w+\\-\\d+$', 'regions' => [ 'eusc-de-east-1' => [ 'description' => 'AWS European Sovereign Cloud (Germany)', ], ], 'services' => [ 'access-analyzer' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'acm' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'acm-pca' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'agreement-marketplace' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'api.ecr' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'api.pricing' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'api.sagemaker' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'apigateway' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'appconfig' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'appconfigdata' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'application-autoscaling' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'arc-zonal-shift' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'athena' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'autoscaling' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'backup' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'batch' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'bedrock' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'cloudcontrolapi' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'cloudformation' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'cloudtrail' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'codedeploy' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'cognito-identity' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'cognito-idp' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'compute-optimizer' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'config' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'controltower' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'cost-optimization-hub' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'datasync' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'datazone' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'directconnect' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'dlm' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'dms' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'drs' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'ds' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'dynamodb' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'ebs' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'ec2' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'ecs' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'eks' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'eks-auth' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'elasticache' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'elasticfilesystem' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'elasticloadbalancing' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'elasticmapreduce' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'email' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'emr-serverless' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'entitlement.marketplace' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'es' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'events' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'firehose' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'fsx' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'gameliftstreams' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'glue' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'guardduty' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'health' => [ 'endpoints' => [ 'eusc-de-east-1' => [ 'deprecated' => true, ], ], ], 'identitystore' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'internetmonitor' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'kafka' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'kendra-ranking' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'kinesis' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'kinesisanalytics' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'kms' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'lakeformation' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'lambda' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'license-manager' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'logs' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'metering.marketplace' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'metrics.sagemaker' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'monitoring' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'mq' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'network-firewall' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'notifications' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'oam' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'oidc' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'pi' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'polly' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'portal.sso' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'qbusiness' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'ram' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'rbin' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'rds' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'redshift' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'redshift-serverless' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'resource-groups' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'rolesanywhere' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'route53profiles' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'route53resolver' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'rum' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'runtime.sagemaker' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 's3' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 's3-control' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'scheduler' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'secretsmanager' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'securityhub' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'servicediscovery' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'servicequotas' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'signer' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'sms-voice' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'sns' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'sqs' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'ssm' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'sso' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'states' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'storagegateway' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'streams.dynamodb' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'sts' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'swf' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'synthetics' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'tagging' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'transfer' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'trustedadvisor' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'wafv2' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], 'xray' => [ 'endpoints' => [ 'eusc-de-east-1' => [], ], ], ], ], ], 'version' => 3,]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/endpoints_prefix_history.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/endpoints_prefix_history.json.php deleted file mode 100644 index 3e8b7c04e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/endpoints_prefix_history.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'api.ecr' => [ 'ecr', ], 'api.elastic-inference' => [ 'elastic-inference', ], 'api.sagemaker' => [ 'sagemaker', ], 'ecr' => [ 'api.ecr', ], 'elastic-inference' => [ 'api.elastic-inference', ], 'sagemaker' => [ 'api.sagemaker', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/grandfathered-services.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/grandfathered-services.json.php deleted file mode 100644 index 4a2556ca9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/grandfathered-services.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'AccessAnalyzer', 'Account', 'ACMPCA', 'ACM', 'PrometheusService', 'Amplify', 'AmplifyBackend', 'AmplifyUIBuilder', 'APIGateway', 'ApiGatewayManagementApi', 'ApiGatewayV2', 'AppConfig', 'AppConfigData', 'Appflow', 'AppIntegrationsService', 'ApplicationAutoScaling', 'ApplicationInsights', 'ApplicationCostProfiler', 'AppMesh', 'AppRunner', 'AppStream', 'AppSync', 'Athena', 'AuditManager', 'AutoScalingPlans', 'AutoScaling', 'BackupGateway', 'Backup', 'Batch', 'BillingConductor', 'Braket', 'Budgets', 'CostExplorer', 'ChimeSDKIdentity', 'ChimeSDKMediaPipelines', 'ChimeSDKMeetings', 'ChimeSDKMessaging', 'Chime', 'Cloud9', 'CloudControlApi', 'CloudDirectory', 'CloudFormation', 'CloudFront', 'CloudHSM', 'CloudHSMV2', 'CloudSearch', 'CloudSearchDomain', 'CloudTrail', 'CodeArtifact', 'CodeBuild', 'CodeCommit', 'CodeDeploy', 'CodeGuruReviewer', 'CodeGuruProfiler', 'CodePipeline', 'CodeStarconnections', 'CodeStarNotifications', 'CodeStar', 'CognitoIdentity', 'CognitoIdentityProvider', 'CognitoSync', 'Comprehend', 'ComprehendMedical', 'ComputeOptimizer', 'ConfigService', 'ConnectContactLens', 'Connect', 'ConnectCampaignService', 'ConnectParticipant', 'CostandUsageReportService', 'CustomerProfiles', 'IoTDataPlane', 'GlueDataBrew', 'DataExchange', 'DataPipeline', 'DataSync', 'DAX', 'Detective', 'DeviceFarm', 'DevOpsGuru', 'DirectConnect', 'ApplicationDiscoveryService', 'DLM', 'DatabaseMigrationService', 'DocDB', 'drs', 'DirectoryService', 'DynamoDB', 'EBS', 'EC2InstanceConnect', 'EC2', 'ECRPublic', 'ECR', 'ECS', 'EKS', 'ElastiCache', 'ElasticBeanstalk', 'EFS', 'ElasticLoadBalancing', 'ElasticLoadBalancingv2', 'EMR', 'SES', 'EMRContainers', 'EMRServerless', 'MarketplaceEntitlementService', 'ElasticsearchService', 'EventBridge', 'CloudWatchEvents', 'FinSpaceData', 'finspace', 'Firehose', 'FIS', 'FMS', 'ForecastService', 'ForecastQueryService', 'FraudDetector', 'FSx', 'GameLift', 'Glacier', 'GlobalAccelerator', 'Glue', 'ManagedGrafana', 'Greengrass', 'GreengrassV2', 'GroundStation', 'GuardDuty', 'Health', 'HealthLake', 'IAM', 'IdentityStore', 'imagebuilder', 'ImportExport', 'Inspector', 'Inspector2', 'IoTJobsDataPlane', 'IoT', 'IoTDeviceAdvisor', 'IoTSecureTunneling', 'IoTSiteWise', 'IoTThingsGraph', 'IoTTwinMaker', 'IoTWireless', 'IVS', 'ivschat', 'Kafka', 'KafkaConnect', 'kendra', 'Keyspaces', 'KinesisVideoArchivedMedia', 'KinesisVideoMedia', 'KinesisVideoSignalingChannels', 'Kinesis', 'KinesisAnalytics', 'KinesisAnalyticsV2', 'KinesisVideo', 'KMS', 'LakeFormation', 'Lambda', 'LexModelBuildingService', 'LicenseManager', 'Lightsail', 'LocationService', 'CloudWatchLogs', 'LookoutEquipment', 'MainframeModernization', 'MachineLearning', 'Macie2', 'ManagedBlockchain', 'MarketplaceCatalog', 'MarketplaceCommerceAnalytics', 'MediaConnect', 'MediaConvert', 'MediaLive', 'MediaPackageVod', 'MediaPackage', 'MediaStoreData', 'MediaStore', 'MediaTailor', 'MemoryDB', 'MarketplaceMetering', 'MigrationHub', 'mgn', 'MigrationHubRefactorSpaces', 'MigrationHubConfig', 'MigrationHubStrategyRecommendations', 'LexModelsV2', 'CloudWatch', 'MQ', 'MTurk', 'MWAA', 'Neptune', 'NetworkFirewall', 'NetworkManager', 'OpenSearchService', 'Organizations', 'Outposts', 'PersonalizeEvents', 'PersonalizeRuntime', 'Personalize', 'PI', 'PinpointEmail', 'PinpointSMSVoiceV2', 'Pinpoint', 'Polly', 'Pricing', 'Proton', 'QuickSight', 'RAM', 'RecycleBin', 'RDSDataService', 'RDS', 'RedshiftDataAPIService', 'RedshiftServerless', 'Redshift', 'Rekognition', 'ResilienceHub', 'ResourceGroups', 'ResourceGroupsTaggingAPI', 'Route53RecoveryCluster', 'Route53RecoveryControlConfig', 'Route53RecoveryReadiness', 'Route53', 'Route53Domains', 'Route53Resolver', 'CloudWatchRUM', 'LexRuntimeV2', 'LexRuntimeService', 'SageMakerRuntime', 'S3', 'S3Control', 'S3Outposts', 'AugmentedAIRuntime', 'SagemakerEdgeManager', 'SageMakerFeatureStoreRuntime', 'SageMaker', 'SavingsPlans', 'Schemas', 'SecretsManager', 'SecurityHub', 'ServerlessApplicationRepository', 'ServiceQuotas', 'AppRegistry', 'ServiceCatalog', 'ServiceDiscovery', 'SESV2', 'Shield', 'signer', 'PinpointSMSVoice', 'SnowDeviceManagement', 'Snowball', 'SNS', 'SQS', 'SSMContacts', 'SSMIncidents', 'SSM', 'SSOAdmin', 'SSOOIDC', 'SSO', 'SFN', 'StorageGateway', 'DynamoDBStreams', 'STS', 'Support', 'SWF', 'Synthetics', 'Textract', 'TimestreamQuery', 'TimestreamWrite', 'TranscribeService', 'Transfer', 'Translate', 'VoiceID', 'WAFRegional', 'WAF', 'WAFV2', 'WellArchitected', 'ConnectWisdomService', 'WorkDocs', 'WorkMail', 'WorkMailMessageFlow', 'WorkSpacesWeb', 'WorkSpaces', 'XRay', ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/api-2.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/api-2.json.php deleted file mode 100644 index 825db3b96..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/api-2.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '2.0', 'metadata' => [ 'apiVersion' => '2014-11-01', 'endpointPrefix' => 'kms', 'jsonVersion' => '1.1', 'protocol' => 'json', 'protocols' => [ 'json', ], 'serviceAbbreviation' => 'KMS', 'serviceFullName' => 'AWS Key Management Service', 'serviceId' => 'KMS', 'signatureVersion' => 'v4', 'targetPrefix' => 'TrentService', 'uid' => 'kms-2014-11-01', 'auth' => [ 'aws.auth#sigv4', ], ], 'operations' => [ 'CancelKeyDeletion' => [ 'name' => 'CancelKeyDeletion', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'CancelKeyDeletionRequest', ], 'output' => [ 'shape' => 'CancelKeyDeletionResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'ConnectCustomKeyStore' => [ 'name' => 'ConnectCustomKeyStore', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ConnectCustomKeyStoreRequest', ], 'output' => [ 'shape' => 'ConnectCustomKeyStoreResponse', ], 'errors' => [ [ 'shape' => 'CloudHsmClusterNotActiveException', ], [ 'shape' => 'CustomKeyStoreInvalidStateException', ], [ 'shape' => 'CustomKeyStoreNotFoundException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'CloudHsmClusterInvalidConfigurationException', ], ], ], 'CreateAlias' => [ 'name' => 'CreateAlias', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'CreateAliasRequest', ], 'errors' => [ [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'AlreadyExistsException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidAliasNameException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'CreateCustomKeyStore' => [ 'name' => 'CreateCustomKeyStore', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'CreateCustomKeyStoreRequest', ], 'output' => [ 'shape' => 'CreateCustomKeyStoreResponse', ], 'errors' => [ [ 'shape' => 'CloudHsmClusterInUseException', ], [ 'shape' => 'CustomKeyStoreNameInUseException', ], [ 'shape' => 'CloudHsmClusterNotFoundException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'CloudHsmClusterNotActiveException', ], [ 'shape' => 'IncorrectTrustAnchorException', ], [ 'shape' => 'CloudHsmClusterInvalidConfigurationException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'XksProxyUriInUseException', ], [ 'shape' => 'XksProxyUriEndpointInUseException', ], [ 'shape' => 'XksProxyUriUnreachableException', ], [ 'shape' => 'XksProxyIncorrectAuthenticationCredentialException', ], [ 'shape' => 'XksProxyVpcEndpointServiceInUseException', ], [ 'shape' => 'XksProxyVpcEndpointServiceNotFoundException', ], [ 'shape' => 'XksProxyVpcEndpointServiceInvalidConfigurationException', ], [ 'shape' => 'XksProxyInvalidResponseException', ], [ 'shape' => 'XksProxyInvalidConfigurationException', ], ], ], 'CreateGrant' => [ 'name' => 'CreateGrant', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'CreateGrantRequest', ], 'output' => [ 'shape' => 'CreateGrantResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'CreateKey' => [ 'name' => 'CreateKey', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'CreateKeyRequest', ], 'output' => [ 'shape' => 'CreateKeyResponse', ], 'errors' => [ [ 'shape' => 'MalformedPolicyDocumentException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'TagException', ], [ 'shape' => 'CustomKeyStoreNotFoundException', ], [ 'shape' => 'CustomKeyStoreInvalidStateException', ], [ 'shape' => 'CloudHsmClusterInvalidConfigurationException', ], [ 'shape' => 'XksKeyInvalidConfigurationException', ], [ 'shape' => 'XksKeyAlreadyInUseException', ], [ 'shape' => 'XksKeyNotFoundException', ], ], ], 'Decrypt' => [ 'name' => 'Decrypt', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DecryptRequest', ], 'output' => [ 'shape' => 'DecryptResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'InvalidCiphertextException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'IncorrectKeyException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'DeleteAlias' => [ 'name' => 'DeleteAlias', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DeleteAliasRequest', ], 'errors' => [ [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'DeleteCustomKeyStore' => [ 'name' => 'DeleteCustomKeyStore', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DeleteCustomKeyStoreRequest', ], 'output' => [ 'shape' => 'DeleteCustomKeyStoreResponse', ], 'errors' => [ [ 'shape' => 'CustomKeyStoreHasCMKsException', ], [ 'shape' => 'CustomKeyStoreInvalidStateException', ], [ 'shape' => 'CustomKeyStoreNotFoundException', ], [ 'shape' => 'KMSInternalException', ], ], ], 'DeleteImportedKeyMaterial' => [ 'name' => 'DeleteImportedKeyMaterial', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DeleteImportedKeyMaterialRequest', ], 'output' => [ 'shape' => 'DeleteImportedKeyMaterialResponse', ], 'errors' => [ [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'DeriveSharedSecret' => [ 'name' => 'DeriveSharedSecret', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DeriveSharedSecretRequest', ], 'output' => [ 'shape' => 'DeriveSharedSecretResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'DescribeCustomKeyStores' => [ 'name' => 'DescribeCustomKeyStores', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DescribeCustomKeyStoresRequest', ], 'output' => [ 'shape' => 'DescribeCustomKeyStoresResponse', ], 'errors' => [ [ 'shape' => 'CustomKeyStoreNotFoundException', ], [ 'shape' => 'InvalidMarkerException', ], [ 'shape' => 'KMSInternalException', ], ], ], 'DescribeKey' => [ 'name' => 'DescribeKey', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DescribeKeyRequest', ], 'output' => [ 'shape' => 'DescribeKeyResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], ], ], 'DisableKey' => [ 'name' => 'DisableKey', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DisableKeyRequest', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'DisableKeyRotation' => [ 'name' => 'DisableKeyRotation', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DisableKeyRotationRequest', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'UnsupportedOperationException', ], ], ], 'DisconnectCustomKeyStore' => [ 'name' => 'DisconnectCustomKeyStore', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DisconnectCustomKeyStoreRequest', ], 'output' => [ 'shape' => 'DisconnectCustomKeyStoreResponse', ], 'errors' => [ [ 'shape' => 'CustomKeyStoreInvalidStateException', ], [ 'shape' => 'CustomKeyStoreNotFoundException', ], [ 'shape' => 'KMSInternalException', ], ], ], 'EnableKey' => [ 'name' => 'EnableKey', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'EnableKeyRequest', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'EnableKeyRotation' => [ 'name' => 'EnableKeyRotation', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'EnableKeyRotationRequest', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'UnsupportedOperationException', ], ], ], 'Encrypt' => [ 'name' => 'Encrypt', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'EncryptRequest', ], 'output' => [ 'shape' => 'EncryptResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'GenerateDataKey' => [ 'name' => 'GenerateDataKey', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GenerateDataKeyRequest', ], 'output' => [ 'shape' => 'GenerateDataKeyResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'GenerateDataKeyPair' => [ 'name' => 'GenerateDataKeyPair', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GenerateDataKeyPairRequest', ], 'output' => [ 'shape' => 'GenerateDataKeyPairResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'GenerateDataKeyPairWithoutPlaintext' => [ 'name' => 'GenerateDataKeyPairWithoutPlaintext', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GenerateDataKeyPairWithoutPlaintextRequest', ], 'output' => [ 'shape' => 'GenerateDataKeyPairWithoutPlaintextResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'GenerateDataKeyWithoutPlaintext' => [ 'name' => 'GenerateDataKeyWithoutPlaintext', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GenerateDataKeyWithoutPlaintextRequest', ], 'output' => [ 'shape' => 'GenerateDataKeyWithoutPlaintextResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'GenerateMac' => [ 'name' => 'GenerateMac', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GenerateMacRequest', ], 'output' => [ 'shape' => 'GenerateMacResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'GenerateRandom' => [ 'name' => 'GenerateRandom', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GenerateRandomRequest', ], 'output' => [ 'shape' => 'GenerateRandomResponse', ], 'errors' => [ [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'CustomKeyStoreNotFoundException', ], [ 'shape' => 'CustomKeyStoreInvalidStateException', ], ], ], 'GetKeyLastUsage' => [ 'name' => 'GetKeyLastUsage', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetKeyLastUsageRequest', ], 'output' => [ 'shape' => 'GetKeyLastUsageResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], ], ], 'GetKeyPolicy' => [ 'name' => 'GetKeyPolicy', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetKeyPolicyRequest', ], 'output' => [ 'shape' => 'GetKeyPolicyResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'GetKeyRotationStatus' => [ 'name' => 'GetKeyRotationStatus', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetKeyRotationStatusRequest', ], 'output' => [ 'shape' => 'GetKeyRotationStatusResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'UnsupportedOperationException', ], ], ], 'GetParametersForImport' => [ 'name' => 'GetParametersForImport', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetParametersForImportRequest', ], 'output' => [ 'shape' => 'GetParametersForImportResponse', ], 'errors' => [ [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'GetPublicKey' => [ 'name' => 'GetPublicKey', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetPublicKeyRequest', ], 'output' => [ 'shape' => 'GetPublicKeyResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'ImportKeyMaterial' => [ 'name' => 'ImportKeyMaterial', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ImportKeyMaterialRequest', ], 'output' => [ 'shape' => 'ImportKeyMaterialResponse', ], 'errors' => [ [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'InvalidCiphertextException', ], [ 'shape' => 'IncorrectKeyMaterialException', ], [ 'shape' => 'ExpiredImportTokenException', ], [ 'shape' => 'InvalidImportTokenException', ], ], ], 'ListAliases' => [ 'name' => 'ListAliases', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListAliasesRequest', ], 'output' => [ 'shape' => 'ListAliasesResponse', ], 'errors' => [ [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidMarkerException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'NotFoundException', ], ], ], 'ListGrants' => [ 'name' => 'ListGrants', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListGrantsRequest', ], 'output' => [ 'shape' => 'ListGrantsResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidMarkerException', ], [ 'shape' => 'InvalidGrantIdException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'ListKeyPolicies' => [ 'name' => 'ListKeyPolicies', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListKeyPoliciesRequest', ], 'output' => [ 'shape' => 'ListKeyPoliciesResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'ListKeyRotations' => [ 'name' => 'ListKeyRotations', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListKeyRotationsRequest', ], 'output' => [ 'shape' => 'ListKeyRotationsResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'InvalidMarkerException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'UnsupportedOperationException', ], ], ], 'ListKeys' => [ 'name' => 'ListKeys', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListKeysRequest', ], 'output' => [ 'shape' => 'ListKeysResponse', ], 'errors' => [ [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'InvalidMarkerException', ], ], ], 'ListResourceTags' => [ 'name' => 'ListResourceTags', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListResourceTagsRequest', ], 'output' => [ 'shape' => 'ListResourceTagsResponse', ], 'errors' => [ [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'InvalidMarkerException', ], ], ], 'ListRetirableGrants' => [ 'name' => 'ListRetirableGrants', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListRetirableGrantsRequest', ], 'output' => [ 'shape' => 'ListGrantsResponse', ], 'errors' => [ [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidMarkerException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'KMSInternalException', ], ], ], 'PutKeyPolicy' => [ 'name' => 'PutKeyPolicy', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'PutKeyPolicyRequest', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'MalformedPolicyDocumentException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'ReEncrypt' => [ 'name' => 'ReEncrypt', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ReEncryptRequest', ], 'output' => [ 'shape' => 'ReEncryptResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'InvalidCiphertextException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'IncorrectKeyException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'ReplicateKey' => [ 'name' => 'ReplicateKey', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ReplicateKeyRequest', ], 'output' => [ 'shape' => 'ReplicateKeyResponse', ], 'errors' => [ [ 'shape' => 'AlreadyExistsException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'MalformedPolicyDocumentException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'TagException', ], [ 'shape' => 'UnsupportedOperationException', ], ], ], 'RetireGrant' => [ 'name' => 'RetireGrant', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'RetireGrantRequest', ], 'errors' => [ [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'InvalidGrantIdException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'RevokeGrant' => [ 'name' => 'RevokeGrant', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'RevokeGrantRequest', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'InvalidGrantIdException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'RotateKeyOnDemand' => [ 'name' => 'RotateKeyOnDemand', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'RotateKeyOnDemandRequest', ], 'output' => [ 'shape' => 'RotateKeyOnDemandResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'UnsupportedOperationException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'ConflictException', ], ], ], 'ScheduleKeyDeletion' => [ 'name' => 'ScheduleKeyDeletion', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ScheduleKeyDeletionRequest', ], 'output' => [ 'shape' => 'ScheduleKeyDeletionResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'Sign' => [ 'name' => 'Sign', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'SignRequest', ], 'output' => [ 'shape' => 'SignResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'TagResource' => [ 'name' => 'TagResource', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'TagResourceRequest', ], 'errors' => [ [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'TagException', ], ], ], 'UntagResource' => [ 'name' => 'UntagResource', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'UntagResourceRequest', ], 'errors' => [ [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'TagException', ], ], ], 'UpdateAlias' => [ 'name' => 'UpdateAlias', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'UpdateAliasRequest', ], 'errors' => [ [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'LimitExceededException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'UpdateCustomKeyStore' => [ 'name' => 'UpdateCustomKeyStore', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'UpdateCustomKeyStoreRequest', ], 'output' => [ 'shape' => 'UpdateCustomKeyStoreResponse', ], 'errors' => [ [ 'shape' => 'CustomKeyStoreNotFoundException', ], [ 'shape' => 'CustomKeyStoreNameInUseException', ], [ 'shape' => 'CloudHsmClusterNotFoundException', ], [ 'shape' => 'CloudHsmClusterNotRelatedException', ], [ 'shape' => 'CustomKeyStoreInvalidStateException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'CloudHsmClusterNotActiveException', ], [ 'shape' => 'CloudHsmClusterInvalidConfigurationException', ], [ 'shape' => 'XksProxyUriInUseException', ], [ 'shape' => 'XksProxyUriEndpointInUseException', ], [ 'shape' => 'XksProxyUriUnreachableException', ], [ 'shape' => 'XksProxyIncorrectAuthenticationCredentialException', ], [ 'shape' => 'XksProxyVpcEndpointServiceInUseException', ], [ 'shape' => 'XksProxyVpcEndpointServiceNotFoundException', ], [ 'shape' => 'XksProxyVpcEndpointServiceInvalidConfigurationException', ], [ 'shape' => 'XksProxyInvalidResponseException', ], [ 'shape' => 'XksProxyInvalidConfigurationException', ], ], ], 'UpdateKeyDescription' => [ 'name' => 'UpdateKeyDescription', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'UpdateKeyDescriptionRequest', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], ], ], 'UpdatePrimaryRegion' => [ 'name' => 'UpdatePrimaryRegion', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'UpdatePrimaryRegionRequest', ], 'errors' => [ [ 'shape' => 'DisabledException', ], [ 'shape' => 'InvalidArnException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'NotFoundException', ], [ 'shape' => 'UnsupportedOperationException', ], ], ], 'Verify' => [ 'name' => 'Verify', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'VerifyRequest', ], 'output' => [ 'shape' => 'VerifyResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'DependencyTimeoutException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'KMSInvalidSignatureException', ], [ 'shape' => 'DryRunOperationException', ], ], ], 'VerifyMac' => [ 'name' => 'VerifyMac', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'VerifyMacRequest', ], 'output' => [ 'shape' => 'VerifyMacResponse', ], 'errors' => [ [ 'shape' => 'NotFoundException', ], [ 'shape' => 'DisabledException', ], [ 'shape' => 'KeyUnavailableException', ], [ 'shape' => 'InvalidKeyUsageException', ], [ 'shape' => 'InvalidGrantTokenException', ], [ 'shape' => 'KMSInternalException', ], [ 'shape' => 'KMSInvalidMacException', ], [ 'shape' => 'KMSInvalidStateException', ], [ 'shape' => 'DryRunOperationException', ], ], ], ], 'shapes' => [ 'AWSAccountIdType' => [ 'type' => 'string', ], 'AccountIdType' => [ 'type' => 'string', 'max' => 12, 'min' => 12, 'pattern' => '[0-9]{12}', ], 'AlgorithmSpec' => [ 'type' => 'string', 'enum' => [ 'RSAES_PKCS1_V1_5', 'RSAES_OAEP_SHA_1', 'RSAES_OAEP_SHA_256', 'RSA_AES_KEY_WRAP_SHA_1', 'RSA_AES_KEY_WRAP_SHA_256', 'SM2PKE', ], ], 'AliasList' => [ 'type' => 'list', 'member' => [ 'shape' => 'AliasListEntry', ], ], 'AliasListEntry' => [ 'type' => 'structure', 'members' => [ 'AliasName' => [ 'shape' => 'AliasNameType', ], 'AliasArn' => [ 'shape' => 'ArnType', ], 'TargetKeyId' => [ 'shape' => 'KeyIdType', ], 'CreationDate' => [ 'shape' => 'DateType', ], 'LastUpdatedDate' => [ 'shape' => 'DateType', ], ], ], 'AliasNameType' => [ 'type' => 'string', 'max' => 256, 'min' => 1, 'pattern' => '^[a-zA-Z0-9:/_-]+$', ], 'AlreadyExistsException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'ArnType' => [ 'type' => 'string', 'max' => 2048, 'min' => 20, ], 'AttestationDocumentType' => [ 'type' => 'blob', 'max' => 262144, 'min' => 1, ], 'BackingKeyIdResponseType' => [ 'type' => 'string', 'max' => 64, 'min' => 0, 'pattern' => '^[a-f0-9]+$', ], 'BackingKeyIdType' => [ 'type' => 'string', 'max' => 64, 'min' => 64, 'pattern' => '^[a-f0-9]+$', ], 'BooleanType' => [ 'type' => 'boolean', ], 'CancelKeyDeletionRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'CancelKeyDeletionResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'CiphertextType' => [ 'type' => 'blob', 'max' => 6144, 'min' => 1, ], 'CloudHsmClusterIdType' => [ 'type' => 'string', 'max' => 24, 'min' => 19, 'pattern' => 'cluster-[2-7a-zA-Z]{11,16}', ], 'CloudHsmClusterInUseException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CloudHsmClusterInvalidConfigurationException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CloudHsmClusterNotActiveException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CloudHsmClusterNotFoundException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CloudHsmClusterNotRelatedException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CloudTrailEventIdType' => [ 'type' => 'string', ], 'ConflictException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'ConnectCustomKeyStoreRequest' => [ 'type' => 'structure', 'required' => [ 'CustomKeyStoreId', ], 'members' => [ 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], ], ], 'ConnectCustomKeyStoreResponse' => [ 'type' => 'structure', 'members' => [], ], 'ConnectionErrorCodeType' => [ 'type' => 'string', 'enum' => [ 'INVALID_CREDENTIALS', 'CLUSTER_NOT_FOUND', 'NETWORK_ERRORS', 'INTERNAL_ERROR', 'INSUFFICIENT_CLOUDHSM_HSMS', 'USER_LOCKED_OUT', 'USER_NOT_FOUND', 'USER_LOGGED_IN', 'SUBNET_NOT_FOUND', 'INSUFFICIENT_FREE_ADDRESSES_IN_SUBNET', 'XKS_PROXY_ACCESS_DENIED', 'XKS_PROXY_NOT_REACHABLE', 'XKS_VPC_ENDPOINT_SERVICE_NOT_FOUND', 'XKS_PROXY_INVALID_RESPONSE', 'XKS_PROXY_INVALID_CONFIGURATION', 'XKS_VPC_ENDPOINT_SERVICE_INVALID_CONFIGURATION', 'XKS_PROXY_TIMED_OUT', 'XKS_PROXY_INVALID_TLS_CONFIGURATION', ], ], 'ConnectionStateType' => [ 'type' => 'string', 'enum' => [ 'CONNECTED', 'CONNECTING', 'FAILED', 'DISCONNECTED', 'DISCONNECTING', ], ], 'CreateAliasRequest' => [ 'type' => 'structure', 'required' => [ 'AliasName', 'TargetKeyId', ], 'members' => [ 'AliasName' => [ 'shape' => 'AliasNameType', ], 'TargetKeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'CreateCustomKeyStoreRequest' => [ 'type' => 'structure', 'required' => [ 'CustomKeyStoreName', ], 'members' => [ 'CustomKeyStoreName' => [ 'shape' => 'CustomKeyStoreNameType', ], 'CloudHsmClusterId' => [ 'shape' => 'CloudHsmClusterIdType', ], 'TrustAnchorCertificate' => [ 'shape' => 'TrustAnchorCertificateType', ], 'KeyStorePassword' => [ 'shape' => 'KeyStorePasswordType', ], 'CustomKeyStoreType' => [ 'shape' => 'CustomKeyStoreType', ], 'XksProxyUriEndpoint' => [ 'shape' => 'XksProxyUriEndpointType', ], 'XksProxyUriPath' => [ 'shape' => 'XksProxyUriPathType', ], 'XksProxyVpcEndpointServiceName' => [ 'shape' => 'XksProxyVpcEndpointServiceNameType', ], 'XksProxyVpcEndpointServiceOwner' => [ 'shape' => 'AccountIdType', ], 'XksProxyAuthenticationCredential' => [ 'shape' => 'XksProxyAuthenticationCredentialType', ], 'XksProxyConnectivity' => [ 'shape' => 'XksProxyConnectivityType', ], ], ], 'CreateCustomKeyStoreResponse' => [ 'type' => 'structure', 'members' => [ 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], ], ], 'CreateGrantRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'Operations', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'GranteePrincipal' => [ 'shape' => 'PrincipalIdType', ], 'RetiringPrincipal' => [ 'shape' => 'PrincipalIdType', ], 'Operations' => [ 'shape' => 'GrantOperationList', ], 'Constraints' => [ 'shape' => 'GrantConstraints', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'Name' => [ 'shape' => 'GrantNameType', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], 'GranteeServicePrincipal' => [ 'shape' => 'ServicePrincipalType', ], 'RetiringServicePrincipal' => [ 'shape' => 'ServicePrincipalType', ], ], ], 'CreateGrantResponse' => [ 'type' => 'structure', 'members' => [ 'GrantToken' => [ 'shape' => 'GrantTokenType', ], 'GrantId' => [ 'shape' => 'GrantIdType', ], ], ], 'CreateKeyRequest' => [ 'type' => 'structure', 'members' => [ 'Policy' => [ 'shape' => 'PolicyType', ], 'Description' => [ 'shape' => 'DescriptionType', ], 'KeyUsage' => [ 'shape' => 'KeyUsageType', ], 'CustomerMasterKeySpec' => [ 'shape' => 'CustomerMasterKeySpec', 'deprecated' => true, 'deprecatedMessage' => 'This parameter has been deprecated. Instead, use the KeySpec parameter.', ], 'KeySpec' => [ 'shape' => 'KeySpec', ], 'Origin' => [ 'shape' => 'OriginType', ], 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], 'BypassPolicyLockoutSafetyCheck' => [ 'shape' => 'BooleanType', ], 'Tags' => [ 'shape' => 'TagList', ], 'MultiRegion' => [ 'shape' => 'NullableBooleanType', ], 'XksKeyId' => [ 'shape' => 'XksKeyIdType', ], ], ], 'CreateKeyResponse' => [ 'type' => 'structure', 'members' => [ 'KeyMetadata' => [ 'shape' => 'KeyMetadata', ], ], ], 'CustomKeyStoreHasCMKsException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CustomKeyStoreIdType' => [ 'type' => 'string', 'max' => 64, 'min' => 1, ], 'CustomKeyStoreInvalidStateException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CustomKeyStoreNameInUseException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CustomKeyStoreNameType' => [ 'type' => 'string', 'max' => 256, 'min' => 1, ], 'CustomKeyStoreNotFoundException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'CustomKeyStoreType' => [ 'type' => 'string', 'enum' => [ 'AWS_CLOUDHSM', 'EXTERNAL_KEY_STORE', ], ], 'CustomKeyStoresList' => [ 'type' => 'list', 'member' => [ 'shape' => 'CustomKeyStoresListEntry', ], ], 'CustomKeyStoresListEntry' => [ 'type' => 'structure', 'members' => [ 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], 'CustomKeyStoreName' => [ 'shape' => 'CustomKeyStoreNameType', ], 'CloudHsmClusterId' => [ 'shape' => 'CloudHsmClusterIdType', ], 'TrustAnchorCertificate' => [ 'shape' => 'TrustAnchorCertificateType', ], 'ConnectionState' => [ 'shape' => 'ConnectionStateType', ], 'ConnectionErrorCode' => [ 'shape' => 'ConnectionErrorCodeType', ], 'CreationDate' => [ 'shape' => 'DateType', ], 'CustomKeyStoreType' => [ 'shape' => 'CustomKeyStoreType', ], 'XksProxyConfiguration' => [ 'shape' => 'XksProxyConfigurationType', ], ], ], 'CustomerMasterKeySpec' => [ 'type' => 'string', 'deprecated' => true, 'deprecatedMessage' => 'This enum has been deprecated. Instead, use the KeySpec enum.', 'enum' => [ 'RSA_2048', 'RSA_3072', 'RSA_4096', 'ECC_NIST_P256', 'ECC_NIST_P384', 'ECC_NIST_P521', 'ECC_SECG_P256K1', 'SYMMETRIC_DEFAULT', 'HMAC_224', 'HMAC_256', 'HMAC_384', 'HMAC_512', 'SM2', ], ], 'DataKeyPairSpec' => [ 'type' => 'string', 'enum' => [ 'RSA_2048', 'RSA_3072', 'RSA_4096', 'ECC_NIST_P256', 'ECC_NIST_P384', 'ECC_NIST_P521', 'ECC_SECG_P256K1', 'SM2', 'ECC_NIST_EDWARDS25519', ], ], 'DataKeySpec' => [ 'type' => 'string', 'enum' => [ 'AES_256', 'AES_128', ], ], 'DateType' => [ 'type' => 'timestamp', ], 'DecryptRequest' => [ 'type' => 'structure', 'members' => [ 'CiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'EncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'EncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], 'Recipient' => [ 'shape' => 'RecipientInfo', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], 'DryRunModifiers' => [ 'shape' => 'DryRunModifierList', ], ], ], 'DecryptResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Plaintext' => [ 'shape' => 'PlaintextType', ], 'EncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], 'CiphertextForRecipient' => [ 'shape' => 'CiphertextType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'DeleteAliasRequest' => [ 'type' => 'structure', 'required' => [ 'AliasName', ], 'members' => [ 'AliasName' => [ 'shape' => 'AliasNameType', ], ], ], 'DeleteCustomKeyStoreRequest' => [ 'type' => 'structure', 'required' => [ 'CustomKeyStoreId', ], 'members' => [ 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], ], ], 'DeleteCustomKeyStoreResponse' => [ 'type' => 'structure', 'members' => [], ], 'DeleteImportedKeyMaterialRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'DeleteImportedKeyMaterialResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdResponseType', ], ], ], 'DependencyTimeoutException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, 'fault' => true, ], 'DeriveSharedSecretRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'KeyAgreementAlgorithm', 'PublicKey', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyAgreementAlgorithm' => [ 'shape' => 'KeyAgreementAlgorithmSpec', ], 'PublicKey' => [ 'shape' => 'PublicKeyType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], 'Recipient' => [ 'shape' => 'RecipientInfo', ], ], ], 'DeriveSharedSecretResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'SharedSecret' => [ 'shape' => 'PlaintextType', ], 'CiphertextForRecipient' => [ 'shape' => 'CiphertextType', ], 'KeyAgreementAlgorithm' => [ 'shape' => 'KeyAgreementAlgorithmSpec', ], 'KeyOrigin' => [ 'shape' => 'OriginType', ], ], ], 'DescribeCustomKeyStoresRequest' => [ 'type' => 'structure', 'members' => [ 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], 'CustomKeyStoreName' => [ 'shape' => 'CustomKeyStoreNameType', ], 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], ], ], 'DescribeCustomKeyStoresResponse' => [ 'type' => 'structure', 'members' => [ 'CustomKeyStores' => [ 'shape' => 'CustomKeyStoresList', ], 'NextMarker' => [ 'shape' => 'MarkerType', ], 'Truncated' => [ 'shape' => 'BooleanType', ], ], ], 'DescribeKeyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], ], ], 'DescribeKeyResponse' => [ 'type' => 'structure', 'members' => [ 'KeyMetadata' => [ 'shape' => 'KeyMetadata', ], ], ], 'DescriptionType' => [ 'type' => 'string', 'max' => 8192, 'min' => 0, ], 'DisableKeyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'DisableKeyRotationRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'DisabledException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'DisconnectCustomKeyStoreRequest' => [ 'type' => 'structure', 'required' => [ 'CustomKeyStoreId', ], 'members' => [ 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], ], ], 'DisconnectCustomKeyStoreResponse' => [ 'type' => 'structure', 'members' => [], ], 'DryRunModifierList' => [ 'type' => 'list', 'member' => [ 'shape' => 'DryRunModifierType', ], ], 'DryRunModifierType' => [ 'type' => 'string', 'enum' => [ 'IGNORE_CIPHERTEXT', ], ], 'DryRunOperationException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'EnableKeyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'EnableKeyRotationRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'RotationPeriodInDays' => [ 'shape' => 'RotationPeriodInDaysType', ], ], ], 'EncryptRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'Plaintext', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Plaintext' => [ 'shape' => 'PlaintextType', ], 'EncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'EncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'EncryptResponse' => [ 'type' => 'structure', 'members' => [ 'CiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'EncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], ], ], 'EncryptionAlgorithmSpec' => [ 'type' => 'string', 'enum' => [ 'SYMMETRIC_DEFAULT', 'RSAES_OAEP_SHA_1', 'RSAES_OAEP_SHA_256', 'SM2PKE', ], ], 'EncryptionAlgorithmSpecList' => [ 'type' => 'list', 'member' => [ 'shape' => 'EncryptionAlgorithmSpec', ], ], 'EncryptionContextKey' => [ 'type' => 'string', ], 'EncryptionContextType' => [ 'type' => 'map', 'key' => [ 'shape' => 'EncryptionContextKey', ], 'value' => [ 'shape' => 'EncryptionContextValue', ], ], 'EncryptionContextValue' => [ 'type' => 'string', ], 'ErrorMessageType' => [ 'type' => 'string', ], 'ExpirationModelType' => [ 'type' => 'string', 'enum' => [ 'KEY_MATERIAL_EXPIRES', 'KEY_MATERIAL_DOES_NOT_EXPIRE', ], ], 'ExpiredImportTokenException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'GenerateDataKeyPairRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'KeyPairSpec', ], 'members' => [ 'EncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyPairSpec' => [ 'shape' => 'DataKeyPairSpec', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'Recipient' => [ 'shape' => 'RecipientInfo', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'GenerateDataKeyPairResponse' => [ 'type' => 'structure', 'members' => [ 'PrivateKeyCiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'PrivateKeyPlaintext' => [ 'shape' => 'PlaintextType', ], 'PublicKey' => [ 'shape' => 'PublicKeyType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyPairSpec' => [ 'shape' => 'DataKeyPairSpec', ], 'CiphertextForRecipient' => [ 'shape' => 'CiphertextType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'GenerateDataKeyPairWithoutPlaintextRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'KeyPairSpec', ], 'members' => [ 'EncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyPairSpec' => [ 'shape' => 'DataKeyPairSpec', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'GenerateDataKeyPairWithoutPlaintextResponse' => [ 'type' => 'structure', 'members' => [ 'PrivateKeyCiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'PublicKey' => [ 'shape' => 'PublicKeyType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyPairSpec' => [ 'shape' => 'DataKeyPairSpec', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'GenerateDataKeyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'EncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'NumberOfBytes' => [ 'shape' => 'NumberOfBytesType', ], 'KeySpec' => [ 'shape' => 'DataKeySpec', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'Recipient' => [ 'shape' => 'RecipientInfo', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'GenerateDataKeyResponse' => [ 'type' => 'structure', 'members' => [ 'CiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'Plaintext' => [ 'shape' => 'PlaintextType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'CiphertextForRecipient' => [ 'shape' => 'CiphertextType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'GenerateDataKeyWithoutPlaintextRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'EncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'KeySpec' => [ 'shape' => 'DataKeySpec', ], 'NumberOfBytes' => [ 'shape' => 'NumberOfBytesType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'GenerateDataKeyWithoutPlaintextResponse' => [ 'type' => 'structure', 'members' => [ 'CiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'GenerateMacRequest' => [ 'type' => 'structure', 'required' => [ 'Message', 'KeyId', 'MacAlgorithm', ], 'members' => [ 'Message' => [ 'shape' => 'PlaintextType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'MacAlgorithm' => [ 'shape' => 'MacAlgorithmSpec', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'GenerateMacResponse' => [ 'type' => 'structure', 'members' => [ 'Mac' => [ 'shape' => 'CiphertextType', ], 'MacAlgorithm' => [ 'shape' => 'MacAlgorithmSpec', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'GenerateRandomRequest' => [ 'type' => 'structure', 'members' => [ 'NumberOfBytes' => [ 'shape' => 'NumberOfBytesType', ], 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], 'Recipient' => [ 'shape' => 'RecipientInfo', ], ], ], 'GenerateRandomResponse' => [ 'type' => 'structure', 'members' => [ 'Plaintext' => [ 'shape' => 'PlaintextType', ], 'CiphertextForRecipient' => [ 'shape' => 'CiphertextType', ], ], ], 'GetKeyLastUsageRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'GetKeyLastUsageResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyLastUsage' => [ 'shape' => 'KeyLastUsageData', ], 'TrackingStartDate' => [ 'shape' => 'DateType', ], 'KeyCreationDate' => [ 'shape' => 'DateType', ], ], ], 'GetKeyPolicyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'PolicyName' => [ 'shape' => 'PolicyNameType', ], ], ], 'GetKeyPolicyResponse' => [ 'type' => 'structure', 'members' => [ 'Policy' => [ 'shape' => 'PolicyType', ], 'PolicyName' => [ 'shape' => 'PolicyNameType', ], ], ], 'GetKeyRotationStatusRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'GetKeyRotationStatusResponse' => [ 'type' => 'structure', 'members' => [ 'KeyRotationEnabled' => [ 'shape' => 'BooleanType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'RotationPeriodInDays' => [ 'shape' => 'RotationPeriodInDaysType', ], 'NextRotationDate' => [ 'shape' => 'DateType', ], 'OnDemandRotationStartDate' => [ 'shape' => 'DateType', ], ], ], 'GetParametersForImportRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'WrappingAlgorithm', 'WrappingKeySpec', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'WrappingAlgorithm' => [ 'shape' => 'AlgorithmSpec', ], 'WrappingKeySpec' => [ 'shape' => 'WrappingKeySpec', ], ], ], 'GetParametersForImportResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'ImportToken' => [ 'shape' => 'CiphertextType', ], 'PublicKey' => [ 'shape' => 'PlaintextType', ], 'ParametersValidTo' => [ 'shape' => 'DateType', ], ], ], 'GetPublicKeyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], ], ], 'GetPublicKeyResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'PublicKey' => [ 'shape' => 'PublicKeyType', ], 'CustomerMasterKeySpec' => [ 'shape' => 'CustomerMasterKeySpec', 'deprecated' => true, 'deprecatedMessage' => 'This field has been deprecated. Instead, use the KeySpec field.', ], 'KeySpec' => [ 'shape' => 'KeySpec', ], 'KeyUsage' => [ 'shape' => 'KeyUsageType', ], 'EncryptionAlgorithms' => [ 'shape' => 'EncryptionAlgorithmSpecList', ], 'SigningAlgorithms' => [ 'shape' => 'SigningAlgorithmSpecList', ], 'KeyAgreementAlgorithms' => [ 'shape' => 'KeyAgreementAlgorithmSpecList', ], ], ], 'GrantConstraintSourceArnType' => [ 'type' => 'string', 'max' => 512, 'min' => 20, 'pattern' => '^arn:aws[a-z0-9-]*:[a-z0-9-]+:[a-z0-9-]*:[0-9]{12}:.+$', ], 'GrantConstraints' => [ 'type' => 'structure', 'members' => [ 'EncryptionContextSubset' => [ 'shape' => 'EncryptionContextType', ], 'EncryptionContextEquals' => [ 'shape' => 'EncryptionContextType', ], 'SourceArn' => [ 'shape' => 'GrantConstraintSourceArnType', ], ], ], 'GrantIdType' => [ 'type' => 'string', 'max' => 128, 'min' => 1, ], 'GrantList' => [ 'type' => 'list', 'member' => [ 'shape' => 'GrantListEntry', ], ], 'GrantListEntry' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'GrantId' => [ 'shape' => 'GrantIdType', ], 'Name' => [ 'shape' => 'GrantNameType', ], 'CreationDate' => [ 'shape' => 'DateType', ], 'GranteePrincipal' => [ 'shape' => 'PrincipalIdType', ], 'RetiringPrincipal' => [ 'shape' => 'PrincipalIdType', ], 'IssuingAccount' => [ 'shape' => 'PrincipalIdType', ], 'Operations' => [ 'shape' => 'GrantOperationList', ], 'Constraints' => [ 'shape' => 'GrantConstraints', ], 'GranteeServicePrincipal' => [ 'shape' => 'ServicePrincipalType', ], 'RetiringServicePrincipal' => [ 'shape' => 'ServicePrincipalType', ], ], ], 'GrantNameType' => [ 'type' => 'string', 'max' => 256, 'min' => 1, 'pattern' => '^[a-zA-Z0-9:/_-]+$', ], 'GrantOperation' => [ 'type' => 'string', 'enum' => [ 'Decrypt', 'Encrypt', 'GenerateDataKey', 'GenerateDataKeyWithoutPlaintext', 'ReEncryptFrom', 'ReEncryptTo', 'Sign', 'Verify', 'GetPublicKey', 'CreateGrant', 'RetireGrant', 'DescribeKey', 'GenerateDataKeyPair', 'GenerateDataKeyPairWithoutPlaintext', 'GenerateMac', 'VerifyMac', 'DeriveSharedSecret', ], ], 'GrantOperationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'GrantOperation', ], ], 'GrantTokenList' => [ 'type' => 'list', 'member' => [ 'shape' => 'GrantTokenType', ], 'max' => 10, 'min' => 0, ], 'GrantTokenType' => [ 'type' => 'string', 'max' => 8192, 'min' => 1, ], 'ImportKeyMaterialRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'ImportToken', 'EncryptedKeyMaterial', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'ImportToken' => [ 'shape' => 'CiphertextType', ], 'EncryptedKeyMaterial' => [ 'shape' => 'CiphertextType', ], 'ValidTo' => [ 'shape' => 'DateType', ], 'ExpirationModel' => [ 'shape' => 'ExpirationModelType', ], 'ImportType' => [ 'shape' => 'ImportType', ], 'KeyMaterialDescription' => [ 'shape' => 'KeyMaterialDescriptionType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'ImportKeyMaterialResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'ImportState' => [ 'type' => 'string', 'enum' => [ 'IMPORTED', 'PENDING_IMPORT', ], ], 'ImportType' => [ 'type' => 'string', 'enum' => [ 'NEW_KEY_MATERIAL', 'EXISTING_KEY_MATERIAL', ], ], 'IncludeKeyMaterial' => [ 'type' => 'string', 'enum' => [ 'ALL_KEY_MATERIAL', 'ROTATIONS_ONLY', ], ], 'IncorrectKeyException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'IncorrectKeyMaterialException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'IncorrectTrustAnchorException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidAliasNameException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidArnException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidCiphertextException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidGrantIdException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidGrantTokenException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidImportTokenException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidKeyUsageException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'InvalidMarkerException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'KMSInternalException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, 'fault' => true, ], 'KMSInvalidMacException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'KMSInvalidSignatureException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'KMSInvalidStateException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'KeyAgreementAlgorithmSpec' => [ 'type' => 'string', 'enum' => [ 'ECDH', ], ], 'KeyAgreementAlgorithmSpecList' => [ 'type' => 'list', 'member' => [ 'shape' => 'KeyAgreementAlgorithmSpec', ], ], 'KeyEncryptionMechanism' => [ 'type' => 'string', 'enum' => [ 'RSAES_OAEP_SHA_256', ], ], 'KeyIdType' => [ 'type' => 'string', 'max' => 2048, 'min' => 1, ], 'KeyLastUsageData' => [ 'type' => 'structure', 'members' => [ 'Operation' => [ 'shape' => 'KeyLastUsageTrackingOperation', ], 'Timestamp' => [ 'shape' => 'DateType', ], 'CloudTrailEventId' => [ 'shape' => 'CloudTrailEventIdType', ], 'KmsRequestId' => [ 'shape' => 'KmsRequestIdType', ], ], ], 'KeyLastUsageTrackingOperation' => [ 'type' => 'string', 'enum' => [ 'Decrypt', 'DeriveSharedSecret', 'Encrypt', 'GenerateDataKey', 'GenerateDataKeyPair', 'GenerateDataKeyPairWithoutPlaintext', 'GenerateDataKeyWithoutPlaintext', 'GenerateMac', 'ReEncrypt', 'Sign', 'Verify', 'VerifyMac', ], ], 'KeyList' => [ 'type' => 'list', 'member' => [ 'shape' => 'KeyListEntry', ], ], 'KeyListEntry' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyArn' => [ 'shape' => 'ArnType', ], ], ], 'KeyManagerType' => [ 'type' => 'string', 'enum' => [ 'AWS', 'CUSTOMER', ], ], 'KeyMaterialDescriptionType' => [ 'type' => 'string', 'max' => 256, 'min' => 0, 'pattern' => '^[a-zA-Z0-9:/_\\s.-]+$', ], 'KeyMaterialState' => [ 'type' => 'string', 'enum' => [ 'NON_CURRENT', 'CURRENT', 'PENDING_ROTATION', 'PENDING_MULTI_REGION_IMPORT_AND_ROTATION', ], ], 'KeyMetadata' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'AWSAccountId' => [ 'shape' => 'AWSAccountIdType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Arn' => [ 'shape' => 'ArnType', ], 'CreationDate' => [ 'shape' => 'DateType', ], 'Enabled' => [ 'shape' => 'BooleanType', ], 'Description' => [ 'shape' => 'DescriptionType', ], 'KeyUsage' => [ 'shape' => 'KeyUsageType', ], 'KeyState' => [ 'shape' => 'KeyState', ], 'DeletionDate' => [ 'shape' => 'DateType', ], 'ValidTo' => [ 'shape' => 'DateType', ], 'Origin' => [ 'shape' => 'OriginType', ], 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], 'CloudHsmClusterId' => [ 'shape' => 'CloudHsmClusterIdType', ], 'ExpirationModel' => [ 'shape' => 'ExpirationModelType', ], 'KeyManager' => [ 'shape' => 'KeyManagerType', ], 'CustomerMasterKeySpec' => [ 'shape' => 'CustomerMasterKeySpec', 'deprecated' => true, 'deprecatedMessage' => 'This field has been deprecated. Instead, use the KeySpec field.', ], 'KeySpec' => [ 'shape' => 'KeySpec', ], 'EncryptionAlgorithms' => [ 'shape' => 'EncryptionAlgorithmSpecList', ], 'SigningAlgorithms' => [ 'shape' => 'SigningAlgorithmSpecList', ], 'KeyAgreementAlgorithms' => [ 'shape' => 'KeyAgreementAlgorithmSpecList', ], 'MultiRegion' => [ 'shape' => 'NullableBooleanType', ], 'MultiRegionConfiguration' => [ 'shape' => 'MultiRegionConfiguration', ], 'PendingDeletionWindowInDays' => [ 'shape' => 'PendingWindowInDaysType', ], 'MacAlgorithms' => [ 'shape' => 'MacAlgorithmSpecList', ], 'XksKeyConfiguration' => [ 'shape' => 'XksKeyConfigurationType', ], 'CurrentKeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'KeySpec' => [ 'type' => 'string', 'enum' => [ 'RSA_2048', 'RSA_3072', 'RSA_4096', 'ECC_NIST_P256', 'ECC_NIST_P384', 'ECC_NIST_P521', 'ECC_SECG_P256K1', 'SYMMETRIC_DEFAULT', 'HMAC_224', 'HMAC_256', 'HMAC_384', 'HMAC_512', 'SM2', 'ML_DSA_44', 'ML_DSA_65', 'ML_DSA_87', 'ECC_NIST_EDWARDS25519', ], ], 'KeyState' => [ 'type' => 'string', 'enum' => [ 'Creating', 'Enabled', 'Disabled', 'PendingDeletion', 'PendingImport', 'PendingReplicaDeletion', 'Unavailable', 'Updating', ], ], 'KeyStorePasswordType' => [ 'type' => 'string', 'max' => 32, 'min' => 7, 'sensitive' => true, ], 'KeyUnavailableException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, 'fault' => true, ], 'KeyUsageType' => [ 'type' => 'string', 'enum' => [ 'SIGN_VERIFY', 'ENCRYPT_DECRYPT', 'GENERATE_VERIFY_MAC', 'KEY_AGREEMENT', ], ], 'KmsRequestIdType' => [ 'type' => 'string', ], 'LimitExceededException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'LimitType' => [ 'type' => 'integer', 'max' => 1000, 'min' => 1, ], 'ListAliasesRequest' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], ], ], 'ListAliasesResponse' => [ 'type' => 'structure', 'members' => [ 'Aliases' => [ 'shape' => 'AliasList', ], 'NextMarker' => [ 'shape' => 'MarkerType', ], 'Truncated' => [ 'shape' => 'BooleanType', ], ], ], 'ListGrantsRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'GrantId' => [ 'shape' => 'GrantIdType', ], 'GranteePrincipal' => [ 'shape' => 'PrincipalIdType', ], 'GranteeServicePrincipal' => [ 'shape' => 'ServicePrincipalType', ], ], ], 'ListGrantsResponse' => [ 'type' => 'structure', 'members' => [ 'Grants' => [ 'shape' => 'GrantList', ], 'NextMarker' => [ 'shape' => 'MarkerType', ], 'Truncated' => [ 'shape' => 'BooleanType', ], ], ], 'ListKeyPoliciesRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], ], ], 'ListKeyPoliciesResponse' => [ 'type' => 'structure', 'members' => [ 'PolicyNames' => [ 'shape' => 'PolicyNameList', ], 'NextMarker' => [ 'shape' => 'MarkerType', ], 'Truncated' => [ 'shape' => 'BooleanType', ], ], ], 'ListKeyRotationsRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'IncludeKeyMaterial' => [ 'shape' => 'IncludeKeyMaterial', ], 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], ], ], 'ListKeyRotationsResponse' => [ 'type' => 'structure', 'members' => [ 'Rotations' => [ 'shape' => 'RotationsList', ], 'NextMarker' => [ 'shape' => 'MarkerType', ], 'Truncated' => [ 'shape' => 'BooleanType', ], ], ], 'ListKeysRequest' => [ 'type' => 'structure', 'members' => [ 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], ], ], 'ListKeysResponse' => [ 'type' => 'structure', 'members' => [ 'Keys' => [ 'shape' => 'KeyList', ], 'NextMarker' => [ 'shape' => 'MarkerType', ], 'Truncated' => [ 'shape' => 'BooleanType', ], ], ], 'ListResourceTagsRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], ], ], 'ListResourceTagsResponse' => [ 'type' => 'structure', 'members' => [ 'Tags' => [ 'shape' => 'TagList', ], 'NextMarker' => [ 'shape' => 'MarkerType', ], 'Truncated' => [ 'shape' => 'BooleanType', ], ], ], 'ListRetirableGrantsRequest' => [ 'type' => 'structure', 'members' => [ 'Limit' => [ 'shape' => 'LimitType', ], 'Marker' => [ 'shape' => 'MarkerType', ], 'RetiringPrincipal' => [ 'shape' => 'PrincipalIdType', ], 'RetiringServicePrincipal' => [ 'shape' => 'ServicePrincipalType', ], ], ], 'MacAlgorithmSpec' => [ 'type' => 'string', 'enum' => [ 'HMAC_SHA_224', 'HMAC_SHA_256', 'HMAC_SHA_384', 'HMAC_SHA_512', ], ], 'MacAlgorithmSpecList' => [ 'type' => 'list', 'member' => [ 'shape' => 'MacAlgorithmSpec', ], ], 'MalformedPolicyDocumentException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'MarkerType' => [ 'type' => 'string', 'max' => 1024, 'min' => 1, 'pattern' => '[\\u0020-\\u00FF]*', ], 'MessageType' => [ 'type' => 'string', 'enum' => [ 'RAW', 'DIGEST', 'EXTERNAL_MU', ], ], 'MultiRegionConfiguration' => [ 'type' => 'structure', 'members' => [ 'MultiRegionKeyType' => [ 'shape' => 'MultiRegionKeyType', ], 'PrimaryKey' => [ 'shape' => 'MultiRegionKey', ], 'ReplicaKeys' => [ 'shape' => 'MultiRegionKeyList', ], ], ], 'MultiRegionKey' => [ 'type' => 'structure', 'members' => [ 'Arn' => [ 'shape' => 'ArnType', ], 'Region' => [ 'shape' => 'RegionType', ], ], ], 'MultiRegionKeyList' => [ 'type' => 'list', 'member' => [ 'shape' => 'MultiRegionKey', ], ], 'MultiRegionKeyType' => [ 'type' => 'string', 'enum' => [ 'PRIMARY', 'REPLICA', ], ], 'NotFoundException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'NullableBooleanType' => [ 'type' => 'boolean', ], 'NumberOfBytesType' => [ 'type' => 'integer', 'max' => 1024, 'min' => 1, ], 'OriginType' => [ 'type' => 'string', 'enum' => [ 'AWS_KMS', 'EXTERNAL', 'AWS_CLOUDHSM', 'EXTERNAL_KEY_STORE', ], ], 'PendingWindowInDaysType' => [ 'type' => 'integer', 'max' => 365, 'min' => 1, ], 'PlaintextType' => [ 'type' => 'blob', 'max' => 4096, 'min' => 1, 'sensitive' => true, ], 'PolicyNameList' => [ 'type' => 'list', 'member' => [ 'shape' => 'PolicyNameType', ], ], 'PolicyNameType' => [ 'type' => 'string', 'max' => 128, 'min' => 1, 'pattern' => '[\\w]+', ], 'PolicyType' => [ 'type' => 'string', 'max' => 131072, 'min' => 1, 'pattern' => '[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+', ], 'PrincipalIdType' => [ 'type' => 'string', 'max' => 256, 'min' => 1, 'pattern' => '^[\\w+=,.@:/-]+$', ], 'PublicKeyType' => [ 'type' => 'blob', 'max' => 8192, 'min' => 1, ], 'PutKeyPolicyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'Policy', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'PolicyName' => [ 'shape' => 'PolicyNameType', ], 'Policy' => [ 'shape' => 'PolicyType', ], 'BypassPolicyLockoutSafetyCheck' => [ 'shape' => 'BooleanType', ], ], ], 'ReEncryptRequest' => [ 'type' => 'structure', 'required' => [ 'DestinationKeyId', ], 'members' => [ 'CiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'SourceEncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'SourceKeyId' => [ 'shape' => 'KeyIdType', ], 'DestinationKeyId' => [ 'shape' => 'KeyIdType', ], 'DestinationEncryptionContext' => [ 'shape' => 'EncryptionContextType', ], 'SourceEncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], 'DestinationEncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], 'DryRunModifiers' => [ 'shape' => 'DryRunModifierList', ], ], ], 'ReEncryptResponse' => [ 'type' => 'structure', 'members' => [ 'CiphertextBlob' => [ 'shape' => 'CiphertextType', ], 'SourceKeyId' => [ 'shape' => 'KeyIdType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'SourceEncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], 'DestinationEncryptionAlgorithm' => [ 'shape' => 'EncryptionAlgorithmSpec', ], 'SourceKeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], 'DestinationKeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], ], ], 'RecipientInfo' => [ 'type' => 'structure', 'members' => [ 'KeyEncryptionAlgorithm' => [ 'shape' => 'KeyEncryptionMechanism', ], 'AttestationDocument' => [ 'shape' => 'AttestationDocumentType', ], ], ], 'RegionType' => [ 'type' => 'string', 'max' => 32, 'min' => 1, 'pattern' => '^([a-z]+-){2,3}\\d+$', ], 'ReplicateKeyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'ReplicaRegion', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'ReplicaRegion' => [ 'shape' => 'RegionType', ], 'Policy' => [ 'shape' => 'PolicyType', ], 'BypassPolicyLockoutSafetyCheck' => [ 'shape' => 'BooleanType', ], 'Description' => [ 'shape' => 'DescriptionType', ], 'Tags' => [ 'shape' => 'TagList', ], ], ], 'ReplicateKeyResponse' => [ 'type' => 'structure', 'members' => [ 'ReplicaKeyMetadata' => [ 'shape' => 'KeyMetadata', ], 'ReplicaPolicy' => [ 'shape' => 'PolicyType', ], 'ReplicaTags' => [ 'shape' => 'TagList', ], ], ], 'RetireGrantRequest' => [ 'type' => 'structure', 'members' => [ 'GrantToken' => [ 'shape' => 'GrantTokenType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'GrantId' => [ 'shape' => 'GrantIdType', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'RevokeGrantRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'GrantId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'GrantId' => [ 'shape' => 'GrantIdType', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'RotateKeyOnDemandRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'RotateKeyOnDemandResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'RotationPeriodInDaysType' => [ 'type' => 'integer', 'max' => 2560, 'min' => 90, ], 'RotationType' => [ 'type' => 'string', 'enum' => [ 'AUTOMATIC', 'ON_DEMAND', ], ], 'RotationsList' => [ 'type' => 'list', 'member' => [ 'shape' => 'RotationsListEntry', ], ], 'RotationsListEntry' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'KeyMaterialId' => [ 'shape' => 'BackingKeyIdType', ], 'KeyMaterialDescription' => [ 'shape' => 'KeyMaterialDescriptionType', ], 'ImportState' => [ 'shape' => 'ImportState', ], 'KeyMaterialState' => [ 'shape' => 'KeyMaterialState', ], 'ExpirationModel' => [ 'shape' => 'ExpirationModelType', ], 'ValidTo' => [ 'shape' => 'DateType', ], 'RotationDate' => [ 'shape' => 'DateType', ], 'RotationType' => [ 'shape' => 'RotationType', ], ], ], 'ScheduleKeyDeletionRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'PendingWindowInDays' => [ 'shape' => 'PendingWindowInDaysType', ], ], ], 'ScheduleKeyDeletionResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'DeletionDate' => [ 'shape' => 'DateType', ], 'KeyState' => [ 'shape' => 'KeyState', ], 'PendingWindowInDays' => [ 'shape' => 'PendingWindowInDaysType', ], ], ], 'ServicePrincipalType' => [ 'type' => 'string', 'max' => 128, 'min' => 1, 'pattern' => '^([A-Za-z0-9\\-]+)\\.([A-Za-z0-9\\-]+)(\\.[A-Za-z0-9\\-]+)+$', ], 'SignRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'Message', 'SigningAlgorithm', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Message' => [ 'shape' => 'PlaintextType', ], 'MessageType' => [ 'shape' => 'MessageType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'SigningAlgorithm' => [ 'shape' => 'SigningAlgorithmSpec', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'SignResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Signature' => [ 'shape' => 'CiphertextType', ], 'SigningAlgorithm' => [ 'shape' => 'SigningAlgorithmSpec', ], ], ], 'SigningAlgorithmSpec' => [ 'type' => 'string', 'enum' => [ 'RSASSA_PSS_SHA_256', 'RSASSA_PSS_SHA_384', 'RSASSA_PSS_SHA_512', 'RSASSA_PKCS1_V1_5_SHA_256', 'RSASSA_PKCS1_V1_5_SHA_384', 'RSASSA_PKCS1_V1_5_SHA_512', 'ECDSA_SHA_256', 'ECDSA_SHA_384', 'ECDSA_SHA_512', 'SM2DSA', 'ML_DSA_SHAKE_256', 'ED25519_SHA_512', 'ED25519_PH_SHA_512', ], ], 'SigningAlgorithmSpecList' => [ 'type' => 'list', 'member' => [ 'shape' => 'SigningAlgorithmSpec', ], ], 'Tag' => [ 'type' => 'structure', 'required' => [ 'TagKey', 'TagValue', ], 'members' => [ 'TagKey' => [ 'shape' => 'TagKeyType', ], 'TagValue' => [ 'shape' => 'TagValueType', ], ], ], 'TagException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'TagKeyList' => [ 'type' => 'list', 'member' => [ 'shape' => 'TagKeyType', ], ], 'TagKeyType' => [ 'type' => 'string', 'max' => 128, 'min' => 1, ], 'TagList' => [ 'type' => 'list', 'member' => [ 'shape' => 'Tag', ], ], 'TagResourceRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'Tags', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Tags' => [ 'shape' => 'TagList', ], ], ], 'TagValueType' => [ 'type' => 'string', 'max' => 256, 'min' => 0, ], 'TrustAnchorCertificateType' => [ 'type' => 'string', 'max' => 5000, 'min' => 1, ], 'UnsupportedOperationException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'UntagResourceRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'TagKeys', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'TagKeys' => [ 'shape' => 'TagKeyList', ], ], ], 'UpdateAliasRequest' => [ 'type' => 'structure', 'required' => [ 'AliasName', 'TargetKeyId', ], 'members' => [ 'AliasName' => [ 'shape' => 'AliasNameType', ], 'TargetKeyId' => [ 'shape' => 'KeyIdType', ], ], ], 'UpdateCustomKeyStoreRequest' => [ 'type' => 'structure', 'required' => [ 'CustomKeyStoreId', ], 'members' => [ 'CustomKeyStoreId' => [ 'shape' => 'CustomKeyStoreIdType', ], 'NewCustomKeyStoreName' => [ 'shape' => 'CustomKeyStoreNameType', ], 'KeyStorePassword' => [ 'shape' => 'KeyStorePasswordType', ], 'CloudHsmClusterId' => [ 'shape' => 'CloudHsmClusterIdType', ], 'XksProxyUriEndpoint' => [ 'shape' => 'XksProxyUriEndpointType', ], 'XksProxyUriPath' => [ 'shape' => 'XksProxyUriPathType', ], 'XksProxyVpcEndpointServiceName' => [ 'shape' => 'XksProxyVpcEndpointServiceNameType', ], 'XksProxyVpcEndpointServiceOwner' => [ 'shape' => 'AccountIdType', ], 'XksProxyAuthenticationCredential' => [ 'shape' => 'XksProxyAuthenticationCredentialType', ], 'XksProxyConnectivity' => [ 'shape' => 'XksProxyConnectivityType', ], ], ], 'UpdateCustomKeyStoreResponse' => [ 'type' => 'structure', 'members' => [], ], 'UpdateKeyDescriptionRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'Description', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Description' => [ 'shape' => 'DescriptionType', ], ], ], 'UpdatePrimaryRegionRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'PrimaryRegion', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'PrimaryRegion' => [ 'shape' => 'RegionType', ], ], ], 'VerifyMacRequest' => [ 'type' => 'structure', 'required' => [ 'Message', 'KeyId', 'MacAlgorithm', 'Mac', ], 'members' => [ 'Message' => [ 'shape' => 'PlaintextType', ], 'KeyId' => [ 'shape' => 'KeyIdType', ], 'MacAlgorithm' => [ 'shape' => 'MacAlgorithmSpec', ], 'Mac' => [ 'shape' => 'CiphertextType', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'VerifyMacResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'MacValid' => [ 'shape' => 'BooleanType', ], 'MacAlgorithm' => [ 'shape' => 'MacAlgorithmSpec', ], ], ], 'VerifyRequest' => [ 'type' => 'structure', 'required' => [ 'KeyId', 'Message', 'Signature', 'SigningAlgorithm', ], 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'Message' => [ 'shape' => 'PlaintextType', ], 'MessageType' => [ 'shape' => 'MessageType', ], 'Signature' => [ 'shape' => 'CiphertextType', ], 'SigningAlgorithm' => [ 'shape' => 'SigningAlgorithmSpec', ], 'GrantTokens' => [ 'shape' => 'GrantTokenList', ], 'DryRun' => [ 'shape' => 'NullableBooleanType', ], ], ], 'VerifyResponse' => [ 'type' => 'structure', 'members' => [ 'KeyId' => [ 'shape' => 'KeyIdType', ], 'SignatureValid' => [ 'shape' => 'BooleanType', ], 'SigningAlgorithm' => [ 'shape' => 'SigningAlgorithmSpec', ], ], ], 'WrappingKeySpec' => [ 'type' => 'string', 'enum' => [ 'RSA_2048', 'RSA_3072', 'RSA_4096', 'SM2', ], ], 'XksKeyAlreadyInUseException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksKeyConfigurationType' => [ 'type' => 'structure', 'members' => [ 'Id' => [ 'shape' => 'XksKeyIdType', ], ], ], 'XksKeyIdType' => [ 'type' => 'string', 'max' => 128, 'min' => 1, 'pattern' => '^[a-zA-Z0-9-_.]+$', ], 'XksKeyInvalidConfigurationException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksKeyNotFoundException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyAuthenticationAccessKeyIdType' => [ 'type' => 'string', 'max' => 30, 'min' => 20, 'pattern' => '^[A-Z2-7]+$', 'sensitive' => true, ], 'XksProxyAuthenticationCredentialType' => [ 'type' => 'structure', 'required' => [ 'AccessKeyId', 'RawSecretAccessKey', ], 'members' => [ 'AccessKeyId' => [ 'shape' => 'XksProxyAuthenticationAccessKeyIdType', ], 'RawSecretAccessKey' => [ 'shape' => 'XksProxyAuthenticationRawSecretAccessKeyType', ], ], ], 'XksProxyAuthenticationRawSecretAccessKeyType' => [ 'type' => 'string', 'max' => 64, 'min' => 43, 'pattern' => '^[a-zA-Z0-9\\/+=]+$', 'sensitive' => true, ], 'XksProxyConfigurationType' => [ 'type' => 'structure', 'members' => [ 'Connectivity' => [ 'shape' => 'XksProxyConnectivityType', ], 'AccessKeyId' => [ 'shape' => 'XksProxyAuthenticationAccessKeyIdType', ], 'UriEndpoint' => [ 'shape' => 'XksProxyUriEndpointType', ], 'UriPath' => [ 'shape' => 'XksProxyUriPathType', ], 'VpcEndpointServiceName' => [ 'shape' => 'XksProxyVpcEndpointServiceNameType', ], 'VpcEndpointServiceOwner' => [ 'shape' => 'AccountIdType', ], ], ], 'XksProxyConnectivityType' => [ 'type' => 'string', 'enum' => [ 'PUBLIC_ENDPOINT', 'VPC_ENDPOINT_SERVICE', ], ], 'XksProxyIncorrectAuthenticationCredentialException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyInvalidConfigurationException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyInvalidResponseException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyUriEndpointInUseException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyUriEndpointType' => [ 'type' => 'string', 'max' => 128, 'min' => 10, 'pattern' => '^https://[a-zA-Z0-9.-]+$', ], 'XksProxyUriInUseException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyUriPathType' => [ 'type' => 'string', 'max' => 128, 'min' => 10, 'pattern' => '^(/[a-zA-Z0-9\\/_-]+/kms/xks/v\\d{1,2})$|^(/kms/xks/v\\d{1,2})$', ], 'XksProxyUriUnreachableException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyVpcEndpointServiceInUseException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyVpcEndpointServiceInvalidConfigurationException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], 'XksProxyVpcEndpointServiceNameType' => [ 'type' => 'string', 'max' => 64, 'min' => 20, 'pattern' => '^(com|eu)\\.amazonaws\\.vpce\\.([a-z]+-){2,3}\\d+\\.vpce-svc-[0-9a-z]+$', ], 'XksProxyVpcEndpointServiceNotFoundException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorMessageType', ], ], 'exception' => true, ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/endpoint-bdd-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/endpoint-bdd-1.json.php deleted file mode 100644 index b37fe2650..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/endpoint-bdd-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.1', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], ], 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], ], 'results' => [ [ 'conditions' => [], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ], 'root' => 2, 'nodeCount' => 13, 'nodes' => '/////wAAAAH/////AAAAAAAAAAwAAAADAAAAAQAAAAQF9eELAAAAAgAAAAUF9eELAAAAAwAAAAgAAAAGAAAABAAAAAcF9eEKAAAABQX14QgF9eEJAAAABAAAAAoAAAAJAAAABgX14QYF9eEHAAAABQAAAAsF9eEFAAAABgX14QQF9eEFAAAAAwX14QEAAAANAAAABAX14QIF9eED',]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/endpoint-rule-set-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/endpoint-rule-set-1.json.php deleted file mode 100644 index 4b6e3ba0e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/endpoint-rule-set-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.0', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://kms.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/paginators-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/paginators-1.json.php deleted file mode 100644 index 8c2a8e2ea..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/paginators-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'DescribeCustomKeyStores' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'CustomKeyStores', ], 'ListAliases' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'Aliases', ], 'ListGrants' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'Grants', ], 'ListKeyPolicies' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'PolicyNames', ], 'ListKeyRotations' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'Rotations', ], 'ListKeys' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'Keys', ], 'ListResourceTags' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'Tags', ], 'ListRetirableGrants' => [ 'input_token' => 'Marker', 'limit_key' => 'Limit', 'more_results' => 'Truncated', 'output_token' => 'NextMarker', 'result_key' => 'Grants', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/smoke.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/smoke.json.php deleted file mode 100644 index 0586afb03..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/kms/2014-11-01/smoke.json.php +++ /dev/null @@ -1,3 +0,0 @@ - 1, 'defaultRegion' => 'us-west-2', 'testCases' => [ [ 'operationName' => 'ListAliases', 'input' => [], 'errorExpectedFromService' => false, ], [ 'operationName' => 'GetKeyPolicy', 'input' => [ 'KeyId' => '12345678-1234-1234-1234-123456789012', 'PolicyName' => 'fakePolicy', ], 'errorExpectedFromService' => true, ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/manifest.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/manifest.json.php deleted file mode 100644 index ad7f37062..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/manifest.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'namespace' => 'AccessAnalyzer', 'versions' => [ 'latest' => '2019-11-01', '2019-11-01' => '2019-11-01', ], 'serviceIdentifier' => 'accessanalyzer', ], 'account' => [ 'namespace' => 'Account', 'versions' => [ 'latest' => '2021-02-01', '2021-02-01' => '2021-02-01', ], 'serviceIdentifier' => 'account', ], 'acm-pca' => [ 'namespace' => 'ACMPCA', 'versions' => [ 'latest' => '2017-08-22', '2017-08-22' => '2017-08-22', ], 'serviceIdentifier' => 'acm_pca', ], 'acm' => [ 'namespace' => 'Acm', 'versions' => [ 'latest' => '2015-12-08', '2015-12-08' => '2015-12-08', ], 'serviceIdentifier' => 'acm', ], 'agent-registry-control' => [ 'namespace' => 'AgentRegistryControl', 'versions' => [ 'latest' => '2025-12-01', '2025-12-01' => '2025-12-01', ], 'serviceIdentifier' => 'agent_registry_control', ], 'agent-registry' => [ 'namespace' => 'AgentRegistry', 'versions' => [ 'latest' => '2025-12-01', '2025-12-01' => '2025-12-01', ], 'serviceIdentifier' => 'agent_registry', ], 'aiops' => [ 'namespace' => 'AIOps', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'aiops', ], 'amp' => [ 'namespace' => 'PrometheusService', 'versions' => [ 'latest' => '2020-08-01', '2020-08-01' => '2020-08-01', ], 'serviceIdentifier' => 'amp', ], 'amplify' => [ 'namespace' => 'Amplify', 'versions' => [ 'latest' => '2017-07-25', '2017-07-25' => '2017-07-25', ], 'serviceIdentifier' => 'amplify', ], 'amplifybackend' => [ 'namespace' => 'AmplifyBackend', 'versions' => [ 'latest' => '2020-08-11', '2020-08-11' => '2020-08-11', ], 'serviceIdentifier' => 'amplifybackend', ], 'amplifyuibuilder' => [ 'namespace' => 'AmplifyUIBuilder', 'versions' => [ 'latest' => '2021-08-11', '2021-08-11' => '2021-08-11', ], 'serviceIdentifier' => 'amplifyuibuilder', ], 'apigateway' => [ 'namespace' => 'ApiGateway', 'versions' => [ 'latest' => '2015-07-09', '2015-07-09' => '2015-07-09', '2015-06-01' => '2015-07-09', ], 'serviceIdentifier' => 'api_gateway', ], 'apigatewaymanagementapi' => [ 'namespace' => 'ApiGatewayManagementApi', 'versions' => [ 'latest' => '2018-11-29', '2018-11-29' => '2018-11-29', ], 'serviceIdentifier' => 'apigatewaymanagementapi', ], 'apigatewayv2' => [ 'namespace' => 'ApiGatewayV2', 'versions' => [ 'latest' => '2018-11-29', '2018-11-29' => '2018-11-29', ], 'serviceIdentifier' => 'apigatewayv2', ], 'appconfig' => [ 'namespace' => 'AppConfig', 'versions' => [ 'latest' => '2019-10-09', '2019-10-09' => '2019-10-09', ], 'serviceIdentifier' => 'appconfig', ], 'appconfigdata' => [ 'namespace' => 'AppConfigData', 'versions' => [ 'latest' => '2021-11-11', '2021-11-11' => '2021-11-11', ], 'serviceIdentifier' => 'appconfigdata', ], 'appfabric' => [ 'namespace' => 'AppFabric', 'versions' => [ 'latest' => '2023-05-19', '2023-05-19' => '2023-05-19', ], 'serviceIdentifier' => 'appfabric', ], 'appflow' => [ 'namespace' => 'Appflow', 'versions' => [ 'latest' => '2020-08-23', '2020-08-23' => '2020-08-23', ], 'serviceIdentifier' => 'appflow', ], 'appintegrations' => [ 'namespace' => 'AppIntegrationsService', 'versions' => [ 'latest' => '2020-07-29', '2020-07-29' => '2020-07-29', ], 'serviceIdentifier' => 'appintegrations', ], 'application-autoscaling' => [ 'namespace' => 'ApplicationAutoScaling', 'versions' => [ 'latest' => '2016-02-06', '2016-02-06' => '2016-02-06', ], 'serviceIdentifier' => 'application_auto_scaling', ], 'application-insights' => [ 'namespace' => 'ApplicationInsights', 'versions' => [ 'latest' => '2018-11-25', '2018-11-25' => '2018-11-25', ], 'serviceIdentifier' => 'application_insights', ], 'application-signals' => [ 'namespace' => 'ApplicationSignals', 'versions' => [ 'latest' => '2024-04-15', '2024-04-15' => '2024-04-15', ], 'serviceIdentifier' => 'application_signals', ], 'applicationcostprofiler' => [ 'namespace' => 'ApplicationCostProfiler', 'versions' => [ 'latest' => '2020-09-10', '2020-09-10' => '2020-09-10', ], 'serviceIdentifier' => 'applicationcostprofiler', ], 'appmesh' => [ 'namespace' => 'AppMesh', 'versions' => [ 'latest' => '2019-01-25', '2019-01-25' => '2019-01-25', '2018-10-01' => '2018-10-01', ], 'serviceIdentifier' => 'app_mesh', ], 'apprunner' => [ 'namespace' => 'AppRunner', 'versions' => [ 'latest' => '2020-05-15', '2020-05-15' => '2020-05-15', ], 'serviceIdentifier' => 'apprunner', ], 'appstream' => [ 'namespace' => 'Appstream', 'versions' => [ 'latest' => '2016-12-01', '2016-12-01' => '2016-12-01', ], 'serviceIdentifier' => 'appstream', ], 'appsync' => [ 'namespace' => 'AppSync', 'versions' => [ 'latest' => '2017-07-25', '2017-07-25' => '2017-07-25', ], 'serviceIdentifier' => 'appsync', ], 'arc-region-switch' => [ 'namespace' => 'ARCRegionSwitch', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'arc_region_switch', ], 'arc-zonal-shift' => [ 'namespace' => 'ARCZonalShift', 'versions' => [ 'latest' => '2022-10-30', '2022-10-30' => '2022-10-30', ], 'serviceIdentifier' => 'arc_zonal_shift', ], 'artifact' => [ 'namespace' => 'Artifact', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'artifact', ], 'athena' => [ 'namespace' => 'Athena', 'versions' => [ 'latest' => '2017-05-18', '2017-05-18' => '2017-05-18', ], 'serviceIdentifier' => 'athena', ], 'auditmanager' => [ 'namespace' => 'AuditManager', 'versions' => [ 'latest' => '2017-07-25', '2017-07-25' => '2017-07-25', ], 'serviceIdentifier' => 'auditmanager', ], 'autoscaling-plans' => [ 'namespace' => 'AutoScalingPlans', 'versions' => [ 'latest' => '2018-01-06', '2018-01-06' => '2018-01-06', ], 'serviceIdentifier' => 'auto_scaling_plans', ], 'autoscaling' => [ 'namespace' => 'AutoScaling', 'versions' => [ 'latest' => '2011-01-01', '2011-01-01' => '2011-01-01', ], 'serviceIdentifier' => 'auto_scaling', ], 'b2bi' => [ 'namespace' => 'B2bi', 'versions' => [ 'latest' => '2022-06-23', '2022-06-23' => '2022-06-23', ], 'serviceIdentifier' => 'b2bi', ], 'backup-gateway' => [ 'namespace' => 'BackupGateway', 'versions' => [ 'latest' => '2021-01-01', '2021-01-01' => '2021-01-01', ], 'serviceIdentifier' => 'backup_gateway', ], 'backup' => [ 'namespace' => 'Backup', 'versions' => [ 'latest' => '2018-11-15', '2018-11-15' => '2018-11-15', ], 'serviceIdentifier' => 'backup', ], 'backupsearch' => [ 'namespace' => 'BackupSearch', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'backupsearch', ], 'batch' => [ 'namespace' => 'Batch', 'versions' => [ 'latest' => '2016-08-10', '2016-08-10' => '2016-08-10', ], 'serviceIdentifier' => 'batch', ], 'bcm-dashboards' => [ 'namespace' => 'BCMDashboards', 'versions' => [ 'latest' => '2025-08-18', '2025-08-18' => '2025-08-18', ], 'serviceIdentifier' => 'bcm_dashboards', ], 'bcm-data-exports' => [ 'namespace' => 'BCMDataExports', 'versions' => [ 'latest' => '2023-11-26', '2023-11-26' => '2023-11-26', ], 'serviceIdentifier' => 'bcm_data_exports', ], 'bcm-pricing-calculator' => [ 'namespace' => 'BCMPricingCalculator', 'versions' => [ 'latest' => '2024-06-19', '2024-06-19' => '2024-06-19', ], 'serviceIdentifier' => 'bcm_pricing_calculator', ], 'bcm-recommended-actions' => [ 'namespace' => 'BCMRecommendedActions', 'versions' => [ 'latest' => '2024-11-14', '2024-11-14' => '2024-11-14', ], 'serviceIdentifier' => 'bcm_recommended_actions', ], 'bedrock-agent-runtime' => [ 'namespace' => 'BedrockAgentRuntime', 'versions' => [ 'latest' => '2023-07-26', '2023-07-26' => '2023-07-26', ], 'serviceIdentifier' => 'bedrock_agent_runtime', ], 'bedrock-agent' => [ 'namespace' => 'BedrockAgent', 'versions' => [ 'latest' => '2023-06-05', '2023-06-05' => '2023-06-05', ], 'serviceIdentifier' => 'bedrock_agent', ], 'bedrock-agentcore-control' => [ 'namespace' => 'BedrockAgentCoreControl', 'versions' => [ 'latest' => '2023-06-05', '2023-06-05' => '2023-06-05', ], 'serviceIdentifier' => 'bedrock_agentcore_control', ], 'bedrock-agentcore' => [ 'namespace' => 'BedrockAgentCore', 'versions' => [ 'latest' => '2024-02-28', '2024-02-28' => '2024-02-28', ], 'serviceIdentifier' => 'bedrock_agentcore', ], 'bedrock-data-automation-runtime' => [ 'namespace' => 'BedrockDataAutomationRuntime', 'versions' => [ 'latest' => '2024-06-13', '2024-06-13' => '2024-06-13', ], 'serviceIdentifier' => 'bedrock_data_automation_runtime', ], 'bedrock-data-automation' => [ 'namespace' => 'BedrockDataAutomation', 'versions' => [ 'latest' => '2023-07-26', '2023-07-26' => '2023-07-26', ], 'serviceIdentifier' => 'bedrock_data_automation', ], 'bedrock-runtime' => [ 'namespace' => 'BedrockRuntime', 'versions' => [ 'latest' => '2023-09-30', '2023-09-30' => '2023-09-30', ], 'serviceIdentifier' => 'bedrock_runtime', ], 'bedrock' => [ 'namespace' => 'Bedrock', 'versions' => [ 'latest' => '2023-04-20', '2023-04-20' => '2023-04-20', ], 'serviceIdentifier' => 'bedrock', ], 'billing' => [ 'namespace' => 'Billing', 'versions' => [ 'latest' => '2023-09-07', '2023-09-07' => '2023-09-07', ], 'serviceIdentifier' => 'billing', ], 'billingconductor' => [ 'namespace' => 'BillingConductor', 'versions' => [ 'latest' => '2021-07-30', '2021-07-30' => '2021-07-30', ], 'serviceIdentifier' => 'billingconductor', ], 'braket' => [ 'namespace' => 'Braket', 'versions' => [ 'latest' => '2019-09-01', '2019-09-01' => '2019-09-01', ], 'serviceIdentifier' => 'braket', ], 'budgets' => [ 'namespace' => 'Budgets', 'versions' => [ 'latest' => '2016-10-20', '2016-10-20' => '2016-10-20', ], 'serviceIdentifier' => 'budgets', ], 'ce' => [ 'namespace' => 'CostExplorer', 'versions' => [ 'latest' => '2017-10-25', '2017-10-25' => '2017-10-25', ], 'serviceIdentifier' => 'cost_explorer', ], 'chatbot' => [ 'namespace' => 'Chatbot', 'versions' => [ 'latest' => '2017-10-11', '2017-10-11' => '2017-10-11', ], 'serviceIdentifier' => 'chatbot', ], 'chime-sdk-identity' => [ 'namespace' => 'ChimeSDKIdentity', 'versions' => [ 'latest' => '2021-04-20', '2021-04-20' => '2021-04-20', ], 'serviceIdentifier' => 'chime_sdk_identity', ], 'chime-sdk-media-pipelines' => [ 'namespace' => 'ChimeSDKMediaPipelines', 'versions' => [ 'latest' => '2021-07-15', '2021-07-15' => '2021-07-15', ], 'serviceIdentifier' => 'chime_sdk_media_pipelines', ], 'chime-sdk-meetings' => [ 'namespace' => 'ChimeSDKMeetings', 'versions' => [ 'latest' => '2021-07-15', '2021-07-15' => '2021-07-15', ], 'serviceIdentifier' => 'chime_sdk_meetings', ], 'chime-sdk-messaging' => [ 'namespace' => 'ChimeSDKMessaging', 'versions' => [ 'latest' => '2021-05-15', '2021-05-15' => '2021-05-15', ], 'serviceIdentifier' => 'chime_sdk_messaging', ], 'chime-sdk-voice' => [ 'namespace' => 'ChimeSDKVoice', 'versions' => [ 'latest' => '2022-08-03', '2022-08-03' => '2022-08-03', ], 'serviceIdentifier' => 'chime_sdk_voice', ], 'chime' => [ 'namespace' => 'Chime', 'versions' => [ 'latest' => '2018-05-01', '2018-05-01' => '2018-05-01', ], 'serviceIdentifier' => 'chime', ], 'cleanrooms' => [ 'namespace' => 'CleanRooms', 'versions' => [ 'latest' => '2022-02-17', '2022-02-17' => '2022-02-17', ], 'serviceIdentifier' => 'cleanrooms', ], 'cleanroomsml' => [ 'namespace' => 'CleanRoomsML', 'versions' => [ 'latest' => '2023-09-06', '2023-09-06' => '2023-09-06', ], 'serviceIdentifier' => 'cleanroomsml', ], 'cloud9' => [ 'namespace' => 'Cloud9', 'versions' => [ 'latest' => '2017-09-23', '2017-09-23' => '2017-09-23', ], 'serviceIdentifier' => 'cloud9', ], 'cloudcontrol' => [ 'namespace' => 'CloudControlApi', 'versions' => [ 'latest' => '2021-09-30', '2021-09-30' => '2021-09-30', ], 'serviceIdentifier' => 'cloudcontrol', ], 'clouddirectory' => [ 'namespace' => 'CloudDirectory', 'versions' => [ 'latest' => '2017-01-11', '2017-01-11' => '2017-01-11', '2016-05-10' => '2016-05-10', ], 'serviceIdentifier' => 'clouddirectory', ], 'cloudformation' => [ 'namespace' => 'CloudFormation', 'versions' => [ 'latest' => '2010-05-15', '2010-05-15' => '2010-05-15', ], 'serviceIdentifier' => 'cloudformation', ], 'cloudfront-keyvaluestore' => [ 'namespace' => 'CloudFrontKeyValueStore', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'cloudfront_keyvaluestore', ], 'cloudfront' => [ 'namespace' => 'CloudFront', 'versions' => [ 'latest' => '2020-05-31', '2020-05-31' => '2020-05-31', '2019-03-26' => '2019-03-26', '2018-11-05' => '2018-11-05', '2018-06-18' => '2018-06-18', '2017-10-30' => '2017-10-30', '2017-03-25' => '2017-03-25', '2016-11-25' => '2016-11-25', '2016-09-29' => '2016-09-29', '2016-09-07' => '2016-09-07', '2016-08-20' => '2016-08-20', '2016-08-01' => '2016-08-01', '2016-01-28' => '2016-01-28', '2016-01-13' => '2020-05-31', '2015-09-17' => '2020-05-31', '2015-07-27' => '2015-07-27', '2015-04-17' => '2015-07-27', '2014-11-06' => '2015-07-27', ], 'serviceIdentifier' => 'cloudfront', ], 'cloudhsm' => [ 'namespace' => 'CloudHsm', 'versions' => [ 'latest' => '2014-05-30', '2014-05-30' => '2014-05-30', ], 'serviceIdentifier' => 'cloudhsm', ], 'cloudhsmv2' => [ 'namespace' => 'CloudHSMV2', 'versions' => [ 'latest' => '2017-04-28', '2017-04-28' => '2017-04-28', ], 'serviceIdentifier' => 'cloudhsm_v2', ], 'cloudsearch' => [ 'namespace' => 'CloudSearch', 'versions' => [ 'latest' => '2013-01-01', '2013-01-01' => '2013-01-01', ], 'serviceIdentifier' => 'cloudsearch', ], 'cloudsearchdomain' => [ 'namespace' => 'CloudSearchDomain', 'versions' => [ 'latest' => '2013-01-01', '2013-01-01' => '2013-01-01', ], 'serviceIdentifier' => 'cloudsearch_domain', ], 'cloudtrail-data' => [ 'namespace' => 'CloudTrailData', 'versions' => [ 'latest' => '2021-08-11', '2021-08-11' => '2021-08-11', ], 'serviceIdentifier' => 'cloudtrail_data', ], 'cloudtrail' => [ 'namespace' => 'CloudTrail', 'versions' => [ 'latest' => '2013-11-01', '2013-11-01' => '2013-11-01', ], 'serviceIdentifier' => 'cloudtrail', ], 'codeartifact' => [ 'namespace' => 'CodeArtifact', 'versions' => [ 'latest' => '2018-09-22', '2018-09-22' => '2018-09-22', ], 'serviceIdentifier' => 'codeartifact', ], 'codebuild' => [ 'namespace' => 'CodeBuild', 'versions' => [ 'latest' => '2016-10-06', '2016-10-06' => '2016-10-06', ], 'serviceIdentifier' => 'codebuild', ], 'codecatalyst' => [ 'namespace' => 'CodeCatalyst', 'versions' => [ 'latest' => '2022-09-28', '2022-09-28' => '2022-09-28', ], 'serviceIdentifier' => 'codecatalyst', ], 'codecommit' => [ 'namespace' => 'CodeCommit', 'versions' => [ 'latest' => '2015-04-13', '2015-04-13' => '2015-04-13', ], 'serviceIdentifier' => 'codecommit', ], 'codeconnections' => [ 'namespace' => 'CodeConnections', 'versions' => [ 'latest' => '2023-12-01', '2023-12-01' => '2023-12-01', ], 'serviceIdentifier' => 'codeconnections', ], 'codedeploy' => [ 'namespace' => 'CodeDeploy', 'versions' => [ 'latest' => '2014-10-06', '2014-10-06' => '2014-10-06', ], 'serviceIdentifier' => 'codedeploy', ], 'codeguru-reviewer' => [ 'namespace' => 'CodeGuruReviewer', 'versions' => [ 'latest' => '2019-09-19', '2019-09-19' => '2019-09-19', ], 'serviceIdentifier' => 'codeguru_reviewer', ], 'codeguru-security' => [ 'namespace' => 'CodeGuruSecurity', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'codeguru_security', ], 'codeguruprofiler' => [ 'namespace' => 'CodeGuruProfiler', 'versions' => [ 'latest' => '2019-07-18', '2019-07-18' => '2019-07-18', ], 'serviceIdentifier' => 'codeguruprofiler', ], 'codepipeline' => [ 'namespace' => 'CodePipeline', 'versions' => [ 'latest' => '2015-07-09', '2015-07-09' => '2015-07-09', ], 'serviceIdentifier' => 'codepipeline', ], 'codestar-connections' => [ 'namespace' => 'CodeStarconnections', 'versions' => [ 'latest' => '2019-12-01', '2019-12-01' => '2019-12-01', ], 'serviceIdentifier' => 'codestar_connections', ], 'codestar-notifications' => [ 'namespace' => 'CodeStarNotifications', 'versions' => [ 'latest' => '2019-10-15', '2019-10-15' => '2019-10-15', ], 'serviceIdentifier' => 'codestar_notifications', ], 'cognito-identity' => [ 'namespace' => 'CognitoIdentity', 'versions' => [ 'latest' => '2014-06-30', '2014-06-30' => '2014-06-30', ], 'serviceIdentifier' => 'cognito_identity', ], 'cognito-idp' => [ 'namespace' => 'CognitoIdentityProvider', 'versions' => [ 'latest' => '2016-04-18', '2016-04-18' => '2016-04-18', ], 'serviceIdentifier' => 'cognito_identity_provider', ], 'cognito-sync' => [ 'namespace' => 'CognitoSync', 'versions' => [ 'latest' => '2014-06-30', '2014-06-30' => '2014-06-30', ], 'serviceIdentifier' => 'cognito_sync', ], 'comprehend' => [ 'namespace' => 'Comprehend', 'versions' => [ 'latest' => '2017-11-27', '2017-11-27' => '2017-11-27', ], 'serviceIdentifier' => 'comprehend', ], 'comprehendmedical' => [ 'namespace' => 'ComprehendMedical', 'versions' => [ 'latest' => '2018-10-30', '2018-10-30' => '2018-10-30', ], 'serviceIdentifier' => 'comprehendmedical', ], 'compute-optimizer-automation' => [ 'namespace' => 'ComputeOptimizerAutomation', 'versions' => [ 'latest' => '2025-09-22', '2025-09-22' => '2025-09-22', ], 'serviceIdentifier' => 'compute_optimizer_automation', ], 'compute-optimizer' => [ 'namespace' => 'ComputeOptimizer', 'versions' => [ 'latest' => '2019-11-01', '2019-11-01' => '2019-11-01', ], 'serviceIdentifier' => 'compute_optimizer', ], 'config' => [ 'namespace' => 'ConfigService', 'versions' => [ 'latest' => '2014-11-12', '2014-11-12' => '2014-11-12', ], 'serviceIdentifier' => 'config_service', ], 'connect-contact-lens' => [ 'namespace' => 'ConnectContactLens', 'versions' => [ 'latest' => '2020-08-21', '2020-08-21' => '2020-08-21', ], 'serviceIdentifier' => 'connect_contact_lens', ], 'connect' => [ 'namespace' => 'Connect', 'versions' => [ 'latest' => '2017-08-08', '2017-08-08' => '2017-08-08', ], 'serviceIdentifier' => 'connect', ], 'connectcampaigns' => [ 'namespace' => 'ConnectCampaignService', 'versions' => [ 'latest' => '2021-01-30', '2021-01-30' => '2021-01-30', ], 'serviceIdentifier' => 'connectcampaigns', ], 'connectcampaignsv2' => [ 'namespace' => 'ConnectCampaignsV2', 'versions' => [ 'latest' => '2024-04-23', '2024-04-23' => '2024-04-23', ], 'serviceIdentifier' => 'connectcampaignsv2', ], 'connectcases' => [ 'namespace' => 'ConnectCases', 'versions' => [ 'latest' => '2022-10-03', '2022-10-03' => '2022-10-03', ], 'serviceIdentifier' => 'connectcases', ], 'connecthealth' => [ 'namespace' => 'ConnectHealth', 'versions' => [ 'latest' => '2025-01-29', '2025-01-29' => '2025-01-29', ], 'serviceIdentifier' => 'connecthealth', ], 'connectparticipant' => [ 'namespace' => 'ConnectParticipant', 'versions' => [ 'latest' => '2018-09-07', '2018-09-07' => '2018-09-07', ], 'serviceIdentifier' => 'connectparticipant', ], 'controlcatalog' => [ 'namespace' => 'ControlCatalog', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'controlcatalog', ], 'controltower' => [ 'namespace' => 'ControlTower', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'controltower', ], 'cost-optimization-hub' => [ 'namespace' => 'CostOptimizationHub', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'cost_optimization_hub', ], 'cur' => [ 'namespace' => 'CostandUsageReportService', 'versions' => [ 'latest' => '2017-01-06', '2017-01-06' => '2017-01-06', ], 'serviceIdentifier' => 'cost_and_usage_report_service', ], 'customer-profiles' => [ 'namespace' => 'CustomerProfiles', 'versions' => [ 'latest' => '2020-08-15', '2020-08-15' => '2020-08-15', ], 'serviceIdentifier' => 'customer_profiles', ], 'data.iot' => [ 'namespace' => 'IotDataPlane', 'versions' => [ 'latest' => '2015-05-28', '2015-05-28' => '2015-05-28', ], 'serviceIdentifier' => 'iot_data_plane', ], 'databrew' => [ 'namespace' => 'GlueDataBrew', 'versions' => [ 'latest' => '2017-07-25', '2017-07-25' => '2017-07-25', ], 'serviceIdentifier' => 'databrew', ], 'dataexchange' => [ 'namespace' => 'DataExchange', 'versions' => [ 'latest' => '2017-07-25', '2017-07-25' => '2017-07-25', ], 'serviceIdentifier' => 'dataexchange', ], 'datapipeline' => [ 'namespace' => 'DataPipeline', 'versions' => [ 'latest' => '2012-10-29', '2012-10-29' => '2012-10-29', ], 'serviceIdentifier' => 'data_pipeline', ], 'datasync' => [ 'namespace' => 'DataSync', 'versions' => [ 'latest' => '2018-11-09', '2018-11-09' => '2018-11-09', ], 'serviceIdentifier' => 'datasync', ], 'datazone' => [ 'namespace' => 'DataZone', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'datazone', ], 'dax' => [ 'namespace' => 'DAX', 'versions' => [ 'latest' => '2017-04-19', '2017-04-19' => '2017-04-19', ], 'serviceIdentifier' => 'dax', ], 'deadline' => [ 'namespace' => 'Deadline', 'versions' => [ 'latest' => '2023-10-12', '2023-10-12' => '2023-10-12', ], 'serviceIdentifier' => 'deadline', ], 'detective' => [ 'namespace' => 'Detective', 'versions' => [ 'latest' => '2018-10-26', '2018-10-26' => '2018-10-26', ], 'serviceIdentifier' => 'detective', ], 'devicefarm' => [ 'namespace' => 'DeviceFarm', 'versions' => [ 'latest' => '2015-06-23', '2015-06-23' => '2015-06-23', ], 'serviceIdentifier' => 'device_farm', ], 'devops-agent' => [ 'namespace' => 'DevOpsAgent', 'versions' => [ 'latest' => '2026-01-01', '2026-01-01' => '2026-01-01', ], 'serviceIdentifier' => 'devops_agent', ], 'devops-guru' => [ 'namespace' => 'DevOpsGuru', 'versions' => [ 'latest' => '2020-12-01', '2020-12-01' => '2020-12-01', ], 'serviceIdentifier' => 'devops_guru', ], 'directconnect' => [ 'namespace' => 'DirectConnect', 'versions' => [ 'latest' => '2012-10-25', '2012-10-25' => '2012-10-25', ], 'serviceIdentifier' => 'direct_connect', ], 'directory-service-data' => [ 'namespace' => 'DirectoryServiceData', 'versions' => [ 'latest' => '2023-05-31', '2023-05-31' => '2023-05-31', ], 'serviceIdentifier' => 'directory_service_data', ], 'discovery' => [ 'namespace' => 'ApplicationDiscoveryService', 'versions' => [ 'latest' => '2015-11-01', '2015-11-01' => '2015-11-01', ], 'serviceIdentifier' => 'application_discovery_service', ], 'dlm' => [ 'namespace' => 'DLM', 'versions' => [ 'latest' => '2018-01-12', '2018-01-12' => '2018-01-12', ], 'serviceIdentifier' => 'dlm', ], 'dms' => [ 'namespace' => 'DatabaseMigrationService', 'versions' => [ 'latest' => '2016-01-01', '2016-01-01' => '2016-01-01', ], 'serviceIdentifier' => 'database_migration_service', ], 'docdb-elastic' => [ 'namespace' => 'DocDBElastic', 'versions' => [ 'latest' => '2022-11-28', '2022-11-28' => '2022-11-28', ], 'serviceIdentifier' => 'docdb_elastic', ], 'docdb' => [ 'namespace' => 'DocDB', 'versions' => [ 'latest' => '2014-10-31', '2014-10-31' => '2014-10-31', ], 'serviceIdentifier' => 'docdb', ], 'drs' => [ 'namespace' => 'drs', 'versions' => [ 'latest' => '2020-02-26', '2020-02-26' => '2020-02-26', ], 'serviceIdentifier' => 'drs', ], 'ds' => [ 'namespace' => 'DirectoryService', 'versions' => [ 'latest' => '2015-04-16', '2015-04-16' => '2015-04-16', ], 'serviceIdentifier' => 'directory_service', ], 'dsql' => [ 'namespace' => 'DSQL', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'dsql', ], 'dynamodb' => [ 'namespace' => 'DynamoDb', 'versions' => [ 'latest' => '2012-08-10', '2012-08-10' => '2012-08-10', '2011-12-05' => '2011-12-05', ], 'serviceIdentifier' => 'dynamodb', ], 'ebs' => [ 'namespace' => 'EBS', 'versions' => [ 'latest' => '2019-11-02', '2019-11-02' => '2019-11-02', ], 'serviceIdentifier' => 'ebs', ], 'ec2-instance-connect' => [ 'namespace' => 'EC2InstanceConnect', 'versions' => [ 'latest' => '2018-04-02', '2018-04-02' => '2018-04-02', ], 'serviceIdentifier' => 'ec2_instance_connect', ], 'ec2' => [ 'namespace' => 'Ec2', 'versions' => [ 'latest' => '2016-11-15', '2016-11-15' => '2016-11-15', '2016-09-15' => '2016-09-15', '2016-04-01' => '2016-04-01', '2015-10-01' => '2015-10-01', '2015-04-15' => '2016-11-15', ], 'serviceIdentifier' => 'ec2', ], 'ecr-public' => [ 'namespace' => 'ECRPublic', 'versions' => [ 'latest' => '2020-10-30', '2020-10-30' => '2020-10-30', ], 'serviceIdentifier' => 'ecr_public', ], 'ecr' => [ 'namespace' => 'Ecr', 'versions' => [ 'latest' => '2015-09-21', '2015-09-21' => '2015-09-21', ], 'serviceIdentifier' => 'ecr', ], 'ecs' => [ 'namespace' => 'Ecs', 'versions' => [ 'latest' => '2014-11-13', '2014-11-13' => '2014-11-13', ], 'serviceIdentifier' => 'ecs', ], 'eks-auth' => [ 'namespace' => 'EKSAuth', 'versions' => [ 'latest' => '2023-11-26', '2023-11-26' => '2023-11-26', ], 'serviceIdentifier' => 'eks_auth', ], 'eks' => [ 'namespace' => 'EKS', 'versions' => [ 'latest' => '2017-11-01', '2017-11-01' => '2017-11-01', ], 'serviceIdentifier' => 'eks', ], 'elasticache' => [ 'namespace' => 'ElastiCache', 'versions' => [ 'latest' => '2015-02-02', '2015-02-02' => '2015-02-02', ], 'serviceIdentifier' => 'elasticache', ], 'elasticbeanstalk' => [ 'namespace' => 'ElasticBeanstalk', 'versions' => [ 'latest' => '2010-12-01', '2010-12-01' => '2010-12-01', ], 'serviceIdentifier' => 'elastic_beanstalk', ], 'elasticfilesystem' => [ 'namespace' => 'Efs', 'versions' => [ 'latest' => '2015-02-01', '2015-02-01' => '2015-02-01', ], 'serviceIdentifier' => 'efs', ], 'elasticloadbalancing' => [ 'namespace' => 'ElasticLoadBalancing', 'versions' => [ 'latest' => '2012-06-01', '2012-06-01' => '2012-06-01', ], 'serviceIdentifier' => 'elastic_load_balancing', ], 'elasticloadbalancingv2' => [ 'namespace' => 'ElasticLoadBalancingV2', 'versions' => [ 'latest' => '2015-12-01', '2015-12-01' => '2015-12-01', ], 'serviceIdentifier' => 'elastic_load_balancing_v2', ], 'elasticmapreduce' => [ 'namespace' => 'Emr', 'versions' => [ 'latest' => '2009-03-31', '2009-03-31' => '2009-03-31', ], 'serviceIdentifier' => 'emr', ], 'elementalinference' => [ 'namespace' => 'ElementalInference', 'versions' => [ 'latest' => '2018-11-14', '2018-11-14' => '2018-11-14', ], 'serviceIdentifier' => 'elementalinference', ], 'email' => [ 'namespace' => 'Ses', 'versions' => [ 'latest' => '2010-12-01', '2010-12-01' => '2010-12-01', ], 'serviceIdentifier' => 'ses', ], 'emr-containers' => [ 'namespace' => 'EMRContainers', 'versions' => [ 'latest' => '2020-10-01', '2020-10-01' => '2020-10-01', ], 'serviceIdentifier' => 'emr_containers', ], 'emr-serverless' => [ 'namespace' => 'EMRServerless', 'versions' => [ 'latest' => '2021-07-13', '2021-07-13' => '2021-07-13', ], 'serviceIdentifier' => 'emr_serverless', ], 'entitlement.marketplace' => [ 'namespace' => 'MarketplaceEntitlementService', 'versions' => [ 'latest' => '2017-01-11', '2017-01-11' => '2017-01-11', ], 'serviceIdentifier' => 'marketplace_entitlement_service', ], 'entityresolution' => [ 'namespace' => 'EntityResolution', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'entityresolution', ], 'es' => [ 'namespace' => 'ElasticsearchService', 'versions' => [ 'latest' => '2015-01-01', '2015-01-01' => '2015-01-01', ], 'serviceIdentifier' => 'elasticsearch_service', ], 'eventbridge' => [ 'namespace' => 'EventBridge', 'versions' => [ 'latest' => '2015-10-07', '2015-10-07' => '2015-10-07', ], 'serviceIdentifier' => 'eventbridge', ], 'events' => [ 'namespace' => 'CloudWatchEvents', 'versions' => [ 'latest' => '2015-10-07', '2015-10-07' => '2015-10-07', '2014-02-03' => '2015-10-07', ], 'serviceIdentifier' => 'cloudwatch_events', ], 'evs' => [ 'namespace' => 'Evs', 'versions' => [ 'latest' => '2023-07-27', '2023-07-27' => '2023-07-27', ], 'serviceIdentifier' => 'evs', ], 'finspace-data' => [ 'namespace' => 'FinSpaceData', 'versions' => [ 'latest' => '2020-07-13', '2020-07-13' => '2020-07-13', ], 'serviceIdentifier' => 'finspace_data', ], 'finspace' => [ 'namespace' => 'finspace', 'versions' => [ 'latest' => '2021-03-12', '2021-03-12' => '2021-03-12', ], 'serviceIdentifier' => 'finspace', ], 'firehose' => [ 'namespace' => 'Firehose', 'versions' => [ 'latest' => '2015-08-04', '2015-08-04' => '2015-08-04', ], 'serviceIdentifier' => 'firehose', ], 'fis' => [ 'namespace' => 'FIS', 'versions' => [ 'latest' => '2020-12-01', '2020-12-01' => '2020-12-01', ], 'serviceIdentifier' => 'fis', ], 'fms' => [ 'namespace' => 'FMS', 'versions' => [ 'latest' => '2018-01-01', '2018-01-01' => '2018-01-01', ], 'serviceIdentifier' => 'fms', ], 'forecast' => [ 'namespace' => 'ForecastService', 'versions' => [ 'latest' => '2018-06-26', '2018-06-26' => '2018-06-26', ], 'serviceIdentifier' => 'forecast', ], 'forecastquery' => [ 'namespace' => 'ForecastQueryService', 'versions' => [ 'latest' => '2018-06-26', '2018-06-26' => '2018-06-26', ], 'serviceIdentifier' => 'forecastquery', ], 'frauddetector' => [ 'namespace' => 'FraudDetector', 'versions' => [ 'latest' => '2019-11-15', '2019-11-15' => '2019-11-15', ], 'serviceIdentifier' => 'frauddetector', ], 'freetier' => [ 'namespace' => 'FreeTier', 'versions' => [ 'latest' => '2023-09-07', '2023-09-07' => '2023-09-07', ], 'serviceIdentifier' => 'freetier', ], 'fsx' => [ 'namespace' => 'FSx', 'versions' => [ 'latest' => '2018-03-01', '2018-03-01' => '2018-03-01', ], 'serviceIdentifier' => 'fsx', ], 'gamelift' => [ 'namespace' => 'GameLift', 'versions' => [ 'latest' => '2015-10-01', '2015-10-01' => '2015-10-01', ], 'serviceIdentifier' => 'gamelift', ], 'gameliftstreams' => [ 'namespace' => 'GameLiftStreams', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'gameliftstreams', ], 'geo-maps' => [ 'namespace' => 'GeoMaps', 'versions' => [ 'latest' => '2020-11-19', '2020-11-19' => '2020-11-19', ], 'serviceIdentifier' => 'geo_maps', ], 'geo-places' => [ 'namespace' => 'GeoPlaces', 'versions' => [ 'latest' => '2020-11-19', '2020-11-19' => '2020-11-19', ], 'serviceIdentifier' => 'geo_places', ], 'geo-routes' => [ 'namespace' => 'GeoRoutes', 'versions' => [ 'latest' => '2020-11-19', '2020-11-19' => '2020-11-19', ], 'serviceIdentifier' => 'geo_routes', ], 'glacier' => [ 'namespace' => 'Glacier', 'versions' => [ 'latest' => '2012-06-01', '2012-06-01' => '2012-06-01', ], 'serviceIdentifier' => 'glacier', ], 'globalaccelerator' => [ 'namespace' => 'GlobalAccelerator', 'versions' => [ 'latest' => '2018-08-08', '2018-08-08' => '2018-08-08', ], 'serviceIdentifier' => 'global_accelerator', ], 'glue' => [ 'namespace' => 'Glue', 'versions' => [ 'latest' => '2017-03-31', '2017-03-31' => '2017-03-31', ], 'serviceIdentifier' => 'glue', ], 'grafana' => [ 'namespace' => 'ManagedGrafana', 'versions' => [ 'latest' => '2020-08-18', '2020-08-18' => '2020-08-18', ], 'serviceIdentifier' => 'grafana', ], 'greengrass' => [ 'namespace' => 'Greengrass', 'versions' => [ 'latest' => '2017-06-07', '2017-06-07' => '2017-06-07', ], 'serviceIdentifier' => 'greengrass', ], 'greengrassv2' => [ 'namespace' => 'GreengrassV2', 'versions' => [ 'latest' => '2020-11-30', '2020-11-30' => '2020-11-30', ], 'serviceIdentifier' => 'greengrassv2', ], 'groundstation' => [ 'namespace' => 'GroundStation', 'versions' => [ 'latest' => '2019-05-23', '2019-05-23' => '2019-05-23', ], 'serviceIdentifier' => 'groundstation', ], 'guardduty' => [ 'namespace' => 'GuardDuty', 'versions' => [ 'latest' => '2017-11-28', '2017-11-28' => '2017-11-28', ], 'serviceIdentifier' => 'guardduty', ], 'health' => [ 'namespace' => 'Health', 'versions' => [ 'latest' => '2016-08-04', '2016-08-04' => '2016-08-04', ], 'serviceIdentifier' => 'health', ], 'healthlake' => [ 'namespace' => 'HealthLake', 'versions' => [ 'latest' => '2017-07-01', '2017-07-01' => '2017-07-01', ], 'serviceIdentifier' => 'healthlake', ], 'iam' => [ 'namespace' => 'Iam', 'versions' => [ 'latest' => '2010-05-08', '2010-05-08' => '2010-05-08', ], 'serviceIdentifier' => 'iam', ], 'identitystore' => [ 'namespace' => 'IdentityStore', 'versions' => [ 'latest' => '2020-06-15', '2020-06-15' => '2020-06-15', ], 'serviceIdentifier' => 'identitystore', ], 'imagebuilder' => [ 'namespace' => 'imagebuilder', 'versions' => [ 'latest' => '2019-12-02', '2019-12-02' => '2019-12-02', ], 'serviceIdentifier' => 'imagebuilder', ], 'importexport' => [ 'namespace' => 'ImportExport', 'versions' => [ 'latest' => '2010-06-01', '2010-06-01' => '2010-06-01', ], 'serviceIdentifier' => 'importexport', ], 'inspector-scan' => [ 'namespace' => 'InspectorScan', 'versions' => [ 'latest' => '2023-08-08', '2023-08-08' => '2023-08-08', ], 'serviceIdentifier' => 'inspector_scan', ], 'inspector' => [ 'namespace' => 'Inspector', 'versions' => [ 'latest' => '2016-02-16', '2016-02-16' => '2016-02-16', '2015-08-18' => '2016-02-16', ], 'serviceIdentifier' => 'inspector', ], 'inspector2' => [ 'namespace' => 'Inspector2', 'versions' => [ 'latest' => '2020-06-08', '2020-06-08' => '2020-06-08', ], 'serviceIdentifier' => 'inspector2', ], 'interconnect' => [ 'namespace' => 'Interconnect', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'interconnect', ], 'internetmonitor' => [ 'namespace' => 'InternetMonitor', 'versions' => [ 'latest' => '2021-06-03', '2021-06-03' => '2021-06-03', ], 'serviceIdentifier' => 'internetmonitor', ], 'invoicing' => [ 'namespace' => 'Invoicing', 'versions' => [ 'latest' => '2024-12-01', '2024-12-01' => '2024-12-01', ], 'serviceIdentifier' => 'invoicing', ], 'iot-jobs-data' => [ 'namespace' => 'IoTJobsDataPlane', 'versions' => [ 'latest' => '2017-09-29', '2017-09-29' => '2017-09-29', ], 'serviceIdentifier' => 'iot_jobs_data_plane', ], 'iot-managed-integrations' => [ 'namespace' => 'IoTManagedIntegrations', 'versions' => [ 'latest' => '2025-03-03', '2025-03-03' => '2025-03-03', ], 'serviceIdentifier' => 'iot_managed_integrations', ], 'iot' => [ 'namespace' => 'Iot', 'versions' => [ 'latest' => '2015-05-28', '2015-05-28' => '2015-05-28', ], 'serviceIdentifier' => 'iot', ], 'iotdeviceadvisor' => [ 'namespace' => 'IoTDeviceAdvisor', 'versions' => [ 'latest' => '2020-09-18', '2020-09-18' => '2020-09-18', ], 'serviceIdentifier' => 'iotdeviceadvisor', ], 'iotfleetwise' => [ 'namespace' => 'IoTFleetWise', 'versions' => [ 'latest' => '2021-06-17', '2021-06-17' => '2021-06-17', ], 'serviceIdentifier' => 'iotfleetwise', ], 'iotsecuretunneling' => [ 'namespace' => 'IoTSecureTunneling', 'versions' => [ 'latest' => '2018-10-05', '2018-10-05' => '2018-10-05', ], 'serviceIdentifier' => 'iotsecuretunneling', ], 'iotsitewise' => [ 'namespace' => 'IoTSiteWise', 'versions' => [ 'latest' => '2019-12-02', '2019-12-02' => '2019-12-02', ], 'serviceIdentifier' => 'iotsitewise', ], 'iotthingsgraph' => [ 'namespace' => 'IoTThingsGraph', 'versions' => [ 'latest' => '2018-09-06', '2018-09-06' => '2018-09-06', ], 'serviceIdentifier' => 'iotthingsgraph', ], 'iottwinmaker' => [ 'namespace' => 'IoTTwinMaker', 'versions' => [ 'latest' => '2021-11-29', '2021-11-29' => '2021-11-29', ], 'serviceIdentifier' => 'iottwinmaker', ], 'iotwireless' => [ 'namespace' => 'IoTWireless', 'versions' => [ 'latest' => '2020-11-22', '2020-11-22' => '2020-11-22', ], 'serviceIdentifier' => 'iot_wireless', ], 'ivs-realtime' => [ 'namespace' => 'IVSRealTime', 'versions' => [ 'latest' => '2020-07-14', '2020-07-14' => '2020-07-14', ], 'serviceIdentifier' => 'ivs_realtime', ], 'ivs' => [ 'namespace' => 'IVS', 'versions' => [ 'latest' => '2020-07-14', '2020-07-14' => '2020-07-14', ], 'serviceIdentifier' => 'ivs', ], 'ivschat' => [ 'namespace' => 'ivschat', 'versions' => [ 'latest' => '2020-07-14', '2020-07-14' => '2020-07-14', ], 'serviceIdentifier' => 'ivschat', ], 'kafka' => [ 'namespace' => 'Kafka', 'versions' => [ 'latest' => '2018-11-14', '2018-11-14' => '2018-11-14', ], 'serviceIdentifier' => 'kafka', ], 'kafkaconnect' => [ 'namespace' => 'KafkaConnect', 'versions' => [ 'latest' => '2021-09-14', '2021-09-14' => '2021-09-14', ], 'serviceIdentifier' => 'kafkaconnect', ], 'kendra-ranking' => [ 'namespace' => 'KendraRanking', 'versions' => [ 'latest' => '2022-10-19', '2022-10-19' => '2022-10-19', ], 'serviceIdentifier' => 'kendra_ranking', ], 'kendra' => [ 'namespace' => 'kendra', 'versions' => [ 'latest' => '2019-02-03', '2019-02-03' => '2019-02-03', ], 'serviceIdentifier' => 'kendra', ], 'keyspaces' => [ 'namespace' => 'Keyspaces', 'versions' => [ 'latest' => '2022-02-10', '2022-02-10' => '2022-02-10', ], 'serviceIdentifier' => 'keyspaces', ], 'keyspacesstreams' => [ 'namespace' => 'KeyspacesStreams', 'versions' => [ 'latest' => '2024-09-09', '2024-09-09' => '2024-09-09', ], 'serviceIdentifier' => 'keyspacesstreams', ], 'kinesis-video-archived-media' => [ 'namespace' => 'KinesisVideoArchivedMedia', 'versions' => [ 'latest' => '2017-09-30', '2017-09-30' => '2017-09-30', ], 'serviceIdentifier' => 'kinesis_video_archived_media', ], 'kinesis-video-media' => [ 'namespace' => 'KinesisVideoMedia', 'versions' => [ 'latest' => '2017-09-30', '2017-09-30' => '2017-09-30', ], 'serviceIdentifier' => 'kinesis_video_media', ], 'kinesis-video-signaling' => [ 'namespace' => 'KinesisVideoSignalingChannels', 'versions' => [ 'latest' => '2019-12-04', '2019-12-04' => '2019-12-04', ], 'serviceIdentifier' => 'kinesis_video_signaling', ], 'kinesis-video-webrtc-storage' => [ 'namespace' => 'KinesisVideoWebRTCStorage', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'kinesis_video_webrtc_storage', ], 'kinesis' => [ 'namespace' => 'Kinesis', 'versions' => [ 'latest' => '2013-12-02', '2013-12-02' => '2013-12-02', ], 'serviceIdentifier' => 'kinesis', ], 'kinesisanalytics' => [ 'namespace' => 'KinesisAnalytics', 'versions' => [ 'latest' => '2015-08-14', '2015-08-14' => '2015-08-14', ], 'serviceIdentifier' => 'kinesis_analytics', ], 'kinesisanalyticsv2' => [ 'namespace' => 'KinesisAnalyticsV2', 'versions' => [ 'latest' => '2018-05-23', '2018-05-23' => '2018-05-23', ], 'serviceIdentifier' => 'kinesis_analytics_v2', ], 'kinesisvideo' => [ 'namespace' => 'KinesisVideo', 'versions' => [ 'latest' => '2017-09-30', '2017-09-30' => '2017-09-30', ], 'serviceIdentifier' => 'kinesis_video', ], 'kms' => [ 'namespace' => 'Kms', 'versions' => [ 'latest' => '2014-11-01', '2014-11-01' => '2014-11-01', ], 'serviceIdentifier' => 'kms', ], 'lakeformation' => [ 'namespace' => 'LakeFormation', 'versions' => [ 'latest' => '2017-03-31', '2017-03-31' => '2017-03-31', ], 'serviceIdentifier' => 'lakeformation', ], 'lambda-core' => [ 'namespace' => 'LambdaCore', 'versions' => [ 'latest' => '2026-04-30', '2026-04-30' => '2026-04-30', ], 'serviceIdentifier' => 'lambda_core', ], 'lambda-microvms' => [ 'namespace' => 'LambdaMicrovms', 'versions' => [ 'latest' => '2025-09-09', '2025-09-09' => '2025-09-09', ], 'serviceIdentifier' => 'lambda_microvms', ], 'lambda' => [ 'namespace' => 'Lambda', 'versions' => [ 'latest' => '2015-03-31', '2015-03-31' => '2015-03-31', ], 'serviceIdentifier' => 'lambda', ], 'launch-wizard' => [ 'namespace' => 'LaunchWizard', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'launch_wizard', ], 'lex-models' => [ 'namespace' => 'LexModelBuildingService', 'versions' => [ 'latest' => '2017-04-19', '2017-04-19' => '2017-04-19', ], 'serviceIdentifier' => 'lex_model_building_service', ], 'license-manager-linux-subscriptions' => [ 'namespace' => 'LicenseManagerLinuxSubscriptions', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'license_manager_linux_subscriptions', ], 'license-manager-user-subscriptions' => [ 'namespace' => 'LicenseManagerUserSubscriptions', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'license_manager_user_subscriptions', ], 'license-manager' => [ 'namespace' => 'LicenseManager', 'versions' => [ 'latest' => '2018-08-01', '2018-08-01' => '2018-08-01', ], 'serviceIdentifier' => 'license_manager', ], 'lightsail' => [ 'namespace' => 'Lightsail', 'versions' => [ 'latest' => '2016-11-28', '2016-11-28' => '2016-11-28', ], 'serviceIdentifier' => 'lightsail', ], 'location' => [ 'namespace' => 'LocationService', 'versions' => [ 'latest' => '2020-11-19', '2020-11-19' => '2020-11-19', ], 'serviceIdentifier' => 'location', ], 'logs' => [ 'namespace' => 'CloudWatchLogs', 'versions' => [ 'latest' => '2014-03-28', '2014-03-28' => '2014-03-28', ], 'serviceIdentifier' => 'cloudwatch_logs', ], 'lookoutequipment' => [ 'namespace' => 'LookoutEquipment', 'versions' => [ 'latest' => '2020-12-15', '2020-12-15' => '2020-12-15', ], 'serviceIdentifier' => 'lookoutequipment', ], 'm2' => [ 'namespace' => 'MainframeModernization', 'versions' => [ 'latest' => '2021-04-28', '2021-04-28' => '2021-04-28', ], 'serviceIdentifier' => 'm2', ], 'machinelearning' => [ 'namespace' => 'MachineLearning', 'versions' => [ 'latest' => '2014-12-12', '2014-12-12' => '2014-12-12', ], 'serviceIdentifier' => 'machine_learning', ], 'macie2' => [ 'namespace' => 'Macie2', 'versions' => [ 'latest' => '2020-01-01', '2020-01-01' => '2020-01-01', ], 'serviceIdentifier' => 'macie2', ], 'mailmanager' => [ 'namespace' => 'MailManager', 'versions' => [ 'latest' => '2023-10-17', '2023-10-17' => '2023-10-17', ], 'serviceIdentifier' => 'mailmanager', ], 'managedblockchain-query' => [ 'namespace' => 'ManagedBlockchainQuery', 'versions' => [ 'latest' => '2023-05-04', '2023-05-04' => '2023-05-04', ], 'serviceIdentifier' => 'managedblockchain_query', ], 'managedblockchain' => [ 'namespace' => 'ManagedBlockchain', 'versions' => [ 'latest' => '2018-09-24', '2018-09-24' => '2018-09-24', ], 'serviceIdentifier' => 'managedblockchain', ], 'marketplace-agreement' => [ 'namespace' => 'MarketplaceAgreement', 'versions' => [ 'latest' => '2020-03-01', '2020-03-01' => '2020-03-01', ], 'serviceIdentifier' => 'marketplace_agreement', ], 'marketplace-catalog' => [ 'namespace' => 'MarketplaceCatalog', 'versions' => [ 'latest' => '2018-09-17', '2018-09-17' => '2018-09-17', ], 'serviceIdentifier' => 'marketplace_catalog', ], 'marketplace-deployment' => [ 'namespace' => 'MarketplaceDeployment', 'versions' => [ 'latest' => '2023-01-25', '2023-01-25' => '2023-01-25', ], 'serviceIdentifier' => 'marketplace_deployment', ], 'marketplace-discovery' => [ 'namespace' => 'MarketplaceDiscovery', 'versions' => [ 'latest' => '2026-02-05', '2026-02-05' => '2026-02-05', ], 'serviceIdentifier' => 'marketplace_discovery', ], 'marketplace-reporting' => [ 'namespace' => 'MarketplaceReporting', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'marketplace_reporting', ], 'marketplacecommerceanalytics' => [ 'namespace' => 'MarketplaceCommerceAnalytics', 'versions' => [ 'latest' => '2015-07-01', '2015-07-01' => '2015-07-01', ], 'serviceIdentifier' => 'marketplace_commerce_analytics', ], 'mediaconnect' => [ 'namespace' => 'MediaConnect', 'versions' => [ 'latest' => '2018-11-14', '2018-11-14' => '2018-11-14', ], 'serviceIdentifier' => 'mediaconnect', ], 'mediaconvert' => [ 'namespace' => 'MediaConvert', 'versions' => [ 'latest' => '2017-08-29', '2017-08-29' => '2017-08-29', ], 'serviceIdentifier' => 'mediaconvert', ], 'medialive' => [ 'namespace' => 'MediaLive', 'versions' => [ 'latest' => '2017-10-14', '2017-10-14' => '2017-10-14', ], 'serviceIdentifier' => 'medialive', ], 'mediapackage-vod' => [ 'namespace' => 'MediaPackageVod', 'versions' => [ 'latest' => '2018-11-07', '2018-11-07' => '2018-11-07', ], 'serviceIdentifier' => 'mediapackage_vod', ], 'mediapackage' => [ 'namespace' => 'MediaPackage', 'versions' => [ 'latest' => '2017-10-12', '2017-10-12' => '2017-10-12', ], 'serviceIdentifier' => 'mediapackage', ], 'mediapackagev2' => [ 'namespace' => 'MediaPackageV2', 'versions' => [ 'latest' => '2022-12-25', '2022-12-25' => '2022-12-25', ], 'serviceIdentifier' => 'mediapackagev2', ], 'mediastore-data' => [ 'namespace' => 'MediaStoreData', 'versions' => [ 'latest' => '2017-09-01', '2017-09-01' => '2017-09-01', ], 'serviceIdentifier' => 'mediastore_data', ], 'mediastore' => [ 'namespace' => 'MediaStore', 'versions' => [ 'latest' => '2017-09-01', '2017-09-01' => '2017-09-01', ], 'serviceIdentifier' => 'mediastore', ], 'mediatailor' => [ 'namespace' => 'MediaTailor', 'versions' => [ 'latest' => '2018-04-23', '2018-04-23' => '2018-04-23', ], 'serviceIdentifier' => 'mediatailor', ], 'medical-imaging' => [ 'namespace' => 'MedicalImaging', 'versions' => [ 'latest' => '2023-07-19', '2023-07-19' => '2023-07-19', ], 'serviceIdentifier' => 'medical_imaging', ], 'memorydb' => [ 'namespace' => 'MemoryDB', 'versions' => [ 'latest' => '2021-01-01', '2021-01-01' => '2021-01-01', ], 'serviceIdentifier' => 'memorydb', ], 'metering.marketplace' => [ 'namespace' => 'MarketplaceMetering', 'versions' => [ 'latest' => '2016-01-14', '2016-01-14' => '2016-01-14', ], 'serviceIdentifier' => 'marketplace_metering', ], 'mgh' => [ 'namespace' => 'MigrationHub', 'versions' => [ 'latest' => '2017-05-31', '2017-05-31' => '2017-05-31', ], 'serviceIdentifier' => 'migration_hub', ], 'mgn' => [ 'namespace' => 'mgn', 'versions' => [ 'latest' => '2020-02-26', '2020-02-26' => '2020-02-26', ], 'serviceIdentifier' => 'mgn', ], 'migration-hub-refactor-spaces' => [ 'namespace' => 'MigrationHubRefactorSpaces', 'versions' => [ 'latest' => '2021-10-26', '2021-10-26' => '2021-10-26', ], 'serviceIdentifier' => 'migration_hub_refactor_spaces', ], 'migrationhub-config' => [ 'namespace' => 'MigrationHubConfig', 'versions' => [ 'latest' => '2019-06-30', '2019-06-30' => '2019-06-30', ], 'serviceIdentifier' => 'migrationhub_config', ], 'migrationhuborchestrator' => [ 'namespace' => 'MigrationHubOrchestrator', 'versions' => [ 'latest' => '2021-08-28', '2021-08-28' => '2021-08-28', ], 'serviceIdentifier' => 'migrationhuborchestrator', ], 'migrationhubstrategy' => [ 'namespace' => 'MigrationHubStrategyRecommendations', 'versions' => [ 'latest' => '2020-02-19', '2020-02-19' => '2020-02-19', ], 'serviceIdentifier' => 'migrationhubstrategy', ], 'models.lex.v2' => [ 'namespace' => 'LexModelsV2', 'versions' => [ 'latest' => '2020-08-07', '2020-08-07' => '2020-08-07', ], 'serviceIdentifier' => 'lex_models_v2', ], 'monitoring' => [ 'namespace' => 'CloudWatch', 'versions' => [ 'latest' => '2010-08-01', '2010-08-01' => '2010-08-01', ], 'serviceIdentifier' => 'cloudwatch', ], 'mpa' => [ 'namespace' => 'MPA', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'mpa', ], 'mq' => [ 'namespace' => 'MQ', 'versions' => [ 'latest' => '2017-11-27', '2017-11-27' => '2017-11-27', ], 'serviceIdentifier' => 'mq', ], 'mturk-requester' => [ 'namespace' => 'MTurk', 'versions' => [ 'latest' => '2017-01-17', '2017-01-17' => '2017-01-17', ], 'serviceIdentifier' => 'mturk', ], 'mwaa-serverless' => [ 'namespace' => 'MWAAServerless', 'versions' => [ 'latest' => '2024-07-26', '2024-07-26' => '2024-07-26', ], 'serviceIdentifier' => 'mwaa_serverless', ], 'mwaa' => [ 'namespace' => 'MWAA', 'versions' => [ 'latest' => '2020-07-01', '2020-07-01' => '2020-07-01', ], 'serviceIdentifier' => 'mwaa', ], 'neptune-graph' => [ 'namespace' => 'NeptuneGraph', 'versions' => [ 'latest' => '2023-11-29', '2023-11-29' => '2023-11-29', ], 'serviceIdentifier' => 'neptune_graph', ], 'neptune' => [ 'namespace' => 'Neptune', 'versions' => [ 'latest' => '2014-10-31', '2014-10-31' => '2014-10-31', ], 'serviceIdentifier' => 'neptune', ], 'neptunedata' => [ 'namespace' => 'Neptunedata', 'versions' => [ 'latest' => '2023-08-01', '2023-08-01' => '2023-08-01', ], 'serviceIdentifier' => 'neptunedata', ], 'network-firewall' => [ 'namespace' => 'NetworkFirewall', 'versions' => [ 'latest' => '2020-11-12', '2020-11-12' => '2020-11-12', ], 'serviceIdentifier' => 'network_firewall', ], 'networkflowmonitor' => [ 'namespace' => 'NetworkFlowMonitor', 'versions' => [ 'latest' => '2023-04-19', '2023-04-19' => '2023-04-19', ], 'serviceIdentifier' => 'networkflowmonitor', ], 'networkmanager' => [ 'namespace' => 'NetworkManager', 'versions' => [ 'latest' => '2019-07-05', '2019-07-05' => '2019-07-05', ], 'serviceIdentifier' => 'networkmanager', ], 'networkmonitor' => [ 'namespace' => 'NetworkMonitor', 'versions' => [ 'latest' => '2023-08-01', '2023-08-01' => '2023-08-01', ], 'serviceIdentifier' => 'networkmonitor', ], 'notifications' => [ 'namespace' => 'Notifications', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'notifications', ], 'notificationscontacts' => [ 'namespace' => 'NotificationsContacts', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'notificationscontacts', ], 'nova-act' => [ 'namespace' => 'NovaAct', 'versions' => [ 'latest' => '2025-08-22', '2025-08-22' => '2025-08-22', ], 'serviceIdentifier' => 'nova_act', ], 'oam' => [ 'namespace' => 'OAM', 'versions' => [ 'latest' => '2022-06-10', '2022-06-10' => '2022-06-10', ], 'serviceIdentifier' => 'oam', ], 'observabilityadmin' => [ 'namespace' => 'ObservabilityAdmin', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'observabilityadmin', ], 'odb' => [ 'namespace' => 'Odb', 'versions' => [ 'latest' => '2024-08-20', '2024-08-20' => '2024-08-20', ], 'serviceIdentifier' => 'odb', ], 'omics' => [ 'namespace' => 'Omics', 'versions' => [ 'latest' => '2022-11-28', '2022-11-28' => '2022-11-28', ], 'serviceIdentifier' => 'omics', ], 'opensearch' => [ 'namespace' => 'OpenSearchService', 'versions' => [ 'latest' => '2021-01-01', '2021-01-01' => '2021-01-01', ], 'serviceIdentifier' => 'opensearch', ], 'opensearchserverless' => [ 'namespace' => 'OpenSearchServerless', 'versions' => [ 'latest' => '2021-11-01', '2021-11-01' => '2021-11-01', ], 'serviceIdentifier' => 'opensearchserverless', ], 'organizations' => [ 'namespace' => 'Organizations', 'versions' => [ 'latest' => '2016-11-28', '2016-11-28' => '2016-11-28', ], 'serviceIdentifier' => 'organizations', ], 'osis' => [ 'namespace' => 'OSIS', 'versions' => [ 'latest' => '2022-01-01', '2022-01-01' => '2022-01-01', ], 'serviceIdentifier' => 'osis', ], 'outposts' => [ 'namespace' => 'Outposts', 'versions' => [ 'latest' => '2019-12-03', '2019-12-03' => '2019-12-03', ], 'serviceIdentifier' => 'outposts', ], 'partnercentral-account' => [ 'namespace' => 'PartnerCentralAccount', 'versions' => [ 'latest' => '2025-04-04', '2025-04-04' => '2025-04-04', ], 'serviceIdentifier' => 'partnercentral_account', ], 'partnercentral-benefits' => [ 'namespace' => 'PartnerCentralBenefits', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'partnercentral_benefits', ], 'partnercentral-channel' => [ 'namespace' => 'PartnerCentralChannel', 'versions' => [ 'latest' => '2024-03-18', '2024-03-18' => '2024-03-18', ], 'serviceIdentifier' => 'partnercentral_channel', ], 'partnercentral-revenue-measurement' => [ 'namespace' => 'PartnerCentralRevenueMeasurement', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'partnercentral_revenue_measurement', ], 'partnercentral-selling' => [ 'namespace' => 'PartnerCentralSelling', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'partnercentral_selling', ], 'payment-cryptography-data' => [ 'namespace' => 'PaymentCryptographyData', 'versions' => [ 'latest' => '2022-02-03', '2022-02-03' => '2022-02-03', ], 'serviceIdentifier' => 'payment_cryptography_data', ], 'payment-cryptography' => [ 'namespace' => 'PaymentCryptography', 'versions' => [ 'latest' => '2021-09-14', '2021-09-14' => '2021-09-14', ], 'serviceIdentifier' => 'payment_cryptography', ], 'pca-connector-ad' => [ 'namespace' => 'PcaConnectorAd', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'pca_connector_ad', ], 'pca-connector-scep' => [ 'namespace' => 'PcaConnectorScep', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'pca_connector_scep', ], 'pcs' => [ 'namespace' => 'PCS', 'versions' => [ 'latest' => '2023-02-10', '2023-02-10' => '2023-02-10', ], 'serviceIdentifier' => 'pcs', ], 'personalize-events' => [ 'namespace' => 'PersonalizeEvents', 'versions' => [ 'latest' => '2018-03-22', '2018-03-22' => '2018-03-22', ], 'serviceIdentifier' => 'personalize_events', ], 'personalize-runtime' => [ 'namespace' => 'PersonalizeRuntime', 'versions' => [ 'latest' => '2018-05-22', '2018-05-22' => '2018-05-22', ], 'serviceIdentifier' => 'personalize_runtime', ], 'personalize' => [ 'namespace' => 'Personalize', 'versions' => [ 'latest' => '2018-05-22', '2018-05-22' => '2018-05-22', ], 'serviceIdentifier' => 'personalize', ], 'pi' => [ 'namespace' => 'PI', 'versions' => [ 'latest' => '2018-02-27', '2018-02-27' => '2018-02-27', ], 'serviceIdentifier' => 'pi', ], 'pinpoint-email' => [ 'namespace' => 'PinpointEmail', 'versions' => [ 'latest' => '2018-07-26', '2018-07-26' => '2018-07-26', ], 'serviceIdentifier' => 'pinpoint_email', ], 'pinpoint-sms-voice-v2' => [ 'namespace' => 'PinpointSMSVoiceV2', 'versions' => [ 'latest' => '2022-03-31', '2022-03-31' => '2022-03-31', ], 'serviceIdentifier' => 'pinpoint_sms_voice_v2', ], 'pinpoint' => [ 'namespace' => 'Pinpoint', 'versions' => [ 'latest' => '2016-12-01', '2016-12-01' => '2016-12-01', ], 'serviceIdentifier' => 'pinpoint', ], 'pipes' => [ 'namespace' => 'Pipes', 'versions' => [ 'latest' => '2015-10-07', '2015-10-07' => '2015-10-07', ], 'serviceIdentifier' => 'pipes', ], 'polly' => [ 'namespace' => 'Polly', 'versions' => [ 'latest' => '2016-06-10', '2016-06-10' => '2016-06-10', ], 'serviceIdentifier' => 'polly', ], 'pricing-plan-manager' => [ 'namespace' => 'PricingPlanManager', 'versions' => [ 'latest' => '2025-08-05', '2025-08-05' => '2025-08-05', ], 'serviceIdentifier' => 'pricing_plan_manager', ], 'pricing' => [ 'namespace' => 'Pricing', 'versions' => [ 'latest' => '2017-10-15', '2017-10-15' => '2017-10-15', ], 'serviceIdentifier' => 'pricing', ], 'proton' => [ 'namespace' => 'Proton', 'versions' => [ 'latest' => '2020-07-20', '2020-07-20' => '2020-07-20', ], 'serviceIdentifier' => 'proton', ], 'qapps' => [ 'namespace' => 'QApps', 'versions' => [ 'latest' => '2023-11-27', '2023-11-27' => '2023-11-27', ], 'serviceIdentifier' => 'qapps', ], 'qbusiness' => [ 'namespace' => 'QBusiness', 'versions' => [ 'latest' => '2023-11-27', '2023-11-27' => '2023-11-27', ], 'serviceIdentifier' => 'qbusiness', ], 'qconnect' => [ 'namespace' => 'QConnect', 'versions' => [ 'latest' => '2020-10-19', '2020-10-19' => '2020-10-19', ], 'serviceIdentifier' => 'qconnect', ], 'quicksight' => [ 'namespace' => 'QuickSight', 'versions' => [ 'latest' => '2018-04-01', '2018-04-01' => '2018-04-01', ], 'serviceIdentifier' => 'quicksight', ], 'ram' => [ 'namespace' => 'RAM', 'versions' => [ 'latest' => '2018-01-04', '2018-01-04' => '2018-01-04', ], 'serviceIdentifier' => 'ram', ], 'rbin' => [ 'namespace' => 'RecycleBin', 'versions' => [ 'latest' => '2021-06-15', '2021-06-15' => '2021-06-15', ], 'serviceIdentifier' => 'rbin', ], 'rds-data' => [ 'namespace' => 'RDSDataService', 'versions' => [ 'latest' => '2018-08-01', '2018-08-01' => '2018-08-01', ], 'serviceIdentifier' => 'rds_data', ], 'rds' => [ 'namespace' => 'Rds', 'versions' => [ 'latest' => '2014-10-31', '2014-10-31' => '2014-10-31', '2014-09-01' => '2014-09-01', ], 'serviceIdentifier' => 'rds', ], 'redshift-data' => [ 'namespace' => 'RedshiftDataAPIService', 'versions' => [ 'latest' => '2019-12-20', '2019-12-20' => '2019-12-20', ], 'serviceIdentifier' => 'redshift_data', ], 'redshift-serverless' => [ 'namespace' => 'RedshiftServerless', 'versions' => [ 'latest' => '2021-04-21', '2021-04-21' => '2021-04-21', ], 'serviceIdentifier' => 'redshift_serverless', ], 'redshift' => [ 'namespace' => 'Redshift', 'versions' => [ 'latest' => '2012-12-01', '2012-12-01' => '2012-12-01', ], 'serviceIdentifier' => 'redshift', ], 'rekognition' => [ 'namespace' => 'Rekognition', 'versions' => [ 'latest' => '2016-06-27', '2016-06-27' => '2016-06-27', ], 'serviceIdentifier' => 'rekognition', ], 'repostspace' => [ 'namespace' => 'Repostspace', 'versions' => [ 'latest' => '2022-05-13', '2022-05-13' => '2022-05-13', ], 'serviceIdentifier' => 'repostspace', ], 'resiliencehub' => [ 'namespace' => 'ResilienceHub', 'versions' => [ 'latest' => '2020-04-30', '2020-04-30' => '2020-04-30', ], 'serviceIdentifier' => 'resiliencehub', ], 'resiliencehubv2' => [ 'namespace' => 'Resiliencehubv2', 'versions' => [ 'latest' => '2026-02-17', '2026-02-17' => '2026-02-17', ], 'serviceIdentifier' => 'resiliencehubv2', ], 'resource-explorer-2' => [ 'namespace' => 'ResourceExplorer2', 'versions' => [ 'latest' => '2022-07-28', '2022-07-28' => '2022-07-28', ], 'serviceIdentifier' => 'resource_explorer_2', ], 'resource-groups' => [ 'namespace' => 'ResourceGroups', 'versions' => [ 'latest' => '2017-11-27', '2017-11-27' => '2017-11-27', ], 'serviceIdentifier' => 'resource_groups', ], 'resourcegroupstaggingapi' => [ 'namespace' => 'ResourceGroupsTaggingAPI', 'versions' => [ 'latest' => '2017-01-26', '2017-01-26' => '2017-01-26', ], 'serviceIdentifier' => 'resource_groups_tagging_api', ], 'rolesanywhere' => [ 'namespace' => 'RolesAnywhere', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'rolesanywhere', ], 'route53-recovery-cluster' => [ 'namespace' => 'Route53RecoveryCluster', 'versions' => [ 'latest' => '2019-12-02', '2019-12-02' => '2019-12-02', ], 'serviceIdentifier' => 'route53_recovery_cluster', ], 'route53-recovery-control-config' => [ 'namespace' => 'Route53RecoveryControlConfig', 'versions' => [ 'latest' => '2020-11-02', '2020-11-02' => '2020-11-02', ], 'serviceIdentifier' => 'route53_recovery_control_config', ], 'route53-recovery-readiness' => [ 'namespace' => 'Route53RecoveryReadiness', 'versions' => [ 'latest' => '2019-12-02', '2019-12-02' => '2019-12-02', ], 'serviceIdentifier' => 'route53_recovery_readiness', ], 'route53' => [ 'namespace' => 'Route53', 'versions' => [ 'latest' => '2013-04-01', '2013-04-01' => '2013-04-01', ], 'serviceIdentifier' => 'route_53', ], 'route53domains' => [ 'namespace' => 'Route53Domains', 'versions' => [ 'latest' => '2014-05-15', '2014-05-15' => '2014-05-15', ], 'serviceIdentifier' => 'route_53_domains', ], 'route53globalresolver' => [ 'namespace' => 'Route53GlobalResolver', 'versions' => [ 'latest' => '2022-09-27', '2022-09-27' => '2022-09-27', ], 'serviceIdentifier' => 'route53globalresolver', ], 'route53profiles' => [ 'namespace' => 'Route53Profiles', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'route53profiles', ], 'route53resolver' => [ 'namespace' => 'Route53Resolver', 'versions' => [ 'latest' => '2018-04-01', '2018-04-01' => '2018-04-01', ], 'serviceIdentifier' => 'route53resolver', ], 'rtbfabric' => [ 'namespace' => 'RTBFabric', 'versions' => [ 'latest' => '2023-05-15', '2023-05-15' => '2023-05-15', ], 'serviceIdentifier' => 'rtbfabric', ], 'rum' => [ 'namespace' => 'CloudWatchRUM', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'rum', ], 'runtime.lex.v2' => [ 'namespace' => 'LexRuntimeV2', 'versions' => [ 'latest' => '2020-08-07', '2020-08-07' => '2020-08-07', ], 'serviceIdentifier' => 'lex_runtime_v2', ], 'runtime.lex' => [ 'namespace' => 'LexRuntimeService', 'versions' => [ 'latest' => '2016-11-28', '2016-11-28' => '2016-11-28', ], 'serviceIdentifier' => 'lex_runtime_service', ], 'runtime.sagemaker' => [ 'namespace' => 'SageMakerRuntime', 'versions' => [ 'latest' => '2017-05-13', '2017-05-13' => '2017-05-13', ], 'serviceIdentifier' => 'sagemaker_runtime', ], 's3' => [ 'namespace' => 'S3', 'versions' => [ 'latest' => '2006-03-01', '2006-03-01' => '2006-03-01', ], 'serviceIdentifier' => 's3', ], 's3control' => [ 'namespace' => 'S3Control', 'versions' => [ 'latest' => '2018-08-20', '2018-08-20' => '2018-08-20', ], 'serviceIdentifier' => 's3_control', ], 's3files' => [ 'namespace' => 'S3Files', 'versions' => [ 'latest' => '2025-05-05', '2025-05-05' => '2025-05-05', ], 'serviceIdentifier' => 's3files', ], 's3outposts' => [ 'namespace' => 'S3Outposts', 'versions' => [ 'latest' => '2017-07-25', '2017-07-25' => '2017-07-25', ], 'serviceIdentifier' => 's3outposts', ], 's3tables' => [ 'namespace' => 'S3Tables', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 's3tables', ], 's3vectors' => [ 'namespace' => 'S3Vectors', 'versions' => [ 'latest' => '2025-07-15', '2025-07-15' => '2025-07-15', ], 'serviceIdentifier' => 's3vectors', ], 'sagemaker-a2i-runtime' => [ 'namespace' => 'AugmentedAIRuntime', 'versions' => [ 'latest' => '2019-11-07', '2019-11-07' => '2019-11-07', ], 'serviceIdentifier' => 'sagemaker_a2i_runtime', ], 'sagemaker-edge' => [ 'namespace' => 'SagemakerEdgeManager', 'versions' => [ 'latest' => '2020-09-23', '2020-09-23' => '2020-09-23', ], 'serviceIdentifier' => 'sagemaker_edge', ], 'sagemaker-featurestore-runtime' => [ 'namespace' => 'SageMakerFeatureStoreRuntime', 'versions' => [ 'latest' => '2020-07-01', '2020-07-01' => '2020-07-01', ], 'serviceIdentifier' => 'sagemaker_featurestore_runtime', ], 'sagemaker-geospatial' => [ 'namespace' => 'SageMakerGeospatial', 'versions' => [ 'latest' => '2020-05-27', '2020-05-27' => '2020-05-27', ], 'serviceIdentifier' => 'sagemaker_geospatial', ], 'sagemaker-metrics' => [ 'namespace' => 'SageMakerMetrics', 'versions' => [ 'latest' => '2022-09-30', '2022-09-30' => '2022-09-30', ], 'serviceIdentifier' => 'sagemaker_metrics', ], 'sagemaker' => [ 'namespace' => 'SageMaker', 'versions' => [ 'latest' => '2017-07-24', '2017-07-24' => '2017-07-24', ], 'serviceIdentifier' => 'sagemaker', ], 'sagemakerjobruntime' => [ 'namespace' => 'SagemakerJobRuntime', 'versions' => [ 'latest' => '2026-02-01', '2026-02-01' => '2026-02-01', ], 'serviceIdentifier' => 'sagemakerjobruntime', ], 'savingsplans' => [ 'namespace' => 'SavingsPlans', 'versions' => [ 'latest' => '2019-06-28', '2019-06-28' => '2019-06-28', ], 'serviceIdentifier' => 'savingsplans', ], 'scheduler' => [ 'namespace' => 'Scheduler', 'versions' => [ 'latest' => '2021-06-30', '2021-06-30' => '2021-06-30', ], 'serviceIdentifier' => 'scheduler', ], 'schemas' => [ 'namespace' => 'Schemas', 'versions' => [ 'latest' => '2019-12-02', '2019-12-02' => '2019-12-02', ], 'serviceIdentifier' => 'schemas', ], 'secretsmanager' => [ 'namespace' => 'SecretsManager', 'versions' => [ 'latest' => '2017-10-17', '2017-10-17' => '2017-10-17', ], 'serviceIdentifier' => 'secrets_manager', ], 'security-ir' => [ 'namespace' => 'SecurityIR', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'security_ir', ], 'securityagent' => [ 'namespace' => 'SecurityAgent', 'versions' => [ 'latest' => '2025-09-06', '2025-09-06' => '2025-09-06', ], 'serviceIdentifier' => 'securityagent', ], 'securityhub' => [ 'namespace' => 'SecurityHub', 'versions' => [ 'latest' => '2018-10-26', '2018-10-26' => '2018-10-26', ], 'serviceIdentifier' => 'securityhub', ], 'securitylake' => [ 'namespace' => 'SecurityLake', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'securitylake', ], 'serverlessrepo' => [ 'namespace' => 'ServerlessApplicationRepository', 'versions' => [ 'latest' => '2017-09-08', '2017-09-08' => '2017-09-08', ], 'serviceIdentifier' => 'serverlessapplicationrepository', ], 'service-quotas' => [ 'namespace' => 'ServiceQuotas', 'versions' => [ 'latest' => '2019-06-24', '2019-06-24' => '2019-06-24', ], 'serviceIdentifier' => 'service_quotas', ], 'servicecatalog-appregistry' => [ 'namespace' => 'AppRegistry', 'versions' => [ 'latest' => '2020-06-24', '2020-06-24' => '2020-06-24', ], 'serviceIdentifier' => 'service_catalog_appregistry', ], 'servicecatalog' => [ 'namespace' => 'ServiceCatalog', 'versions' => [ 'latest' => '2015-12-10', '2015-12-10' => '2015-12-10', ], 'serviceIdentifier' => 'service_catalog', ], 'servicediscovery' => [ 'namespace' => 'ServiceDiscovery', 'versions' => [ 'latest' => '2017-03-14', '2017-03-14' => '2017-03-14', ], 'serviceIdentifier' => 'servicediscovery', ], 'sesv2' => [ 'namespace' => 'SesV2', 'versions' => [ 'latest' => '2019-09-27', '2019-09-27' => '2019-09-27', ], 'serviceIdentifier' => 'sesv2', ], 'shield' => [ 'namespace' => 'Shield', 'versions' => [ 'latest' => '2016-06-02', '2016-06-02' => '2016-06-02', ], 'serviceIdentifier' => 'shield', ], 'signer-data' => [ 'namespace' => 'SignerData', 'versions' => [ 'latest' => '2017-08-25', '2017-08-25' => '2017-08-25', ], 'serviceIdentifier' => 'signer_data', ], 'signer' => [ 'namespace' => 'signer', 'versions' => [ 'latest' => '2017-08-25', '2017-08-25' => '2017-08-25', ], 'serviceIdentifier' => 'signer', ], 'signin' => [ 'namespace' => 'Signin', 'versions' => [ 'latest' => '2023-01-01', '2023-01-01' => '2023-01-01', ], 'serviceIdentifier' => 'signin', ], 'simpledbv2' => [ 'namespace' => 'SimpleDBv2', 'versions' => [ 'latest' => '2025-09-26', '2025-09-26' => '2025-09-26', ], 'serviceIdentifier' => 'simpledbv2', ], 'sms-voice' => [ 'namespace' => 'PinpointSMSVoice', 'versions' => [ 'latest' => '2018-09-05', '2018-09-05' => '2018-09-05', ], 'serviceIdentifier' => 'pinpoint_sms_voice', ], 'snow-device-management' => [ 'namespace' => 'SnowDeviceManagement', 'versions' => [ 'latest' => '2021-08-04', '2021-08-04' => '2021-08-04', ], 'serviceIdentifier' => 'snow_device_management', ], 'snowball' => [ 'namespace' => 'SnowBall', 'versions' => [ 'latest' => '2016-06-30', '2016-06-30' => '2016-06-30', ], 'serviceIdentifier' => 'snowball', ], 'sns' => [ 'namespace' => 'Sns', 'versions' => [ 'latest' => '2010-03-31', '2010-03-31' => '2010-03-31', ], 'serviceIdentifier' => 'sns', ], 'socialmessaging' => [ 'namespace' => 'SocialMessaging', 'versions' => [ 'latest' => '2024-01-01', '2024-01-01' => '2024-01-01', ], 'serviceIdentifier' => 'socialmessaging', ], 'sqs' => [ 'namespace' => 'Sqs', 'versions' => [ 'latest' => '2012-11-05', '2012-11-05' => '2012-11-05', ], 'serviceIdentifier' => 'sqs', ], 'ssm-contacts' => [ 'namespace' => 'SSMContacts', 'versions' => [ 'latest' => '2021-05-03', '2021-05-03' => '2021-05-03', ], 'serviceIdentifier' => 'ssm_contacts', ], 'ssm-guiconnect' => [ 'namespace' => 'SSMGuiConnect', 'versions' => [ 'latest' => '2021-05-01', '2021-05-01' => '2021-05-01', ], 'serviceIdentifier' => 'ssm_guiconnect', ], 'ssm-incidents' => [ 'namespace' => 'SSMIncidents', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'ssm_incidents', ], 'ssm-quicksetup' => [ 'namespace' => 'SSMQuickSetup', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'ssm_quicksetup', ], 'ssm-sap' => [ 'namespace' => 'SsmSap', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'ssm_sap', ], 'ssm' => [ 'namespace' => 'Ssm', 'versions' => [ 'latest' => '2014-11-06', '2014-11-06' => '2014-11-06', ], 'serviceIdentifier' => 'ssm', ], 'sso-admin' => [ 'namespace' => 'SSOAdmin', 'versions' => [ 'latest' => '2020-07-20', '2020-07-20' => '2020-07-20', ], 'serviceIdentifier' => 'sso_admin', ], 'sso-oidc' => [ 'namespace' => 'SSOOIDC', 'versions' => [ 'latest' => '2019-06-10', '2019-06-10' => '2019-06-10', ], 'serviceIdentifier' => 'sso_oidc', ], 'sso' => [ 'namespace' => 'SSO', 'versions' => [ 'latest' => '2019-06-10', '2019-06-10' => '2019-06-10', ], 'serviceIdentifier' => 'sso', ], 'states' => [ 'namespace' => 'Sfn', 'versions' => [ 'latest' => '2016-11-23', '2016-11-23' => '2016-11-23', ], 'serviceIdentifier' => 'sfn', ], 'storagegateway' => [ 'namespace' => 'StorageGateway', 'versions' => [ 'latest' => '2013-06-30', '2013-06-30' => '2013-06-30', ], 'serviceIdentifier' => 'storage_gateway', ], 'streams.dynamodb' => [ 'namespace' => 'DynamoDbStreams', 'versions' => [ 'latest' => '2012-08-10', '2012-08-10' => '2012-08-10', ], 'serviceIdentifier' => 'dynamodb_streams', ], 'sts' => [ 'namespace' => 'Sts', 'versions' => [ 'latest' => '2011-06-15', '2011-06-15' => '2011-06-15', ], 'serviceIdentifier' => 'sts', ], 'supplychain' => [ 'namespace' => 'SupplyChain', 'versions' => [ 'latest' => '2024-01-01', '2024-01-01' => '2024-01-01', ], 'serviceIdentifier' => 'supplychain', ], 'support-app' => [ 'namespace' => 'SupportApp', 'versions' => [ 'latest' => '2021-08-20', '2021-08-20' => '2021-08-20', ], 'serviceIdentifier' => 'support_app', ], 'support' => [ 'namespace' => 'Support', 'versions' => [ 'latest' => '2013-04-15', '2013-04-15' => '2013-04-15', ], 'serviceIdentifier' => 'support', ], 'supportauthz' => [ 'namespace' => 'SupportAuthZ', 'versions' => [ 'latest' => '2026-06-30', '2026-06-30' => '2026-06-30', ], 'serviceIdentifier' => 'supportauthz', ], 'sustainability' => [ 'namespace' => 'Sustainability', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'sustainability', ], 'swf' => [ 'namespace' => 'Swf', 'versions' => [ 'latest' => '2012-01-25', '2012-01-25' => '2012-01-25', ], 'serviceIdentifier' => 'swf', ], 'synthetics' => [ 'namespace' => 'Synthetics', 'versions' => [ 'latest' => '2017-10-11', '2017-10-11' => '2017-10-11', ], 'serviceIdentifier' => 'synthetics', ], 'taxsettings' => [ 'namespace' => 'TaxSettings', 'versions' => [ 'latest' => '2018-05-10', '2018-05-10' => '2018-05-10', ], 'serviceIdentifier' => 'taxsettings', ], 'textract' => [ 'namespace' => 'Textract', 'versions' => [ 'latest' => '2018-06-27', '2018-06-27' => '2018-06-27', ], 'serviceIdentifier' => 'textract', ], 'timestream-influxdb' => [ 'namespace' => 'TimestreamInfluxDB', 'versions' => [ 'latest' => '2023-01-27', '2023-01-27' => '2023-01-27', ], 'serviceIdentifier' => 'timestream_influxdb', ], 'timestream-query' => [ 'namespace' => 'TimestreamQuery', 'versions' => [ 'latest' => '2018-11-01', '2018-11-01' => '2018-11-01', ], 'serviceIdentifier' => 'timestream_query', ], 'timestream-write' => [ 'namespace' => 'TimestreamWrite', 'versions' => [ 'latest' => '2018-11-01', '2018-11-01' => '2018-11-01', ], 'serviceIdentifier' => 'timestream_write', ], 'tnb' => [ 'namespace' => 'Tnb', 'versions' => [ 'latest' => '2008-10-21', '2008-10-21' => '2008-10-21', ], 'serviceIdentifier' => 'tnb', ], 'transcribe' => [ 'namespace' => 'TranscribeService', 'versions' => [ 'latest' => '2017-10-26', '2017-10-26' => '2017-10-26', ], 'serviceIdentifier' => 'transcribe', ], 'transfer' => [ 'namespace' => 'Transfer', 'versions' => [ 'latest' => '2018-11-05', '2018-11-05' => '2018-11-05', ], 'serviceIdentifier' => 'transfer', ], 'translate' => [ 'namespace' => 'Translate', 'versions' => [ 'latest' => '2017-07-01', '2017-07-01' => '2017-07-01', ], 'serviceIdentifier' => 'translate', ], 'trustedadvisor' => [ 'namespace' => 'TrustedAdvisor', 'versions' => [ 'latest' => '2022-09-15', '2022-09-15' => '2022-09-15', ], 'serviceIdentifier' => 'trustedadvisor', ], 'uxc' => [ 'namespace' => 'Uxc', 'versions' => [ 'latest' => '2024-07-01', '2024-07-01' => '2024-07-01', ], 'serviceIdentifier' => 'uxc', ], 'verifiedpermissions' => [ 'namespace' => 'VerifiedPermissions', 'versions' => [ 'latest' => '2021-12-01', '2021-12-01' => '2021-12-01', ], 'serviceIdentifier' => 'verifiedpermissions', ], 'voice-id' => [ 'namespace' => 'VoiceID', 'versions' => [ 'latest' => '2021-09-27', '2021-09-27' => '2021-09-27', ], 'serviceIdentifier' => 'voice_id', ], 'vpc-lattice' => [ 'namespace' => 'VPCLattice', 'versions' => [ 'latest' => '2022-11-30', '2022-11-30' => '2022-11-30', ], 'serviceIdentifier' => 'vpc_lattice', ], 'waf-regional' => [ 'namespace' => 'WafRegional', 'versions' => [ 'latest' => '2016-11-28', '2016-11-28' => '2016-11-28', ], 'serviceIdentifier' => 'waf_regional', ], 'waf' => [ 'namespace' => 'Waf', 'versions' => [ 'latest' => '2015-08-24', '2015-08-24' => '2015-08-24', ], 'serviceIdentifier' => 'waf', ], 'wafv2' => [ 'namespace' => 'WAFV2', 'versions' => [ 'latest' => '2019-07-29', '2019-07-29' => '2019-07-29', ], 'serviceIdentifier' => 'wafv2', ], 'wellarchitected' => [ 'namespace' => 'WellArchitected', 'versions' => [ 'latest' => '2020-03-31', '2020-03-31' => '2020-03-31', ], 'serviceIdentifier' => 'wellarchitected', ], 'wickr' => [ 'namespace' => 'Wickr', 'versions' => [ 'latest' => '2024-02-01', '2024-02-01' => '2024-02-01', ], 'serviceIdentifier' => 'wickr', ], 'wisdom' => [ 'namespace' => 'ConnectWisdomService', 'versions' => [ 'latest' => '2020-10-19', '2020-10-19' => '2020-10-19', ], 'serviceIdentifier' => 'wisdom', ], 'workdocs' => [ 'namespace' => 'WorkDocs', 'versions' => [ 'latest' => '2016-05-01', '2016-05-01' => '2016-05-01', ], 'serviceIdentifier' => 'workdocs', ], 'workmail' => [ 'namespace' => 'WorkMail', 'versions' => [ 'latest' => '2017-10-01', '2017-10-01' => '2017-10-01', ], 'serviceIdentifier' => 'workmail', ], 'workmailmessageflow' => [ 'namespace' => 'WorkMailMessageFlow', 'versions' => [ 'latest' => '2019-05-01', '2019-05-01' => '2019-05-01', ], 'serviceIdentifier' => 'workmailmessageflow', ], 'workspaces-instances' => [ 'namespace' => 'WorkspacesInstances', 'versions' => [ 'latest' => '2022-07-26', '2022-07-26' => '2022-07-26', ], 'serviceIdentifier' => 'workspaces_instances', ], 'workspaces-thin-client' => [ 'namespace' => 'WorkSpacesThinClient', 'versions' => [ 'latest' => '2023-08-22', '2023-08-22' => '2023-08-22', ], 'serviceIdentifier' => 'workspaces_thin_client', ], 'workspaces-web' => [ 'namespace' => 'WorkSpacesWeb', 'versions' => [ 'latest' => '2020-07-08', '2020-07-08' => '2020-07-08', ], 'serviceIdentifier' => 'workspaces_web', ], 'workspaces' => [ 'namespace' => 'WorkSpaces', 'versions' => [ 'latest' => '2015-04-08', '2015-04-08' => '2015-04-08', ], 'serviceIdentifier' => 'workspaces', ], 'xray' => [ 'namespace' => 'XRay', 'versions' => [ 'latest' => '2016-04-12', '2016-04-12' => '2016-04-12', ], 'serviceIdentifier' => 'xray', ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/partitions.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/partitions.json.php deleted file mode 100644 index 09c2e2d4d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/partitions.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ [ 'id' => 'aws', 'outputs' => [ 'dnsSuffix' => 'amazonaws.com', 'dualStackDnsSuffix' => 'api.aws', 'implicitGlobalRegion' => 'us-east-1', 'name' => 'aws', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$', 'regions' => [ 'af-south-1' => [ 'description' => 'Africa (Cape Town)', ], 'ap-east-1' => [ 'description' => 'Asia Pacific (Hong Kong)', ], 'ap-east-2' => [ 'description' => 'Asia Pacific (Taipei)', ], 'ap-northeast-1' => [ 'description' => 'Asia Pacific (Tokyo)', ], 'ap-northeast-2' => [ 'description' => 'Asia Pacific (Seoul)', ], 'ap-northeast-3' => [ 'description' => 'Asia Pacific (Osaka)', ], 'ap-south-1' => [ 'description' => 'Asia Pacific (Mumbai)', ], 'ap-south-2' => [ 'description' => 'Asia Pacific (Hyderabad)', ], 'ap-southeast-1' => [ 'description' => 'Asia Pacific (Singapore)', ], 'ap-southeast-2' => [ 'description' => 'Asia Pacific (Sydney)', ], 'ap-southeast-3' => [ 'description' => 'Asia Pacific (Jakarta)', ], 'ap-southeast-4' => [ 'description' => 'Asia Pacific (Melbourne)', ], 'ap-southeast-5' => [ 'description' => 'Asia Pacific (Malaysia)', ], 'ap-southeast-6' => [ 'description' => 'Asia Pacific (New Zealand)', ], 'ap-southeast-7' => [ 'description' => 'Asia Pacific (Thailand)', ], 'aws-global' => [ 'description' => 'aws global region', ], 'ca-central-1' => [ 'description' => 'Canada (Central)', ], 'ca-west-1' => [ 'description' => 'Canada West (Calgary)', ], 'eu-central-1' => [ 'description' => 'Europe (Frankfurt)', ], 'eu-central-2' => [ 'description' => 'Europe (Zurich)', ], 'eu-north-1' => [ 'description' => 'Europe (Stockholm)', ], 'eu-south-1' => [ 'description' => 'Europe (Milan)', ], 'eu-south-2' => [ 'description' => 'Europe (Spain)', ], 'eu-west-1' => [ 'description' => 'Europe (Ireland)', ], 'eu-west-2' => [ 'description' => 'Europe (London)', ], 'eu-west-3' => [ 'description' => 'Europe (Paris)', ], 'il-central-1' => [ 'description' => 'Israel (Tel Aviv)', ], 'me-central-1' => [ 'description' => 'Middle East (UAE)', ], 'me-south-1' => [ 'description' => 'Middle East (Bahrain)', ], 'mx-central-1' => [ 'description' => 'Mexico (Central)', ], 'sa-east-1' => [ 'description' => 'South America (Sao Paulo)', ], 'us-east-1' => [ 'description' => 'US East (N. Virginia)', ], 'us-east-2' => [ 'description' => 'US East (Ohio)', ], 'us-west-1' => [ 'description' => 'US West (N. California)', ], 'us-west-2' => [ 'description' => 'US West (Oregon)', ], ], ], [ 'id' => 'aws-cn', 'outputs' => [ 'dnsSuffix' => 'amazonaws.com.cn', 'dualStackDnsSuffix' => 'api.amazonwebservices.com.cn', 'implicitGlobalRegion' => 'cn-northwest-1', 'name' => 'aws-cn', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^cn\\-\\w+\\-\\d+$', 'regions' => [ 'aws-cn-global' => [ 'description' => 'aws-cn global region', ], 'cn-north-1' => [ 'description' => 'China (Beijing)', ], 'cn-northwest-1' => [ 'description' => 'China (Ningxia)', ], ], ], [ 'id' => 'aws-eusc', 'outputs' => [ 'dnsSuffix' => 'amazonaws.eu', 'dualStackDnsSuffix' => 'api.amazonwebservices.eu', 'implicitGlobalRegion' => 'eusc-de-east-1', 'name' => 'aws-eusc', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^eusc\\-(de)\\-\\w+\\-\\d+$', 'regions' => [ 'eusc-de-east-1' => [ 'description' => 'AWS European Sovereign Cloud (Germany)', ], ], ], [ 'id' => 'aws-iso', 'outputs' => [ 'dnsSuffix' => 'c2s.ic.gov', 'dualStackDnsSuffix' => 'api.aws.ic.gov', 'implicitGlobalRegion' => 'us-iso-east-1', 'name' => 'aws-iso', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^us\\-iso\\-\\w+\\-\\d+$', 'regions' => [ 'aws-iso-global' => [ 'description' => 'aws-iso global region', ], 'us-iso-east-1' => [ 'description' => 'US ISO East', ], 'us-iso-west-1' => [ 'description' => 'US ISO WEST', ], ], ], [ 'id' => 'aws-iso-b', 'outputs' => [ 'dnsSuffix' => 'sc2s.sgov.gov', 'dualStackDnsSuffix' => 'api.aws.scloud', 'implicitGlobalRegion' => 'us-isob-east-1', 'name' => 'aws-iso-b', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^us\\-isob\\-\\w+\\-\\d+$', 'regions' => [ 'aws-iso-b-global' => [ 'description' => 'aws-iso-b global region', ], 'us-isob-east-1' => [ 'description' => 'US ISOB East (Ohio)', ], 'us-isob-west-1' => [ 'description' => 'US ISOB West', ], ], ], [ 'id' => 'aws-iso-e', 'outputs' => [ 'dnsSuffix' => 'cloud.adc-e.uk', 'dualStackDnsSuffix' => 'api.cloud-aws.adc-e.uk', 'implicitGlobalRegion' => 'eu-isoe-west-1', 'name' => 'aws-iso-e', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^eu\\-isoe\\-\\w+\\-\\d+$', 'regions' => [ 'aws-iso-e-global' => [ 'description' => 'aws-iso-e global region', ], 'eu-isoe-west-1' => [ 'description' => 'EU ISOE West', ], ], ], [ 'id' => 'aws-iso-f', 'outputs' => [ 'dnsSuffix' => 'csp.hci.ic.gov', 'dualStackDnsSuffix' => 'api.aws.hci.ic.gov', 'implicitGlobalRegion' => 'us-isof-south-1', 'name' => 'aws-iso-f', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^us\\-isof\\-\\w+\\-\\d+$', 'regions' => [ 'aws-iso-f-global' => [ 'description' => 'aws-iso-f global region', ], 'us-isof-east-1' => [ 'description' => 'US ISOF EAST', ], 'us-isof-south-1' => [ 'description' => 'US ISOF SOUTH', ], ], ], [ 'id' => 'aws-us-gov', 'outputs' => [ 'dnsSuffix' => 'amazonaws.com', 'dualStackDnsSuffix' => 'api.aws', 'implicitGlobalRegion' => 'us-gov-west-1', 'name' => 'aws-us-gov', 'supportsDualStack' => true, 'supportsFIPS' => true, ], 'regionRegex' => '^us\\-gov\\-\\w+\\-\\d+$', 'regions' => [ 'aws-us-gov-global' => [ 'description' => 'aws-us-gov global region', ], 'us-gov-east-1' => [ 'description' => 'AWS GovCloud (US-East)', ], 'us-gov-west-1' => [ 'description' => 'AWS GovCloud (US-West)', ], ], ], ], 'version' => '1.1',]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/api-2.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/api-2.json.php deleted file mode 100644 index f60b89c67..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/api-2.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '2.0', 'metadata' => [ 'apiVersion' => '2006-03-01', 'checksumFormat' => 'md5', 'endpointPrefix' => 's3', 'globalEndpoint' => 's3.amazonaws.com', 'protocol' => 'rest-xml', 'protocols' => [ 'rest-xml', ], 'serviceAbbreviation' => 'Amazon S3', 'serviceFullName' => 'Amazon Simple Storage Service', 'serviceId' => 'S3', 'signatureVersion' => 's3', 'uid' => 's3-2006-03-01', 'auth' => [ 'aws.auth#sigv4', ], ], 'operations' => [ 'AbortMultipartUpload' => [ 'name' => 'AbortMultipartUpload', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}/{Key+}', 'responseCode' => 204, ], 'input' => [ 'shape' => 'AbortMultipartUploadRequest', ], 'output' => [ 'shape' => 'AbortMultipartUploadOutput', ], 'errors' => [ [ 'shape' => 'NoSuchUpload', ], ], ], 'CompleteMultipartUpload' => [ 'name' => 'CompleteMultipartUpload', 'http' => [ 'method' => 'POST', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'CompleteMultipartUploadRequest', ], 'output' => [ 'shape' => 'CompleteMultipartUploadOutput', ], ], 'CopyObject' => [ 'name' => 'CopyObject', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'CopyObjectRequest', ], 'output' => [ 'shape' => 'CopyObjectOutput', ], 'errors' => [ [ 'shape' => 'ObjectNotInActiveTierError', ], ], 'staticContextParams' => [ 'DisableS3ExpressSessionAuth' => [ 'value' => true, ], ], ], 'CreateBucket' => [ 'name' => 'CreateBucket', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}', ], 'input' => [ 'shape' => 'CreateBucketRequest', ], 'output' => [ 'shape' => 'CreateBucketOutput', ], 'errors' => [ [ 'shape' => 'BucketAlreadyExists', ], [ 'shape' => 'BucketAlreadyOwnedByYou', ], ], 'staticContextParams' => [ 'DisableAccessPoints' => [ 'value' => true, ], 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'CreateBucketMetadataConfiguration' => [ 'name' => 'CreateBucketMetadataConfiguration', 'http' => [ 'method' => 'POST', 'requestUri' => '/{Bucket}?metadataConfiguration', ], 'input' => [ 'shape' => 'CreateBucketMetadataConfigurationRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'CreateBucketMetadataTableConfiguration' => [ 'name' => 'CreateBucketMetadataTableConfiguration', 'http' => [ 'method' => 'POST', 'requestUri' => '/{Bucket}?metadataTable', ], 'input' => [ 'shape' => 'CreateBucketMetadataTableConfigurationRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'CreateMultipartUpload' => [ 'name' => 'CreateMultipartUpload', 'http' => [ 'method' => 'POST', 'requestUri' => '/{Bucket}/{Key+}?uploads', ], 'input' => [ 'shape' => 'CreateMultipartUploadRequest', ], 'output' => [ 'shape' => 'CreateMultipartUploadOutput', ], ], 'CreateSession' => [ 'name' => 'CreateSession', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?session', ], 'input' => [ 'shape' => 'CreateSessionRequest', ], 'output' => [ 'shape' => 'CreateSessionOutput', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], ], 'staticContextParams' => [ 'DisableS3ExpressSessionAuth' => [ 'value' => true, ], ], ], 'DeleteBucket' => [ 'name' => 'DeleteBucket', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketAnalyticsConfiguration' => [ 'name' => 'DeleteBucketAnalyticsConfiguration', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?analytics', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketAnalyticsConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketCors' => [ 'name' => 'DeleteBucketCors', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?cors', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketCorsRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketEncryption' => [ 'name' => 'DeleteBucketEncryption', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?encryption', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketEncryptionRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketIntelligentTieringConfiguration' => [ 'name' => 'DeleteBucketIntelligentTieringConfiguration', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?intelligent-tiering', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketIntelligentTieringConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketInventoryConfiguration' => [ 'name' => 'DeleteBucketInventoryConfiguration', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?inventory', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketInventoryConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketLifecycle' => [ 'name' => 'DeleteBucketLifecycle', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?lifecycle', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketLifecycleRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketMetadataConfiguration' => [ 'name' => 'DeleteBucketMetadataConfiguration', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?metadataConfiguration', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketMetadataConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketMetadataTableConfiguration' => [ 'name' => 'DeleteBucketMetadataTableConfiguration', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?metadataTable', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketMetadataTableConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketMetricsConfiguration' => [ 'name' => 'DeleteBucketMetricsConfiguration', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?metrics', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketMetricsConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketOwnershipControls' => [ 'name' => 'DeleteBucketOwnershipControls', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?ownershipControls', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketOwnershipControlsRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketPolicy' => [ 'name' => 'DeleteBucketPolicy', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?policy', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketPolicyRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketReplication' => [ 'name' => 'DeleteBucketReplication', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?replication', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketReplicationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketTagging' => [ 'name' => 'DeleteBucketTagging', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?tagging', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketTaggingRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteBucketWebsite' => [ 'name' => 'DeleteBucketWebsite', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?website', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteBucketWebsiteRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'DeleteObject' => [ 'name' => 'DeleteObject', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}/{Key+}', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteObjectRequest', ], 'output' => [ 'shape' => 'DeleteObjectOutput', ], ], 'DeleteObjectAnnotation' => [ 'name' => 'DeleteObjectAnnotation', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}/{Key+}?annotation', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteObjectAnnotationRequest', ], 'output' => [ 'shape' => 'DeleteObjectAnnotationOutput', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], [ 'shape' => 'NoSuchKey', ], ], ], 'DeleteObjectTagging' => [ 'name' => 'DeleteObjectTagging', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}/{Key+}?tagging', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeleteObjectTaggingRequest', ], 'output' => [ 'shape' => 'DeleteObjectTaggingOutput', ], ], 'DeleteObjects' => [ 'name' => 'DeleteObjects', 'http' => [ 'method' => 'POST', 'requestUri' => '/{Bucket}?delete', ], 'input' => [ 'shape' => 'DeleteObjectsRequest', ], 'output' => [ 'shape' => 'DeleteObjectsOutput', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], ], 'DeletePublicAccessBlock' => [ 'name' => 'DeletePublicAccessBlock', 'http' => [ 'method' => 'DELETE', 'requestUri' => '/{Bucket}?publicAccessBlock', 'responseCode' => 204, ], 'input' => [ 'shape' => 'DeletePublicAccessBlockRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketAbac' => [ 'name' => 'GetBucketAbac', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?abac', ], 'input' => [ 'shape' => 'GetBucketAbacRequest', ], 'output' => [ 'shape' => 'GetBucketAbacOutput', ], ], 'GetBucketAccelerateConfiguration' => [ 'name' => 'GetBucketAccelerateConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?accelerate', ], 'input' => [ 'shape' => 'GetBucketAccelerateConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketAccelerateConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketAcl' => [ 'name' => 'GetBucketAcl', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?acl', ], 'input' => [ 'shape' => 'GetBucketAclRequest', ], 'output' => [ 'shape' => 'GetBucketAclOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketAnalyticsConfiguration' => [ 'name' => 'GetBucketAnalyticsConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?analytics', ], 'input' => [ 'shape' => 'GetBucketAnalyticsConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketAnalyticsConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketCors' => [ 'name' => 'GetBucketCors', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?cors', ], 'input' => [ 'shape' => 'GetBucketCorsRequest', ], 'output' => [ 'shape' => 'GetBucketCorsOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketEncryption' => [ 'name' => 'GetBucketEncryption', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?encryption', ], 'input' => [ 'shape' => 'GetBucketEncryptionRequest', ], 'output' => [ 'shape' => 'GetBucketEncryptionOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketIntelligentTieringConfiguration' => [ 'name' => 'GetBucketIntelligentTieringConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?intelligent-tiering', ], 'input' => [ 'shape' => 'GetBucketIntelligentTieringConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketIntelligentTieringConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketInventoryConfiguration' => [ 'name' => 'GetBucketInventoryConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?inventory', ], 'input' => [ 'shape' => 'GetBucketInventoryConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketInventoryConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketLifecycle' => [ 'name' => 'GetBucketLifecycle', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?lifecycle', ], 'input' => [ 'shape' => 'GetBucketLifecycleRequest', ], 'output' => [ 'shape' => 'GetBucketLifecycleOutput', ], 'deprecated' => true, 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketLifecycleConfiguration' => [ 'name' => 'GetBucketLifecycleConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?lifecycle', ], 'input' => [ 'shape' => 'GetBucketLifecycleConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketLifecycleConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketLocation' => [ 'name' => 'GetBucketLocation', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?location', ], 'input' => [ 'shape' => 'GetBucketLocationRequest', ], 'output' => [ 'shape' => 'GetBucketLocationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketLogging' => [ 'name' => 'GetBucketLogging', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?logging', ], 'input' => [ 'shape' => 'GetBucketLoggingRequest', ], 'output' => [ 'shape' => 'GetBucketLoggingOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketMetadataConfiguration' => [ 'name' => 'GetBucketMetadataConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?metadataConfiguration', ], 'input' => [ 'shape' => 'GetBucketMetadataConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketMetadataConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketMetadataTableConfiguration' => [ 'name' => 'GetBucketMetadataTableConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?metadataTable', ], 'input' => [ 'shape' => 'GetBucketMetadataTableConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketMetadataTableConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketMetricsConfiguration' => [ 'name' => 'GetBucketMetricsConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?metrics', ], 'input' => [ 'shape' => 'GetBucketMetricsConfigurationRequest', ], 'output' => [ 'shape' => 'GetBucketMetricsConfigurationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketNotification' => [ 'name' => 'GetBucketNotification', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?notification', ], 'input' => [ 'shape' => 'GetBucketNotificationConfigurationRequest', ], 'output' => [ 'shape' => 'NotificationConfigurationDeprecated', ], 'deprecated' => true, 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketNotificationConfiguration' => [ 'name' => 'GetBucketNotificationConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?notification', ], 'input' => [ 'shape' => 'GetBucketNotificationConfigurationRequest', ], 'output' => [ 'shape' => 'NotificationConfiguration', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketOwnershipControls' => [ 'name' => 'GetBucketOwnershipControls', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?ownershipControls', ], 'input' => [ 'shape' => 'GetBucketOwnershipControlsRequest', ], 'output' => [ 'shape' => 'GetBucketOwnershipControlsOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketPolicy' => [ 'name' => 'GetBucketPolicy', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?policy', ], 'input' => [ 'shape' => 'GetBucketPolicyRequest', ], 'output' => [ 'shape' => 'GetBucketPolicyOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketPolicyStatus' => [ 'name' => 'GetBucketPolicyStatus', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?policyStatus', ], 'input' => [ 'shape' => 'GetBucketPolicyStatusRequest', ], 'output' => [ 'shape' => 'GetBucketPolicyStatusOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketReplication' => [ 'name' => 'GetBucketReplication', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?replication', ], 'input' => [ 'shape' => 'GetBucketReplicationRequest', ], 'output' => [ 'shape' => 'GetBucketReplicationOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketRequestPayment' => [ 'name' => 'GetBucketRequestPayment', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?requestPayment', ], 'input' => [ 'shape' => 'GetBucketRequestPaymentRequest', ], 'output' => [ 'shape' => 'GetBucketRequestPaymentOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketTagging' => [ 'name' => 'GetBucketTagging', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?tagging', ], 'input' => [ 'shape' => 'GetBucketTaggingRequest', ], 'output' => [ 'shape' => 'GetBucketTaggingOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketVersioning' => [ 'name' => 'GetBucketVersioning', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?versioning', ], 'input' => [ 'shape' => 'GetBucketVersioningRequest', ], 'output' => [ 'shape' => 'GetBucketVersioningOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetBucketWebsite' => [ 'name' => 'GetBucketWebsite', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?website', ], 'input' => [ 'shape' => 'GetBucketWebsiteRequest', ], 'output' => [ 'shape' => 'GetBucketWebsiteOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'GetObject' => [ 'name' => 'GetObject', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'GetObjectRequest', ], 'output' => [ 'shape' => 'GetObjectOutput', ], 'errors' => [ [ 'shape' => 'NoSuchKey', ], [ 'shape' => 'InvalidObjectState', ], ], 'httpChecksum' => [ 'requestValidationModeMember' => 'ChecksumMode', 'responseAlgorithms' => [ 'CRC64NVME', 'CRC32', 'CRC32C', 'SHA256', 'SHA1', 'SHA512', 'MD5', 'XXHASH64', 'XXHASH3', 'XXHASH128', ], ], ], 'GetObjectAcl' => [ 'name' => 'GetObjectAcl', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?acl', ], 'input' => [ 'shape' => 'GetObjectAclRequest', ], 'output' => [ 'shape' => 'GetObjectAclOutput', ], 'errors' => [ [ 'shape' => 'NoSuchKey', ], ], ], 'GetObjectAnnotation' => [ 'name' => 'GetObjectAnnotation', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?annotation', ], 'input' => [ 'shape' => 'GetObjectAnnotationRequest', ], 'output' => [ 'shape' => 'GetObjectAnnotationOutput', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], [ 'shape' => 'NoSuchKey', ], [ 'shape' => 'NoSuchAnnotation', ], ], 'httpChecksum' => [ 'requestValidationModeMember' => 'ChecksumMode', 'responseAlgorithms' => [ 'CRC64NVME', 'CRC32', 'CRC32C', 'SHA256', 'SHA1', 'SHA512', 'MD5', 'XXHASH64', 'XXHASH3', 'XXHASH128', ], ], ], 'GetObjectAttributes' => [ 'name' => 'GetObjectAttributes', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?attributes', ], 'input' => [ 'shape' => 'GetObjectAttributesRequest', ], 'output' => [ 'shape' => 'GetObjectAttributesOutput', ], 'errors' => [ [ 'shape' => 'NoSuchKey', ], ], ], 'GetObjectLegalHold' => [ 'name' => 'GetObjectLegalHold', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?legal-hold', ], 'input' => [ 'shape' => 'GetObjectLegalHoldRequest', ], 'output' => [ 'shape' => 'GetObjectLegalHoldOutput', ], ], 'GetObjectLockConfiguration' => [ 'name' => 'GetObjectLockConfiguration', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?object-lock', ], 'input' => [ 'shape' => 'GetObjectLockConfigurationRequest', ], 'output' => [ 'shape' => 'GetObjectLockConfigurationOutput', ], ], 'GetObjectRetention' => [ 'name' => 'GetObjectRetention', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?retention', ], 'input' => [ 'shape' => 'GetObjectRetentionRequest', ], 'output' => [ 'shape' => 'GetObjectRetentionOutput', ], ], 'GetObjectTagging' => [ 'name' => 'GetObjectTagging', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?tagging', ], 'input' => [ 'shape' => 'GetObjectTaggingRequest', ], 'output' => [ 'shape' => 'GetObjectTaggingOutput', ], ], 'GetObjectTorrent' => [ 'name' => 'GetObjectTorrent', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?torrent', ], 'input' => [ 'shape' => 'GetObjectTorrentRequest', ], 'output' => [ 'shape' => 'GetObjectTorrentOutput', ], ], 'GetPublicAccessBlock' => [ 'name' => 'GetPublicAccessBlock', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?publicAccessBlock', ], 'input' => [ 'shape' => 'GetPublicAccessBlockRequest', ], 'output' => [ 'shape' => 'GetPublicAccessBlockOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'HeadBucket' => [ 'name' => 'HeadBucket', 'http' => [ 'method' => 'HEAD', 'requestUri' => '/{Bucket}', ], 'input' => [ 'shape' => 'HeadBucketRequest', ], 'output' => [ 'shape' => 'HeadBucketOutput', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], ], ], 'HeadObject' => [ 'name' => 'HeadObject', 'http' => [ 'method' => 'HEAD', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'HeadObjectRequest', ], 'output' => [ 'shape' => 'HeadObjectOutput', ], 'errors' => [ [ 'shape' => 'NoSuchKey', ], ], ], 'ListBucketAnalyticsConfigurations' => [ 'name' => 'ListBucketAnalyticsConfigurations', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?analytics', ], 'input' => [ 'shape' => 'ListBucketAnalyticsConfigurationsRequest', ], 'output' => [ 'shape' => 'ListBucketAnalyticsConfigurationsOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'ListBucketIntelligentTieringConfigurations' => [ 'name' => 'ListBucketIntelligentTieringConfigurations', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?intelligent-tiering', ], 'input' => [ 'shape' => 'ListBucketIntelligentTieringConfigurationsRequest', ], 'output' => [ 'shape' => 'ListBucketIntelligentTieringConfigurationsOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'ListBucketInventoryConfigurations' => [ 'name' => 'ListBucketInventoryConfigurations', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?inventory', ], 'input' => [ 'shape' => 'ListBucketInventoryConfigurationsRequest', ], 'output' => [ 'shape' => 'ListBucketInventoryConfigurationsOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'ListBucketMetricsConfigurations' => [ 'name' => 'ListBucketMetricsConfigurations', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?metrics', ], 'input' => [ 'shape' => 'ListBucketMetricsConfigurationsRequest', ], 'output' => [ 'shape' => 'ListBucketMetricsConfigurationsOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'ListBuckets' => [ 'name' => 'ListBuckets', 'http' => [ 'method' => 'GET', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListBucketsRequest', ], 'output' => [ 'shape' => 'ListBucketsOutput', ], ], 'ListDirectoryBuckets' => [ 'name' => 'ListDirectoryBuckets', 'http' => [ 'method' => 'GET', 'requestUri' => '/', ], 'input' => [ 'shape' => 'ListDirectoryBucketsRequest', ], 'output' => [ 'shape' => 'ListDirectoryBucketsOutput', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'ListMultipartUploads' => [ 'name' => 'ListMultipartUploads', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?uploads', ], 'input' => [ 'shape' => 'ListMultipartUploadsRequest', ], 'output' => [ 'shape' => 'ListMultipartUploadsOutput', ], ], 'ListObjectAnnotations' => [ 'name' => 'ListObjectAnnotations', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}?annotation', ], 'input' => [ 'shape' => 'ListObjectAnnotationsRequest', ], 'output' => [ 'shape' => 'ListObjectAnnotationsOutput', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], [ 'shape' => 'NoSuchKey', ], [ 'shape' => 'InvalidPrefix', ], ], ], 'ListObjectVersions' => [ 'name' => 'ListObjectVersions', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?versions', ], 'input' => [ 'shape' => 'ListObjectVersionsRequest', ], 'output' => [ 'shape' => 'ListObjectVersionsOutput', ], ], 'ListObjects' => [ 'name' => 'ListObjects', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}', ], 'input' => [ 'shape' => 'ListObjectsRequest', ], 'output' => [ 'shape' => 'ListObjectsOutput', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], ], ], 'ListObjectsV2' => [ 'name' => 'ListObjectsV2', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}?list-type=2', ], 'input' => [ 'shape' => 'ListObjectsV2Request', ], 'output' => [ 'shape' => 'ListObjectsV2Output', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], ], ], 'ListParts' => [ 'name' => 'ListParts', 'http' => [ 'method' => 'GET', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'ListPartsRequest', ], 'output' => [ 'shape' => 'ListPartsOutput', ], ], 'PutBucketAbac' => [ 'name' => 'PutBucketAbac', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?abac', ], 'input' => [ 'shape' => 'PutBucketAbacRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => false, ], ], 'PutBucketAccelerateConfiguration' => [ 'name' => 'PutBucketAccelerateConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?accelerate', ], 'input' => [ 'shape' => 'PutBucketAccelerateConfigurationRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => false, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketAcl' => [ 'name' => 'PutBucketAcl', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?acl', ], 'input' => [ 'shape' => 'PutBucketAclRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketAnalyticsConfiguration' => [ 'name' => 'PutBucketAnalyticsConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?analytics', ], 'input' => [ 'shape' => 'PutBucketAnalyticsConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketCors' => [ 'name' => 'PutBucketCors', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?cors', ], 'input' => [ 'shape' => 'PutBucketCorsRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketEncryption' => [ 'name' => 'PutBucketEncryption', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?encryption', ], 'input' => [ 'shape' => 'PutBucketEncryptionRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketIntelligentTieringConfiguration' => [ 'name' => 'PutBucketIntelligentTieringConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?intelligent-tiering', ], 'input' => [ 'shape' => 'PutBucketIntelligentTieringConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketInventoryConfiguration' => [ 'name' => 'PutBucketInventoryConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?inventory', ], 'input' => [ 'shape' => 'PutBucketInventoryConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketLifecycle' => [ 'name' => 'PutBucketLifecycle', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?lifecycle', ], 'input' => [ 'shape' => 'PutBucketLifecycleRequest', ], 'deprecated' => true, 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketLifecycleConfiguration' => [ 'name' => 'PutBucketLifecycleConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?lifecycle', ], 'input' => [ 'shape' => 'PutBucketLifecycleConfigurationRequest', ], 'output' => [ 'shape' => 'PutBucketLifecycleConfigurationOutput', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketLogging' => [ 'name' => 'PutBucketLogging', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?logging', ], 'input' => [ 'shape' => 'PutBucketLoggingRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketMetricsConfiguration' => [ 'name' => 'PutBucketMetricsConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?metrics', ], 'input' => [ 'shape' => 'PutBucketMetricsConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketNotification' => [ 'name' => 'PutBucketNotification', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?notification', ], 'input' => [ 'shape' => 'PutBucketNotificationRequest', ], 'deprecated' => true, 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketNotificationConfiguration' => [ 'name' => 'PutBucketNotificationConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?notification', ], 'input' => [ 'shape' => 'PutBucketNotificationConfigurationRequest', ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketOwnershipControls' => [ 'name' => 'PutBucketOwnershipControls', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?ownershipControls', ], 'input' => [ 'shape' => 'PutBucketOwnershipControlsRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketPolicy' => [ 'name' => 'PutBucketPolicy', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?policy', ], 'input' => [ 'shape' => 'PutBucketPolicyRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketReplication' => [ 'name' => 'PutBucketReplication', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?replication', ], 'input' => [ 'shape' => 'PutBucketReplicationRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketRequestPayment' => [ 'name' => 'PutBucketRequestPayment', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?requestPayment', ], 'input' => [ 'shape' => 'PutBucketRequestPaymentRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketTagging' => [ 'name' => 'PutBucketTagging', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?tagging', ], 'input' => [ 'shape' => 'PutBucketTaggingRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketVersioning' => [ 'name' => 'PutBucketVersioning', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?versioning', ], 'input' => [ 'shape' => 'PutBucketVersioningRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutBucketWebsite' => [ 'name' => 'PutBucketWebsite', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?website', ], 'input' => [ 'shape' => 'PutBucketWebsiteRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'PutObject' => [ 'name' => 'PutObject', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'PutObjectRequest', ], 'output' => [ 'shape' => 'PutObjectOutput', ], 'errors' => [ [ 'shape' => 'InvalidRequest', ], [ 'shape' => 'InvalidWriteOffset', ], [ 'shape' => 'TooManyParts', ], [ 'shape' => 'EncryptionTypeMismatch', ], ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => false, ], ], 'PutObjectAcl' => [ 'name' => 'PutObjectAcl', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}?acl', ], 'input' => [ 'shape' => 'PutObjectAclRequest', ], 'output' => [ 'shape' => 'PutObjectAclOutput', ], 'errors' => [ [ 'shape' => 'NoSuchKey', ], ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], ], 'PutObjectAnnotation' => [ 'name' => 'PutObjectAnnotation', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}?annotation', ], 'input' => [ 'shape' => 'PutObjectAnnotationRequest', ], 'output' => [ 'shape' => 'PutObjectAnnotationOutput', ], 'errors' => [ [ 'shape' => 'NoSuchBucket', ], [ 'shape' => 'NoSuchKey', ], [ 'shape' => 'InvalidRequest', ], [ 'shape' => 'AnnotationNameTooLong', ], [ 'shape' => 'AnnotationLimitExceeded', ], [ 'shape' => 'InvalidAnnotationName', ], [ 'shape' => 'UnsupportedMediaType', ], ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => false, ], ], 'PutObjectLegalHold' => [ 'name' => 'PutObjectLegalHold', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}?legal-hold', ], 'input' => [ 'shape' => 'PutObjectLegalHoldRequest', ], 'output' => [ 'shape' => 'PutObjectLegalHoldOutput', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], ], 'PutObjectLockConfiguration' => [ 'name' => 'PutObjectLockConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?object-lock', ], 'input' => [ 'shape' => 'PutObjectLockConfigurationRequest', ], 'output' => [ 'shape' => 'PutObjectLockConfigurationOutput', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], ], 'PutObjectRetention' => [ 'name' => 'PutObjectRetention', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}?retention', ], 'input' => [ 'shape' => 'PutObjectRetentionRequest', ], 'output' => [ 'shape' => 'PutObjectRetentionOutput', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], ], 'PutObjectTagging' => [ 'name' => 'PutObjectTagging', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}?tagging', ], 'input' => [ 'shape' => 'PutObjectTaggingRequest', ], 'output' => [ 'shape' => 'PutObjectTaggingOutput', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], ], 'PutPublicAccessBlock' => [ 'name' => 'PutPublicAccessBlock', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?publicAccessBlock', ], 'input' => [ 'shape' => 'PutPublicAccessBlockRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'RenameObject' => [ 'name' => 'RenameObject', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}?renameObject', ], 'input' => [ 'shape' => 'RenameObjectRequest', ], 'output' => [ 'shape' => 'RenameObjectOutput', ], 'errors' => [ [ 'shape' => 'IdempotencyParameterMismatch', ], ], ], 'RestoreObject' => [ 'name' => 'RestoreObject', 'http' => [ 'method' => 'POST', 'requestUri' => '/{Bucket}/{Key+}?restore', ], 'input' => [ 'shape' => 'RestoreObjectRequest', ], 'output' => [ 'shape' => 'RestoreObjectOutput', ], 'errors' => [ [ 'shape' => 'ObjectAlreadyInActiveTierError', ], ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => false, ], ], 'SelectObjectContent' => [ 'name' => 'SelectObjectContent', 'http' => [ 'method' => 'POST', 'requestUri' => '/{Bucket}/{Key+}?select&select-type=2', ], 'input' => [ 'shape' => 'SelectObjectContentRequest', 'locationName' => 'SelectObjectContentRequest', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'output' => [ 'shape' => 'SelectObjectContentOutput', ], ], 'UpdateBucketMetadataAnnotationTableConfiguration' => [ 'name' => 'UpdateBucketMetadataAnnotationTableConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?metadataAnnotationTable', ], 'input' => [ 'shape' => 'UpdateBucketMetadataAnnotationTableConfigurationRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'UpdateBucketMetadataInventoryTableConfiguration' => [ 'name' => 'UpdateBucketMetadataInventoryTableConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?metadataInventoryTable', ], 'input' => [ 'shape' => 'UpdateBucketMetadataInventoryTableConfigurationRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'UpdateBucketMetadataJournalTableConfiguration' => [ 'name' => 'UpdateBucketMetadataJournalTableConfiguration', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}?metadataJournalTable', ], 'input' => [ 'shape' => 'UpdateBucketMetadataJournalTableConfigurationRequest', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], 'staticContextParams' => [ 'UseS3ExpressControlEndpoint' => [ 'value' => true, ], ], ], 'UpdateObjectEncryption' => [ 'name' => 'UpdateObjectEncryption', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}?encryption', ], 'input' => [ 'shape' => 'UpdateObjectEncryptionRequest', ], 'output' => [ 'shape' => 'UpdateObjectEncryptionResponse', ], 'errors' => [ [ 'shape' => 'NoSuchKey', ], [ 'shape' => 'InvalidRequest', ], [ 'shape' => 'AccessDenied', ], ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => true, ], ], 'UploadPart' => [ 'name' => 'UploadPart', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'UploadPartRequest', ], 'output' => [ 'shape' => 'UploadPartOutput', ], 'httpChecksum' => [ 'requestAlgorithmMember' => 'ChecksumAlgorithm', 'requestChecksumRequired' => false, ], ], 'UploadPartCopy' => [ 'name' => 'UploadPartCopy', 'http' => [ 'method' => 'PUT', 'requestUri' => '/{Bucket}/{Key+}', ], 'input' => [ 'shape' => 'UploadPartCopyRequest', ], 'output' => [ 'shape' => 'UploadPartCopyOutput', ], 'staticContextParams' => [ 'DisableS3ExpressSessionAuth' => [ 'value' => true, ], ], ], 'WriteGetObjectResponse' => [ 'name' => 'WriteGetObjectResponse', 'http' => [ 'method' => 'POST', 'requestUri' => '/WriteGetObjectResponse', ], 'input' => [ 'shape' => 'WriteGetObjectResponseRequest', ], 'authtype' => 'v4-unsigned-body', 'endpoint' => [ 'hostPrefix' => '{RequestRoute}.', ], 'staticContextParams' => [ 'UseObjectLambdaEndpoint' => [ 'value' => true, ], ], 'unsignedPayload' => true, ], ], 'shapes' => [ 'AbacStatus' => [ 'type' => 'structure', 'members' => [ 'Status' => [ 'shape' => 'BucketAbacStatus', ], ], ], 'AbortDate' => [ 'type' => 'timestamp', ], 'AbortIncompleteMultipartUpload' => [ 'type' => 'structure', 'members' => [ 'DaysAfterInitiation' => [ 'shape' => 'DaysAfterInitiation', ], ], ], 'AbortMultipartUploadOutput' => [ 'type' => 'structure', 'members' => [ 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'AbortMultipartUploadRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'UploadId', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'UploadId' => [ 'shape' => 'MultipartUploadId', 'location' => 'querystring', 'locationName' => 'uploadId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'IfMatchInitiatedTime' => [ 'shape' => 'IfMatchInitiatedTime', 'location' => 'header', 'locationName' => 'x-amz-if-match-initiated-time', ], ], ], 'AbortRuleId' => [ 'type' => 'string', ], 'AccelerateConfiguration' => [ 'type' => 'structure', 'members' => [ 'Status' => [ 'shape' => 'BucketAccelerateStatus', ], ], ], 'AcceptRanges' => [ 'type' => 'string', ], 'AccessControlPolicy' => [ 'type' => 'structure', 'members' => [ 'Grants' => [ 'shape' => 'Grants', 'locationName' => 'AccessControlList', ], 'Owner' => [ 'shape' => 'Owner', ], ], ], 'AccessControlTranslation' => [ 'type' => 'structure', 'required' => [ 'Owner', ], 'members' => [ 'Owner' => [ 'shape' => 'OwnerOverride', ], ], ], 'AccessDenied' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 403, ], 'exception' => true, 'synthetic' => true, ], 'AccessKeyIdValue' => [ 'type' => 'string', ], 'AccessPointAlias' => [ 'type' => 'boolean', 'box' => true, ], 'AccessPointArn' => [ 'type' => 'string', ], 'AccountId' => [ 'type' => 'string', ], 'AllowQuotedRecordDelimiter' => [ 'type' => 'boolean', 'box' => true, ], 'AllowedHeader' => [ 'type' => 'string', ], 'AllowedHeaders' => [ 'type' => 'list', 'member' => [ 'shape' => 'AllowedHeader', ], 'flattened' => true, ], 'AllowedMethod' => [ 'type' => 'string', ], 'AllowedMethods' => [ 'type' => 'list', 'member' => [ 'shape' => 'AllowedMethod', ], 'flattened' => true, ], 'AllowedOrigin' => [ 'type' => 'string', ], 'AllowedOrigins' => [ 'type' => 'list', 'member' => [ 'shape' => 'AllowedOrigin', ], 'flattened' => true, ], 'AnalyticsAndOperator' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tags' => [ 'shape' => 'TagSet', 'flattened' => true, 'locationName' => 'Tag', ], ], ], 'AnalyticsConfiguration' => [ 'type' => 'structure', 'required' => [ 'Id', 'StorageClassAnalysis', ], 'members' => [ 'Id' => [ 'shape' => 'AnalyticsId', ], 'Filter' => [ 'shape' => 'AnalyticsFilter', ], 'StorageClassAnalysis' => [ 'shape' => 'StorageClassAnalysis', ], ], ], 'AnalyticsConfigurationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'AnalyticsConfiguration', ], 'flattened' => true, ], 'AnalyticsExportDestination' => [ 'type' => 'structure', 'required' => [ 'S3BucketDestination', ], 'members' => [ 'S3BucketDestination' => [ 'shape' => 'AnalyticsS3BucketDestination', ], ], ], 'AnalyticsFilter' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tag' => [ 'shape' => 'Tag', ], 'And' => [ 'shape' => 'AnalyticsAndOperator', ], ], ], 'AnalyticsId' => [ 'type' => 'string', ], 'AnalyticsS3BucketDestination' => [ 'type' => 'structure', 'required' => [ 'Format', 'Bucket', ], 'members' => [ 'Format' => [ 'shape' => 'AnalyticsS3ExportFileFormat', ], 'BucketAccountId' => [ 'shape' => 'AccountId', ], 'Bucket' => [ 'shape' => 'BucketName', ], 'Prefix' => [ 'shape' => 'Prefix', ], ], ], 'AnalyticsS3ExportFileFormat' => [ 'type' => 'string', 'enum' => [ 'CSV', ], ], 'AnnotationConfigurationState' => [ 'type' => 'string', 'enum' => [ 'ENABLED', 'DISABLED', ], ], 'AnnotationCount' => [ 'type' => 'integer', ], 'AnnotationDirective' => [ 'type' => 'string', 'enum' => [ 'COPY', 'EXCLUDE', ], ], 'AnnotationEntry' => [ 'type' => 'structure', 'required' => [ 'AnnotationName', 'LastModified', 'Size', ], 'members' => [ 'AnnotationName' => [ 'shape' => 'AnnotationName', ], 'LastModified' => [ 'shape' => 'LastModified', ], 'ETag' => [ 'shape' => 'ETag', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithmList', ], 'Size' => [ 'shape' => 'Size', ], 'ReplicationStatus' => [ 'shape' => 'ReplicationStatus', ], ], ], 'AnnotationLimitExceeded' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'AnnotationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'AnnotationEntry', 'locationName' => 'AnnotationEntry', ], ], 'AnnotationName' => [ 'type' => 'string', ], 'AnnotationNameTooLong' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'AnnotationPayload' => [ 'type' => 'blob', ], 'AnnotationPrefix' => [ 'type' => 'string', ], 'AnnotationTableConfiguration' => [ 'type' => 'structure', 'required' => [ 'ConfigurationState', ], 'members' => [ 'ConfigurationState' => [ 'shape' => 'AnnotationConfigurationState', ], 'EncryptionConfiguration' => [ 'shape' => 'MetadataTableEncryptionConfiguration', ], 'Role' => [ 'shape' => 'Role', ], ], ], 'AnnotationTableConfigurationResult' => [ 'type' => 'structure', 'required' => [ 'ConfigurationState', ], 'members' => [ 'ConfigurationState' => [ 'shape' => 'AnnotationConfigurationState', ], 'TableStatus' => [ 'shape' => 'MetadataTableStatus', ], 'Error' => [ 'shape' => 'ErrorDetails', ], 'TableName' => [ 'shape' => 'S3TablesName', ], 'TableArn' => [ 'shape' => 'S3TablesArn', ], 'Role' => [ 'shape' => 'Role', ], ], ], 'AnnotationTableConfigurationUpdates' => [ 'type' => 'structure', 'required' => [ 'ConfigurationState', ], 'members' => [ 'ConfigurationState' => [ 'shape' => 'AnnotationConfigurationState', ], 'EncryptionConfiguration' => [ 'shape' => 'MetadataTableEncryptionConfiguration', ], 'Role' => [ 'shape' => 'Role', ], ], ], 'ArchiveStatus' => [ 'type' => 'string', 'enum' => [ 'ARCHIVE_ACCESS', 'DEEP_ARCHIVE_ACCESS', ], ], 'BlockedEncryptionTypes' => [ 'type' => 'structure', 'members' => [ 'EncryptionType' => [ 'shape' => 'EncryptionTypeList', ], ], ], 'Body' => [ 'type' => 'blob', ], 'Bucket' => [ 'type' => 'structure', 'members' => [ 'Name' => [ 'shape' => 'BucketName', ], 'CreationDate' => [ 'shape' => 'CreationDate', ], 'BucketRegion' => [ 'shape' => 'BucketRegion', ], 'BucketArn' => [ 'shape' => 'S3RegionalOrS3ExpressBucketArnString', ], ], ], 'BucketAbacStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'BucketAccelerateStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Suspended', ], ], 'BucketAlreadyExists' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 409, ], 'exception' => true, ], 'BucketAlreadyOwnedByYou' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 409, ], 'exception' => true, ], 'BucketCannedACL' => [ 'type' => 'string', 'enum' => [ 'private', 'public-read', 'public-read-write', 'authenticated-read', ], ], 'BucketInfo' => [ 'type' => 'structure', 'members' => [ 'DataRedundancy' => [ 'shape' => 'DataRedundancy', ], 'Type' => [ 'shape' => 'BucketType', ], ], ], 'BucketKeyEnabled' => [ 'type' => 'boolean', 'box' => true, ], 'BucketLifecycleConfiguration' => [ 'type' => 'structure', 'required' => [ 'Rules', ], 'members' => [ 'Rules' => [ 'shape' => 'LifecycleRules', 'locationName' => 'Rule', ], ], ], 'BucketLocationConstraint' => [ 'type' => 'string', 'enum' => [ 'af-south-1', 'ap-east-1', 'ap-east-2', 'ap-northeast-1', 'ap-northeast-2', 'ap-northeast-3', 'ap-south-1', 'ap-south-2', 'ap-southeast-1', 'ap-southeast-2', 'ap-southeast-3', 'ap-southeast-4', 'ap-southeast-5', 'ap-southeast-6', 'ap-southeast-7', 'ca-central-1', 'ca-west-1', 'cn-north-1', 'cn-northwest-1', 'EU', 'eu-central-1', 'eu-central-2', 'eu-north-1', 'eu-south-1', 'eu-south-2', 'eu-west-1', 'eu-west-2', 'eu-west-3', 'il-central-1', 'me-central-1', 'me-south-1', 'mx-central-1', 'sa-east-1', 'us-east-2', 'us-gov-east-1', 'us-gov-west-1', 'us-west-1', 'us-west-2', ], ], 'BucketLocationName' => [ 'type' => 'string', ], 'BucketLoggingStatus' => [ 'type' => 'structure', 'members' => [ 'LoggingEnabled' => [ 'shape' => 'LoggingEnabled', ], ], ], 'BucketLogsPermission' => [ 'type' => 'string', 'enum' => [ 'FULL_CONTROL', 'READ', 'WRITE', ], ], 'BucketName' => [ 'type' => 'string', ], 'BucketNamespace' => [ 'type' => 'string', 'enum' => [ 'account-regional', 'global', ], ], 'BucketRegion' => [ 'type' => 'string', ], 'BucketType' => [ 'type' => 'string', 'enum' => [ 'Directory', ], ], 'BucketVersioningStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Suspended', ], ], 'Buckets' => [ 'type' => 'list', 'member' => [ 'shape' => 'Bucket', 'locationName' => 'Bucket', ], ], 'BypassGovernanceRetention' => [ 'type' => 'boolean', 'box' => true, ], 'BytesProcessed' => [ 'type' => 'long', 'box' => true, ], 'BytesReturned' => [ 'type' => 'long', 'box' => true, ], 'BytesScanned' => [ 'type' => 'long', 'box' => true, ], 'CORSConfiguration' => [ 'type' => 'structure', 'required' => [ 'CORSRules', ], 'members' => [ 'CORSRules' => [ 'shape' => 'CORSRules', 'locationName' => 'CORSRule', ], ], ], 'CORSRule' => [ 'type' => 'structure', 'required' => [ 'AllowedMethods', 'AllowedOrigins', ], 'members' => [ 'ID' => [ 'shape' => 'ID', ], 'AllowedHeaders' => [ 'shape' => 'AllowedHeaders', 'locationName' => 'AllowedHeader', ], 'AllowedMethods' => [ 'shape' => 'AllowedMethods', 'locationName' => 'AllowedMethod', ], 'AllowedOrigins' => [ 'shape' => 'AllowedOrigins', 'locationName' => 'AllowedOrigin', ], 'ExposeHeaders' => [ 'shape' => 'ExposeHeaders', 'locationName' => 'ExposeHeader', ], 'MaxAgeSeconds' => [ 'shape' => 'MaxAgeSeconds', ], ], ], 'CORSRules' => [ 'type' => 'list', 'member' => [ 'shape' => 'CORSRule', ], 'flattened' => true, ], 'CSVInput' => [ 'type' => 'structure', 'members' => [ 'FileHeaderInfo' => [ 'shape' => 'FileHeaderInfo', ], 'Comments' => [ 'shape' => 'Comments', ], 'QuoteEscapeCharacter' => [ 'shape' => 'QuoteEscapeCharacter', ], 'RecordDelimiter' => [ 'shape' => 'RecordDelimiter', ], 'FieldDelimiter' => [ 'shape' => 'FieldDelimiter', ], 'QuoteCharacter' => [ 'shape' => 'QuoteCharacter', ], 'AllowQuotedRecordDelimiter' => [ 'shape' => 'AllowQuotedRecordDelimiter', ], ], ], 'CSVOutput' => [ 'type' => 'structure', 'members' => [ 'QuoteFields' => [ 'shape' => 'QuoteFields', ], 'QuoteEscapeCharacter' => [ 'shape' => 'QuoteEscapeCharacter', ], 'RecordDelimiter' => [ 'shape' => 'RecordDelimiter', ], 'FieldDelimiter' => [ 'shape' => 'FieldDelimiter', ], 'QuoteCharacter' => [ 'shape' => 'QuoteCharacter', ], ], ], 'CacheControl' => [ 'type' => 'string', ], 'Checksum' => [ 'type' => 'structure', 'members' => [ 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', ], ], ], 'ChecksumAlgorithm' => [ 'type' => 'string', 'enum' => [ 'CRC32', 'CRC32C', 'SHA1', 'SHA256', 'CRC64NVME', 'SHA512', 'MD5', 'XXHASH64', 'XXHASH3', 'XXHASH128', ], ], 'ChecksumAlgorithmList' => [ 'type' => 'list', 'member' => [ 'shape' => 'ChecksumAlgorithm', ], 'flattened' => true, ], 'ChecksumCRC32' => [ 'type' => 'string', ], 'ChecksumCRC32C' => [ 'type' => 'string', ], 'ChecksumCRC64NVME' => [ 'type' => 'string', ], 'ChecksumMD5' => [ 'type' => 'string', ], 'ChecksumMode' => [ 'type' => 'string', 'enum' => [ 'ENABLED', ], ], 'ChecksumSHA1' => [ 'type' => 'string', ], 'ChecksumSHA256' => [ 'type' => 'string', ], 'ChecksumSHA512' => [ 'type' => 'string', ], 'ChecksumType' => [ 'type' => 'string', 'enum' => [ 'COMPOSITE', 'FULL_OBJECT', ], ], 'ChecksumXXHASH128' => [ 'type' => 'string', ], 'ChecksumXXHASH3' => [ 'type' => 'string', ], 'ChecksumXXHASH64' => [ 'type' => 'string', ], 'ClientToken' => [ 'type' => 'string', ], 'CloudFunction' => [ 'type' => 'string', ], 'CloudFunctionConfiguration' => [ 'type' => 'structure', 'members' => [ 'Id' => [ 'shape' => 'NotificationId', ], 'Event' => [ 'shape' => 'Event', 'deprecated' => true, ], 'Events' => [ 'shape' => 'EventList', 'locationName' => 'Event', ], 'CloudFunction' => [ 'shape' => 'CloudFunction', ], 'InvocationRole' => [ 'shape' => 'CloudFunctionInvocationRole', ], ], ], 'CloudFunctionInvocationRole' => [ 'type' => 'string', ], 'Code' => [ 'type' => 'string', ], 'Comments' => [ 'type' => 'string', ], 'CommonPrefix' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], ], ], 'CommonPrefixList' => [ 'type' => 'list', 'member' => [ 'shape' => 'CommonPrefix', ], 'flattened' => true, ], 'CompleteMultipartUploadOutput' => [ 'type' => 'structure', 'members' => [ 'Location' => [ 'shape' => 'Location', ], 'Bucket' => [ 'shape' => 'BucketName', ], 'Key' => [ 'shape' => 'ObjectKey', ], 'Expiration' => [ 'shape' => 'Expiration', 'location' => 'header', 'locationName' => 'x-amz-expiration', ], 'ETag' => [ 'shape' => 'ETag', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'CompleteMultipartUploadRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'UploadId', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'MultipartUpload' => [ 'shape' => 'CompletedMultipartUpload', 'locationName' => 'CompleteMultipartUpload', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'UploadId' => [ 'shape' => 'MultipartUploadId', 'location' => 'querystring', 'locationName' => 'uploadId', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], 'MpuObjectSize' => [ 'shape' => 'MpuObjectSize', 'location' => 'header', 'locationName' => 'x-amz-mp-object-size', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'IfMatch' => [ 'shape' => 'IfMatch', 'location' => 'header', 'locationName' => 'If-Match', ], 'IfNoneMatch' => [ 'shape' => 'IfNoneMatch', 'location' => 'header', 'locationName' => 'If-None-Match', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], ], 'payload' => 'MultipartUpload', ], 'CompletedMultipartUpload' => [ 'type' => 'structure', 'members' => [ 'Parts' => [ 'shape' => 'CompletedPartList', 'locationName' => 'Part', ], ], ], 'CompletedPart' => [ 'type' => 'structure', 'members' => [ 'ETag' => [ 'shape' => 'ETag', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', ], 'PartNumber' => [ 'shape' => 'PartNumber', ], ], ], 'CompletedPartList' => [ 'type' => 'list', 'member' => [ 'shape' => 'CompletedPart', ], 'flattened' => true, ], 'CompressionType' => [ 'type' => 'string', 'enum' => [ 'NONE', 'GZIP', 'BZIP2', ], ], 'Condition' => [ 'type' => 'structure', 'members' => [ 'HttpErrorCodeReturnedEquals' => [ 'shape' => 'HttpErrorCodeReturnedEquals', ], 'KeyPrefixEquals' => [ 'shape' => 'KeyPrefixEquals', ], ], ], 'ConfirmRemoveSelfBucketAccess' => [ 'type' => 'boolean', 'box' => true, ], 'ContentDisposition' => [ 'type' => 'string', ], 'ContentEncoding' => [ 'type' => 'string', ], 'ContentLanguage' => [ 'type' => 'string', ], 'ContentLength' => [ 'type' => 'long', ], 'ContentMD5' => [ 'type' => 'string', ], 'ContentRange' => [ 'type' => 'string', ], 'ContentType' => [ 'type' => 'string', ], 'ContinuationEvent' => [ 'type' => 'structure', 'members' => [], 'event' => true, ], 'CopyObjectOutput' => [ 'type' => 'structure', 'members' => [ 'CopyObjectResult' => [ 'shape' => 'CopyObjectResult', ], 'Expiration' => [ 'shape' => 'Expiration', 'location' => 'header', 'locationName' => 'x-amz-expiration', ], 'CopySourceVersionId' => [ 'shape' => 'CopySourceVersionId', 'location' => 'header', 'locationName' => 'x-amz-copy-source-version-id', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], 'payload' => 'CopyObjectResult', ], 'CopyObjectRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'CopySource', 'Key', ], 'members' => [ 'ACL' => [ 'shape' => 'ObjectCannedACL', 'location' => 'header', 'locationName' => 'x-amz-acl', ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'CacheControl' => [ 'shape' => 'CacheControl', 'location' => 'header', 'locationName' => 'Cache-Control', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-checksum-algorithm', ], 'ContentDisposition' => [ 'shape' => 'ContentDisposition', 'location' => 'header', 'locationName' => 'Content-Disposition', ], 'ContentEncoding' => [ 'shape' => 'ContentEncoding', 'location' => 'header', 'locationName' => 'Content-Encoding', ], 'ContentLanguage' => [ 'shape' => 'ContentLanguage', 'location' => 'header', 'locationName' => 'Content-Language', ], 'ContentType' => [ 'shape' => 'ContentType', 'location' => 'header', 'locationName' => 'Content-Type', ], 'CopySource' => [ 'shape' => 'CopySource', 'contextParam' => [ 'name' => 'CopySource', ], 'location' => 'header', 'locationName' => 'x-amz-copy-source', ], 'CopySourceIfMatch' => [ 'shape' => 'CopySourceIfMatch', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-match', ], 'CopySourceIfModifiedSince' => [ 'shape' => 'CopySourceIfModifiedSince', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-modified-since', ], 'CopySourceIfNoneMatch' => [ 'shape' => 'CopySourceIfNoneMatch', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-none-match', ], 'CopySourceIfUnmodifiedSince' => [ 'shape' => 'CopySourceIfUnmodifiedSince', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-unmodified-since', ], 'Expires' => [ 'shape' => 'Expires', 'location' => 'header', 'locationName' => 'Expires', ], 'GrantFullControl' => [ 'shape' => 'GrantFullControl', 'location' => 'header', 'locationName' => 'x-amz-grant-full-control', ], 'GrantRead' => [ 'shape' => 'GrantRead', 'location' => 'header', 'locationName' => 'x-amz-grant-read', ], 'GrantReadACP' => [ 'shape' => 'GrantReadACP', 'location' => 'header', 'locationName' => 'x-amz-grant-read-acp', ], 'GrantWriteACP' => [ 'shape' => 'GrantWriteACP', 'location' => 'header', 'locationName' => 'x-amz-grant-write-acp', ], 'IfMatch' => [ 'shape' => 'IfMatch', 'location' => 'header', 'locationName' => 'If-Match', ], 'IfNoneMatch' => [ 'shape' => 'IfNoneMatch', 'location' => 'header', 'locationName' => 'If-None-Match', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'Metadata' => [ 'shape' => 'Metadata', 'location' => 'headers', 'locationName' => 'x-amz-meta-', ], 'MetadataDirective' => [ 'shape' => 'MetadataDirective', 'location' => 'header', 'locationName' => 'x-amz-metadata-directive', ], 'TaggingDirective' => [ 'shape' => 'TaggingDirective', 'location' => 'header', 'locationName' => 'x-amz-tagging-directive', ], 'AnnotationDirective' => [ 'shape' => 'AnnotationDirective', 'location' => 'header', 'locationName' => 'x-amz-object-annotation-directive', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'StorageClass' => [ 'shape' => 'StorageClass', 'location' => 'header', 'locationName' => 'x-amz-storage-class', ], 'WebsiteRedirectLocation' => [ 'shape' => 'WebsiteRedirectLocation', 'location' => 'header', 'locationName' => 'x-amz-website-redirect-location', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'CopySourceSSECustomerAlgorithm' => [ 'shape' => 'CopySourceSSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-copy-source-server-side-encryption-customer-algorithm', ], 'CopySourceSSECustomerKey' => [ 'shape' => 'CopySourceSSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-copy-source-server-side-encryption-customer-key', ], 'CopySourceSSECustomerKeyMD5' => [ 'shape' => 'CopySourceSSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-copy-source-server-side-encryption-customer-key-MD5', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'Tagging' => [ 'shape' => 'TaggingHeader', 'location' => 'header', 'locationName' => 'x-amz-tagging', ], 'ObjectLockMode' => [ 'shape' => 'ObjectLockMode', 'location' => 'header', 'locationName' => 'x-amz-object-lock-mode', ], 'ObjectLockRetainUntilDate' => [ 'shape' => 'ObjectLockRetainUntilDate', 'location' => 'header', 'locationName' => 'x-amz-object-lock-retain-until-date', ], 'ObjectLockLegalHoldStatus' => [ 'shape' => 'ObjectLockLegalHoldStatus', 'location' => 'header', 'locationName' => 'x-amz-object-lock-legal-hold', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ExpectedSourceBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-source-expected-bucket-owner', ], ], ], 'CopyObjectResult' => [ 'type' => 'structure', 'members' => [ 'ETag' => [ 'shape' => 'ETag', ], 'LastModified' => [ 'shape' => 'LastModified', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', ], ], ], 'CopyPartResult' => [ 'type' => 'structure', 'members' => [ 'ETag' => [ 'shape' => 'ETag', ], 'LastModified' => [ 'shape' => 'LastModified', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', ], ], ], 'CopySource' => [ 'type' => 'string', 'pattern' => '\\/?.+\\/.+', ], 'CopySourceIfMatch' => [ 'type' => 'string', ], 'CopySourceIfModifiedSince' => [ 'type' => 'timestamp', ], 'CopySourceIfNoneMatch' => [ 'type' => 'string', ], 'CopySourceIfUnmodifiedSince' => [ 'type' => 'timestamp', ], 'CopySourceRange' => [ 'type' => 'string', ], 'CopySourceSSECustomerAlgorithm' => [ 'type' => 'string', ], 'CopySourceSSECustomerKey' => [ 'type' => 'string', 'sensitive' => true, ], 'CopySourceSSECustomerKeyMD5' => [ 'type' => 'string', ], 'CopySourceVersionId' => [ 'type' => 'string', ], 'CreateBucketConfiguration' => [ 'type' => 'structure', 'members' => [ 'LocationConstraint' => [ 'shape' => 'BucketLocationConstraint', ], 'Location' => [ 'shape' => 'LocationInfo', ], 'Bucket' => [ 'shape' => 'BucketInfo', ], 'Tags' => [ 'shape' => 'TagSet', ], ], ], 'CreateBucketMetadataConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'MetadataConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'MetadataConfiguration' => [ 'shape' => 'MetadataConfiguration', 'locationName' => 'MetadataConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'MetadataConfiguration', ], 'CreateBucketMetadataTableConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'MetadataTableConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'MetadataTableConfiguration' => [ 'shape' => 'MetadataTableConfiguration', 'locationName' => 'MetadataTableConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'MetadataTableConfiguration', ], 'CreateBucketOutput' => [ 'type' => 'structure', 'members' => [ 'Location' => [ 'shape' => 'Location', 'location' => 'header', 'locationName' => 'Location', ], 'BucketArn' => [ 'shape' => 'S3RegionalOrS3ExpressBucketArnString', 'location' => 'header', 'locationName' => 'x-amz-bucket-arn', ], ], ], 'CreateBucketRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'ACL' => [ 'shape' => 'BucketCannedACL', 'location' => 'header', 'locationName' => 'x-amz-acl', ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'CreateBucketConfiguration' => [ 'shape' => 'CreateBucketConfiguration', 'locationName' => 'CreateBucketConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'GrantFullControl' => [ 'shape' => 'GrantFullControl', 'location' => 'header', 'locationName' => 'x-amz-grant-full-control', ], 'GrantRead' => [ 'shape' => 'GrantRead', 'location' => 'header', 'locationName' => 'x-amz-grant-read', ], 'GrantReadACP' => [ 'shape' => 'GrantReadACP', 'location' => 'header', 'locationName' => 'x-amz-grant-read-acp', ], 'GrantWrite' => [ 'shape' => 'GrantWrite', 'location' => 'header', 'locationName' => 'x-amz-grant-write', ], 'GrantWriteACP' => [ 'shape' => 'GrantWriteACP', 'location' => 'header', 'locationName' => 'x-amz-grant-write-acp', ], 'ObjectLockEnabledForBucket' => [ 'shape' => 'ObjectLockEnabledForBucket', 'location' => 'header', 'locationName' => 'x-amz-bucket-object-lock-enabled', ], 'ObjectOwnership' => [ 'shape' => 'ObjectOwnership', 'location' => 'header', 'locationName' => 'x-amz-object-ownership', ], 'BucketNamespace' => [ 'shape' => 'BucketNamespace', 'location' => 'header', 'locationName' => 'x-amz-bucket-namespace', ], ], 'payload' => 'CreateBucketConfiguration', ], 'CreateMultipartUploadOutput' => [ 'type' => 'structure', 'members' => [ 'AbortDate' => [ 'shape' => 'AbortDate', 'location' => 'header', 'locationName' => 'x-amz-abort-date', ], 'AbortRuleId' => [ 'shape' => 'AbortRuleId', 'location' => 'header', 'locationName' => 'x-amz-abort-rule-id', ], 'Bucket' => [ 'shape' => 'BucketName', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', ], 'UploadId' => [ 'shape' => 'MultipartUploadId', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-checksum-algorithm', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], ], ], 'CreateMultipartUploadRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'ACL' => [ 'shape' => 'ObjectCannedACL', 'location' => 'header', 'locationName' => 'x-amz-acl', ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'CacheControl' => [ 'shape' => 'CacheControl', 'location' => 'header', 'locationName' => 'Cache-Control', ], 'ContentDisposition' => [ 'shape' => 'ContentDisposition', 'location' => 'header', 'locationName' => 'Content-Disposition', ], 'ContentEncoding' => [ 'shape' => 'ContentEncoding', 'location' => 'header', 'locationName' => 'Content-Encoding', ], 'ContentLanguage' => [ 'shape' => 'ContentLanguage', 'location' => 'header', 'locationName' => 'Content-Language', ], 'ContentType' => [ 'shape' => 'ContentType', 'location' => 'header', 'locationName' => 'Content-Type', ], 'Expires' => [ 'shape' => 'Expires', 'location' => 'header', 'locationName' => 'Expires', ], 'GrantFullControl' => [ 'shape' => 'GrantFullControl', 'location' => 'header', 'locationName' => 'x-amz-grant-full-control', ], 'GrantRead' => [ 'shape' => 'GrantRead', 'location' => 'header', 'locationName' => 'x-amz-grant-read', ], 'GrantReadACP' => [ 'shape' => 'GrantReadACP', 'location' => 'header', 'locationName' => 'x-amz-grant-read-acp', ], 'GrantWriteACP' => [ 'shape' => 'GrantWriteACP', 'location' => 'header', 'locationName' => 'x-amz-grant-write-acp', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'Metadata' => [ 'shape' => 'Metadata', 'location' => 'headers', 'locationName' => 'x-amz-meta-', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'StorageClass' => [ 'shape' => 'StorageClass', 'location' => 'header', 'locationName' => 'x-amz-storage-class', ], 'WebsiteRedirectLocation' => [ 'shape' => 'WebsiteRedirectLocation', 'location' => 'header', 'locationName' => 'x-amz-website-redirect-location', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'Tagging' => [ 'shape' => 'TaggingHeader', 'location' => 'header', 'locationName' => 'x-amz-tagging', ], 'ObjectLockMode' => [ 'shape' => 'ObjectLockMode', 'location' => 'header', 'locationName' => 'x-amz-object-lock-mode', ], 'ObjectLockRetainUntilDate' => [ 'shape' => 'ObjectLockRetainUntilDate', 'location' => 'header', 'locationName' => 'x-amz-object-lock-retain-until-date', ], 'ObjectLockLegalHoldStatus' => [ 'shape' => 'ObjectLockLegalHoldStatus', 'location' => 'header', 'locationName' => 'x-amz-object-lock-legal-hold', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-checksum-algorithm', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], ], ], 'CreateSessionOutput' => [ 'type' => 'structure', 'required' => [ 'Credentials', ], 'members' => [ 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'Credentials' => [ 'shape' => 'SessionCredentials', 'locationName' => 'Credentials', ], ], ], 'CreateSessionRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'SessionMode' => [ 'shape' => 'SessionMode', 'location' => 'header', 'locationName' => 'x-amz-create-session-mode', ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], ], ], 'CreationDate' => [ 'type' => 'timestamp', ], 'DataRedundancy' => [ 'type' => 'string', 'enum' => [ 'SingleAvailabilityZone', 'SingleLocalZone', ], ], 'Date' => [ 'type' => 'timestamp', 'timestampFormat' => 'iso8601', ], 'Days' => [ 'type' => 'integer', 'box' => true, ], 'DaysAfterInitiation' => [ 'type' => 'integer', 'box' => true, ], 'DefaultRetention' => [ 'type' => 'structure', 'members' => [ 'Mode' => [ 'shape' => 'ObjectLockRetentionMode', ], 'Days' => [ 'shape' => 'Days', ], 'Years' => [ 'shape' => 'Years', ], ], ], 'Delete' => [ 'type' => 'structure', 'required' => [ 'Objects', ], 'members' => [ 'Objects' => [ 'shape' => 'ObjectIdentifierList', 'locationName' => 'Object', ], 'Quiet' => [ 'shape' => 'Quiet', ], ], ], 'DeleteBucketAnalyticsConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'AnalyticsId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketCorsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketEncryptionRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketIntelligentTieringConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'IntelligentTieringId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketInventoryConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'InventoryId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketLifecycleRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketMetadataConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketMetadataTableConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketMetricsConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'MetricsId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketOwnershipControlsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketPolicyRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketReplicationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketTaggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteBucketWebsiteRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteMarker' => [ 'type' => 'boolean', ], 'DeleteMarkerEntry' => [ 'type' => 'structure', 'members' => [ 'Owner' => [ 'shape' => 'Owner', ], 'Key' => [ 'shape' => 'ObjectKey', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', ], 'IsLatest' => [ 'shape' => 'IsLatest', ], 'LastModified' => [ 'shape' => 'LastModified', ], ], ], 'DeleteMarkerReplication' => [ 'type' => 'structure', 'members' => [ 'Status' => [ 'shape' => 'DeleteMarkerReplicationStatus', ], ], ], 'DeleteMarkerReplicationStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'DeleteMarkerVersionId' => [ 'type' => 'string', ], 'DeleteMarkers' => [ 'type' => 'list', 'member' => [ 'shape' => 'DeleteMarkerEntry', ], 'flattened' => true, ], 'DeleteObjectAnnotationOutput' => [ 'type' => 'structure', 'members' => [ 'ObjectVersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-object-version-id', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'DeleteObjectAnnotationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'AnnotationName', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'AnnotationName' => [ 'shape' => 'AnnotationName', 'location' => 'querystring', 'locationName' => 'annotationName', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ObjectIfMatch' => [ 'shape' => 'ObjectIfMatch', 'location' => 'header', 'locationName' => 'x-amz-object-if-match', ], ], ], 'DeleteObjectOutput' => [ 'type' => 'structure', 'members' => [ 'DeleteMarker' => [ 'shape' => 'DeleteMarker', 'location' => 'header', 'locationName' => 'x-amz-delete-marker', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'DeleteObjectRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'MFA' => [ 'shape' => 'MFA', 'location' => 'header', 'locationName' => 'x-amz-mfa', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'BypassGovernanceRetention' => [ 'shape' => 'BypassGovernanceRetention', 'location' => 'header', 'locationName' => 'x-amz-bypass-governance-retention', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'IfMatch' => [ 'shape' => 'IfMatch', 'location' => 'header', 'locationName' => 'If-Match', ], 'IfMatchLastModifiedTime' => [ 'shape' => 'IfMatchLastModifiedTime', 'location' => 'header', 'locationName' => 'x-amz-if-match-last-modified-time', ], 'IfMatchSize' => [ 'shape' => 'IfMatchSize', 'location' => 'header', 'locationName' => 'x-amz-if-match-size', ], ], ], 'DeleteObjectTaggingOutput' => [ 'type' => 'structure', 'members' => [ 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], ], ], 'DeleteObjectTaggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeleteObjectsOutput' => [ 'type' => 'structure', 'members' => [ 'Deleted' => [ 'shape' => 'DeletedObjects', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'Errors' => [ 'shape' => 'Errors', 'locationName' => 'Error', ], ], ], 'DeleteObjectsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Delete', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Delete' => [ 'shape' => 'Delete', 'locationName' => 'Delete', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'MFA' => [ 'shape' => 'MFA', 'location' => 'header', 'locationName' => 'x-amz-mfa', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'BypassGovernanceRetention' => [ 'shape' => 'BypassGovernanceRetention', 'location' => 'header', 'locationName' => 'x-amz-bypass-governance-retention', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], ], 'payload' => 'Delete', ], 'DeletePublicAccessBlockRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'DeletedObject' => [ 'type' => 'structure', 'members' => [ 'Key' => [ 'shape' => 'ObjectKey', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', ], 'DeleteMarker' => [ 'shape' => 'DeleteMarker', ], 'DeleteMarkerVersionId' => [ 'shape' => 'DeleteMarkerVersionId', ], ], ], 'DeletedObjects' => [ 'type' => 'list', 'member' => [ 'shape' => 'DeletedObject', ], 'flattened' => true, ], 'Delimiter' => [ 'type' => 'string', ], 'Description' => [ 'type' => 'string', ], 'Destination' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', ], 'Account' => [ 'shape' => 'AccountId', ], 'StorageClass' => [ 'shape' => 'StorageClass', ], 'AccessControlTranslation' => [ 'shape' => 'AccessControlTranslation', ], 'EncryptionConfiguration' => [ 'shape' => 'EncryptionConfiguration', ], 'ReplicationTime' => [ 'shape' => 'ReplicationTime', ], 'Metrics' => [ 'shape' => 'Metrics', ], ], ], 'DestinationResult' => [ 'type' => 'structure', 'members' => [ 'TableBucketType' => [ 'shape' => 'S3TablesBucketType', ], 'TableBucketArn' => [ 'shape' => 'S3TablesBucketArn', ], 'TableNamespace' => [ 'shape' => 'S3TablesNamespace', ], ], ], 'DirectoryBucketToken' => [ 'type' => 'string', 'max' => 1024, 'min' => 0, ], 'DisplayName' => [ 'type' => 'string', ], 'ETag' => [ 'type' => 'string', ], 'EmailAddress' => [ 'type' => 'string', ], 'EnableRequestProgress' => [ 'type' => 'boolean', 'box' => true, ], 'EncodingType' => [ 'type' => 'string', 'enum' => [ 'url', ], ], 'Encryption' => [ 'type' => 'structure', 'required' => [ 'EncryptionType', ], 'members' => [ 'EncryptionType' => [ 'shape' => 'ServerSideEncryption', ], 'KMSKeyId' => [ 'shape' => 'SSEKMSKeyId', ], 'KMSContext' => [ 'shape' => 'KMSContext', ], ], ], 'EncryptionConfiguration' => [ 'type' => 'structure', 'members' => [ 'ReplicaKmsKeyID' => [ 'shape' => 'ReplicaKmsKeyID', ], ], ], 'EncryptionType' => [ 'type' => 'string', 'enum' => [ 'NONE', 'SSE-C', ], ], 'EncryptionTypeList' => [ 'type' => 'list', 'member' => [ 'shape' => 'EncryptionType', 'locationName' => 'EncryptionType', ], 'flattened' => true, ], 'EncryptionTypeMismatch' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'End' => [ 'type' => 'long', 'box' => true, ], 'EndEvent' => [ 'type' => 'structure', 'members' => [], 'event' => true, ], 'Error' => [ 'type' => 'structure', 'members' => [ 'Key' => [ 'shape' => 'ObjectKey', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', ], 'Code' => [ 'shape' => 'Code', ], 'Message' => [ 'shape' => 'Message', ], ], ], 'ErrorCode' => [ 'type' => 'string', ], 'ErrorDetails' => [ 'type' => 'structure', 'members' => [ 'ErrorCode' => [ 'shape' => 'ErrorCode', ], 'ErrorMessage' => [ 'shape' => 'ErrorMessage', ], ], ], 'ErrorDocument' => [ 'type' => 'structure', 'required' => [ 'Key', ], 'members' => [ 'Key' => [ 'shape' => 'ObjectKey', ], ], ], 'ErrorMessage' => [ 'type' => 'string', ], 'Errors' => [ 'type' => 'list', 'member' => [ 'shape' => 'Error', ], 'flattened' => true, ], 'Event' => [ 'type' => 'string', 'enum' => [ 's3:ReducedRedundancyLostObject', 's3:ObjectCreated:*', 's3:ObjectCreated:Put', 's3:ObjectCreated:Post', 's3:ObjectCreated:Copy', 's3:ObjectCreated:CompleteMultipartUpload', 's3:ObjectRemoved:*', 's3:ObjectRemoved:Delete', 's3:ObjectRemoved:DeleteMarkerCreated', 's3:ObjectRestore:*', 's3:ObjectRestore:Post', 's3:ObjectRestore:Completed', 's3:Replication:*', 's3:Replication:OperationFailedReplication', 's3:Replication:OperationNotTracked', 's3:Replication:OperationMissedThreshold', 's3:Replication:OperationReplicatedAfterThreshold', 's3:ObjectRestore:Delete', 's3:LifecycleTransition', 's3:IntelligentTiering', 's3:ObjectAcl:Put', 's3:LifecycleExpiration:*', 's3:LifecycleExpiration:Delete', 's3:LifecycleExpiration:DeleteMarkerCreated', 's3:ObjectTagging:*', 's3:ObjectTagging:Put', 's3:ObjectTagging:Delete', 's3:ObjectAnnotation:*', 's3:ObjectAnnotation:Put', 's3:ObjectAnnotation:Delete', ], ], 'EventBridgeConfiguration' => [ 'type' => 'structure', 'members' => [], ], 'EventList' => [ 'type' => 'list', 'member' => [ 'shape' => 'Event', ], 'flattened' => true, ], 'ExistingObjectReplication' => [ 'type' => 'structure', 'required' => [ 'Status', ], 'members' => [ 'Status' => [ 'shape' => 'ExistingObjectReplicationStatus', ], ], ], 'ExistingObjectReplicationStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'Expiration' => [ 'type' => 'string', ], 'ExpirationState' => [ 'type' => 'string', 'enum' => [ 'ENABLED', 'DISABLED', ], ], 'ExpirationStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'ExpiredObjectDeleteMarker' => [ 'type' => 'boolean', 'box' => true, ], 'Expires' => [ 'type' => 'timestamp', ], 'ExposeHeader' => [ 'type' => 'string', ], 'ExposeHeaders' => [ 'type' => 'list', 'member' => [ 'shape' => 'ExposeHeader', ], 'flattened' => true, ], 'Expression' => [ 'type' => 'string', ], 'ExpressionType' => [ 'type' => 'string', 'enum' => [ 'SQL', ], ], 'FetchOwner' => [ 'type' => 'boolean', 'box' => true, ], 'FieldDelimiter' => [ 'type' => 'string', ], 'FileHeaderInfo' => [ 'type' => 'string', 'enum' => [ 'USE', 'IGNORE', 'NONE', ], ], 'FilterRule' => [ 'type' => 'structure', 'members' => [ 'Name' => [ 'shape' => 'FilterRuleName', ], 'Value' => [ 'shape' => 'FilterRuleValue', ], ], ], 'FilterRuleList' => [ 'type' => 'list', 'member' => [ 'shape' => 'FilterRule', ], 'flattened' => true, ], 'FilterRuleName' => [ 'type' => 'string', 'enum' => [ 'prefix', 'suffix', ], ], 'FilterRuleValue' => [ 'type' => 'string', ], 'GetBucketAbacOutput' => [ 'type' => 'structure', 'members' => [ 'AbacStatus' => [ 'shape' => 'AbacStatus', ], ], 'payload' => 'AbacStatus', ], 'GetBucketAbacRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketAccelerateConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'Status' => [ 'shape' => 'BucketAccelerateStatus', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'GetBucketAccelerateConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], ], ], 'GetBucketAclOutput' => [ 'type' => 'structure', 'members' => [ 'Owner' => [ 'shape' => 'Owner', ], 'Grants' => [ 'shape' => 'Grants', 'locationName' => 'AccessControlList', ], ], ], 'GetBucketAclRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketAnalyticsConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'AnalyticsConfiguration' => [ 'shape' => 'AnalyticsConfiguration', ], ], 'payload' => 'AnalyticsConfiguration', ], 'GetBucketAnalyticsConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'AnalyticsId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketCorsOutput' => [ 'type' => 'structure', 'members' => [ 'CORSRules' => [ 'shape' => 'CORSRules', 'locationName' => 'CORSRule', ], ], ], 'GetBucketCorsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketEncryptionOutput' => [ 'type' => 'structure', 'members' => [ 'ServerSideEncryptionConfiguration' => [ 'shape' => 'ServerSideEncryptionConfiguration', ], ], 'payload' => 'ServerSideEncryptionConfiguration', ], 'GetBucketEncryptionRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketIntelligentTieringConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'IntelligentTieringConfiguration' => [ 'shape' => 'IntelligentTieringConfiguration', ], ], 'payload' => 'IntelligentTieringConfiguration', ], 'GetBucketIntelligentTieringConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'IntelligentTieringId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketInventoryConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'InventoryConfiguration' => [ 'shape' => 'InventoryConfiguration', ], ], 'payload' => 'InventoryConfiguration', ], 'GetBucketInventoryConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'InventoryId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketLifecycleConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'Rules' => [ 'shape' => 'LifecycleRules', 'locationName' => 'Rule', ], 'TransitionDefaultMinimumObjectSize' => [ 'shape' => 'TransitionDefaultMinimumObjectSize', 'location' => 'header', 'locationName' => 'x-amz-transition-default-minimum-object-size', ], ], ], 'GetBucketLifecycleConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketLifecycleOutput' => [ 'type' => 'structure', 'members' => [ 'Rules' => [ 'shape' => 'Rules', 'locationName' => 'Rule', ], ], ], 'GetBucketLifecycleRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketLocationOutput' => [ 'type' => 'structure', 'members' => [ 'LocationConstraint' => [ 'shape' => 'BucketLocationConstraint', ], ], ], 'GetBucketLocationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketLoggingOutput' => [ 'type' => 'structure', 'members' => [ 'LoggingEnabled' => [ 'shape' => 'LoggingEnabled', ], ], ], 'GetBucketLoggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketMetadataConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'GetBucketMetadataConfigurationResult' => [ 'shape' => 'GetBucketMetadataConfigurationResult', ], ], 'payload' => 'GetBucketMetadataConfigurationResult', ], 'GetBucketMetadataConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketMetadataConfigurationResult' => [ 'type' => 'structure', 'required' => [ 'MetadataConfigurationResult', ], 'members' => [ 'MetadataConfigurationResult' => [ 'shape' => 'MetadataConfigurationResult', ], ], ], 'GetBucketMetadataTableConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'GetBucketMetadataTableConfigurationResult' => [ 'shape' => 'GetBucketMetadataTableConfigurationResult', ], ], 'payload' => 'GetBucketMetadataTableConfigurationResult', ], 'GetBucketMetadataTableConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketMetadataTableConfigurationResult' => [ 'type' => 'structure', 'required' => [ 'MetadataTableConfigurationResult', 'Status', ], 'members' => [ 'MetadataTableConfigurationResult' => [ 'shape' => 'MetadataTableConfigurationResult', ], 'Status' => [ 'shape' => 'MetadataTableStatus', ], 'Error' => [ 'shape' => 'ErrorDetails', ], ], ], 'GetBucketMetricsConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'MetricsConfiguration' => [ 'shape' => 'MetricsConfiguration', ], ], 'payload' => 'MetricsConfiguration', ], 'GetBucketMetricsConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'MetricsId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketNotificationConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketOwnershipControlsOutput' => [ 'type' => 'structure', 'members' => [ 'OwnershipControls' => [ 'shape' => 'OwnershipControls', ], ], 'payload' => 'OwnershipControls', ], 'GetBucketOwnershipControlsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketPolicyOutput' => [ 'type' => 'structure', 'members' => [ 'Policy' => [ 'shape' => 'Policy', ], ], 'payload' => 'Policy', ], 'GetBucketPolicyRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketPolicyStatusOutput' => [ 'type' => 'structure', 'members' => [ 'PolicyStatus' => [ 'shape' => 'PolicyStatus', ], ], 'payload' => 'PolicyStatus', ], 'GetBucketPolicyStatusRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketReplicationOutput' => [ 'type' => 'structure', 'members' => [ 'ReplicationConfiguration' => [ 'shape' => 'ReplicationConfiguration', ], ], 'payload' => 'ReplicationConfiguration', ], 'GetBucketReplicationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketRequestPaymentOutput' => [ 'type' => 'structure', 'members' => [ 'Payer' => [ 'shape' => 'Payer', ], ], ], 'GetBucketRequestPaymentRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketTaggingOutput' => [ 'type' => 'structure', 'required' => [ 'TagSet', ], 'members' => [ 'TagSet' => [ 'shape' => 'TagSet', ], ], ], 'GetBucketTaggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketVersioningOutput' => [ 'type' => 'structure', 'members' => [ 'Status' => [ 'shape' => 'BucketVersioningStatus', ], 'MFADelete' => [ 'shape' => 'MFADeleteStatus', 'locationName' => 'MfaDelete', ], ], ], 'GetBucketVersioningRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetBucketWebsiteOutput' => [ 'type' => 'structure', 'members' => [ 'RedirectAllRequestsTo' => [ 'shape' => 'RedirectAllRequestsTo', ], 'IndexDocument' => [ 'shape' => 'IndexDocument', ], 'ErrorDocument' => [ 'shape' => 'ErrorDocument', ], 'RoutingRules' => [ 'shape' => 'RoutingRules', ], ], ], 'GetBucketWebsiteRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetObjectAclOutput' => [ 'type' => 'structure', 'members' => [ 'Owner' => [ 'shape' => 'Owner', ], 'Grants' => [ 'shape' => 'Grants', 'locationName' => 'AccessControlList', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'GetObjectAclRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetObjectAnnotationOutput' => [ 'type' => 'structure', 'members' => [ 'AnnotationPayload' => [ 'shape' => 'AnnotationPayload', 'streaming' => true, ], 'ObjectVersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-object-version-id', ], 'LastModified' => [ 'shape' => 'LastModified', 'location' => 'header', 'locationName' => 'Last-Modified', ], 'ContentLength' => [ 'shape' => 'ContentLength', 'location' => 'header', 'locationName' => 'Content-Length', ], 'ETag' => [ 'shape' => 'ETag', 'location' => 'header', 'locationName' => 'ETag', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'ReplicationStatus' => [ 'shape' => 'ReplicationStatus', 'location' => 'header', 'locationName' => 'x-amz-replication-status', ], ], 'payload' => 'AnnotationPayload', ], 'GetObjectAnnotationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'AnnotationName', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'AnnotationName' => [ 'shape' => 'AnnotationName', 'location' => 'querystring', 'locationName' => 'annotationName', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ChecksumMode' => [ 'shape' => 'ChecksumMode', 'location' => 'header', 'locationName' => 'x-amz-checksum-mode', ], ], ], 'GetObjectAttributesOutput' => [ 'type' => 'structure', 'members' => [ 'DeleteMarker' => [ 'shape' => 'DeleteMarker', 'location' => 'header', 'locationName' => 'x-amz-delete-marker', ], 'LastModified' => [ 'shape' => 'LastModified', 'location' => 'header', 'locationName' => 'Last-Modified', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'ETag' => [ 'shape' => 'ETag', ], 'Checksum' => [ 'shape' => 'Checksum', ], 'ObjectParts' => [ 'shape' => 'GetObjectAttributesParts', ], 'StorageClass' => [ 'shape' => 'StorageClass', ], 'ObjectSize' => [ 'shape' => 'ObjectSize', ], ], ], 'GetObjectAttributesParts' => [ 'type' => 'structure', 'members' => [ 'TotalPartsCount' => [ 'shape' => 'PartsCount', 'locationName' => 'PartsCount', ], 'PartNumberMarker' => [ 'shape' => 'PartNumberMarker', ], 'NextPartNumberMarker' => [ 'shape' => 'NextPartNumberMarker', ], 'MaxParts' => [ 'shape' => 'MaxParts', ], 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'Parts' => [ 'shape' => 'PartsList', 'locationName' => 'Part', ], ], ], 'GetObjectAttributesRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'ObjectAttributes', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'MaxParts' => [ 'shape' => 'MaxParts', 'location' => 'header', 'locationName' => 'x-amz-max-parts', ], 'PartNumberMarker' => [ 'shape' => 'PartNumberMarker', 'location' => 'header', 'locationName' => 'x-amz-part-number-marker', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ObjectAttributes' => [ 'shape' => 'ObjectAttributesList', 'location' => 'header', 'locationName' => 'x-amz-object-attributes', ], ], ], 'GetObjectLegalHoldOutput' => [ 'type' => 'structure', 'members' => [ 'LegalHold' => [ 'shape' => 'ObjectLockLegalHold', 'locationName' => 'LegalHold', ], ], 'payload' => 'LegalHold', ], 'GetObjectLegalHoldRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetObjectLockConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'ObjectLockConfiguration' => [ 'shape' => 'ObjectLockConfiguration', ], ], 'payload' => 'ObjectLockConfiguration', ], 'GetObjectLockConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetObjectOutput' => [ 'type' => 'structure', 'members' => [ 'Body' => [ 'shape' => 'Body', 'streaming' => true, ], 'DeleteMarker' => [ 'shape' => 'DeleteMarker', 'location' => 'header', 'locationName' => 'x-amz-delete-marker', ], 'AcceptRanges' => [ 'shape' => 'AcceptRanges', 'location' => 'header', 'locationName' => 'accept-ranges', ], 'Expiration' => [ 'shape' => 'Expiration', 'location' => 'header', 'locationName' => 'x-amz-expiration', ], 'Restore' => [ 'shape' => 'Restore', 'location' => 'header', 'locationName' => 'x-amz-restore', ], 'LastModified' => [ 'shape' => 'LastModified', 'location' => 'header', 'locationName' => 'Last-Modified', ], 'ContentLength' => [ 'shape' => 'ContentLength', 'location' => 'header', 'locationName' => 'Content-Length', ], 'ETag' => [ 'shape' => 'ETag', 'location' => 'header', 'locationName' => 'ETag', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], 'MissingMeta' => [ 'shape' => 'MissingMeta', 'location' => 'header', 'locationName' => 'x-amz-missing-meta', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'CacheControl' => [ 'shape' => 'CacheControl', 'location' => 'header', 'locationName' => 'Cache-Control', ], 'ContentDisposition' => [ 'shape' => 'ContentDisposition', 'location' => 'header', 'locationName' => 'Content-Disposition', ], 'ContentEncoding' => [ 'shape' => 'ContentEncoding', 'location' => 'header', 'locationName' => 'Content-Encoding', ], 'ContentLanguage' => [ 'shape' => 'ContentLanguage', 'location' => 'header', 'locationName' => 'Content-Language', ], 'ContentRange' => [ 'shape' => 'ContentRange', 'location' => 'header', 'locationName' => 'Content-Range', ], 'ContentType' => [ 'shape' => 'ContentType', 'location' => 'header', 'locationName' => 'Content-Type', ], 'Expires' => [ 'shape' => 'Expires', 'location' => 'header', 'locationName' => 'Expires', ], 'WebsiteRedirectLocation' => [ 'shape' => 'WebsiteRedirectLocation', 'location' => 'header', 'locationName' => 'x-amz-website-redirect-location', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'Metadata' => [ 'shape' => 'Metadata', 'location' => 'headers', 'locationName' => 'x-amz-meta-', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'StorageClass' => [ 'shape' => 'StorageClass', 'location' => 'header', 'locationName' => 'x-amz-storage-class', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'ReplicationStatus' => [ 'shape' => 'ReplicationStatus', 'location' => 'header', 'locationName' => 'x-amz-replication-status', ], 'PartsCount' => [ 'shape' => 'PartsCount', 'location' => 'header', 'locationName' => 'x-amz-mp-parts-count', ], 'TagCount' => [ 'shape' => 'TagCount', 'location' => 'header', 'locationName' => 'x-amz-tagging-count', ], 'ObjectLockMode' => [ 'shape' => 'ObjectLockMode', 'location' => 'header', 'locationName' => 'x-amz-object-lock-mode', ], 'ObjectLockRetainUntilDate' => [ 'shape' => 'ObjectLockRetainUntilDate', 'location' => 'header', 'locationName' => 'x-amz-object-lock-retain-until-date', ], 'ObjectLockLegalHoldStatus' => [ 'shape' => 'ObjectLockLegalHoldStatus', 'location' => 'header', 'locationName' => 'x-amz-object-lock-legal-hold', ], ], 'payload' => 'Body', ], 'GetObjectRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'IfMatch' => [ 'shape' => 'IfMatch', 'location' => 'header', 'locationName' => 'If-Match', ], 'IfModifiedSince' => [ 'shape' => 'IfModifiedSince', 'location' => 'header', 'locationName' => 'If-Modified-Since', ], 'IfNoneMatch' => [ 'shape' => 'IfNoneMatch', 'location' => 'header', 'locationName' => 'If-None-Match', ], 'IfUnmodifiedSince' => [ 'shape' => 'IfUnmodifiedSince', 'location' => 'header', 'locationName' => 'If-Unmodified-Since', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'Range' => [ 'shape' => 'Range', 'location' => 'header', 'locationName' => 'Range', ], 'ResponseCacheControl' => [ 'shape' => 'ResponseCacheControl', 'location' => 'querystring', 'locationName' => 'response-cache-control', ], 'ResponseContentDisposition' => [ 'shape' => 'ResponseContentDisposition', 'location' => 'querystring', 'locationName' => 'response-content-disposition', ], 'ResponseContentEncoding' => [ 'shape' => 'ResponseContentEncoding', 'location' => 'querystring', 'locationName' => 'response-content-encoding', ], 'ResponseContentLanguage' => [ 'shape' => 'ResponseContentLanguage', 'location' => 'querystring', 'locationName' => 'response-content-language', ], 'ResponseContentType' => [ 'shape' => 'ResponseContentType', 'location' => 'querystring', 'locationName' => 'response-content-type', ], 'ResponseExpires' => [ 'shape' => 'ResponseExpires', 'location' => 'querystring', 'locationName' => 'response-expires', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'PartNumber' => [ 'shape' => 'PartNumber', 'location' => 'querystring', 'locationName' => 'partNumber', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ChecksumMode' => [ 'shape' => 'ChecksumMode', 'location' => 'header', 'locationName' => 'x-amz-checksum-mode', ], ], ], 'GetObjectResponseStatusCode' => [ 'type' => 'integer', 'box' => true, ], 'GetObjectRetentionOutput' => [ 'type' => 'structure', 'members' => [ 'Retention' => [ 'shape' => 'ObjectLockRetention', 'locationName' => 'Retention', ], ], 'payload' => 'Retention', ], 'GetObjectRetentionRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetObjectTaggingOutput' => [ 'type' => 'structure', 'required' => [ 'TagSet', ], 'members' => [ 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'TagSet' => [ 'shape' => 'TagSet', ], ], ], 'GetObjectTaggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], ], ], 'GetObjectTorrentOutput' => [ 'type' => 'structure', 'members' => [ 'Body' => [ 'shape' => 'Body', 'streaming' => true, ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], 'payload' => 'Body', ], 'GetObjectTorrentRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GetPublicAccessBlockOutput' => [ 'type' => 'structure', 'members' => [ 'PublicAccessBlockConfiguration' => [ 'shape' => 'PublicAccessBlockConfiguration', ], ], 'payload' => 'PublicAccessBlockConfiguration', ], 'GetPublicAccessBlockRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'GlacierJobParameters' => [ 'type' => 'structure', 'required' => [ 'Tier', ], 'members' => [ 'Tier' => [ 'shape' => 'Tier', ], ], ], 'Grant' => [ 'type' => 'structure', 'members' => [ 'Grantee' => [ 'shape' => 'Grantee', ], 'Permission' => [ 'shape' => 'Permission', ], ], ], 'GrantFullControl' => [ 'type' => 'string', ], 'GrantRead' => [ 'type' => 'string', ], 'GrantReadACP' => [ 'type' => 'string', ], 'GrantWrite' => [ 'type' => 'string', ], 'GrantWriteACP' => [ 'type' => 'string', ], 'Grantee' => [ 'type' => 'structure', 'required' => [ 'Type', ], 'members' => [ 'DisplayName' => [ 'shape' => 'DisplayName', ], 'EmailAddress' => [ 'shape' => 'EmailAddress', ], 'ID' => [ 'shape' => 'ID', ], 'Type' => [ 'shape' => 'Type', 'locationName' => 'xsi:type', 'xmlAttribute' => true, ], 'URI' => [ 'shape' => 'URI', ], ], 'xmlNamespace' => [ 'prefix' => 'xsi', 'uri' => 'http://www.w3.org/2001/XMLSchema-instance', ], ], 'Grants' => [ 'type' => 'list', 'member' => [ 'shape' => 'Grant', 'locationName' => 'Grant', ], ], 'HeadBucketOutput' => [ 'type' => 'structure', 'members' => [ 'BucketArn' => [ 'shape' => 'S3RegionalOrS3ExpressBucketArnString', 'location' => 'header', 'locationName' => 'x-amz-bucket-arn', ], 'BucketLocationType' => [ 'shape' => 'LocationType', 'location' => 'header', 'locationName' => 'x-amz-bucket-location-type', ], 'BucketLocationName' => [ 'shape' => 'BucketLocationName', 'location' => 'header', 'locationName' => 'x-amz-bucket-location-name', ], 'BucketRegion' => [ 'shape' => 'Region', 'location' => 'header', 'locationName' => 'x-amz-bucket-region', ], 'AccessPointAlias' => [ 'shape' => 'AccessPointAlias', 'location' => 'header', 'locationName' => 'x-amz-access-point-alias', ], ], ], 'HeadBucketRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'HeadObjectOutput' => [ 'type' => 'structure', 'members' => [ 'DeleteMarker' => [ 'shape' => 'DeleteMarker', 'location' => 'header', 'locationName' => 'x-amz-delete-marker', ], 'AcceptRanges' => [ 'shape' => 'AcceptRanges', 'location' => 'header', 'locationName' => 'accept-ranges', ], 'Expiration' => [ 'shape' => 'Expiration', 'location' => 'header', 'locationName' => 'x-amz-expiration', ], 'Restore' => [ 'shape' => 'Restore', 'location' => 'header', 'locationName' => 'x-amz-restore', ], 'ArchiveStatus' => [ 'shape' => 'ArchiveStatus', 'location' => 'header', 'locationName' => 'x-amz-archive-status', ], 'LastModified' => [ 'shape' => 'LastModified', 'location' => 'header', 'locationName' => 'Last-Modified', ], 'ContentLength' => [ 'shape' => 'ContentLength', 'location' => 'header', 'locationName' => 'Content-Length', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], 'ETag' => [ 'shape' => 'ETag', 'location' => 'header', 'locationName' => 'ETag', ], 'MissingMeta' => [ 'shape' => 'MissingMeta', 'location' => 'header', 'locationName' => 'x-amz-missing-meta', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'CacheControl' => [ 'shape' => 'CacheControl', 'location' => 'header', 'locationName' => 'Cache-Control', ], 'ContentDisposition' => [ 'shape' => 'ContentDisposition', 'location' => 'header', 'locationName' => 'Content-Disposition', ], 'ContentEncoding' => [ 'shape' => 'ContentEncoding', 'location' => 'header', 'locationName' => 'Content-Encoding', ], 'ContentLanguage' => [ 'shape' => 'ContentLanguage', 'location' => 'header', 'locationName' => 'Content-Language', ], 'ContentType' => [ 'shape' => 'ContentType', 'location' => 'header', 'locationName' => 'Content-Type', ], 'ContentRange' => [ 'shape' => 'ContentRange', 'location' => 'header', 'locationName' => 'Content-Range', ], 'Expires' => [ 'shape' => 'Expires', 'location' => 'header', 'locationName' => 'Expires', ], 'WebsiteRedirectLocation' => [ 'shape' => 'WebsiteRedirectLocation', 'location' => 'header', 'locationName' => 'x-amz-website-redirect-location', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'Metadata' => [ 'shape' => 'Metadata', 'location' => 'headers', 'locationName' => 'x-amz-meta-', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'StorageClass' => [ 'shape' => 'StorageClass', 'location' => 'header', 'locationName' => 'x-amz-storage-class', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'ReplicationStatus' => [ 'shape' => 'ReplicationStatus', 'location' => 'header', 'locationName' => 'x-amz-replication-status', ], 'PartsCount' => [ 'shape' => 'PartsCount', 'location' => 'header', 'locationName' => 'x-amz-mp-parts-count', ], 'TagCount' => [ 'shape' => 'TagCount', 'location' => 'header', 'locationName' => 'x-amz-tagging-count', ], 'ObjectLockMode' => [ 'shape' => 'ObjectLockMode', 'location' => 'header', 'locationName' => 'x-amz-object-lock-mode', ], 'ObjectLockRetainUntilDate' => [ 'shape' => 'ObjectLockRetainUntilDate', 'location' => 'header', 'locationName' => 'x-amz-object-lock-retain-until-date', ], 'ObjectLockLegalHoldStatus' => [ 'shape' => 'ObjectLockLegalHoldStatus', 'location' => 'header', 'locationName' => 'x-amz-object-lock-legal-hold', ], ], ], 'HeadObjectRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'IfMatch' => [ 'shape' => 'IfMatch', 'location' => 'header', 'locationName' => 'If-Match', ], 'IfModifiedSince' => [ 'shape' => 'IfModifiedSince', 'location' => 'header', 'locationName' => 'If-Modified-Since', ], 'IfNoneMatch' => [ 'shape' => 'IfNoneMatch', 'location' => 'header', 'locationName' => 'If-None-Match', ], 'IfUnmodifiedSince' => [ 'shape' => 'IfUnmodifiedSince', 'location' => 'header', 'locationName' => 'If-Unmodified-Since', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'Range' => [ 'shape' => 'Range', 'location' => 'header', 'locationName' => 'Range', ], 'ResponseCacheControl' => [ 'shape' => 'ResponseCacheControl', 'location' => 'querystring', 'locationName' => 'response-cache-control', ], 'ResponseContentDisposition' => [ 'shape' => 'ResponseContentDisposition', 'location' => 'querystring', 'locationName' => 'response-content-disposition', ], 'ResponseContentEncoding' => [ 'shape' => 'ResponseContentEncoding', 'location' => 'querystring', 'locationName' => 'response-content-encoding', ], 'ResponseContentLanguage' => [ 'shape' => 'ResponseContentLanguage', 'location' => 'querystring', 'locationName' => 'response-content-language', ], 'ResponseContentType' => [ 'shape' => 'ResponseContentType', 'location' => 'querystring', 'locationName' => 'response-content-type', ], 'ResponseExpires' => [ 'shape' => 'ResponseExpires', 'location' => 'querystring', 'locationName' => 'response-expires', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'PartNumber' => [ 'shape' => 'PartNumber', 'location' => 'querystring', 'locationName' => 'partNumber', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ChecksumMode' => [ 'shape' => 'ChecksumMode', 'location' => 'header', 'locationName' => 'x-amz-checksum-mode', ], ], ], 'HostName' => [ 'type' => 'string', ], 'HttpErrorCodeReturnedEquals' => [ 'type' => 'string', ], 'HttpRedirectCode' => [ 'type' => 'string', ], 'ID' => [ 'type' => 'string', ], 'IdempotencyParameterMismatch' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'IfMatch' => [ 'type' => 'string', ], 'IfMatchInitiatedTime' => [ 'type' => 'timestamp', 'timestampFormat' => 'rfc822', ], 'IfMatchLastModifiedTime' => [ 'type' => 'timestamp', 'timestampFormat' => 'rfc822', ], 'IfMatchSize' => [ 'type' => 'long', 'box' => true, ], 'IfModifiedSince' => [ 'type' => 'timestamp', ], 'IfNoneMatch' => [ 'type' => 'string', ], 'IfUnmodifiedSince' => [ 'type' => 'timestamp', ], 'IndexDocument' => [ 'type' => 'structure', 'required' => [ 'Suffix', ], 'members' => [ 'Suffix' => [ 'shape' => 'Suffix', ], ], ], 'Initiated' => [ 'type' => 'timestamp', ], 'Initiator' => [ 'type' => 'structure', 'members' => [ 'ID' => [ 'shape' => 'ID', ], 'DisplayName' => [ 'shape' => 'DisplayName', ], ], ], 'InputSerialization' => [ 'type' => 'structure', 'members' => [ 'CSV' => [ 'shape' => 'CSVInput', ], 'CompressionType' => [ 'shape' => 'CompressionType', ], 'JSON' => [ 'shape' => 'JSONInput', ], 'Parquet' => [ 'shape' => 'ParquetInput', ], ], ], 'IntelligentTieringAccessTier' => [ 'type' => 'string', 'enum' => [ 'ARCHIVE_ACCESS', 'DEEP_ARCHIVE_ACCESS', ], ], 'IntelligentTieringAndOperator' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tags' => [ 'shape' => 'TagSet', 'flattened' => true, 'locationName' => 'Tag', ], ], ], 'IntelligentTieringConfiguration' => [ 'type' => 'structure', 'required' => [ 'Id', 'Status', 'Tierings', ], 'members' => [ 'Id' => [ 'shape' => 'IntelligentTieringId', ], 'Filter' => [ 'shape' => 'IntelligentTieringFilter', ], 'Status' => [ 'shape' => 'IntelligentTieringStatus', ], 'Tierings' => [ 'shape' => 'TieringList', 'locationName' => 'Tiering', ], ], ], 'IntelligentTieringConfigurationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'IntelligentTieringConfiguration', ], 'flattened' => true, ], 'IntelligentTieringDays' => [ 'type' => 'integer', 'box' => true, ], 'IntelligentTieringFilter' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tag' => [ 'shape' => 'Tag', ], 'And' => [ 'shape' => 'IntelligentTieringAndOperator', ], ], ], 'IntelligentTieringId' => [ 'type' => 'string', ], 'IntelligentTieringStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'InvalidAnnotationName' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidObjectState' => [ 'type' => 'structure', 'members' => [ 'StorageClass' => [ 'shape' => 'StorageClass', ], 'AccessTier' => [ 'shape' => 'IntelligentTieringAccessTier', ], ], 'error' => [ 'httpStatusCode' => 403, ], 'exception' => true, ], 'InvalidPrefix' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidRequest' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidWriteOffset' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InventoryConfiguration' => [ 'type' => 'structure', 'required' => [ 'Destination', 'IsEnabled', 'Id', 'IncludedObjectVersions', 'Schedule', ], 'members' => [ 'Destination' => [ 'shape' => 'InventoryDestination', ], 'IsEnabled' => [ 'shape' => 'IsEnabled', ], 'Filter' => [ 'shape' => 'InventoryFilter', ], 'Id' => [ 'shape' => 'InventoryId', ], 'IncludedObjectVersions' => [ 'shape' => 'InventoryIncludedObjectVersions', ], 'OptionalFields' => [ 'shape' => 'InventoryOptionalFields', ], 'Schedule' => [ 'shape' => 'InventorySchedule', ], ], ], 'InventoryConfigurationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'InventoryConfiguration', ], 'flattened' => true, ], 'InventoryConfigurationState' => [ 'type' => 'string', 'enum' => [ 'ENABLED', 'DISABLED', ], ], 'InventoryDestination' => [ 'type' => 'structure', 'required' => [ 'S3BucketDestination', ], 'members' => [ 'S3BucketDestination' => [ 'shape' => 'InventoryS3BucketDestination', ], ], ], 'InventoryEncryption' => [ 'type' => 'structure', 'members' => [ 'SSES3' => [ 'shape' => 'SSES3', 'locationName' => 'SSE-S3', ], 'SSEKMS' => [ 'shape' => 'SSEKMS', 'locationName' => 'SSE-KMS', ], ], ], 'InventoryFilter' => [ 'type' => 'structure', 'required' => [ 'Prefix', ], 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], ], ], 'InventoryFormat' => [ 'type' => 'string', 'enum' => [ 'CSV', 'ORC', 'Parquet', ], ], 'InventoryFrequency' => [ 'type' => 'string', 'enum' => [ 'Daily', 'Weekly', ], ], 'InventoryId' => [ 'type' => 'string', ], 'InventoryIncludedObjectVersions' => [ 'type' => 'string', 'enum' => [ 'All', 'Current', ], ], 'InventoryOptionalField' => [ 'type' => 'string', 'enum' => [ 'Size', 'LastModifiedDate', 'StorageClass', 'ETag', 'IsMultipartUploaded', 'ReplicationStatus', 'EncryptionStatus', 'ObjectLockRetainUntilDate', 'ObjectLockMode', 'ObjectLockLegalHoldStatus', 'IntelligentTieringAccessTier', 'BucketKeyStatus', 'ChecksumAlgorithm', 'ObjectAccessControlList', 'ObjectOwner', 'LifecycleExpirationDate', ], ], 'InventoryOptionalFields' => [ 'type' => 'list', 'member' => [ 'shape' => 'InventoryOptionalField', 'locationName' => 'Field', ], ], 'InventoryS3BucketDestination' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Format', ], 'members' => [ 'AccountId' => [ 'shape' => 'AccountId', ], 'Bucket' => [ 'shape' => 'BucketName', ], 'Format' => [ 'shape' => 'InventoryFormat', ], 'Prefix' => [ 'shape' => 'Prefix', ], 'Encryption' => [ 'shape' => 'InventoryEncryption', ], ], ], 'InventorySchedule' => [ 'type' => 'structure', 'required' => [ 'Frequency', ], 'members' => [ 'Frequency' => [ 'shape' => 'InventoryFrequency', ], ], ], 'InventoryTableConfiguration' => [ 'type' => 'structure', 'required' => [ 'ConfigurationState', ], 'members' => [ 'ConfigurationState' => [ 'shape' => 'InventoryConfigurationState', ], 'EncryptionConfiguration' => [ 'shape' => 'MetadataTableEncryptionConfiguration', ], ], ], 'InventoryTableConfigurationResult' => [ 'type' => 'structure', 'required' => [ 'ConfigurationState', ], 'members' => [ 'ConfigurationState' => [ 'shape' => 'InventoryConfigurationState', ], 'TableStatus' => [ 'shape' => 'MetadataTableStatus', ], 'Error' => [ 'shape' => 'ErrorDetails', ], 'TableName' => [ 'shape' => 'S3TablesName', ], 'TableArn' => [ 'shape' => 'S3TablesArn', ], ], ], 'InventoryTableConfigurationUpdates' => [ 'type' => 'structure', 'required' => [ 'ConfigurationState', ], 'members' => [ 'ConfigurationState' => [ 'shape' => 'InventoryConfigurationState', ], 'EncryptionConfiguration' => [ 'shape' => 'MetadataTableEncryptionConfiguration', ], ], ], 'IsEnabled' => [ 'type' => 'boolean', 'box' => true, ], 'IsLatest' => [ 'type' => 'boolean', 'box' => true, ], 'IsPublic' => [ 'type' => 'boolean', 'box' => true, ], 'IsRestoreInProgress' => [ 'type' => 'boolean', 'box' => true, ], 'IsTruncated' => [ 'type' => 'boolean', 'box' => true, ], 'JSONInput' => [ 'type' => 'structure', 'members' => [ 'Type' => [ 'shape' => 'JSONType', ], ], ], 'JSONOutput' => [ 'type' => 'structure', 'members' => [ 'RecordDelimiter' => [ 'shape' => 'RecordDelimiter', ], ], ], 'JSONType' => [ 'type' => 'string', 'enum' => [ 'DOCUMENT', 'LINES', ], ], 'JournalTableConfiguration' => [ 'type' => 'structure', 'required' => [ 'RecordExpiration', ], 'members' => [ 'RecordExpiration' => [ 'shape' => 'RecordExpiration', ], 'EncryptionConfiguration' => [ 'shape' => 'MetadataTableEncryptionConfiguration', ], ], ], 'JournalTableConfigurationResult' => [ 'type' => 'structure', 'required' => [ 'TableStatus', 'TableName', 'RecordExpiration', ], 'members' => [ 'TableStatus' => [ 'shape' => 'MetadataTableStatus', ], 'Error' => [ 'shape' => 'ErrorDetails', ], 'TableName' => [ 'shape' => 'S3TablesName', ], 'TableArn' => [ 'shape' => 'S3TablesArn', ], 'RecordExpiration' => [ 'shape' => 'RecordExpiration', ], ], ], 'JournalTableConfigurationUpdates' => [ 'type' => 'structure', 'required' => [ 'RecordExpiration', ], 'members' => [ 'RecordExpiration' => [ 'shape' => 'RecordExpiration', ], ], ], 'KMSContext' => [ 'type' => 'string', ], 'KeyCount' => [ 'type' => 'integer', ], 'KeyMarker' => [ 'type' => 'string', ], 'KeyPrefixEquals' => [ 'type' => 'string', ], 'KmsKeyArn' => [ 'type' => 'string', ], 'LambdaFunctionArn' => [ 'type' => 'string', ], 'LambdaFunctionConfiguration' => [ 'type' => 'structure', 'required' => [ 'LambdaFunctionArn', 'Events', ], 'members' => [ 'Id' => [ 'shape' => 'NotificationId', ], 'LambdaFunctionArn' => [ 'shape' => 'LambdaFunctionArn', 'locationName' => 'CloudFunction', ], 'Events' => [ 'shape' => 'EventList', 'locationName' => 'Event', ], 'Filter' => [ 'shape' => 'NotificationConfigurationFilter', ], ], ], 'LambdaFunctionConfigurationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'LambdaFunctionConfiguration', ], 'flattened' => true, ], 'LastModified' => [ 'type' => 'timestamp', ], 'LastModifiedTime' => [ 'type' => 'timestamp', 'timestampFormat' => 'rfc822', ], 'LifecycleConfiguration' => [ 'type' => 'structure', 'required' => [ 'Rules', ], 'members' => [ 'Rules' => [ 'shape' => 'Rules', 'locationName' => 'Rule', ], ], ], 'LifecycleExpiration' => [ 'type' => 'structure', 'members' => [ 'Date' => [ 'shape' => 'Date', ], 'Days' => [ 'shape' => 'Days', ], 'ExpiredObjectDeleteMarker' => [ 'shape' => 'ExpiredObjectDeleteMarker', ], ], ], 'LifecycleRule' => [ 'type' => 'structure', 'required' => [ 'Status', ], 'members' => [ 'Expiration' => [ 'shape' => 'LifecycleExpiration', ], 'ID' => [ 'shape' => 'ID', ], 'Prefix' => [ 'shape' => 'Prefix', 'deprecated' => true, ], 'Filter' => [ 'shape' => 'LifecycleRuleFilter', ], 'Status' => [ 'shape' => 'ExpirationStatus', ], 'Transitions' => [ 'shape' => 'TransitionList', 'locationName' => 'Transition', ], 'NoncurrentVersionTransitions' => [ 'shape' => 'NoncurrentVersionTransitionList', 'locationName' => 'NoncurrentVersionTransition', ], 'NoncurrentVersionExpiration' => [ 'shape' => 'NoncurrentVersionExpiration', ], 'AbortIncompleteMultipartUpload' => [ 'shape' => 'AbortIncompleteMultipartUpload', ], ], ], 'LifecycleRuleAndOperator' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tags' => [ 'shape' => 'TagSet', 'flattened' => true, 'locationName' => 'Tag', ], 'ObjectSizeGreaterThan' => [ 'shape' => 'ObjectSizeGreaterThanBytes', ], 'ObjectSizeLessThan' => [ 'shape' => 'ObjectSizeLessThanBytes', ], ], ], 'LifecycleRuleFilter' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tag' => [ 'shape' => 'Tag', ], 'ObjectSizeGreaterThan' => [ 'shape' => 'ObjectSizeGreaterThanBytes', ], 'ObjectSizeLessThan' => [ 'shape' => 'ObjectSizeLessThanBytes', ], 'And' => [ 'shape' => 'LifecycleRuleAndOperator', ], ], ], 'LifecycleRules' => [ 'type' => 'list', 'member' => [ 'shape' => 'LifecycleRule', ], 'flattened' => true, ], 'ListBucketAnalyticsConfigurationsOutput' => [ 'type' => 'structure', 'members' => [ 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'ContinuationToken' => [ 'shape' => 'Token', ], 'NextContinuationToken' => [ 'shape' => 'NextToken', ], 'AnalyticsConfigurationList' => [ 'shape' => 'AnalyticsConfigurationList', 'locationName' => 'AnalyticsConfiguration', ], ], ], 'ListBucketAnalyticsConfigurationsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContinuationToken' => [ 'shape' => 'Token', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'ListBucketIntelligentTieringConfigurationsOutput' => [ 'type' => 'structure', 'members' => [ 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'ContinuationToken' => [ 'shape' => 'Token', ], 'NextContinuationToken' => [ 'shape' => 'NextToken', ], 'IntelligentTieringConfigurationList' => [ 'shape' => 'IntelligentTieringConfigurationList', 'locationName' => 'IntelligentTieringConfiguration', ], ], ], 'ListBucketIntelligentTieringConfigurationsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContinuationToken' => [ 'shape' => 'Token', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'ListBucketInventoryConfigurationsOutput' => [ 'type' => 'structure', 'members' => [ 'ContinuationToken' => [ 'shape' => 'Token', ], 'InventoryConfigurationList' => [ 'shape' => 'InventoryConfigurationList', 'locationName' => 'InventoryConfiguration', ], 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'NextContinuationToken' => [ 'shape' => 'NextToken', ], ], ], 'ListBucketInventoryConfigurationsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContinuationToken' => [ 'shape' => 'Token', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'ListBucketMetricsConfigurationsOutput' => [ 'type' => 'structure', 'members' => [ 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'ContinuationToken' => [ 'shape' => 'Token', ], 'NextContinuationToken' => [ 'shape' => 'NextToken', ], 'MetricsConfigurationList' => [ 'shape' => 'MetricsConfigurationList', 'locationName' => 'MetricsConfiguration', ], ], ], 'ListBucketMetricsConfigurationsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContinuationToken' => [ 'shape' => 'Token', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'ListBucketsOutput' => [ 'type' => 'structure', 'members' => [ 'Buckets' => [ 'shape' => 'Buckets', ], 'Owner' => [ 'shape' => 'Owner', ], 'ContinuationToken' => [ 'shape' => 'NextToken', ], 'Prefix' => [ 'shape' => 'Prefix', ], ], ], 'ListBucketsRequest' => [ 'type' => 'structure', 'members' => [ 'MaxBuckets' => [ 'shape' => 'MaxBuckets', 'location' => 'querystring', 'locationName' => 'max-buckets', ], 'ContinuationToken' => [ 'shape' => 'Token', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'Prefix' => [ 'shape' => 'Prefix', 'location' => 'querystring', 'locationName' => 'prefix', ], 'BucketRegion' => [ 'shape' => 'BucketRegion', 'location' => 'querystring', 'locationName' => 'bucket-region', ], ], ], 'ListDirectoryBucketsOutput' => [ 'type' => 'structure', 'members' => [ 'Buckets' => [ 'shape' => 'Buckets', ], 'ContinuationToken' => [ 'shape' => 'DirectoryBucketToken', ], ], ], 'ListDirectoryBucketsRequest' => [ 'type' => 'structure', 'members' => [ 'ContinuationToken' => [ 'shape' => 'DirectoryBucketToken', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'MaxDirectoryBuckets' => [ 'shape' => 'MaxDirectoryBuckets', 'location' => 'querystring', 'locationName' => 'max-directory-buckets', ], ], ], 'ListMultipartUploadsOutput' => [ 'type' => 'structure', 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', ], 'KeyMarker' => [ 'shape' => 'KeyMarker', ], 'UploadIdMarker' => [ 'shape' => 'UploadIdMarker', ], 'NextKeyMarker' => [ 'shape' => 'NextKeyMarker', ], 'Prefix' => [ 'shape' => 'Prefix', ], 'Delimiter' => [ 'shape' => 'Delimiter', ], 'NextUploadIdMarker' => [ 'shape' => 'NextUploadIdMarker', ], 'MaxUploads' => [ 'shape' => 'MaxUploads', ], 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'Uploads' => [ 'shape' => 'MultipartUploadList', 'locationName' => 'Upload', ], 'CommonPrefixes' => [ 'shape' => 'CommonPrefixList', ], 'EncodingType' => [ 'shape' => 'EncodingType', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'ListMultipartUploadsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Delimiter' => [ 'shape' => 'Delimiter', 'location' => 'querystring', 'locationName' => 'delimiter', ], 'EncodingType' => [ 'shape' => 'EncodingType', 'location' => 'querystring', 'locationName' => 'encoding-type', ], 'KeyMarker' => [ 'shape' => 'KeyMarker', 'location' => 'querystring', 'locationName' => 'key-marker', ], 'MaxUploads' => [ 'shape' => 'MaxUploads', 'location' => 'querystring', 'locationName' => 'max-uploads', ], 'Prefix' => [ 'shape' => 'Prefix', 'contextParam' => [ 'name' => 'Prefix', ], 'location' => 'querystring', 'locationName' => 'prefix', ], 'UploadIdMarker' => [ 'shape' => 'UploadIdMarker', 'location' => 'querystring', 'locationName' => 'upload-id-marker', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], ], ], 'ListObjectAnnotationsOutput' => [ 'type' => 'structure', 'members' => [ 'Annotations' => [ 'shape' => 'AnnotationList', ], 'Bucket' => [ 'shape' => 'BucketName', ], 'Key' => [ 'shape' => 'ObjectKey', ], 'ObjectVersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-object-version-id', ], 'AnnotationPrefix' => [ 'shape' => 'AnnotationPrefix', ], 'MaxAnnotationResults' => [ 'shape' => 'MaxAnnotationResults', ], 'AnnotationCount' => [ 'shape' => 'AnnotationCount', ], 'ContinuationToken' => [ 'shape' => 'Token', ], 'NextContinuationToken' => [ 'shape' => 'NextToken', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'ListObjectAnnotationsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'MaxAnnotationResults' => [ 'shape' => 'MaxAnnotationResults', 'location' => 'querystring', 'locationName' => 'max-annotation-results', ], 'AnnotationPrefix' => [ 'shape' => 'AnnotationPrefix', 'location' => 'querystring', 'locationName' => 'annotation-prefix', ], 'ContinuationToken' => [ 'shape' => 'Token', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'ListObjectVersionsOutput' => [ 'type' => 'structure', 'members' => [ 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'KeyMarker' => [ 'shape' => 'KeyMarker', ], 'VersionIdMarker' => [ 'shape' => 'VersionIdMarker', ], 'NextKeyMarker' => [ 'shape' => 'NextKeyMarker', ], 'NextVersionIdMarker' => [ 'shape' => 'NextVersionIdMarker', ], 'Versions' => [ 'shape' => 'ObjectVersionList', 'locationName' => 'Version', ], 'DeleteMarkers' => [ 'shape' => 'DeleteMarkers', 'locationName' => 'DeleteMarker', ], 'Name' => [ 'shape' => 'BucketName', ], 'Prefix' => [ 'shape' => 'Prefix', ], 'Delimiter' => [ 'shape' => 'Delimiter', ], 'MaxKeys' => [ 'shape' => 'MaxKeys', ], 'CommonPrefixes' => [ 'shape' => 'CommonPrefixList', ], 'EncodingType' => [ 'shape' => 'EncodingType', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'ListObjectVersionsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Delimiter' => [ 'shape' => 'Delimiter', 'location' => 'querystring', 'locationName' => 'delimiter', ], 'EncodingType' => [ 'shape' => 'EncodingType', 'location' => 'querystring', 'locationName' => 'encoding-type', ], 'KeyMarker' => [ 'shape' => 'KeyMarker', 'location' => 'querystring', 'locationName' => 'key-marker', ], 'MaxKeys' => [ 'shape' => 'MaxKeys', 'location' => 'querystring', 'locationName' => 'max-keys', ], 'Prefix' => [ 'shape' => 'Prefix', 'contextParam' => [ 'name' => 'Prefix', ], 'location' => 'querystring', 'locationName' => 'prefix', ], 'VersionIdMarker' => [ 'shape' => 'VersionIdMarker', 'location' => 'querystring', 'locationName' => 'version-id-marker', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'OptionalObjectAttributes' => [ 'shape' => 'OptionalObjectAttributesList', 'location' => 'header', 'locationName' => 'x-amz-optional-object-attributes', ], ], ], 'ListObjectsOutput' => [ 'type' => 'structure', 'members' => [ 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'Marker' => [ 'shape' => 'Marker', ], 'NextMarker' => [ 'shape' => 'NextMarker', ], 'Contents' => [ 'shape' => 'ObjectList', ], 'Name' => [ 'shape' => 'BucketName', ], 'Prefix' => [ 'shape' => 'Prefix', ], 'Delimiter' => [ 'shape' => 'Delimiter', ], 'MaxKeys' => [ 'shape' => 'MaxKeys', ], 'CommonPrefixes' => [ 'shape' => 'CommonPrefixList', ], 'EncodingType' => [ 'shape' => 'EncodingType', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'ListObjectsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Delimiter' => [ 'shape' => 'Delimiter', 'location' => 'querystring', 'locationName' => 'delimiter', ], 'EncodingType' => [ 'shape' => 'EncodingType', 'location' => 'querystring', 'locationName' => 'encoding-type', ], 'Marker' => [ 'shape' => 'Marker', 'location' => 'querystring', 'locationName' => 'marker', ], 'MaxKeys' => [ 'shape' => 'MaxKeys', 'location' => 'querystring', 'locationName' => 'max-keys', ], 'Prefix' => [ 'shape' => 'Prefix', 'contextParam' => [ 'name' => 'Prefix', ], 'location' => 'querystring', 'locationName' => 'prefix', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'OptionalObjectAttributes' => [ 'shape' => 'OptionalObjectAttributesList', 'location' => 'header', 'locationName' => 'x-amz-optional-object-attributes', ], ], ], 'ListObjectsV2Output' => [ 'type' => 'structure', 'members' => [ 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'Contents' => [ 'shape' => 'ObjectList', ], 'Name' => [ 'shape' => 'BucketName', ], 'Prefix' => [ 'shape' => 'Prefix', ], 'Delimiter' => [ 'shape' => 'Delimiter', ], 'MaxKeys' => [ 'shape' => 'MaxKeys', ], 'CommonPrefixes' => [ 'shape' => 'CommonPrefixList', ], 'EncodingType' => [ 'shape' => 'EncodingType', ], 'KeyCount' => [ 'shape' => 'KeyCount', ], 'ContinuationToken' => [ 'shape' => 'Token', ], 'NextContinuationToken' => [ 'shape' => 'NextToken', ], 'StartAfter' => [ 'shape' => 'StartAfter', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'ListObjectsV2Request' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Delimiter' => [ 'shape' => 'Delimiter', 'location' => 'querystring', 'locationName' => 'delimiter', ], 'EncodingType' => [ 'shape' => 'EncodingType', 'location' => 'querystring', 'locationName' => 'encoding-type', ], 'MaxKeys' => [ 'shape' => 'MaxKeys', 'location' => 'querystring', 'locationName' => 'max-keys', ], 'Prefix' => [ 'shape' => 'Prefix', 'contextParam' => [ 'name' => 'Prefix', ], 'location' => 'querystring', 'locationName' => 'prefix', ], 'ContinuationToken' => [ 'shape' => 'Token', 'location' => 'querystring', 'locationName' => 'continuation-token', ], 'FetchOwner' => [ 'shape' => 'FetchOwner', 'location' => 'querystring', 'locationName' => 'fetch-owner', ], 'StartAfter' => [ 'shape' => 'StartAfter', 'location' => 'querystring', 'locationName' => 'start-after', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'OptionalObjectAttributes' => [ 'shape' => 'OptionalObjectAttributesList', 'location' => 'header', 'locationName' => 'x-amz-optional-object-attributes', ], ], ], 'ListPartsOutput' => [ 'type' => 'structure', 'members' => [ 'AbortDate' => [ 'shape' => 'AbortDate', 'location' => 'header', 'locationName' => 'x-amz-abort-date', ], 'AbortRuleId' => [ 'shape' => 'AbortRuleId', 'location' => 'header', 'locationName' => 'x-amz-abort-rule-id', ], 'Bucket' => [ 'shape' => 'BucketName', ], 'Key' => [ 'shape' => 'ObjectKey', ], 'UploadId' => [ 'shape' => 'MultipartUploadId', ], 'PartNumberMarker' => [ 'shape' => 'PartNumberMarker', ], 'NextPartNumberMarker' => [ 'shape' => 'NextPartNumberMarker', ], 'MaxParts' => [ 'shape' => 'MaxParts', ], 'IsTruncated' => [ 'shape' => 'IsTruncated', ], 'Parts' => [ 'shape' => 'Parts', 'locationName' => 'Part', ], 'Initiator' => [ 'shape' => 'Initiator', ], 'Owner' => [ 'shape' => 'Owner', ], 'StorageClass' => [ 'shape' => 'StorageClass', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', ], ], ], 'ListPartsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'UploadId', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'MaxParts' => [ 'shape' => 'MaxParts', 'location' => 'querystring', 'locationName' => 'max-parts', ], 'PartNumberMarker' => [ 'shape' => 'PartNumberMarker', 'location' => 'querystring', 'locationName' => 'part-number-marker', ], 'UploadId' => [ 'shape' => 'MultipartUploadId', 'location' => 'querystring', 'locationName' => 'uploadId', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], ], ], 'Location' => [ 'type' => 'string', ], 'LocationInfo' => [ 'type' => 'structure', 'members' => [ 'Type' => [ 'shape' => 'LocationType', ], 'Name' => [ 'shape' => 'LocationNameAsString', ], ], ], 'LocationNameAsString' => [ 'type' => 'string', ], 'LocationPrefix' => [ 'type' => 'string', ], 'LocationType' => [ 'type' => 'string', 'enum' => [ 'AvailabilityZone', 'LocalZone', ], ], 'LoggingEnabled' => [ 'type' => 'structure', 'required' => [ 'TargetBucket', 'TargetPrefix', ], 'members' => [ 'TargetBucket' => [ 'shape' => 'TargetBucket', ], 'TargetGrants' => [ 'shape' => 'TargetGrants', ], 'TargetPrefix' => [ 'shape' => 'TargetPrefix', ], 'TargetObjectKeyFormat' => [ 'shape' => 'TargetObjectKeyFormat', ], ], ], 'MFA' => [ 'type' => 'string', ], 'MFADelete' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'MFADeleteStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'Marker' => [ 'type' => 'string', ], 'MaxAgeSeconds' => [ 'type' => 'integer', 'box' => true, ], 'MaxAnnotationResults' => [ 'type' => 'integer', 'box' => true, 'max' => 1000, 'min' => 1, ], 'MaxBuckets' => [ 'type' => 'integer', 'box' => true, 'max' => 10000, 'min' => 1, ], 'MaxDirectoryBuckets' => [ 'type' => 'integer', 'box' => true, 'max' => 1000, 'min' => 0, ], 'MaxKeys' => [ 'type' => 'integer', ], 'MaxParts' => [ 'type' => 'integer', ], 'MaxUploads' => [ 'type' => 'integer', ], 'Message' => [ 'type' => 'string', ], 'Metadata' => [ 'type' => 'map', 'key' => [ 'shape' => 'MetadataKey', ], 'value' => [ 'shape' => 'MetadataValue', ], ], 'MetadataConfiguration' => [ 'type' => 'structure', 'required' => [ 'JournalTableConfiguration', ], 'members' => [ 'JournalTableConfiguration' => [ 'shape' => 'JournalTableConfiguration', ], 'InventoryTableConfiguration' => [ 'shape' => 'InventoryTableConfiguration', ], 'AnnotationTableConfiguration' => [ 'shape' => 'AnnotationTableConfiguration', ], ], ], 'MetadataConfigurationResult' => [ 'type' => 'structure', 'required' => [ 'DestinationResult', ], 'members' => [ 'DestinationResult' => [ 'shape' => 'DestinationResult', ], 'JournalTableConfigurationResult' => [ 'shape' => 'JournalTableConfigurationResult', ], 'InventoryTableConfigurationResult' => [ 'shape' => 'InventoryTableConfigurationResult', ], 'AnnotationTableConfigurationResult' => [ 'shape' => 'AnnotationTableConfigurationResult', ], ], ], 'MetadataDirective' => [ 'type' => 'string', 'enum' => [ 'COPY', 'REPLACE', ], ], 'MetadataEntry' => [ 'type' => 'structure', 'members' => [ 'Name' => [ 'shape' => 'MetadataKey', ], 'Value' => [ 'shape' => 'MetadataValue', ], ], ], 'MetadataKey' => [ 'type' => 'string', ], 'MetadataTableConfiguration' => [ 'type' => 'structure', 'required' => [ 'S3TablesDestination', ], 'members' => [ 'S3TablesDestination' => [ 'shape' => 'S3TablesDestination', ], ], ], 'MetadataTableConfigurationResult' => [ 'type' => 'structure', 'required' => [ 'S3TablesDestinationResult', ], 'members' => [ 'S3TablesDestinationResult' => [ 'shape' => 'S3TablesDestinationResult', ], ], ], 'MetadataTableEncryptionConfiguration' => [ 'type' => 'structure', 'required' => [ 'SseAlgorithm', ], 'members' => [ 'SseAlgorithm' => [ 'shape' => 'TableSseAlgorithm', ], 'KmsKeyArn' => [ 'shape' => 'KmsKeyArn', ], ], ], 'MetadataTableStatus' => [ 'type' => 'string', ], 'MetadataValue' => [ 'type' => 'string', ], 'Metrics' => [ 'type' => 'structure', 'required' => [ 'Status', ], 'members' => [ 'Status' => [ 'shape' => 'MetricsStatus', ], 'EventThreshold' => [ 'shape' => 'ReplicationTimeValue', ], ], ], 'MetricsAndOperator' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tags' => [ 'shape' => 'TagSet', 'flattened' => true, 'locationName' => 'Tag', ], 'AccessPointArn' => [ 'shape' => 'AccessPointArn', ], ], ], 'MetricsConfiguration' => [ 'type' => 'structure', 'required' => [ 'Id', ], 'members' => [ 'Id' => [ 'shape' => 'MetricsId', ], 'Filter' => [ 'shape' => 'MetricsFilter', ], ], ], 'MetricsConfigurationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'MetricsConfiguration', ], 'flattened' => true, ], 'MetricsFilter' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tag' => [ 'shape' => 'Tag', ], 'AccessPointArn' => [ 'shape' => 'AccessPointArn', ], 'And' => [ 'shape' => 'MetricsAndOperator', ], ], ], 'MetricsId' => [ 'type' => 'string', ], 'MetricsStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'Minutes' => [ 'type' => 'integer', 'box' => true, ], 'MissingMeta' => [ 'type' => 'integer', ], 'MpuObjectSize' => [ 'type' => 'long', ], 'MultipartUpload' => [ 'type' => 'structure', 'members' => [ 'UploadId' => [ 'shape' => 'MultipartUploadId', ], 'Key' => [ 'shape' => 'ObjectKey', ], 'Initiated' => [ 'shape' => 'Initiated', ], 'StorageClass' => [ 'shape' => 'StorageClass', ], 'Owner' => [ 'shape' => 'Owner', ], 'Initiator' => [ 'shape' => 'Initiator', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', ], ], ], 'MultipartUploadId' => [ 'type' => 'string', ], 'MultipartUploadList' => [ 'type' => 'list', 'member' => [ 'shape' => 'MultipartUpload', ], 'flattened' => true, ], 'NextKeyMarker' => [ 'type' => 'string', ], 'NextMarker' => [ 'type' => 'string', ], 'NextPartNumberMarker' => [ 'type' => 'integer', 'box' => true, ], 'NextToken' => [ 'type' => 'string', ], 'NextUploadIdMarker' => [ 'type' => 'string', ], 'NextVersionIdMarker' => [ 'type' => 'string', ], 'NoSuchAnnotation' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 404, ], 'exception' => true, ], 'NoSuchBucket' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 404, ], 'exception' => true, ], 'NoSuchKey' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 404, ], 'exception' => true, ], 'NoSuchUpload' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 404, ], 'exception' => true, ], 'NonEmptyKmsKeyArnString' => [ 'type' => 'string', 'max' => 2048, 'min' => 20, 'pattern' => 'arn:aws[a-zA-Z0-9-]*:kms:[a-z0-9-]+:[0-9]{12}:key/[a-zA-Z0-9-]+', 'sensitive' => true, ], 'NoncurrentVersionExpiration' => [ 'type' => 'structure', 'members' => [ 'NoncurrentDays' => [ 'shape' => 'Days', ], 'NewerNoncurrentVersions' => [ 'shape' => 'VersionCount', ], ], ], 'NoncurrentVersionTransition' => [ 'type' => 'structure', 'members' => [ 'NoncurrentDays' => [ 'shape' => 'Days', ], 'StorageClass' => [ 'shape' => 'TransitionStorageClass', ], 'NewerNoncurrentVersions' => [ 'shape' => 'VersionCount', ], ], ], 'NoncurrentVersionTransitionList' => [ 'type' => 'list', 'member' => [ 'shape' => 'NoncurrentVersionTransition', ], 'flattened' => true, ], 'NotificationConfiguration' => [ 'type' => 'structure', 'members' => [ 'TopicConfigurations' => [ 'shape' => 'TopicConfigurationList', 'locationName' => 'TopicConfiguration', ], 'QueueConfigurations' => [ 'shape' => 'QueueConfigurationList', 'locationName' => 'QueueConfiguration', ], 'LambdaFunctionConfigurations' => [ 'shape' => 'LambdaFunctionConfigurationList', 'locationName' => 'CloudFunctionConfiguration', ], 'EventBridgeConfiguration' => [ 'shape' => 'EventBridgeConfiguration', ], ], ], 'NotificationConfigurationDeprecated' => [ 'type' => 'structure', 'members' => [ 'TopicConfiguration' => [ 'shape' => 'TopicConfigurationDeprecated', ], 'QueueConfiguration' => [ 'shape' => 'QueueConfigurationDeprecated', ], 'CloudFunctionConfiguration' => [ 'shape' => 'CloudFunctionConfiguration', ], ], ], 'NotificationConfigurationFilter' => [ 'type' => 'structure', 'members' => [ 'Key' => [ 'shape' => 'S3KeyFilter', 'locationName' => 'S3Key', ], ], ], 'NotificationId' => [ 'type' => 'string', ], 'Object' => [ 'type' => 'structure', 'members' => [ 'Key' => [ 'shape' => 'ObjectKey', ], 'LastModified' => [ 'shape' => 'LastModified', ], 'ETag' => [ 'shape' => 'ETag', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithmList', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', ], 'Size' => [ 'shape' => 'Size', ], 'StorageClass' => [ 'shape' => 'ObjectStorageClass', ], 'Owner' => [ 'shape' => 'Owner', ], 'RestoreStatus' => [ 'shape' => 'RestoreStatus', ], ], ], 'ObjectAlreadyInActiveTierError' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 403, ], 'exception' => true, ], 'ObjectAttributes' => [ 'type' => 'string', 'enum' => [ 'ETag', 'Checksum', 'ObjectParts', 'StorageClass', 'ObjectSize', ], ], 'ObjectAttributesList' => [ 'type' => 'list', 'member' => [ 'shape' => 'ObjectAttributes', ], ], 'ObjectCannedACL' => [ 'type' => 'string', 'enum' => [ 'private', 'public-read', 'public-read-write', 'authenticated-read', 'aws-exec-read', 'bucket-owner-read', 'bucket-owner-full-control', ], ], 'ObjectEncryption' => [ 'type' => 'structure', 'members' => [ 'SSEKMS' => [ 'shape' => 'SSEKMSEncryption', 'locationName' => 'SSE-KMS', ], ], 'union' => true, ], 'ObjectIdentifier' => [ 'type' => 'structure', 'required' => [ 'Key', ], 'members' => [ 'Key' => [ 'shape' => 'ObjectKey', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', ], 'ETag' => [ 'shape' => 'ETag', ], 'LastModifiedTime' => [ 'shape' => 'LastModifiedTime', ], 'Size' => [ 'shape' => 'Size', ], ], ], 'ObjectIdentifierList' => [ 'type' => 'list', 'member' => [ 'shape' => 'ObjectIdentifier', ], 'flattened' => true, ], 'ObjectIfMatch' => [ 'type' => 'string', ], 'ObjectKey' => [ 'type' => 'string', 'min' => 1, ], 'ObjectList' => [ 'type' => 'list', 'member' => [ 'shape' => 'Object', ], 'flattened' => true, ], 'ObjectLockConfiguration' => [ 'type' => 'structure', 'members' => [ 'ObjectLockEnabled' => [ 'shape' => 'ObjectLockEnabled', ], 'Rule' => [ 'shape' => 'ObjectLockRule', ], ], ], 'ObjectLockEnabled' => [ 'type' => 'string', 'enum' => [ 'Enabled', ], ], 'ObjectLockEnabledForBucket' => [ 'type' => 'boolean', 'box' => true, ], 'ObjectLockLegalHold' => [ 'type' => 'structure', 'members' => [ 'Status' => [ 'shape' => 'ObjectLockLegalHoldStatus', ], ], ], 'ObjectLockLegalHoldStatus' => [ 'type' => 'string', 'enum' => [ 'ON', 'OFF', ], ], 'ObjectLockMode' => [ 'type' => 'string', 'enum' => [ 'GOVERNANCE', 'COMPLIANCE', ], ], 'ObjectLockRetainUntilDate' => [ 'type' => 'timestamp', 'timestampFormat' => 'iso8601', ], 'ObjectLockRetention' => [ 'type' => 'structure', 'members' => [ 'Mode' => [ 'shape' => 'ObjectLockRetentionMode', ], 'RetainUntilDate' => [ 'shape' => 'Date', ], ], ], 'ObjectLockRetentionMode' => [ 'type' => 'string', 'enum' => [ 'GOVERNANCE', 'COMPLIANCE', ], ], 'ObjectLockRule' => [ 'type' => 'structure', 'members' => [ 'DefaultRetention' => [ 'shape' => 'DefaultRetention', ], ], ], 'ObjectLockToken' => [ 'type' => 'string', ], 'ObjectNotInActiveTierError' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 403, ], 'exception' => true, ], 'ObjectOwnership' => [ 'type' => 'string', 'enum' => [ 'BucketOwnerPreferred', 'ObjectWriter', 'BucketOwnerEnforced', ], ], 'ObjectPart' => [ 'type' => 'structure', 'members' => [ 'PartNumber' => [ 'shape' => 'PartNumber', ], 'Size' => [ 'shape' => 'Size', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', ], ], ], 'ObjectSize' => [ 'type' => 'long', 'box' => true, ], 'ObjectSizeGreaterThanBytes' => [ 'type' => 'long', 'box' => true, ], 'ObjectSizeLessThanBytes' => [ 'type' => 'long', 'box' => true, ], 'ObjectStorageClass' => [ 'type' => 'string', 'enum' => [ 'STANDARD', 'REDUCED_REDUNDANCY', 'GLACIER', 'STANDARD_IA', 'ONEZONE_IA', 'INTELLIGENT_TIERING', 'DEEP_ARCHIVE', 'OUTPOSTS', 'GLACIER_IR', 'SNOW', 'EXPRESS_ONEZONE', 'FSX_OPENZFS', 'FSX_ONTAP', 'AWS_BACKUP_WARM', 'AWS_BACKUP_LOW_COST_WARM', ], ], 'ObjectVersion' => [ 'type' => 'structure', 'members' => [ 'ETag' => [ 'shape' => 'ETag', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithmList', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', ], 'Size' => [ 'shape' => 'Size', ], 'StorageClass' => [ 'shape' => 'ObjectVersionStorageClass', ], 'Key' => [ 'shape' => 'ObjectKey', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', ], 'IsLatest' => [ 'shape' => 'IsLatest', ], 'LastModified' => [ 'shape' => 'LastModified', ], 'Owner' => [ 'shape' => 'Owner', ], 'RestoreStatus' => [ 'shape' => 'RestoreStatus', ], ], ], 'ObjectVersionId' => [ 'type' => 'string', ], 'ObjectVersionList' => [ 'type' => 'list', 'member' => [ 'shape' => 'ObjectVersion', ], 'flattened' => true, ], 'ObjectVersionStorageClass' => [ 'type' => 'string', 'enum' => [ 'STANDARD', ], ], 'OptionalObjectAttributes' => [ 'type' => 'string', 'enum' => [ 'RestoreStatus', ], ], 'OptionalObjectAttributesList' => [ 'type' => 'list', 'member' => [ 'shape' => 'OptionalObjectAttributes', ], ], 'OutputLocation' => [ 'type' => 'structure', 'members' => [ 'S3' => [ 'shape' => 'S3Location', ], ], ], 'OutputSerialization' => [ 'type' => 'structure', 'members' => [ 'CSV' => [ 'shape' => 'CSVOutput', ], 'JSON' => [ 'shape' => 'JSONOutput', ], ], ], 'Owner' => [ 'type' => 'structure', 'members' => [ 'DisplayName' => [ 'shape' => 'DisplayName', ], 'ID' => [ 'shape' => 'ID', ], ], ], 'OwnerOverride' => [ 'type' => 'string', 'enum' => [ 'Destination', ], ], 'OwnershipControls' => [ 'type' => 'structure', 'required' => [ 'Rules', ], 'members' => [ 'Rules' => [ 'shape' => 'OwnershipControlsRules', 'locationName' => 'Rule', ], ], ], 'OwnershipControlsRule' => [ 'type' => 'structure', 'required' => [ 'ObjectOwnership', ], 'members' => [ 'ObjectOwnership' => [ 'shape' => 'ObjectOwnership', ], ], ], 'OwnershipControlsRules' => [ 'type' => 'list', 'member' => [ 'shape' => 'OwnershipControlsRule', ], 'flattened' => true, ], 'ParquetInput' => [ 'type' => 'structure', 'members' => [], ], 'Part' => [ 'type' => 'structure', 'members' => [ 'PartNumber' => [ 'shape' => 'PartNumber', ], 'LastModified' => [ 'shape' => 'LastModified', ], 'ETag' => [ 'shape' => 'ETag', ], 'Size' => [ 'shape' => 'Size', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', ], ], ], 'PartNumber' => [ 'type' => 'integer', ], 'PartNumberMarker' => [ 'type' => 'integer', ], 'PartitionDateSource' => [ 'type' => 'string', 'enum' => [ 'EventTime', 'DeliveryTime', ], ], 'PartitionedPrefix' => [ 'type' => 'structure', 'members' => [ 'PartitionDateSource' => [ 'shape' => 'PartitionDateSource', ], ], 'locationName' => 'PartitionedPrefix', ], 'Parts' => [ 'type' => 'list', 'member' => [ 'shape' => 'Part', ], 'flattened' => true, ], 'PartsCount' => [ 'type' => 'integer', 'box' => true, ], 'PartsList' => [ 'type' => 'list', 'member' => [ 'shape' => 'ObjectPart', ], 'flattened' => true, ], 'Payer' => [ 'type' => 'string', 'enum' => [ 'Requester', 'BucketOwner', ], ], 'Permission' => [ 'type' => 'string', 'enum' => [ 'FULL_CONTROL', 'WRITE', 'WRITE_ACP', 'READ', 'READ_ACP', ], ], 'Policy' => [ 'type' => 'string', ], 'PolicyStatus' => [ 'type' => 'structure', 'members' => [ 'IsPublic' => [ 'shape' => 'IsPublic', 'locationName' => 'IsPublic', ], ], ], 'Prefix' => [ 'type' => 'string', ], 'Priority' => [ 'type' => 'integer', 'box' => true, ], 'Progress' => [ 'type' => 'structure', 'members' => [ 'BytesScanned' => [ 'shape' => 'BytesScanned', ], 'BytesProcessed' => [ 'shape' => 'BytesProcessed', ], 'BytesReturned' => [ 'shape' => 'BytesReturned', ], ], ], 'ProgressEvent' => [ 'type' => 'structure', 'members' => [ 'Details' => [ 'shape' => 'Progress', 'eventpayload' => true, ], ], 'event' => true, ], 'Protocol' => [ 'type' => 'string', 'enum' => [ 'http', 'https', ], ], 'PublicAccessBlockConfiguration' => [ 'type' => 'structure', 'members' => [ 'BlockPublicAcls' => [ 'shape' => 'Setting', 'locationName' => 'BlockPublicAcls', ], 'IgnorePublicAcls' => [ 'shape' => 'Setting', 'locationName' => 'IgnorePublicAcls', ], 'BlockPublicPolicy' => [ 'shape' => 'Setting', 'locationName' => 'BlockPublicPolicy', ], 'RestrictPublicBuckets' => [ 'shape' => 'Setting', 'locationName' => 'RestrictPublicBuckets', ], ], ], 'PutBucketAbacRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'AbacStatus', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'AbacStatus' => [ 'shape' => 'AbacStatus', 'locationName' => 'AbacStatus', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], ], 'payload' => 'AbacStatus', ], 'PutBucketAccelerateConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'AccelerateConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'AccelerateConfiguration' => [ 'shape' => 'AccelerateConfiguration', 'locationName' => 'AccelerateConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], ], 'payload' => 'AccelerateConfiguration', ], 'PutBucketAclRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'ACL' => [ 'shape' => 'BucketCannedACL', 'location' => 'header', 'locationName' => 'x-amz-acl', ], 'AccessControlPolicy' => [ 'shape' => 'AccessControlPolicy', 'locationName' => 'AccessControlPolicy', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'GrantFullControl' => [ 'shape' => 'GrantFullControl', 'location' => 'header', 'locationName' => 'x-amz-grant-full-control', ], 'GrantRead' => [ 'shape' => 'GrantRead', 'location' => 'header', 'locationName' => 'x-amz-grant-read', ], 'GrantReadACP' => [ 'shape' => 'GrantReadACP', 'location' => 'header', 'locationName' => 'x-amz-grant-read-acp', ], 'GrantWrite' => [ 'shape' => 'GrantWrite', 'location' => 'header', 'locationName' => 'x-amz-grant-write', ], 'GrantWriteACP' => [ 'shape' => 'GrantWriteACP', 'location' => 'header', 'locationName' => 'x-amz-grant-write-acp', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'AccessControlPolicy', ], 'PutBucketAnalyticsConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', 'AnalyticsConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'AnalyticsId', 'location' => 'querystring', 'locationName' => 'id', ], 'AnalyticsConfiguration' => [ 'shape' => 'AnalyticsConfiguration', 'locationName' => 'AnalyticsConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'AnalyticsConfiguration', ], 'PutBucketCorsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'CORSConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'CORSConfiguration' => [ 'shape' => 'CORSConfiguration', 'locationName' => 'CORSConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'CORSConfiguration', ], 'PutBucketEncryptionRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'ServerSideEncryptionConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ServerSideEncryptionConfiguration' => [ 'shape' => 'ServerSideEncryptionConfiguration', 'locationName' => 'ServerSideEncryptionConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'ServerSideEncryptionConfiguration', ], 'PutBucketIntelligentTieringConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', 'IntelligentTieringConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'IntelligentTieringId', 'location' => 'querystring', 'locationName' => 'id', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'IntelligentTieringConfiguration' => [ 'shape' => 'IntelligentTieringConfiguration', 'locationName' => 'IntelligentTieringConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], ], 'payload' => 'IntelligentTieringConfiguration', ], 'PutBucketInventoryConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', 'InventoryConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'InventoryId', 'location' => 'querystring', 'locationName' => 'id', ], 'InventoryConfiguration' => [ 'shape' => 'InventoryConfiguration', 'locationName' => 'InventoryConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'InventoryConfiguration', ], 'PutBucketLifecycleConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'TransitionDefaultMinimumObjectSize' => [ 'shape' => 'TransitionDefaultMinimumObjectSize', 'location' => 'header', 'locationName' => 'x-amz-transition-default-minimum-object-size', ], ], ], 'PutBucketLifecycleConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'LifecycleConfiguration' => [ 'shape' => 'BucketLifecycleConfiguration', 'locationName' => 'LifecycleConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'TransitionDefaultMinimumObjectSize' => [ 'shape' => 'TransitionDefaultMinimumObjectSize', 'location' => 'header', 'locationName' => 'x-amz-transition-default-minimum-object-size', ], ], 'payload' => 'LifecycleConfiguration', ], 'PutBucketLifecycleRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'LifecycleConfiguration' => [ 'shape' => 'LifecycleConfiguration', 'locationName' => 'LifecycleConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'LifecycleConfiguration', ], 'PutBucketLoggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'BucketLoggingStatus', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'BucketLoggingStatus' => [ 'shape' => 'BucketLoggingStatus', 'locationName' => 'BucketLoggingStatus', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'BucketLoggingStatus', ], 'PutBucketMetricsConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Id', 'MetricsConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Id' => [ 'shape' => 'MetricsId', 'location' => 'querystring', 'locationName' => 'id', ], 'MetricsConfiguration' => [ 'shape' => 'MetricsConfiguration', 'locationName' => 'MetricsConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'MetricsConfiguration', ], 'PutBucketNotificationConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'NotificationConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'NotificationConfiguration' => [ 'shape' => 'NotificationConfiguration', 'locationName' => 'NotificationConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'SkipDestinationValidation' => [ 'shape' => 'SkipValidation', 'location' => 'header', 'locationName' => 'x-amz-skip-destination-validation', ], ], 'payload' => 'NotificationConfiguration', ], 'PutBucketNotificationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'NotificationConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'NotificationConfiguration' => [ 'shape' => 'NotificationConfigurationDeprecated', 'locationName' => 'NotificationConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'NotificationConfiguration', ], 'PutBucketOwnershipControlsRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'OwnershipControls', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'OwnershipControls' => [ 'shape' => 'OwnershipControls', 'locationName' => 'OwnershipControls', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], ], 'payload' => 'OwnershipControls', ], 'PutBucketPolicyRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Policy', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ConfirmRemoveSelfBucketAccess' => [ 'shape' => 'ConfirmRemoveSelfBucketAccess', 'location' => 'header', 'locationName' => 'x-amz-confirm-remove-self-bucket-access', ], 'Policy' => [ 'shape' => 'Policy', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'Policy', ], 'PutBucketReplicationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'ReplicationConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ReplicationConfiguration' => [ 'shape' => 'ReplicationConfiguration', 'locationName' => 'ReplicationConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'Token' => [ 'shape' => 'ObjectLockToken', 'location' => 'header', 'locationName' => 'x-amz-bucket-object-lock-token', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'ReplicationConfiguration', ], 'PutBucketRequestPaymentRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'RequestPaymentConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'RequestPaymentConfiguration' => [ 'shape' => 'RequestPaymentConfiguration', 'locationName' => 'RequestPaymentConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'RequestPaymentConfiguration', ], 'PutBucketTaggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Tagging', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'Tagging' => [ 'shape' => 'Tagging', 'locationName' => 'Tagging', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'Tagging', ], 'PutBucketVersioningRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'VersioningConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'MFA' => [ 'shape' => 'MFA', 'location' => 'header', 'locationName' => 'x-amz-mfa', ], 'VersioningConfiguration' => [ 'shape' => 'VersioningConfiguration', 'locationName' => 'VersioningConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'VersioningConfiguration', ], 'PutBucketWebsiteRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'WebsiteConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'WebsiteConfiguration' => [ 'shape' => 'WebsiteConfiguration', 'locationName' => 'WebsiteConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'WebsiteConfiguration', ], 'PutObjectAclOutput' => [ 'type' => 'structure', 'members' => [ 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'PutObjectAclRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'ACL' => [ 'shape' => 'ObjectCannedACL', 'location' => 'header', 'locationName' => 'x-amz-acl', ], 'AccessControlPolicy' => [ 'shape' => 'AccessControlPolicy', 'locationName' => 'AccessControlPolicy', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'GrantFullControl' => [ 'shape' => 'GrantFullControl', 'location' => 'header', 'locationName' => 'x-amz-grant-full-control', ], 'GrantRead' => [ 'shape' => 'GrantRead', 'location' => 'header', 'locationName' => 'x-amz-grant-read', ], 'GrantReadACP' => [ 'shape' => 'GrantReadACP', 'location' => 'header', 'locationName' => 'x-amz-grant-read-acp', ], 'GrantWrite' => [ 'shape' => 'GrantWrite', 'location' => 'header', 'locationName' => 'x-amz-grant-write', ], 'GrantWriteACP' => [ 'shape' => 'GrantWriteACP', 'location' => 'header', 'locationName' => 'x-amz-grant-write-acp', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'AccessControlPolicy', ], 'PutObjectAnnotationOutput' => [ 'type' => 'structure', 'members' => [ 'Key' => [ 'shape' => 'ObjectKey', ], 'AnnotationName' => [ 'shape' => 'AnnotationName', ], 'ObjectVersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-object-version-id', ], 'ETag' => [ 'shape' => 'ETag', 'location' => 'header', 'locationName' => 'ETag', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'PutObjectAnnotationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'AnnotationName', 'AnnotationPayload', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'AnnotationName' => [ 'shape' => 'AnnotationName', 'location' => 'querystring', 'locationName' => 'annotationName', ], 'AnnotationPayload' => [ 'shape' => 'AnnotationPayload', 'streaming' => true, ], 'ObjectIfMatch' => [ 'shape' => 'ObjectIfMatch', 'location' => 'header', 'locationName' => 'x-amz-object-if-match', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'AnnotationPayload', ], 'PutObjectLegalHoldOutput' => [ 'type' => 'structure', 'members' => [ 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'PutObjectLegalHoldRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'LegalHold' => [ 'shape' => 'ObjectLockLegalHold', 'locationName' => 'LegalHold', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'LegalHold', ], 'PutObjectLockConfigurationOutput' => [ 'type' => 'structure', 'members' => [ 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'PutObjectLockConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ObjectLockConfiguration' => [ 'shape' => 'ObjectLockConfiguration', 'locationName' => 'ObjectLockConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'Token' => [ 'shape' => 'ObjectLockToken', 'location' => 'header', 'locationName' => 'x-amz-bucket-object-lock-token', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'ObjectLockConfiguration', ], 'PutObjectOutput' => [ 'type' => 'structure', 'members' => [ 'Expiration' => [ 'shape' => 'Expiration', 'location' => 'header', 'locationName' => 'x-amz-expiration', ], 'ETag' => [ 'shape' => 'ETag', 'location' => 'header', 'locationName' => 'ETag', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'ChecksumType' => [ 'shape' => 'ChecksumType', 'location' => 'header', 'locationName' => 'x-amz-checksum-type', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'Size' => [ 'shape' => 'Size', 'location' => 'header', 'locationName' => 'x-amz-object-size', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'PutObjectRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'ACL' => [ 'shape' => 'ObjectCannedACL', 'location' => 'header', 'locationName' => 'x-amz-acl', ], 'Body' => [ 'shape' => 'Body', 'streaming' => true, ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'CacheControl' => [ 'shape' => 'CacheControl', 'location' => 'header', 'locationName' => 'Cache-Control', ], 'ContentDisposition' => [ 'shape' => 'ContentDisposition', 'location' => 'header', 'locationName' => 'Content-Disposition', ], 'ContentEncoding' => [ 'shape' => 'ContentEncoding', 'location' => 'header', 'locationName' => 'Content-Encoding', ], 'ContentLanguage' => [ 'shape' => 'ContentLanguage', 'location' => 'header', 'locationName' => 'Content-Language', ], 'ContentLength' => [ 'shape' => 'ContentLength', 'location' => 'header', 'locationName' => 'Content-Length', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ContentType' => [ 'shape' => 'ContentType', 'location' => 'header', 'locationName' => 'Content-Type', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'Expires' => [ 'shape' => 'Expires', 'location' => 'header', 'locationName' => 'Expires', ], 'IfMatch' => [ 'shape' => 'IfMatch', 'location' => 'header', 'locationName' => 'If-Match', ], 'IfNoneMatch' => [ 'shape' => 'IfNoneMatch', 'location' => 'header', 'locationName' => 'If-None-Match', ], 'GrantFullControl' => [ 'shape' => 'GrantFullControl', 'location' => 'header', 'locationName' => 'x-amz-grant-full-control', ], 'GrantRead' => [ 'shape' => 'GrantRead', 'location' => 'header', 'locationName' => 'x-amz-grant-read', ], 'GrantReadACP' => [ 'shape' => 'GrantReadACP', 'location' => 'header', 'locationName' => 'x-amz-grant-read-acp', ], 'GrantWriteACP' => [ 'shape' => 'GrantWriteACP', 'location' => 'header', 'locationName' => 'x-amz-grant-write-acp', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'WriteOffsetBytes' => [ 'shape' => 'WriteOffsetBytes', 'location' => 'header', 'locationName' => 'x-amz-write-offset-bytes', ], 'Metadata' => [ 'shape' => 'Metadata', 'location' => 'headers', 'locationName' => 'x-amz-meta-', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'StorageClass' => [ 'shape' => 'StorageClass', 'location' => 'header', 'locationName' => 'x-amz-storage-class', ], 'WebsiteRedirectLocation' => [ 'shape' => 'WebsiteRedirectLocation', 'location' => 'header', 'locationName' => 'x-amz-website-redirect-location', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'SSEKMSEncryptionContext' => [ 'shape' => 'SSEKMSEncryptionContext', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-context', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'Tagging' => [ 'shape' => 'TaggingHeader', 'location' => 'header', 'locationName' => 'x-amz-tagging', ], 'ObjectLockMode' => [ 'shape' => 'ObjectLockMode', 'location' => 'header', 'locationName' => 'x-amz-object-lock-mode', ], 'ObjectLockRetainUntilDate' => [ 'shape' => 'ObjectLockRetainUntilDate', 'location' => 'header', 'locationName' => 'x-amz-object-lock-retain-until-date', ], 'ObjectLockLegalHoldStatus' => [ 'shape' => 'ObjectLockLegalHoldStatus', 'location' => 'header', 'locationName' => 'x-amz-object-lock-legal-hold', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'Body', ], 'PutObjectRetentionOutput' => [ 'type' => 'structure', 'members' => [ 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'PutObjectRetentionRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'Retention' => [ 'shape' => 'ObjectLockRetention', 'locationName' => 'Retention', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'BypassGovernanceRetention' => [ 'shape' => 'BypassGovernanceRetention', 'location' => 'header', 'locationName' => 'x-amz-bypass-governance-retention', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'Retention', ], 'PutObjectTaggingOutput' => [ 'type' => 'structure', 'members' => [ 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-version-id', ], ], ], 'PutObjectTaggingRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'Tagging', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'Tagging' => [ 'shape' => 'Tagging', 'locationName' => 'Tagging', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], ], 'payload' => 'Tagging', ], 'PutPublicAccessBlockRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'PublicAccessBlockConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'PublicAccessBlockConfiguration' => [ 'shape' => 'PublicAccessBlockConfiguration', 'locationName' => 'PublicAccessBlockConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'PublicAccessBlockConfiguration', ], 'QueueArn' => [ 'type' => 'string', ], 'QueueConfiguration' => [ 'type' => 'structure', 'required' => [ 'QueueArn', 'Events', ], 'members' => [ 'Id' => [ 'shape' => 'NotificationId', ], 'QueueArn' => [ 'shape' => 'QueueArn', 'locationName' => 'Queue', ], 'Events' => [ 'shape' => 'EventList', 'locationName' => 'Event', ], 'Filter' => [ 'shape' => 'NotificationConfigurationFilter', ], ], ], 'QueueConfigurationDeprecated' => [ 'type' => 'structure', 'members' => [ 'Id' => [ 'shape' => 'NotificationId', ], 'Event' => [ 'shape' => 'Event', 'deprecated' => true, ], 'Events' => [ 'shape' => 'EventList', 'locationName' => 'Event', ], 'Queue' => [ 'shape' => 'QueueArn', ], ], ], 'QueueConfigurationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'QueueConfiguration', ], 'flattened' => true, ], 'Quiet' => [ 'type' => 'boolean', 'box' => true, ], 'QuoteCharacter' => [ 'type' => 'string', ], 'QuoteEscapeCharacter' => [ 'type' => 'string', ], 'QuoteFields' => [ 'type' => 'string', 'enum' => [ 'ALWAYS', 'ASNEEDED', ], ], 'Range' => [ 'type' => 'string', ], 'RecordDelimiter' => [ 'type' => 'string', ], 'RecordExpiration' => [ 'type' => 'structure', 'required' => [ 'Expiration', ], 'members' => [ 'Expiration' => [ 'shape' => 'ExpirationState', ], 'Days' => [ 'shape' => 'RecordExpirationDays', 'box' => true, ], ], ], 'RecordExpirationDays' => [ 'type' => 'integer', ], 'RecordsEvent' => [ 'type' => 'structure', 'members' => [ 'Payload' => [ 'shape' => 'Body', 'eventpayload' => true, ], ], 'event' => true, ], 'Redirect' => [ 'type' => 'structure', 'members' => [ 'HostName' => [ 'shape' => 'HostName', ], 'HttpRedirectCode' => [ 'shape' => 'HttpRedirectCode', ], 'Protocol' => [ 'shape' => 'Protocol', ], 'ReplaceKeyPrefixWith' => [ 'shape' => 'ReplaceKeyPrefixWith', ], 'ReplaceKeyWith' => [ 'shape' => 'ReplaceKeyWith', ], ], ], 'RedirectAllRequestsTo' => [ 'type' => 'structure', 'required' => [ 'HostName', ], 'members' => [ 'HostName' => [ 'shape' => 'HostName', ], 'Protocol' => [ 'shape' => 'Protocol', ], ], ], 'Region' => [ 'type' => 'string', 'max' => 20, 'min' => 0, ], 'RenameObjectOutput' => [ 'type' => 'structure', 'members' => [], ], 'RenameObjectRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'RenameSource', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'RenameSource' => [ 'shape' => 'RenameSource', 'location' => 'header', 'locationName' => 'x-amz-rename-source', ], 'DestinationIfMatch' => [ 'shape' => 'IfMatch', 'location' => 'header', 'locationName' => 'If-Match', ], 'DestinationIfNoneMatch' => [ 'shape' => 'IfNoneMatch', 'location' => 'header', 'locationName' => 'If-None-Match', ], 'DestinationIfModifiedSince' => [ 'shape' => 'IfModifiedSince', 'location' => 'header', 'locationName' => 'If-Modified-Since', ], 'DestinationIfUnmodifiedSince' => [ 'shape' => 'IfUnmodifiedSince', 'location' => 'header', 'locationName' => 'If-Unmodified-Since', ], 'SourceIfMatch' => [ 'shape' => 'RenameSourceIfMatch', 'location' => 'header', 'locationName' => 'x-amz-rename-source-if-match', ], 'SourceIfNoneMatch' => [ 'shape' => 'RenameSourceIfNoneMatch', 'location' => 'header', 'locationName' => 'x-amz-rename-source-if-none-match', ], 'SourceIfModifiedSince' => [ 'shape' => 'RenameSourceIfModifiedSince', 'location' => 'header', 'locationName' => 'x-amz-rename-source-if-modified-since', ], 'SourceIfUnmodifiedSince' => [ 'shape' => 'RenameSourceIfUnmodifiedSince', 'location' => 'header', 'locationName' => 'x-amz-rename-source-if-unmodified-since', ], 'ClientToken' => [ 'shape' => 'ClientToken', 'idempotencyToken' => true, 'location' => 'header', 'locationName' => 'x-amz-client-token', ], ], ], 'RenameSource' => [ 'type' => 'string', 'pattern' => '\\/?.+\\/.+', ], 'RenameSourceIfMatch' => [ 'type' => 'string', ], 'RenameSourceIfModifiedSince' => [ 'type' => 'timestamp', 'timestampFormat' => 'rfc822', ], 'RenameSourceIfNoneMatch' => [ 'type' => 'string', ], 'RenameSourceIfUnmodifiedSince' => [ 'type' => 'timestamp', 'timestampFormat' => 'rfc822', ], 'ReplaceKeyPrefixWith' => [ 'type' => 'string', ], 'ReplaceKeyWith' => [ 'type' => 'string', ], 'ReplicaKmsKeyID' => [ 'type' => 'string', ], 'ReplicaModifications' => [ 'type' => 'structure', 'required' => [ 'Status', ], 'members' => [ 'Status' => [ 'shape' => 'ReplicaModificationsStatus', ], ], ], 'ReplicaModificationsStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'ReplicationConfiguration' => [ 'type' => 'structure', 'required' => [ 'Role', 'Rules', ], 'members' => [ 'Role' => [ 'shape' => 'Role', ], 'Rules' => [ 'shape' => 'ReplicationRules', 'locationName' => 'Rule', ], ], ], 'ReplicationRule' => [ 'type' => 'structure', 'required' => [ 'Status', 'Destination', ], 'members' => [ 'ID' => [ 'shape' => 'ID', ], 'Priority' => [ 'shape' => 'Priority', ], 'Prefix' => [ 'shape' => 'Prefix', 'deprecated' => true, ], 'Filter' => [ 'shape' => 'ReplicationRuleFilter', ], 'Status' => [ 'shape' => 'ReplicationRuleStatus', ], 'SourceSelectionCriteria' => [ 'shape' => 'SourceSelectionCriteria', ], 'ExistingObjectReplication' => [ 'shape' => 'ExistingObjectReplication', ], 'Destination' => [ 'shape' => 'Destination', ], 'DeleteMarkerReplication' => [ 'shape' => 'DeleteMarkerReplication', ], ], ], 'ReplicationRuleAndOperator' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tags' => [ 'shape' => 'TagSet', 'flattened' => true, 'locationName' => 'Tag', ], ], ], 'ReplicationRuleFilter' => [ 'type' => 'structure', 'members' => [ 'Prefix' => [ 'shape' => 'Prefix', ], 'Tag' => [ 'shape' => 'Tag', ], 'And' => [ 'shape' => 'ReplicationRuleAndOperator', ], ], ], 'ReplicationRuleStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'ReplicationRules' => [ 'type' => 'list', 'member' => [ 'shape' => 'ReplicationRule', ], 'flattened' => true, ], 'ReplicationStatus' => [ 'type' => 'string', 'enum' => [ 'COMPLETE', 'PENDING', 'FAILED', 'REPLICA', 'COMPLETED', ], ], 'ReplicationTime' => [ 'type' => 'structure', 'required' => [ 'Status', 'Time', ], 'members' => [ 'Status' => [ 'shape' => 'ReplicationTimeStatus', ], 'Time' => [ 'shape' => 'ReplicationTimeValue', ], ], ], 'ReplicationTimeStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'ReplicationTimeValue' => [ 'type' => 'structure', 'members' => [ 'Minutes' => [ 'shape' => 'Minutes', ], ], ], 'RequestCharged' => [ 'type' => 'string', 'enum' => [ 'requester', ], ], 'RequestPayer' => [ 'type' => 'string', 'enum' => [ 'requester', ], ], 'RequestPaymentConfiguration' => [ 'type' => 'structure', 'required' => [ 'Payer', ], 'members' => [ 'Payer' => [ 'shape' => 'Payer', ], ], ], 'RequestProgress' => [ 'type' => 'structure', 'members' => [ 'Enabled' => [ 'shape' => 'EnableRequestProgress', ], ], ], 'RequestRoute' => [ 'type' => 'string', ], 'RequestToken' => [ 'type' => 'string', ], 'ResponseCacheControl' => [ 'type' => 'string', ], 'ResponseContentDisposition' => [ 'type' => 'string', ], 'ResponseContentEncoding' => [ 'type' => 'string', ], 'ResponseContentLanguage' => [ 'type' => 'string', ], 'ResponseContentType' => [ 'type' => 'string', ], 'ResponseExpires' => [ 'type' => 'timestamp', 'timestampFormat' => 'rfc822', ], 'Restore' => [ 'type' => 'string', ], 'RestoreExpiryDate' => [ 'type' => 'timestamp', ], 'RestoreObjectOutput' => [ 'type' => 'structure', 'members' => [ 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], 'RestoreOutputPath' => [ 'shape' => 'RestoreOutputPath', 'location' => 'header', 'locationName' => 'x-amz-restore-output-path', ], ], ], 'RestoreObjectRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'RestoreRequest' => [ 'shape' => 'RestoreRequest', 'locationName' => 'RestoreRequest', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'RestoreRequest', ], 'RestoreOutputPath' => [ 'type' => 'string', ], 'RestoreRequest' => [ 'type' => 'structure', 'members' => [ 'Days' => [ 'shape' => 'Days', ], 'GlacierJobParameters' => [ 'shape' => 'GlacierJobParameters', ], 'Type' => [ 'shape' => 'RestoreRequestType', ], 'Tier' => [ 'shape' => 'Tier', ], 'Description' => [ 'shape' => 'Description', ], 'SelectParameters' => [ 'shape' => 'SelectParameters', ], 'OutputLocation' => [ 'shape' => 'OutputLocation', ], ], ], 'RestoreRequestType' => [ 'type' => 'string', 'enum' => [ 'SELECT', ], ], 'RestoreStatus' => [ 'type' => 'structure', 'members' => [ 'IsRestoreInProgress' => [ 'shape' => 'IsRestoreInProgress', ], 'RestoreExpiryDate' => [ 'shape' => 'RestoreExpiryDate', ], ], ], 'Role' => [ 'type' => 'string', ], 'RoutingRule' => [ 'type' => 'structure', 'required' => [ 'Redirect', ], 'members' => [ 'Condition' => [ 'shape' => 'Condition', ], 'Redirect' => [ 'shape' => 'Redirect', ], ], ], 'RoutingRules' => [ 'type' => 'list', 'member' => [ 'shape' => 'RoutingRule', 'locationName' => 'RoutingRule', ], ], 'Rule' => [ 'type' => 'structure', 'required' => [ 'Prefix', 'Status', ], 'members' => [ 'Expiration' => [ 'shape' => 'LifecycleExpiration', ], 'ID' => [ 'shape' => 'ID', ], 'Prefix' => [ 'shape' => 'Prefix', ], 'Status' => [ 'shape' => 'ExpirationStatus', ], 'Transition' => [ 'shape' => 'Transition', ], 'NoncurrentVersionTransition' => [ 'shape' => 'NoncurrentVersionTransition', ], 'NoncurrentVersionExpiration' => [ 'shape' => 'NoncurrentVersionExpiration', ], 'AbortIncompleteMultipartUpload' => [ 'shape' => 'AbortIncompleteMultipartUpload', ], ], ], 'Rules' => [ 'type' => 'list', 'member' => [ 'shape' => 'Rule', ], 'flattened' => true, ], 'S3KeyFilter' => [ 'type' => 'structure', 'members' => [ 'FilterRules' => [ 'shape' => 'FilterRuleList', 'locationName' => 'FilterRule', ], ], ], 'S3Location' => [ 'type' => 'structure', 'required' => [ 'BucketName', 'Prefix', ], 'members' => [ 'BucketName' => [ 'shape' => 'BucketName', ], 'Prefix' => [ 'shape' => 'LocationPrefix', ], 'Encryption' => [ 'shape' => 'Encryption', ], 'CannedACL' => [ 'shape' => 'ObjectCannedACL', ], 'AccessControlList' => [ 'shape' => 'Grants', ], 'Tagging' => [ 'shape' => 'Tagging', ], 'UserMetadata' => [ 'shape' => 'UserMetadata', ], 'StorageClass' => [ 'shape' => 'StorageClass', ], ], ], 'S3RegionalOrS3ExpressBucketArnString' => [ 'type' => 'string', 'max' => 128, 'min' => 1, 'pattern' => 'arn:[^:]+:(s3|s3express):.*', ], 'S3TablesArn' => [ 'type' => 'string', ], 'S3TablesBucketArn' => [ 'type' => 'string', ], 'S3TablesBucketType' => [ 'type' => 'string', 'enum' => [ 'aws', 'customer', ], ], 'S3TablesDestination' => [ 'type' => 'structure', 'required' => [ 'TableBucketArn', 'TableName', ], 'members' => [ 'TableBucketArn' => [ 'shape' => 'S3TablesBucketArn', ], 'TableName' => [ 'shape' => 'S3TablesName', ], ], ], 'S3TablesDestinationResult' => [ 'type' => 'structure', 'required' => [ 'TableBucketArn', 'TableName', 'TableArn', 'TableNamespace', ], 'members' => [ 'TableBucketArn' => [ 'shape' => 'S3TablesBucketArn', ], 'TableName' => [ 'shape' => 'S3TablesName', ], 'TableArn' => [ 'shape' => 'S3TablesArn', ], 'TableNamespace' => [ 'shape' => 'S3TablesNamespace', ], ], ], 'S3TablesName' => [ 'type' => 'string', ], 'S3TablesNamespace' => [ 'type' => 'string', ], 'SSECustomerAlgorithm' => [ 'type' => 'string', ], 'SSECustomerKey' => [ 'type' => 'string', 'sensitive' => true, ], 'SSECustomerKeyMD5' => [ 'type' => 'string', ], 'SSEKMS' => [ 'type' => 'structure', 'required' => [ 'KeyId', ], 'members' => [ 'KeyId' => [ 'shape' => 'SSEKMSKeyId', ], ], 'locationName' => 'SSE-KMS', ], 'SSEKMSEncryption' => [ 'type' => 'structure', 'required' => [ 'KMSKeyArn', ], 'members' => [ 'KMSKeyArn' => [ 'shape' => 'NonEmptyKmsKeyArnString', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', ], ], 'locationName' => 'SSE-KMS', ], 'SSEKMSEncryptionContext' => [ 'type' => 'string', 'sensitive' => true, ], 'SSEKMSKeyId' => [ 'type' => 'string', 'sensitive' => true, ], 'SSES3' => [ 'type' => 'structure', 'members' => [], 'locationName' => 'SSE-S3', ], 'ScanRange' => [ 'type' => 'structure', 'members' => [ 'Start' => [ 'shape' => 'Start', ], 'End' => [ 'shape' => 'End', ], ], ], 'SelectObjectContentEventStream' => [ 'type' => 'structure', 'members' => [ 'Records' => [ 'shape' => 'RecordsEvent', ], 'Stats' => [ 'shape' => 'StatsEvent', ], 'Progress' => [ 'shape' => 'ProgressEvent', ], 'Cont' => [ 'shape' => 'ContinuationEvent', ], 'End' => [ 'shape' => 'EndEvent', ], ], 'eventstream' => true, ], 'SelectObjectContentOutput' => [ 'type' => 'structure', 'members' => [ 'Payload' => [ 'shape' => 'SelectObjectContentEventStream', ], ], 'payload' => 'Payload', ], 'SelectObjectContentRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'Expression', 'ExpressionType', 'InputSerialization', 'OutputSerialization', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'Expression' => [ 'shape' => 'Expression', ], 'ExpressionType' => [ 'shape' => 'ExpressionType', ], 'RequestProgress' => [ 'shape' => 'RequestProgress', ], 'InputSerialization' => [ 'shape' => 'InputSerialization', ], 'OutputSerialization' => [ 'shape' => 'OutputSerialization', ], 'ScanRange' => [ 'shape' => 'ScanRange', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], ], 'SelectParameters' => [ 'type' => 'structure', 'required' => [ 'InputSerialization', 'ExpressionType', 'Expression', 'OutputSerialization', ], 'members' => [ 'InputSerialization' => [ 'shape' => 'InputSerialization', ], 'ExpressionType' => [ 'shape' => 'ExpressionType', ], 'Expression' => [ 'shape' => 'Expression', ], 'OutputSerialization' => [ 'shape' => 'OutputSerialization', ], ], ], 'ServerSideEncryption' => [ 'type' => 'string', 'enum' => [ 'AES256', 'aws:fsx', 'aws:backup', 'aws:kms', 'aws:kms:dsse', ], ], 'ServerSideEncryptionByDefault' => [ 'type' => 'structure', 'required' => [ 'SSEAlgorithm', ], 'members' => [ 'SSEAlgorithm' => [ 'shape' => 'ServerSideEncryption', ], 'KMSMasterKeyID' => [ 'shape' => 'SSEKMSKeyId', ], ], ], 'ServerSideEncryptionConfiguration' => [ 'type' => 'structure', 'required' => [ 'Rules', ], 'members' => [ 'Rules' => [ 'shape' => 'ServerSideEncryptionRules', 'locationName' => 'Rule', ], ], ], 'ServerSideEncryptionRule' => [ 'type' => 'structure', 'members' => [ 'ApplyServerSideEncryptionByDefault' => [ 'shape' => 'ServerSideEncryptionByDefault', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', ], 'BlockedEncryptionTypes' => [ 'shape' => 'BlockedEncryptionTypes', ], ], ], 'ServerSideEncryptionRules' => [ 'type' => 'list', 'member' => [ 'shape' => 'ServerSideEncryptionRule', ], 'flattened' => true, ], 'SessionCredentialValue' => [ 'type' => 'string', 'sensitive' => true, ], 'SessionCredentials' => [ 'type' => 'structure', 'required' => [ 'AccessKeyId', 'SecretAccessKey', 'SessionToken', 'Expiration', ], 'members' => [ 'AccessKeyId' => [ 'shape' => 'AccessKeyIdValue', 'locationName' => 'AccessKeyId', ], 'SecretAccessKey' => [ 'shape' => 'SessionCredentialValue', 'locationName' => 'SecretAccessKey', ], 'SessionToken' => [ 'shape' => 'SessionCredentialValue', 'locationName' => 'SessionToken', ], 'Expiration' => [ 'shape' => 'SessionExpiration', 'locationName' => 'Expiration', ], ], ], 'SessionExpiration' => [ 'type' => 'timestamp', ], 'SessionMode' => [ 'type' => 'string', 'enum' => [ 'ReadOnly', 'ReadWrite', ], ], 'Setting' => [ 'type' => 'boolean', 'box' => true, ], 'SimplePrefix' => [ 'type' => 'structure', 'members' => [], 'locationName' => 'SimplePrefix', ], 'Size' => [ 'type' => 'long', 'box' => true, ], 'SkipValidation' => [ 'type' => 'boolean', 'box' => true, ], 'SourceSelectionCriteria' => [ 'type' => 'structure', 'members' => [ 'SseKmsEncryptedObjects' => [ 'shape' => 'SseKmsEncryptedObjects', ], 'ReplicaModifications' => [ 'shape' => 'ReplicaModifications', ], ], ], 'SseKmsEncryptedObjects' => [ 'type' => 'structure', 'required' => [ 'Status', ], 'members' => [ 'Status' => [ 'shape' => 'SseKmsEncryptedObjectsStatus', ], ], ], 'SseKmsEncryptedObjectsStatus' => [ 'type' => 'string', 'enum' => [ 'Enabled', 'Disabled', ], ], 'Start' => [ 'type' => 'long', 'box' => true, ], 'StartAfter' => [ 'type' => 'string', ], 'Stats' => [ 'type' => 'structure', 'members' => [ 'BytesScanned' => [ 'shape' => 'BytesScanned', ], 'BytesProcessed' => [ 'shape' => 'BytesProcessed', ], 'BytesReturned' => [ 'shape' => 'BytesReturned', ], ], ], 'StatsEvent' => [ 'type' => 'structure', 'members' => [ 'Details' => [ 'shape' => 'Stats', 'eventpayload' => true, ], ], 'event' => true, ], 'StorageClass' => [ 'type' => 'string', 'enum' => [ 'STANDARD', 'REDUCED_REDUNDANCY', 'STANDARD_IA', 'ONEZONE_IA', 'INTELLIGENT_TIERING', 'GLACIER', 'DEEP_ARCHIVE', 'OUTPOSTS', 'GLACIER_IR', 'SNOW', 'EXPRESS_ONEZONE', 'FSX_OPENZFS', 'FSX_ONTAP', 'AWS_BACKUP_WARM', 'AWS_BACKUP_LOW_COST_WARM', ], ], 'StorageClassAnalysis' => [ 'type' => 'structure', 'members' => [ 'DataExport' => [ 'shape' => 'StorageClassAnalysisDataExport', ], ], ], 'StorageClassAnalysisDataExport' => [ 'type' => 'structure', 'required' => [ 'OutputSchemaVersion', 'Destination', ], 'members' => [ 'OutputSchemaVersion' => [ 'shape' => 'StorageClassAnalysisSchemaVersion', ], 'Destination' => [ 'shape' => 'AnalyticsExportDestination', ], ], ], 'StorageClassAnalysisSchemaVersion' => [ 'type' => 'string', 'enum' => [ 'V_1', ], ], 'Suffix' => [ 'type' => 'string', ], 'TableSseAlgorithm' => [ 'type' => 'string', 'enum' => [ 'aws:kms', 'AES256', ], ], 'Tag' => [ 'type' => 'structure', 'required' => [ 'Key', 'Value', ], 'members' => [ 'Key' => [ 'shape' => 'ObjectKey', ], 'Value' => [ 'shape' => 'Value', ], ], ], 'TagCount' => [ 'type' => 'integer', 'box' => true, ], 'TagSet' => [ 'type' => 'list', 'member' => [ 'shape' => 'Tag', 'locationName' => 'Tag', ], ], 'Tagging' => [ 'type' => 'structure', 'required' => [ 'TagSet', ], 'members' => [ 'TagSet' => [ 'shape' => 'TagSet', ], ], ], 'TaggingDirective' => [ 'type' => 'string', 'enum' => [ 'COPY', 'REPLACE', ], ], 'TaggingHeader' => [ 'type' => 'string', ], 'TargetBucket' => [ 'type' => 'string', ], 'TargetGrant' => [ 'type' => 'structure', 'members' => [ 'Grantee' => [ 'shape' => 'Grantee', ], 'Permission' => [ 'shape' => 'BucketLogsPermission', ], ], ], 'TargetGrants' => [ 'type' => 'list', 'member' => [ 'shape' => 'TargetGrant', 'locationName' => 'Grant', ], ], 'TargetObjectKeyFormat' => [ 'type' => 'structure', 'members' => [ 'SimplePrefix' => [ 'shape' => 'SimplePrefix', 'locationName' => 'SimplePrefix', ], 'PartitionedPrefix' => [ 'shape' => 'PartitionedPrefix', 'locationName' => 'PartitionedPrefix', ], ], ], 'TargetPrefix' => [ 'type' => 'string', ], 'Tier' => [ 'type' => 'string', 'enum' => [ 'Standard', 'Bulk', 'Expedited', ], ], 'Tiering' => [ 'type' => 'structure', 'required' => [ 'Days', 'AccessTier', ], 'members' => [ 'Days' => [ 'shape' => 'IntelligentTieringDays', ], 'AccessTier' => [ 'shape' => 'IntelligentTieringAccessTier', ], ], ], 'TieringList' => [ 'type' => 'list', 'member' => [ 'shape' => 'Tiering', ], 'flattened' => true, ], 'Token' => [ 'type' => 'string', ], 'TooManyParts' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'TopicArn' => [ 'type' => 'string', ], 'TopicConfiguration' => [ 'type' => 'structure', 'required' => [ 'TopicArn', 'Events', ], 'members' => [ 'Id' => [ 'shape' => 'NotificationId', ], 'TopicArn' => [ 'shape' => 'TopicArn', 'locationName' => 'Topic', ], 'Events' => [ 'shape' => 'EventList', 'locationName' => 'Event', ], 'Filter' => [ 'shape' => 'NotificationConfigurationFilter', ], ], ], 'TopicConfigurationDeprecated' => [ 'type' => 'structure', 'members' => [ 'Id' => [ 'shape' => 'NotificationId', ], 'Events' => [ 'shape' => 'EventList', 'locationName' => 'Event', ], 'Event' => [ 'shape' => 'Event', 'deprecated' => true, ], 'Topic' => [ 'shape' => 'TopicArn', ], ], ], 'TopicConfigurationList' => [ 'type' => 'list', 'member' => [ 'shape' => 'TopicConfiguration', ], 'flattened' => true, ], 'Transition' => [ 'type' => 'structure', 'members' => [ 'Date' => [ 'shape' => 'Date', ], 'Days' => [ 'shape' => 'Days', ], 'StorageClass' => [ 'shape' => 'TransitionStorageClass', ], ], ], 'TransitionDefaultMinimumObjectSize' => [ 'type' => 'string', 'enum' => [ 'varies_by_storage_class', 'all_storage_classes_128K', ], ], 'TransitionList' => [ 'type' => 'list', 'member' => [ 'shape' => 'Transition', ], 'flattened' => true, ], 'TransitionStorageClass' => [ 'type' => 'string', 'enum' => [ 'GLACIER', 'STANDARD_IA', 'ONEZONE_IA', 'INTELLIGENT_TIERING', 'DEEP_ARCHIVE', 'GLACIER_IR', ], ], 'Type' => [ 'type' => 'string', 'enum' => [ 'CanonicalUser', 'AmazonCustomerByEmail', 'Group', ], ], 'URI' => [ 'type' => 'string', ], 'UnsupportedMediaType' => [ 'type' => 'structure', 'members' => [], 'error' => [ 'httpStatusCode' => 415, ], 'exception' => true, ], 'UpdateBucketMetadataAnnotationTableConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'AnnotationTableConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'AnnotationTableConfiguration' => [ 'shape' => 'AnnotationTableConfigurationUpdates', 'locationName' => 'AnnotationTableConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'AnnotationTableConfiguration', ], 'UpdateBucketMetadataInventoryTableConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'InventoryTableConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'InventoryTableConfiguration' => [ 'shape' => 'InventoryTableConfigurationUpdates', 'locationName' => 'InventoryTableConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'InventoryTableConfiguration', ], 'UpdateBucketMetadataJournalTableConfigurationRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'JournalTableConfiguration', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'JournalTableConfiguration' => [ 'shape' => 'JournalTableConfigurationUpdates', 'locationName' => 'JournalTableConfiguration', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'JournalTableConfiguration', ], 'UpdateObjectEncryptionRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'ObjectEncryption', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'querystring', 'locationName' => 'versionId', ], 'ObjectEncryption' => [ 'shape' => 'ObjectEncryption', 'locationName' => 'ObjectEncryption', 'xmlNamespace' => [ 'uri' => 'http://s3.amazonaws.com/doc/2006-03-01/', ], ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], ], 'payload' => 'ObjectEncryption', ], 'UpdateObjectEncryptionResponse' => [ 'type' => 'structure', 'members' => [ 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'UploadIdMarker' => [ 'type' => 'string', ], 'UploadPartCopyOutput' => [ 'type' => 'structure', 'members' => [ 'CopySourceVersionId' => [ 'shape' => 'CopySourceVersionId', 'location' => 'header', 'locationName' => 'x-amz-copy-source-version-id', ], 'CopyPartResult' => [ 'shape' => 'CopyPartResult', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], 'payload' => 'CopyPartResult', ], 'UploadPartCopyRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'CopySource', 'Key', 'PartNumber', 'UploadId', ], 'members' => [ 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'CopySource' => [ 'shape' => 'CopySource', 'location' => 'header', 'locationName' => 'x-amz-copy-source', ], 'CopySourceIfMatch' => [ 'shape' => 'CopySourceIfMatch', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-match', ], 'CopySourceIfModifiedSince' => [ 'shape' => 'CopySourceIfModifiedSince', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-modified-since', ], 'CopySourceIfNoneMatch' => [ 'shape' => 'CopySourceIfNoneMatch', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-none-match', ], 'CopySourceIfUnmodifiedSince' => [ 'shape' => 'CopySourceIfUnmodifiedSince', 'location' => 'header', 'locationName' => 'x-amz-copy-source-if-unmodified-since', ], 'CopySourceRange' => [ 'shape' => 'CopySourceRange', 'location' => 'header', 'locationName' => 'x-amz-copy-source-range', ], 'Key' => [ 'shape' => 'ObjectKey', 'location' => 'uri', 'locationName' => 'Key', ], 'PartNumber' => [ 'shape' => 'PartNumber', 'location' => 'querystring', 'locationName' => 'partNumber', ], 'UploadId' => [ 'shape' => 'MultipartUploadId', 'location' => 'querystring', 'locationName' => 'uploadId', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'CopySourceSSECustomerAlgorithm' => [ 'shape' => 'CopySourceSSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-copy-source-server-side-encryption-customer-algorithm', ], 'CopySourceSSECustomerKey' => [ 'shape' => 'CopySourceSSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-copy-source-server-side-encryption-customer-key', ], 'CopySourceSSECustomerKeyMD5' => [ 'shape' => 'CopySourceSSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-copy-source-server-side-encryption-customer-key-MD5', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], 'ExpectedSourceBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-source-expected-bucket-owner', ], ], ], 'UploadPartOutput' => [ 'type' => 'structure', 'members' => [ 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption', ], 'ETag' => [ 'shape' => 'ETag', 'location' => 'header', 'locationName' => 'ETag', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-aws-kms-key-id', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-bucket-key-enabled', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-request-charged', ], ], ], 'UploadPartRequest' => [ 'type' => 'structure', 'required' => [ 'Bucket', 'Key', 'PartNumber', 'UploadId', ], 'members' => [ 'Body' => [ 'shape' => 'Body', 'streaming' => true, ], 'Bucket' => [ 'shape' => 'BucketName', 'contextParam' => [ 'name' => 'Bucket', ], 'location' => 'uri', 'locationName' => 'Bucket', ], 'ContentLength' => [ 'shape' => 'ContentLength', 'location' => 'header', 'locationName' => 'Content-Length', ], 'ContentMD5' => [ 'shape' => 'ContentMD5', 'location' => 'header', 'locationName' => 'Content-MD5', ], 'ChecksumAlgorithm' => [ 'shape' => 'ChecksumAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-sdk-checksum-algorithm', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-checksum-xxhash128', ], 'Key' => [ 'shape' => 'ObjectKey', 'contextParam' => [ 'name' => 'Key', ], 'location' => 'uri', 'locationName' => 'Key', ], 'PartNumber' => [ 'shape' => 'PartNumber', 'location' => 'querystring', 'locationName' => 'partNumber', ], 'UploadId' => [ 'shape' => 'MultipartUploadId', 'location' => 'querystring', 'locationName' => 'uploadId', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-algorithm', ], 'SSECustomerKey' => [ 'shape' => 'SSECustomerKey', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-server-side-encryption-customer-key-MD5', ], 'RequestPayer' => [ 'shape' => 'RequestPayer', 'location' => 'header', 'locationName' => 'x-amz-request-payer', ], 'ExpectedBucketOwner' => [ 'shape' => 'AccountId', 'location' => 'header', 'locationName' => 'x-amz-expected-bucket-owner', ], ], 'payload' => 'Body', ], 'UserMetadata' => [ 'type' => 'list', 'member' => [ 'shape' => 'MetadataEntry', 'locationName' => 'MetadataEntry', ], ], 'Value' => [ 'type' => 'string', ], 'VersionCount' => [ 'type' => 'integer', 'box' => true, ], 'VersionIdMarker' => [ 'type' => 'string', ], 'VersioningConfiguration' => [ 'type' => 'structure', 'members' => [ 'MFADelete' => [ 'shape' => 'MFADelete', 'locationName' => 'MfaDelete', ], 'Status' => [ 'shape' => 'BucketVersioningStatus', ], ], ], 'WebsiteConfiguration' => [ 'type' => 'structure', 'members' => [ 'ErrorDocument' => [ 'shape' => 'ErrorDocument', ], 'IndexDocument' => [ 'shape' => 'IndexDocument', ], 'RedirectAllRequestsTo' => [ 'shape' => 'RedirectAllRequestsTo', ], 'RoutingRules' => [ 'shape' => 'RoutingRules', ], ], ], 'WebsiteRedirectLocation' => [ 'type' => 'string', ], 'WriteGetObjectResponseRequest' => [ 'type' => 'structure', 'required' => [ 'RequestRoute', 'RequestToken', ], 'members' => [ 'RequestRoute' => [ 'shape' => 'RequestRoute', 'hostLabel' => true, 'location' => 'header', 'locationName' => 'x-amz-request-route', ], 'RequestToken' => [ 'shape' => 'RequestToken', 'location' => 'header', 'locationName' => 'x-amz-request-token', ], 'Body' => [ 'shape' => 'Body', 'streaming' => true, ], 'StatusCode' => [ 'shape' => 'GetObjectResponseStatusCode', 'location' => 'header', 'locationName' => 'x-amz-fwd-status', ], 'ErrorCode' => [ 'shape' => 'ErrorCode', 'location' => 'header', 'locationName' => 'x-amz-fwd-error-code', ], 'ErrorMessage' => [ 'shape' => 'ErrorMessage', 'location' => 'header', 'locationName' => 'x-amz-fwd-error-message', ], 'AcceptRanges' => [ 'shape' => 'AcceptRanges', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-accept-ranges', ], 'CacheControl' => [ 'shape' => 'CacheControl', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Cache-Control', ], 'ContentDisposition' => [ 'shape' => 'ContentDisposition', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Content-Disposition', ], 'ContentEncoding' => [ 'shape' => 'ContentEncoding', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Content-Encoding', ], 'ContentLanguage' => [ 'shape' => 'ContentLanguage', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Content-Language', ], 'ContentLength' => [ 'shape' => 'ContentLength', 'location' => 'header', 'locationName' => 'Content-Length', ], 'ContentRange' => [ 'shape' => 'ContentRange', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Content-Range', ], 'ContentType' => [ 'shape' => 'ContentType', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Content-Type', ], 'ChecksumCRC32' => [ 'shape' => 'ChecksumCRC32', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-crc32', ], 'ChecksumCRC32C' => [ 'shape' => 'ChecksumCRC32C', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-crc32c', ], 'ChecksumCRC64NVME' => [ 'shape' => 'ChecksumCRC64NVME', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-crc64nvme', ], 'ChecksumSHA1' => [ 'shape' => 'ChecksumSHA1', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-sha1', ], 'ChecksumSHA256' => [ 'shape' => 'ChecksumSHA256', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-sha256', ], 'ChecksumSHA512' => [ 'shape' => 'ChecksumSHA512', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-sha512', ], 'ChecksumMD5' => [ 'shape' => 'ChecksumMD5', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-md5', ], 'ChecksumXXHASH64' => [ 'shape' => 'ChecksumXXHASH64', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-xxhash64', ], 'ChecksumXXHASH3' => [ 'shape' => 'ChecksumXXHASH3', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-xxhash3', ], 'ChecksumXXHASH128' => [ 'shape' => 'ChecksumXXHASH128', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-checksum-xxhash128', ], 'DeleteMarker' => [ 'shape' => 'DeleteMarker', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-delete-marker', ], 'ETag' => [ 'shape' => 'ETag', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-ETag', ], 'Expires' => [ 'shape' => 'Expires', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Expires', ], 'Expiration' => [ 'shape' => 'Expiration', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-expiration', ], 'LastModified' => [ 'shape' => 'LastModified', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-Last-Modified', ], 'MissingMeta' => [ 'shape' => 'MissingMeta', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-missing-meta', ], 'Metadata' => [ 'shape' => 'Metadata', 'location' => 'headers', 'locationName' => 'x-amz-meta-', ], 'ObjectLockMode' => [ 'shape' => 'ObjectLockMode', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-object-lock-mode', ], 'ObjectLockLegalHoldStatus' => [ 'shape' => 'ObjectLockLegalHoldStatus', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-object-lock-legal-hold', ], 'ObjectLockRetainUntilDate' => [ 'shape' => 'ObjectLockRetainUntilDate', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-object-lock-retain-until-date', ], 'PartsCount' => [ 'shape' => 'PartsCount', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-mp-parts-count', ], 'ReplicationStatus' => [ 'shape' => 'ReplicationStatus', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-replication-status', ], 'RequestCharged' => [ 'shape' => 'RequestCharged', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-request-charged', ], 'Restore' => [ 'shape' => 'Restore', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-restore', ], 'ServerSideEncryption' => [ 'shape' => 'ServerSideEncryption', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-server-side-encryption', ], 'SSECustomerAlgorithm' => [ 'shape' => 'SSECustomerAlgorithm', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm', ], 'SSEKMSKeyId' => [ 'shape' => 'SSEKMSKeyId', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id', ], 'SSECustomerKeyMD5' => [ 'shape' => 'SSECustomerKeyMD5', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-server-side-encryption-customer-key-MD5', ], 'StorageClass' => [ 'shape' => 'StorageClass', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-storage-class', ], 'TagCount' => [ 'shape' => 'TagCount', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-tagging-count', ], 'VersionId' => [ 'shape' => 'ObjectVersionId', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-version-id', ], 'BucketKeyEnabled' => [ 'shape' => 'BucketKeyEnabled', 'location' => 'header', 'locationName' => 'x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled', ], ], 'payload' => 'Body', ], 'WriteOffsetBytes' => [ 'type' => 'long', 'box' => true, ], 'Years' => [ 'type' => 'integer', 'box' => true, ], ], 'clientContextParams' => [ 'Accelerate' => [ 'documentation' => 'Enables this client to use S3 Transfer Acceleration endpoints.', 'type' => 'boolean', ], 'DisableMultiRegionAccessPoints' => [ 'documentation' => 'Disables this client\'s usage of Multi-Region Access Points.', 'type' => 'boolean', ], 'DisableS3ExpressSessionAuth' => [ 'documentation' => 'Disables this client\'s usage of Session Auth for S3Express buckets and reverts to using conventional SigV4 for those.', 'type' => 'boolean', ], 'ForcePathStyle' => [ 'documentation' => 'Forces this client to use path-style addressing for buckets.', 'type' => 'boolean', ], 'UseArnRegion' => [ 'documentation' => 'Enables this client to use an ARN\'s region when constructing an endpoint instead of the client\'s configured region.', 'type' => 'boolean', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/endpoint-bdd-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/endpoint-bdd-1.json.php deleted file mode 100644 index 4f068163e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/endpoint-bdd-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.1', 'parameters' => [ 'Bucket' => [ 'required' => false, 'documentation' => 'The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket.', 'type' => 'string', ], 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], 'ForcePathStyle' => [ 'builtIn' => 'AWS::S3::ForcePathStyle', 'required' => true, 'default' => false, 'documentation' => 'When true, force a path-style endpoint to be used where the bucket name is part of the path.', 'type' => 'boolean', ], 'Accelerate' => [ 'builtIn' => 'AWS::S3::Accelerate', 'required' => true, 'default' => false, 'documentation' => 'When true, use S3 Accelerate. NOTE: Not all regions support S3 accelerate.', 'type' => 'boolean', ], 'UseGlobalEndpoint' => [ 'builtIn' => 'AWS::S3::UseGlobalEndpoint', 'required' => true, 'default' => false, 'documentation' => 'Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.', 'type' => 'boolean', ], 'UseObjectLambdaEndpoint' => [ 'required' => false, 'documentation' => 'Internal parameter to use object lambda endpoint for an operation (eg: WriteGetObjectResponse)', 'type' => 'boolean', ], 'Key' => [ 'required' => false, 'documentation' => 'The S3 Key used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Key.', 'type' => 'string', ], 'Prefix' => [ 'required' => false, 'documentation' => 'The S3 Prefix used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Prefix.', 'type' => 'string', ], 'CopySource' => [ 'required' => false, 'documentation' => 'The Copy Source used for Copy Object request. This is an optional parameter that will be set automatically for operations that are scoped to Copy Source.', 'type' => 'string', ], 'DisableAccessPoints' => [ 'required' => false, 'documentation' => 'Internal parameter to disable Access Point Buckets', 'type' => 'boolean', ], 'DisableMultiRegionAccessPoints' => [ 'builtIn' => 'AWS::S3::DisableMultiRegionAccessPoints', 'required' => true, 'default' => false, 'documentation' => 'Whether multi-region access points (MRAP) should be disabled.', 'type' => 'boolean', ], 'UseArnRegion' => [ 'builtIn' => 'AWS::S3::UseArnRegion', 'required' => false, 'documentation' => 'When an Access Point ARN is provided and this flag is enabled, the SDK MUST use the ARN\'s region when constructing the endpoint instead of the client\'s configured region.', 'type' => 'boolean', ], 'UseS3ExpressControlEndpoint' => [ 'required' => false, 'documentation' => 'Internal parameter to indicate whether S3Express operation should use control plane, (ex. CreateBucket)', 'type' => 'boolean', ], 'DisableS3ExpressSessionAuth' => [ 'required' => false, 'documentation' => 'Parameter to indicate whether S3Express session auth should be disabled', 'type' => 'boolean', ], ], 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 6, true, ], ], '', ], ], '--x-s3', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 7, true, ], ], '', ], ], '--xa-s3', ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 7, true, ], 'assign' => 'accessPointSuffix', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'accessPointSuffix', ], '--op-s3', ], ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 8, 12, true, ], 'assign' => 'regionPrefix', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 32, 49, true, ], 'assign' => 'outpostId_ssa_2', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 49, 50, true, ], 'assign' => 'hardwareType', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'ForcePathStyle', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'partitionResult', ], 'name', ], ], 'aws-cn', ], ], [ 'fn' => 'ite', 'argv' => [ [ 'ref' => 'UseDualStack', ], '.dualstack', '', ], 'assign' => '_s3e_ds', ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'outpostId_ssa_2', ], false, ], ], [ 'fn' => 'ite', 'argv' => [ [ 'ref' => 'UseFIPS', ], '-fips', '', ], 'assign' => '_s3e_fips', ], [ 'fn' => 'ite', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], false, ], ], 'sigv4', 'sigv4-s3express', ], 'assign' => '_s3e_auth', ], [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'ref' => 'UseS3ExpressControlEndpoint', ], false, ], ], true, ], ], [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'scheme', ], ], 'http', ], ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'Region', ], false, ], ], [ 'fn' => 'aws.parseArn', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'bucketArn', ], [ 'fn' => 'getAttr', 'argv' => [ [ 'fn' => 'split', 'argv' => [ [ 'ref' => 'Bucket', ], '--', 0, ], ], '[-2]', ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 4, false, ], ], '', ], ], 'arn:', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 16, 18, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 21, 23, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 27, 29, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'regionPrefix', ], 'beta', ], ], [ 'fn' => 'uriEncode', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'uri_encoded_bucket', ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'Region', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'ref' => 'UseObjectLambdaEndpoint', ], false, ], ], true, ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[0]', ], 'assign' => 'arnType', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'arnType', ], '', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'arnType', ], 'accesspoint', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[1]', ], 'assign' => 'accessPointName_ssa_1', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'accessPointName_ssa_1', ], '', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], '', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 14, 16, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'hardwareType', ], 'e', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'hardwareType', ], 'o', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 19, 21, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'service', ], ], 's3-object-lambda', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'ref' => 'DisableAccessPoints', ], false, ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'service', ], ], 's3-outposts', ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], ], 'assign' => 'bucketPartition', ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'accessPointName_ssa_1', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 26, 28, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 15, 17, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[4]', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 20, 22, true, ], ], '', ], ], '--', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[1]', ], 'assign' => 'outpostId_ssa_1', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'ref' => 'UseArnRegion', ], true, ], ], true, ], ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'outpostId_ssa_1', ], false, ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[2]', ], 'assign' => 'outpostType', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketPartition', ], 'name', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'partitionResult', ], 'name', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableMultiRegionAccessPoints', ], true, ], ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'partition', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'partitionResult', ], 'name', ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'accountId', ], ], '', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'service', ], ], 's3', ], ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'accountId', ], ], false, ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[3]', ], 'assign' => 'accessPointName_ssa_2', ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'accessPointName_ssa_1', ], false, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'outpostType', ], 'accesspoint', ], ], [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'accessPointName_ssa_2', ], false, ], ], ], 'results' => [ [ 'conditions' => [], 'error' => 'Accelerate cannot be used with FIPS', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Cannot set dual-stack in combination with a custom endpoint.', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'A custom endpoint cannot be combined with FIPS', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'A custom endpoint cannot be combined with S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Partition does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3Express does not support S3 Accelerate.', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => '{_s3e_auth}', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => '{_s3e_auth}', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'S3Express bucket name is not a valid virtual hostable name.', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3express-control{_s3e_fips}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express{_s3e_fips}-{s3expressAvailabilityZoneId}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => '{_s3e_auth}', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Unrecognized S3Express bucket name format.', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => '{_s3e_auth}', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3express-control{_s3e_fips}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Expected a endpoint to be specified but no endpoint was found', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.ec2.{url#authority}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.ec2.s3-outposts.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.op-{outpostId_ssa_2}.{url#authority}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.op-{outpostId_ssa_2}.s3-outposts.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Outposts Bucket alias - it must be a valid bucket name.', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Custom endpoint `{Endpoint}` was not a valid URI', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 Accelerate cannot be used in this region', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid region: region was not a valid DNS name.', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 Object Lambda does not support Dual-stack', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 Object Lambda does not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Access points are not supported for this operation', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Missing account id', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{accessPointName_ssa_1}-{bucketArn#accountId}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName_ssa_1}`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: bucket ARN is missing a region', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Access Points do not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{accessPointName_ssa_1}-{bucketArn#accountId}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 MRAP does not support dual-stack', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 MRAP does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 MRAP does not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid configuration: Multi-Region Access Point ARNs are disabled.', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_1}.accesspoint.s3-global.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3', 'signingRegionSet' => [ '*', ], ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Client was configured for partition `{partitionResult#name}` but bucket referred to partition `{bucketArn#partition}`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Access Point Name', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 Outposts does not support Dual-stack', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 Outposts does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'S3 Outposts does not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Arn: Outpost Access Point ARN contains sub resources', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_2}-{bucketArn#accountId}.{outpostId_ssa_1}.{url#authority}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName_ssa_2}-{bucketArn#accountId}.{outpostId_ssa_1}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName_ssa_2}`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Expected an outpost type `accesspoint`, found {outpostType}', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: expected an access point name', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Expected a 4-component resource', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId_ssa_1}`', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The Outpost Id was not set', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: No ARN type specified', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid ARN: `{Bucket}` was not a valid ARN', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Path-style addressing cannot be used with ARN buckets', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Path-style addressing cannot be used with S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'A region must be set when sending requests to S3.', 'type' => 'error', ], ], 'root' => 2, 'nodeCount' => 553, 'nodes' => '/////wAAAAH/////AAAAAAAAAAMF9eFzAAAAAQAAAagAAAAEAAAAAgAAARAAAAAFAAAAAwAAAOkAAAAGAAAABAAAAFUAAAAHAAAABQAAAA8AAAAIAAAACAAAAAkF9eFzAAAAEAAAAAoAAAANAAAAEgAAAAsAAAANAAAAEwAAAAwAAAANAAAAFgX14Q4AAAANAAAAIwAAAA4F9eEqAAAAJAX14WcAAAGzAAAABgAAAQ8AAAAQAAAABwAAAQ4AAAARAAAACAAAABMAAAASAAAADgAAAfUAAABqAAAACQAAABQAAAAYAAAACgAAABUAAAAYAAAACwAAABYAAAAYAAAADAAAABcAAAAYAAAADQAAAiMAAAAYAAAADgAAAE0AAAAZAAAAFAAAAEkAAAAaAAAAGgAAABsAAABOAAAAJQAAABwF9eFWAAAAJgX14VYAAAAdAAAAJwAAAC8AAAAeAAAAMAX14ToAAAAfAAAAMgAAACAF9eFVAAAAMwAAACEAAACIAAAANwX14UwAAAAiAAAAOwAAACMF9eFUAAAAPAAAACcAAAAkAAAAPQAAACUF9eFTAAAAPgAAACYAAACSAAAAPwAAACkF9eEuAAAAPQAAACgF9eFTAAAAPgAAACkAAACWAAAAQAAAACoF9eE2AAAAQgAAACsF9eE1AAAARgAAACwF9eE0AAAARwAAAC0F9eFRAAAASQAAAC4F9eFQAAAASgX14U4F9eFPAAAAKAAAADAF9eE5AAAAKQX14TkAAAAxAAAAKgAAALkAAAAyAAAAMAAAAD4AAAAzAAAAMQX14S0AAAA0AAAAMwAAADUAAAIOAAAAPAAAADgAAAA2AAAAPgX14TcAAAA3AAAAPwAAADkF9eEuAAAAPgX14TcAAAA5AAAAQAAAADoF9eE2AAAAQgAAADsF9eE1AAAARQAAADwF9eFBAAAARgAAAD0F9eE0AAAASAX14UAF9eEzAAAAMQX14S0AAAA/AAAAMwAAAEAAAAIOAAAAPAAAAEMAAABBAAAAPgX14TcAAABCAAAAPwAAAEQF9eEuAAAAPgX14TcAAABEAAAAQAAAAEUF9eE2AAAAQgAAAEYF9eE1AAAARAX14S8AAABHAAAARgAAAEgF9eE0AAAASAX14TIF9eEzAAAAGQAAAEoF9eEqAAAALgX14ScAAABLAAAAOQAAAEwF9eEpAAAAOgX14SgF9eEpAAAAGgX14VgAAABOAAAAHAX14VcAAABPAAAAIgAAAFIAAABQAAAAIwAAAFEAAAIhAAAAJAX14WcF9eFzAAAALgX14WEAAABTAAAAOQAAAFQF9eFjAAAAOgX14WIF9eFjAAAABQAAAGUAAABWAAAACAAAAFcF9eFzAAAAEAAAAFgAAABZAAAAEgAAAFsAAABZAAAAEwAAAFoAAABcAAAAFQAAAGEAAABfAAAAEwAAAF0AAABcAAAAFQAAAGIAAABfAAAAFQAAAGEAAABeAAAAFgX14Q4AAABfAAAAIwAAAGAF9eEqAAAAJAX14WcF9eEqAAAAFgX14Q0AAABiAAAAIwAAAGMF9eEqAAAAJAX14WUAAABkAAAALgX14W4F9eFvAAAABgAAANYAAABmAAAABwAAANAAAABnAAAACAAAAHcAAABoAAAADgAAAHYAAABpAAAAFQAAAGoF9eEXAAAAGgAAAGsAAAH2AAAAJQAAAGwF9eFWAAAAJgX14VYAAABtAAAAJwAAAHAAAABuAAAAMAX14ToAAABvAAAAMgAAAIgF9eFVAAAAKAAAAHEF9eE5AAAAKQX14TkAAAByAAAAKgAAAHMAAAH0AAAAMAX14TgAAAB0AAAANAAAAHUF9eFIAAAAQQX14UUF9eFIAAAAFQAAAfUF9eEXAAAACQAAAHgAAAB8AAAACgAAAHkAAAB8AAAACwAAAHoAAAB8AAAADAAAAHsAAAB8AAAADQAAAMoAAAB8AAAADgAAAMMAAAB9AAAAFAAAAL4AAAB+AAAAFQAAAH8F9eEXAAAAFwAAAIAAAACBAAAAGAAAAL0AAACBAAAAGgAAAIIAAADFAAAAJQAAAIMF9eFWAAAAJgX14VYAAACEAAAAJwAAAJ8AAACFAAAAMAX14ToAAACGAAAAMgAAAIcF9eFVAAAAMwAAAI0AAACIAAAANwX14UwAAACJAAAAOwAAAIoF9eFUAAAAPAX14VMAAACLAAAAPQAAAIwF9eFTAAAAPwX14VMF9eEuAAAANwX14UwAAACOAAAAOwAAAI8F9eFUAAAAPAAAAJQAAACQAAAAPQAAAJEF9eFTAAAAPgAAAJMAAACSAAAAPwAAAJYF9eEuAAAAPwAAAJkF9eEuAAAAPQAAAJUF9eFTAAAAPgAAAJkAAACWAAAAQAAAAJcF9eE2AAAAQgAAAJgF9eE1AAAARgX14VIF9eE0AAAAQAAAAJoF9eE2AAAAQgAAAJsF9eE1AAAARgAAAJwF9eE0AAAARwAAAJ0F9eFRAAAASQAAAJ4F9eFQAAAASgX14U0F9eFPAAAAKAAAAKAF9eE5AAAAKQX14TkAAAChAAAAKgAAALkAAACiAAAAMAAAAK4AAACjAAAAMQX14S0AAACkAAAAMwAAAKUAAAIOAAAAPAAAAKgAAACmAAAAPgX14TcAAACnAAAAPwAAAKkF9eEuAAAAPgX14TcAAACpAAAAQAAAAKoF9eE2AAAAQgAAAKsF9eE1AAAARQAAAKwF9eFBAAAARgAAAK0F9eE0AAAASAX14T8F9eEzAAAAMQX14S0AAACvAAAAMwAAALAAAAIOAAAAPAAAALMAAACxAAAAPgX14TcAAACyAAAAPwAAALQF9eEuAAAAPgX14TcAAAC0AAAAQAAAALUF9eE2AAAAQgAAALYF9eE1AAAARAX14S8AAAC3AAAARgAAALgF9eE0AAAASAX14TAF9eEzAAAAMAX14TgAAAC6AAAANAAAALsF9eFIAAAAQQX14UUAAAC8AAAAQwX14UYF9eFHAAAAGQX14SQF9eEqAAAAFQAAAL8F9eEXAAAAGQAAAMAF9eEqAAAAHgAAAMIAAADBAAAALgX14SIF9eEkAAAALgX14SEF9eEjAAAAFQAAAMQF9eEXAAAAGgX14VgAAADFAAAAHAX14VcAAADGAAAAIgAAAMkAAADHAAAAIwAAAMgAAAIhAAAAJAX14WUF9eFzAAAALgX14V8F9eFgAAAAEQAAAMsF9eEWAAAAFAAAAMwF9eEVAAAAFQAAAM0AAAImAAAAIQAAAM4AAAImAAAALAX14RAAAADPAAAALQX14RIF9eEUAAAACAAAANEAAADXAAAAEAAAANIAAADcAAAAEgAAANMAAADcAAAAEwAAANQAAADgAAAAFAAAANUAAADjAAAAFQAAAOcAAAGRAAAACAAAANoAAADXAAAAEwAAANgF9eEJAAAAFAAAANkAAADjAAAAFQAAAOcF9eEJAAAAEAAAANsAAADcAAAAEgAAAN8AAADcAAAAEwAAAN0AAADgAAAAFAAAAN4AAADjAAAAFQAAAOcF9eEMAAAAEwAAAOIAAADgAAAAFAAAAOEF9eEJAAAAFQX14QkF9eEMAAAAFAAAAOYAAADjAAAAFQAAAOQF9eEJAAAAHgAAAOUF9eEJAAAAIgX14QcF9eEJAAAAFQAAAOcAAAGfAAAAHgAAAOgF9eEIAAAAIgX14QcF9eEIAAAABAX14QIAAADqAAAABQAAAOsAAAHgAAAABgAAAQ8AAADsAAAABwAAAQ4AAADtAAAACAAAAO4AAAHrAAAACQAAAO8AAADzAAAACgAAAPAAAADzAAAACwAAAPEAAADzAAAADAAAAPIAAADzAAAADQAAAiMAAADzAAAADgAAAQoAAAD0AAAAFAAAAQgAAAD1AAAAGgAAAPYAAAELAAAAJQAAAPcF9eFWAAAAJgX14VYAAAD4AAAAJwAAAPkAAAIGAAAAKAAAAPoF9eE5AAAAKQX14TkAAAD7AAAAKgAAAhoAAAD8AAAAMAX14SsAAAD9AAAAMQX14S0AAAD+AAAAMwAAAP8AAAIOAAAAPAAAAQIAAAEAAAAAPgX14TcAAAEBAAAAPwAAAQMF9eEuAAAAPgX14TcAAAEDAAAAQAAAAQQF9eE2AAAAQgAAAQUF9eE1AAAARQAAAQYF9eFBAAAARgAAAQcF9eE0AAAASAX14T4F9eEzAAAAGQAAAQkF9eEqAAAALgX14R8F9eEgAAAAGgX14VgAAAELAAAAHAX14VcAAAEMAAAAIgAAAQ0AAAIgAAAALgX14V0F9eFeAAAACAAAAY0F9eEJAAAACAAAAZcF9eEJAAAAAwAAAVoAAAERAAAABAX14QMAAAESAAAABQAAARwAAAETAAAACAAAARQF9eFzAAAADwX14QUAAAEVAAAAEAAAARYAAAEZAAAAEgAAARcAAAEZAAAAEwAAARgAAAEZAAAAFgX14Q4AAAEZAAAAIwAAARoF9eEqAAAAJAX14WYAAAEbAAAALgX14WoF9eFrAAAABgAAAZUAAAEdAAAABwAAAYsAAAEeAAAACAAAAScAAAEfAAAADgAAAfUAAAEgAAAAGgAAASEAAAH2AAAAJQAAASIF9eFWAAAAJgX14VYAAAEjAAAAJwAAASQAAAEzAAAAKAAAASUF9eE5AAAAKQX14TkAAAEmAAAAKgAAAU8AAAH0AAAACQAAASgAAAEsAAAACgAAASkAAAEsAAAACwAAASoAAAEsAAAADAAAASsAAAEsAAAADQAAAYoAAAEsAAAADgAAAVMAAAEtAAAADwX14QUAAAEuAAAAFAAAAVEAAAEvAAAAGgAAATAAAAFVAAAAJQAAATEF9eFWAAAAJgX14VYAAAEyAAAAJwAAATUAAAEzAAAAMAX14ToAAAE0AAAAMgX14UoF9eFVAAAAKAAAATYF9eE5AAAAKQX14TkAAAE3AAAAKgAAAU8AAAE4AAAAMAAAAUQAAAE5AAAAMQX14S0AAAE6AAAAMwAAATsAAAIOAAAAPAAAAT4AAAE8AAAAPgX14TcAAAE9AAAAPwAAAT8F9eEuAAAAPgX14TcAAAE/AAAAQAAAAUAF9eE2AAAAQgAAAUEF9eE1AAAARQAAAUIF9eFBAAAARgAAAUMF9eE0AAAASAX14T0F9eEzAAAAMQX14S0AAAFFAAAAMwAAAUYAAAIOAAAAPAAAAUkAAAFHAAAAPgX14TcAAAFIAAAAPwAAAUoF9eEuAAAAPgX14TcAAAFKAAAAQAAAAUsF9eE2AAAAQgAAAUwF9eE1AAAARAX14S8AAAFNAAAARgAAAU4F9eE0AAAASAX14TEF9eEzAAAAMAX14TgAAAFQAAAANAX14UMF9eFIAAAAGQAAAVIF9eEqAAAALgX14RsF9eEcAAAADwX14QUAAAFUAAAAGgX14VgAAAFVAAAAHAX14VcAAAFWAAAAIgAAAVkAAAFXAAAAIwAAAVgAAAIhAAAAJAX14WYF9eFzAAAALgX14VsF9eFcAAAABAX14QIAAAFbAAAABQAAAWUAAAFcAAAACAAAAV0F9eFzAAAADwX14QUAAAFeAAAAEAAAAV8AAAFiAAAAEgAAAWAAAAFiAAAAEwAAAWEAAAFiAAAAFgX14Q4AAAFiAAAAIwAAAWMF9eEqAAAAJAX14SsAAAFkAAAALgX14WgF9eFpAAAABgAAAZUAAAFmAAAABwAAAYsAAAFnAAAACAAAAWgAAAHrAAAACQAAAWkAAAFtAAAACgAAAWoAAAFtAAAACwAAAWsAAAFtAAAADAAAAWwAAAFtAAAADQAAAYoAAAFtAAAADgAAAYUAAAFuAAAADwX14QUAAAFvAAAAFAAAAYMAAAFwAAAAGgAAAXEAAAGHAAAAJQAAAXIF9eFWAAAAJgX14VYAAAFzAAAAJwAAAXQAAAIGAAAAKAAAAXUF9eE5AAAAKQX14TkAAAF2AAAAKgAAAhoAAAF3AAAAMAX14SsAAAF4AAAAMQX14S0AAAF5AAAAMwAAAXoAAAIOAAAAPAAAAX0AAAF7AAAAPgX14TcAAAF8AAAAPwAAAX4F9eEuAAAAPgX14TcAAAF+AAAAQAAAAX8F9eE2AAAAQgAAAYAF9eE1AAAARQAAAYEF9eFBAAAARgAAAYIF9eE0AAAASAX14TwF9eEzAAAAGQAAAYQF9eEqAAAALgX14RkF9eEaAAAADwX14QUAAAGGAAAAGgX14VgAAAGHAAAAHAX14VcAAAGIAAAAIgAAAYkAAAIgAAAALgX14VkF9eFaAAAADwX14QUAAAIjAAAACAAAAYwF9eEJAAAADwX14QUAAAGNAAAAEAAAAY4AAAGaAAAAEgAAAY8AAAGaAAAAEwAAAZAAAAGaAAAAFAAAAZEF9eEJAAAAGwAAAZIF9eEMAAAAHQX14QsAAAGTAAAAHwX14QsAAAGUAAAAIAX14QsAAAGmAAAACAAAAZYF9eEJAAAADwX14QUAAAGXAAAAEAAAAZgAAAGaAAAAEgAAAZkAAAGaAAAAEwAAAZsAAAGaAAAAFAX14QwF9eEJAAAAFAAAAZ4AAAGcAAAAFgAAAZ0F9eEJAAAAIgX14QoF9eEJAAAAFgAAAaAAAAGfAAAAGwAAAaMF9eEMAAAAGwAAAaIAAAGhAAAAIgX14QoF9eEMAAAAIgX14QoAAAGjAAAAKwX14QsAAAGkAAAALwX14QsAAAGlAAAANQX14QsAAAGmAAAANgX14QsAAAGnAAAAOAX14QsF9eEMAAAAAgX14QEAAAGpAAAAAwAAAd4AAAGqAAAABAX14QQAAAGrAAAABQAAAbYAAAGsAAAACAAAAa0F9eFzAAAAEAAAAa4AAAGxAAAAEgAAAa8AAAGxAAAAEwAAAbAAAAGxAAAAFgX14Q4AAAGxAAAAIwAAAbIF9eEqAAAAJAX14SwAAAGzAAAALgX14XAAAAG0AAAAOQAAAbUF9eFyAAAAOgX14XEF9eFyAAAABgX14QYAAAG3AAAABwX14QYAAAG4AAAACAAAAcIAAAG5AAAADgAAAfUAAAG6AAAAGgAAAbsAAAH2AAAAJQAAAbwF9eFWAAAAJgX14VYAAAG9AAAAJwAAAb4AAAHRAAAAKAAAAb8F9eE5AAAAKQX14TkAAAHAAAAAKgAAAdcAAAHBAAAAMAX14SwAAAH0AAAACQAAAcMAAAHHAAAACgAAAcQAAAHHAAAACwAAAcUAAAHHAAAADAAAAcYAAAHHAAAADQAAAiMAAAHHAAAADgAAAdkAAAHIAAAADwAAAcwAAAHJAAAAFAAAAcoAAAHNAAAAGQAAAcsF9eEqAAAALgX14SUF9eEmAAAAFAAAAhwAAAHNAAAAGgAAAc4AAAHaAAAAJQAAAc8F9eFWAAAAJgX14VYAAAHQAAAAJwAAAdMAAAHRAAAAMAX14ToAAAHSAAAAMgX14UsF9eFVAAAAKAAAAdQF9eE5AAAAKQX14TkAAAHVAAAAKgAAAdcAAAHWAAAAMAX14SwAAAIMAAAAMAX14SwAAAHYAAAANAX14UQF9eFIAAAAGgX14VgAAAHaAAAAHAX14VcAAAHbAAAAIgX14WQAAAHcAAAAIwAAAd0AAAIhAAAAJAX14SwF9eFzAAAABAX14QIAAAHfAAAABQAAAegAAAHgAAAACAAAAeEF9eFzAAAAEAAAAeIAAAHlAAAAEgAAAeMAAAHlAAAAEwAAAeQAAAHlAAAAFgX14Q4AAAHlAAAAIwAAAeYF9eEqAAAAJAX14SsAAAHnAAAALgX14WwF9eFtAAAABgX14QYAAAHpAAAABwX14QYAAAHqAAAACAAAAfcAAAHrAAAADgAAAfUAAAHsAAAAGgAAAe0AAAH2AAAAJQAAAe4F9eFWAAAAJgX14VYAAAHvAAAAJwAAAfAAAAIGAAAAKAAAAfEF9eE5AAAAKQX14TkAAAHyAAAAKgAAAhoAAAHzAAAAMAX14SsAAAH0AAAAMQX14S0AAAIOAAAAGgX14VgAAAH2AAAAHAX14VcF9eFzAAAACQAAAfgAAAH8AAAACgAAAfkAAAH8AAAACwAAAfoAAAH8AAAADAAAAfsAAAH8AAAADQAAAiMAAAH8AAAADgAAAh0AAAH9AAAADwAAAgEAAAH+AAAAFAAAAf8AAAICAAAAGQAAAgAF9eEqAAAALgX14R0F9eEeAAAAFAAAAhwAAAICAAAAGgAAAgMAAAIeAAAAJQAAAgQF9eFWAAAAJgX14VYAAAIFAAAAJwAAAggAAAIGAAAAMAX14ToAAAIHAAAAMgX14UkF9eFVAAAAKAAAAgkF9eE5AAAAKQX14TkAAAIKAAAAKgAAAhoAAAILAAAAMAX14SsAAAIMAAAAMQX14S0AAAINAAAAMwAAAhEAAAIOAAAAPAX14TcAAAIPAAAAPgX14TcAAAIQAAAAPwX14TcF9eEuAAAAPAAAAhQAAAISAAAAPgX14TcAAAITAAAAPwAAAhUF9eEuAAAAPgX14TcAAAIVAAAAQAAAAhYF9eE2AAAAQgAAAhcF9eE1AAAARQAAAhgF9eFBAAAARgAAAhkF9eE0AAAASAX14TsF9eEzAAAAMAX14SsAAAIbAAAANAX14UIF9eFIAAAAGQX14RgF9eEqAAAAGgX14VgAAAIeAAAAHAX14VcAAAIfAAAAIgX14WQAAAIgAAAAIwAAAiIAAAIhAAAAJAX14SoF9eFzAAAAJAX14SsF9eFzAAAAEQAAAiQF9eEWAAAAFAAAAiUF9eEVAAAAIQAAAigAAAImAAAALAX14REAAAInAAAALQX14RMF9eEUAAAALAX14Q8AAAIpAAAALQX14Q8F9eEU',]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/endpoint-rule-set-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/endpoint-rule-set-1.json.php deleted file mode 100644 index 968feaefc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/endpoint-rule-set-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.0', 'parameters' => [ 'Bucket' => [ 'required' => false, 'documentation' => 'The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket.', 'type' => 'string', ], 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], 'ForcePathStyle' => [ 'builtIn' => 'AWS::S3::ForcePathStyle', 'required' => true, 'default' => false, 'documentation' => 'When true, force a path-style endpoint to be used where the bucket name is part of the path.', 'type' => 'boolean', ], 'Accelerate' => [ 'builtIn' => 'AWS::S3::Accelerate', 'required' => true, 'default' => false, 'documentation' => 'When true, use S3 Accelerate. NOTE: Not all regions support S3 accelerate.', 'type' => 'boolean', ], 'UseGlobalEndpoint' => [ 'builtIn' => 'AWS::S3::UseGlobalEndpoint', 'required' => true, 'default' => false, 'documentation' => 'Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.', 'type' => 'boolean', ], 'UseObjectLambdaEndpoint' => [ 'required' => false, 'documentation' => 'Internal parameter to use object lambda endpoint for an operation (eg: WriteGetObjectResponse)', 'type' => 'boolean', ], 'Key' => [ 'required' => false, 'documentation' => 'The S3 Key used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Key.', 'type' => 'string', ], 'Prefix' => [ 'required' => false, 'documentation' => 'The S3 Prefix used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Prefix.', 'type' => 'string', ], 'CopySource' => [ 'required' => false, 'documentation' => 'The Copy Source used for Copy Object request. This is an optional parameter that will be set automatically for operations that are scoped to Copy Source.', 'type' => 'string', ], 'DisableAccessPoints' => [ 'required' => false, 'documentation' => 'Internal parameter to disable Access Point Buckets', 'type' => 'boolean', ], 'DisableMultiRegionAccessPoints' => [ 'builtIn' => 'AWS::S3::DisableMultiRegionAccessPoints', 'required' => true, 'default' => false, 'documentation' => 'Whether multi-region access points (MRAP) should be disabled.', 'type' => 'boolean', ], 'UseArnRegion' => [ 'builtIn' => 'AWS::S3::UseArnRegion', 'required' => false, 'documentation' => 'When an Access Point ARN is provided and this flag is enabled, the SDK MUST use the ARN\'s region when constructing the endpoint instead of the client\'s configured region.', 'type' => 'boolean', ], 'UseS3ExpressControlEndpoint' => [ 'required' => false, 'documentation' => 'Internal parameter to indicate whether S3Express operation should use control plane, (ex. CreateBucket)', 'type' => 'boolean', ], 'DisableS3ExpressSessionAuth' => [ 'required' => false, 'documentation' => 'Parameter to indicate whether S3Express session auth should be disabled', 'type' => 'boolean', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'Accelerate cannot be used with FIPS', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], 'error' => 'Cannot set dual-stack in combination with a custom endpoint.', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'A custom endpoint cannot be combined with FIPS', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'A custom endpoint cannot be combined with S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'partitionResult', ], 'name', ], ], 'aws-cn', ], ], ], 'error' => 'Partition does not support FIPS', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 6, true, ], 'assign' => 'bucketSuffix', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'bucketSuffix', ], '--x-s3', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'S3Express does not support S3 Accelerate.', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'uriEncode', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'uri_encoded_bucket', ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'S3Express bucket name is not a valid virtual hostable name.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'uriEncode', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'uri_encoded_bucket', ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'S3Express bucket name is not a valid virtual hostable name.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'UseS3ExpressControlEndpoint', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseS3ExpressControlEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'uriEncode', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'uri_encoded_bucket', ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 14, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 14, 16, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 15, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 15, 17, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 19, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 19, 21, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 20, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 20, 22, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 26, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 26, 28, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Unrecognized S3Express bucket name format.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 14, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 14, 16, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 15, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 15, 17, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 19, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 19, 21, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 20, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 20, 22, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 6, 26, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 26, 28, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Unrecognized S3Express bucket name format.', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'S3Express bucket name is not a valid virtual hostable name.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 7, true, ], 'assign' => 'accessPointSuffix', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'accessPointSuffix', ], '--xa-s3', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'S3Express does not support S3 Accelerate.', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'uriEncode', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'uri_encoded_bucket', ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'S3Express bucket name is not a valid virtual hostable name.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'uriEncode', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'uri_encoded_bucket', ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'S3Express bucket name is not a valid virtual hostable name.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableS3ExpressSessionAuth', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 15, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 15, 17, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 16, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 16, 18, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 20, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 20, 22, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 21, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 21, 23, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 27, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 27, 29, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Unrecognized S3Express bucket name format.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 15, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 15, 17, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 16, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 16, 18, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 20, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 20, 22, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 21, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 21, 23, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 7, 27, true, ], 'assign' => 's3expressAvailabilityZoneId', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 27, 29, true, ], 'assign' => 's3expressAvailabilityZoneDelim', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 's3expressAvailabilityZoneDelim', ], '--', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4-s3express', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Unrecognized S3Express bucket name format.', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'S3Express bucket name is not a valid virtual hostable name.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'UseS3ExpressControlEndpoint', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseS3ExpressControlEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3express-control.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'backend' => 'S3Express', 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3express', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 49, 50, true, ], 'assign' => 'hardwareType', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 8, 12, true, ], 'assign' => 'regionPrefix', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 7, true, ], 'assign' => 'bucketAliasSuffix', ], [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 32, 49, true, ], 'assign' => 'outpostId', ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'regionPartition', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'bucketAliasSuffix', ], '--op-s3', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'outpostId', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'hardwareType', ], 'e', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'regionPrefix', ], 'beta', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], ], 'error' => 'Expected a endpoint to be specified but no endpoint was found', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.ec2.{url#authority}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'hardwareType', ], 'o', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'regionPrefix', ], 'beta', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], ], 'error' => 'Expected a endpoint to be specified but no endpoint was found', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.op-{outpostId}.{url#authority}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid Outposts Bucket alias - it must be a valid bucket name.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], ], ], ], 'error' => 'Custom endpoint `{Endpoint}` was not a valid URI', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'ForcePathStyle', ], false, ], ], [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'Region', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'partitionResult', ], 'name', ], ], 'aws-cn', ], ], ], 'error' => 'S3 Accelerate cannot be used in this region', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], false, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'isIp', ], ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid region: region was not a valid DNS name.', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'url', ], 'scheme', ], ], 'http', ], ], [ 'fn' => 'aws.isVirtualHostableS3Bucket', 'argv' => [ [ 'ref' => 'Bucket', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'ForcePathStyle', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'Region', ], false, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{Bucket}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid region: region was not a valid DNS name.', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'ForcePathStyle', ], false, ], ], [ 'fn' => 'aws.parseArn', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'bucketArn', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[0]', ], 'assign' => 'arnType', ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'arnType', ], '', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'service', ], ], 's3-object-lambda', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'arnType', ], 'accesspoint', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[1]', ], 'assign' => 'accessPointName', ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'accessPointName', ], '', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'S3 Object Lambda does not support Dual-stack', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'S3 Object Lambda does not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], '', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'DisableAccessPoints', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableAccessPoints', ], true, ], ], ], 'error' => 'Access points are not supported for this operation', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[2]', ], ], ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'UseArnRegion', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseArnRegion', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], '{Region}', ], ], ], ], ], 'error' => 'Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], ], 'assign' => 'bucketPartition', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketPartition', ], 'name', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'partitionResult', ], 'name', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'accountId', ], ], '', ], ], ], 'error' => 'Invalid ARN: Missing account id', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'accountId', ], ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'accessPointName', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'endpoint' => [ 'url' => '{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: bucket ARN is missing a region', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'arnType', ], 'accesspoint', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[1]', ], 'assign' => 'accessPointName', ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'accessPointName', ], '', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], '', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'arnType', ], 'accesspoint', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], '', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'DisableAccessPoints', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableAccessPoints', ], true, ], ], ], 'error' => 'Access points are not supported for this operation', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[2]', ], ], ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'UseArnRegion', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseArnRegion', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], '{Region}', ], ], ], ], ], 'error' => 'Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], ], 'assign' => 'bucketPartition', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketPartition', ], 'name', ], ], '{partitionResult#name}', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'service', ], ], 's3', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'accountId', ], ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'accessPointName', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'Access Points do not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'endpoint' => [ 'url' => '{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'accessPointName', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'S3 MRAP does not support dual-stack', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'S3 MRAP does not support FIPS', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'S3 MRAP does not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'DisableMultiRegionAccessPoints', ], true, ], ], ], 'error' => 'Invalid configuration: Multi-Region Access Point ARNs are disabled.', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'mrapPartition', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'mrapPartition', ], 'name', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'partition', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3', 'signingRegionSet' => [ '*', ], ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid Access Point Name', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'service', ], ], 's3-outposts', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'S3 Outposts does not support Dual-stack', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'S3 Outposts does not support FIPS', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'S3 Outposts does not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[4]', ], ], ], ], ], 'error' => 'Invalid Arn: Outpost Access Point ARN contains sub resources', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[1]', ], 'assign' => 'outpostId', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'outpostId', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'UseArnRegion', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseArnRegion', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], '{Region}', ], ], ], ], ], 'error' => 'Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], ], 'assign' => 'bucketPartition', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketPartition', ], 'name', ], ], [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'partitionResult', ], 'name', ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'region', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'accountId', ], ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[2]', ], 'assign' => 'outpostType', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'bucketArn', ], 'resourceId[3]', ], 'assign' => 'accessPointName', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'outpostType', ], 'accesspoint', ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'accessPointName', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4a', 'signingName' => 's3-outposts', 'signingRegionSet' => [ '*', ], ], [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-outposts', 'signingRegion' => '{bucketArn#region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Expected an outpost type `accesspoint`, found {outpostType}', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: expected an access point name', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Expected a 4-component resource', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: The Outpost Id was not set', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid ARN: No ARN type specified', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'substring', 'argv' => [ [ 'ref' => 'Bucket', ], 0, 4, false, ], 'assign' => 'arnPrefix', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'arnPrefix', ], 'arn:', ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'fn' => 'aws.parseArn', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], ], ], ], ], ], 'error' => 'Invalid ARN: `{Bucket}` was not a valid ARN', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'ForcePathStyle', ], true, ], ], [ 'fn' => 'aws.parseArn', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], ], 'error' => 'Path-style addressing cannot be used with ARN buckets', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'uriEncode', 'argv' => [ [ 'ref' => 'Bucket', ], ], 'assign' => 'uri_encoded_bucket', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Path-style addressing cannot be used with S3 Accelerate', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'UseObjectLambdaEndpoint', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseObjectLambdaEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'Region', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'S3 Object Lambda does not support Dual-stack', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'Accelerate', ], true, ], ], ], 'error' => 'S3 Object Lambda does not support S3 Accelerate', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'endpoint' => [ 'url' => 'https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3-object-lambda', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid region: region was not a valid DNS name.', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Bucket', ], ], ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'partitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isValidHostLabel', 'argv' => [ [ 'ref' => 'Region', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3-fips.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'parseURL', 'argv' => [ [ 'ref' => 'Endpoint', ], ], 'assign' => 'url', ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => '{url#scheme}://{url#authority}{url#path}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => 'https://s3.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://s3.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://s3.{Region}.{partitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'disableDoubleEncoding' => true, 'name' => 'sigv4', 'signingName' => 's3', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid region: region was not a valid DNS name.', 'type' => 'error', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'A region must be set when sending requests to S3.', 'type' => 'error', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/paginators-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/paginators-1.json.php deleted file mode 100644 index 1d7ec0e20..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/paginators-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'ListBuckets' => [ 'input_token' => 'ContinuationToken', 'limit_key' => 'MaxBuckets', 'output_token' => 'ContinuationToken', 'result_key' => 'Buckets', ], 'ListDirectoryBuckets' => [ 'input_token' => 'ContinuationToken', 'limit_key' => 'MaxDirectoryBuckets', 'output_token' => 'ContinuationToken', 'result_key' => 'Buckets', ], 'ListMultipartUploads' => [ 'input_token' => [ 'KeyMarker', 'UploadIdMarker', ], 'limit_key' => 'MaxUploads', 'more_results' => 'IsTruncated', 'output_token' => [ 'NextKeyMarker', 'NextUploadIdMarker', ], 'result_key' => [ 'Uploads', 'CommonPrefixes', ], ], 'ListObjectAnnotations' => [ 'input_token' => 'ContinuationToken', 'limit_key' => 'MaxAnnotationResults', 'output_token' => 'NextContinuationToken', 'result_key' => 'Annotations', ], 'ListObjectVersions' => [ 'input_token' => [ 'KeyMarker', 'VersionIdMarker', ], 'limit_key' => 'MaxKeys', 'more_results' => 'IsTruncated', 'output_token' => [ 'NextKeyMarker', 'NextVersionIdMarker', ], 'result_key' => [ 'Versions', 'DeleteMarkers', 'CommonPrefixes', ], ], 'ListObjects' => [ 'input_token' => 'Marker', 'limit_key' => 'MaxKeys', 'more_results' => 'IsTruncated', 'output_token' => 'NextMarker || Contents[-1].Key', 'result_key' => [ 'Contents', 'CommonPrefixes', ], ], 'ListObjectsV2' => [ 'input_token' => 'ContinuationToken', 'limit_key' => 'MaxKeys', 'output_token' => 'NextContinuationToken', 'result_key' => [ 'Contents', 'CommonPrefixes', ], ], 'ListParts' => [ 'input_token' => 'PartNumberMarker', 'limit_key' => 'MaxParts', 'more_results' => 'IsTruncated', 'output_token' => 'NextPartNumberMarker', 'result_key' => 'Parts', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/smoke.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/smoke.json.php deleted file mode 100644 index 1d393b0a4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/smoke.json.php +++ /dev/null @@ -1,3 +0,0 @@ - 1, 'defaultRegion' => 'us-west-2', 'testCases' => [ [ 'operationName' => 'ListBuckets', 'input' => [], 'errorExpectedFromService' => false, ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/waiters-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/waiters-1.json.php deleted file mode 100644 index 70e0bdb8a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/waiters-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ '__default__' => [ 'interval' => 5, 'max_attempts' => 20, ], 'BucketExists' => [ 'operation' => 'HeadBucket', 'ignore_errors' => [ 'NoSuchBucket', ], 'success_type' => 'output', ], 'BucketNotExists' => [ 'operation' => 'HeadBucket', 'success_type' => 'error', 'success_value' => 'NoSuchBucket', ], 'ObjectExists' => [ 'operation' => 'HeadObject', 'ignore_errors' => [ 'NoSuchKey', ], 'success_type' => 'output', ], 'ObjectNotExists' => [ 'operation' => 'HeadObject', 'success_type' => 'error', 'success_value' => 'NoSuchKey', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/waiters-2.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/waiters-2.json.php deleted file mode 100644 index 605816854..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/s3/2006-03-01/waiters-2.json.php +++ /dev/null @@ -1,3 +0,0 @@ - 2, 'waiters' => [ 'BucketExists' => [ 'delay' => 5, 'operation' => 'HeadBucket', 'maxAttempts' => 20, 'acceptors' => [ [ 'expected' => 200, 'matcher' => 'status', 'state' => 'success', ], [ 'expected' => 301, 'matcher' => 'status', 'state' => 'success', ], [ 'expected' => 403, 'matcher' => 'status', 'state' => 'success', ], [ 'expected' => 404, 'matcher' => 'status', 'state' => 'retry', ], ], ], 'BucketNotExists' => [ 'delay' => 5, 'operation' => 'HeadBucket', 'maxAttempts' => 20, 'acceptors' => [ [ 'expected' => 404, 'matcher' => 'status', 'state' => 'success', ], ], ], 'ObjectExists' => [ 'delay' => 5, 'operation' => 'HeadObject', 'maxAttempts' => 20, 'acceptors' => [ [ 'expected' => 200, 'matcher' => 'status', 'state' => 'success', ], [ 'expected' => 404, 'matcher' => 'status', 'state' => 'retry', ], ], ], 'ObjectNotExists' => [ 'delay' => 5, 'operation' => 'HeadObject', 'maxAttempts' => 20, 'acceptors' => [ [ 'expected' => 404, 'matcher' => 'status', 'state' => 'success', ], ], ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sdk-default-configuration.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sdk-default-configuration.json.php deleted file mode 100644 index 2d28bf8f2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sdk-default-configuration.json.php +++ /dev/null @@ -1,3 +0,0 @@ - 1, 'base' => [ 'retryMode' => 'standard', 'stsRegionalEndpoints' => 'regional', 's3UsEast1RegionalEndpoints' => 'regional', 'connectTimeoutInMillis' => 1100, 'tlsNegotiationTimeoutInMillis' => 1100, ], 'modes' => [ 'standard' => [ 'connectTimeoutInMillis' => [ 'override' => 3100, ], 'tlsNegotiationTimeoutInMillis' => [ 'override' => 3100, ], ], 'in-region' => [], 'cross-region' => [ 'connectTimeoutInMillis' => [ 'override' => 3100, ], 'tlsNegotiationTimeoutInMillis' => [ 'override' => 3100, ], ], 'mobile' => [ 'connectTimeoutInMillis' => [ 'override' => 30000, ], 'tlsNegotiationTimeoutInMillis' => [ 'override' => 30000, ], ], ], 'documentation' => [ 'modes' => [ 'standard' => '

The STANDARD mode provides the latest recommended default values that should be safe to run in most scenarios

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

', 'in-region' => '

The IN_REGION mode builds on the standard mode and includes optimization tailored for applications which call AWS services from within the same AWS region

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

', 'cross-region' => '

The CROSS_REGION mode builds on the standard mode and includes optimization tailored for applications which call AWS services in a different region

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

', 'mobile' => '

The MOBILE mode builds on the standard mode and includes optimization tailored for mobile applications

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

', 'auto' => '

The AUTO mode is an experimental mode that builds on the standard mode. The SDK will attempt to discover the execution environment to determine the appropriate settings automatically.

Note that the auto detection is heuristics-based and does not guarantee 100% accuracy. STANDARD mode will be used if the execution environment cannot be determined. The auto detection might query EC2 Instance Metadata service, which might introduce latency. Therefore we recommend choosing an explicit defaults_mode instead if startup latency is critical to your application

', 'legacy' => '

The LEGACY mode provides default settings that vary per SDK and were used prior to establishment of defaults_mode

', ], 'configuration' => [ 'retryMode' => '

A retry mode specifies how the SDK attempts retries. See Retry Mode

', 'stsRegionalEndpoints' => '

Specifies how the SDK determines the AWS service endpoint that it uses to talk to the AWS Security Token Service (AWS STS). See Setting STS Regional endpoints

', 's3UsEast1RegionalEndpoints' => '

Specifies how the SDK determines the AWS service endpoint that it uses to talk to the Amazon S3 for the us-east-1 region

', 'connectTimeoutInMillis' => '

The amount of time after making an initial connection attempt on a socket, where if the client does not receive a completion of the connect handshake, the client gives up and fails the operation

', 'tlsNegotiationTimeoutInMillis' => '

The maximum amount of time that a TLS handshake is allowed to take from the time the CLIENT HELLO message is sent to ethe time the client and server have fully negotiated ciphers and exchanged keys

', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/api-2.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/api-2.json.php deleted file mode 100644 index d646ea860..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/api-2.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '2.0', 'metadata' => [ 'apiVersion' => '2023-01-01', 'auth' => [ 'aws.auth#sigv4', ], 'endpointPrefix' => 'signin', 'protocol' => 'rest-json', 'protocols' => [ 'rest-json', ], 'serviceFullName' => 'AWS Sign-In Service', 'serviceId' => 'Signin', 'signatureVersion' => 'v4', 'signingName' => 'signin', 'uid' => 'signin-2023-01-01', ], 'operations' => [ 'CreateOAuth2Token' => [ 'name' => 'CreateOAuth2Token', 'http' => [ 'method' => 'POST', 'requestUri' => '/v1/token', 'responseCode' => 200, ], 'input' => [ 'shape' => 'CreateOAuth2TokenRequest', ], 'output' => [ 'shape' => 'CreateOAuth2TokenResponse', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'auth' => [ 'smithy.api#noAuth', ], 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => false, ], ], 'authtype' => 'none', ], 'CreateOAuth2TokenWithIAM' => [ 'name' => 'CreateOAuth2TokenWithIAM', 'http' => [ 'method' => 'POST', 'requestUri' => '/v1/token?x-amz-client-auth-method=iam', 'responseCode' => 200, ], 'input' => [ 'shape' => 'CreateOAuth2TokenWithIAMRequest', ], 'output' => [ 'shape' => 'CreateOAuth2TokenWithIAMResponse', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'staticContextParams' => [ 'IsOAuthEndpoint' => [ 'value' => true, ], ], ], 'DeleteConsoleAuthorizationConfiguration' => [ 'name' => 'DeleteConsoleAuthorizationConfiguration', 'http' => [ 'method' => 'POST', 'requestUri' => '/delete-console-authorization-configuration', 'responseCode' => 200, ], 'input' => [ 'shape' => 'DeleteConsoleAuthorizationConfigurationInput', ], 'output' => [ 'shape' => 'DeleteConsoleAuthorizationConfigurationOutput', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'ResourceNotFoundException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'idempotent' => true, 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => true, ], ], ], 'DeleteResourcePermissionStatement' => [ 'name' => 'DeleteResourcePermissionStatement', 'http' => [ 'method' => 'POST', 'requestUri' => '/delete-resource-permission-statement', 'responseCode' => 200, ], 'input' => [ 'shape' => 'DeleteResourcePermissionStatementInput', ], 'output' => [ 'shape' => 'DeleteResourcePermissionStatementOutput', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'ResourceNotFoundException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => true, ], ], ], 'GetConsoleAuthorizationConfiguration' => [ 'name' => 'GetConsoleAuthorizationConfiguration', 'http' => [ 'method' => 'POST', 'requestUri' => '/get-console-authorization-configuration', 'responseCode' => 200, ], 'input' => [ 'shape' => 'GetConsoleAuthorizationConfigurationInput', ], 'output' => [ 'shape' => 'GetConsoleAuthorizationConfigurationOutput', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'ResourceNotFoundException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'readonly' => true, 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => true, ], ], ], 'GetResourcePolicy' => [ 'name' => 'GetResourcePolicy', 'http' => [ 'method' => 'POST', 'requestUri' => '/get-resource-policy', 'responseCode' => 200, ], 'input' => [ 'shape' => 'GetResourcePolicyInput', ], 'output' => [ 'shape' => 'GetResourcePolicyOutput', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'ResourceNotFoundException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'AccessDeniedException', ], ], 'readonly' => true, 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => true, ], ], ], 'IntrospectOAuth2TokenWithIAM' => [ 'name' => 'IntrospectOAuth2TokenWithIAM', 'http' => [ 'method' => 'POST', 'requestUri' => '/v1/introspect?x-amz-client-auth-method=iam', 'responseCode' => 200, ], 'input' => [ 'shape' => 'IntrospectOAuth2TokenWithIAMRequest', ], 'output' => [ 'shape' => 'IntrospectOAuth2TokenWithIAMResponse', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'readonly' => true, 'staticContextParams' => [ 'IsOAuthEndpoint' => [ 'value' => true, ], ], ], 'ListResourcePermissionStatements' => [ 'name' => 'ListResourcePermissionStatements', 'http' => [ 'method' => 'POST', 'requestUri' => '/list-resource-permission-statements', 'responseCode' => 200, ], 'input' => [ 'shape' => 'ListResourcePermissionStatementsInput', ], 'output' => [ 'shape' => 'ListResourcePermissionStatementsOutput', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'ResourceNotFoundException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'readonly' => true, 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => true, ], ], ], 'PutConsoleAuthorizationConfiguration' => [ 'name' => 'PutConsoleAuthorizationConfiguration', 'http' => [ 'method' => 'POST', 'requestUri' => '/put-console-authorization-configuration', 'responseCode' => 200, ], 'input' => [ 'shape' => 'PutConsoleAuthorizationConfigurationInput', ], 'output' => [ 'shape' => 'PutConsoleAuthorizationConfigurationOutput', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'ConflictException', ], [ 'shape' => 'ResourceNotFoundException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'idempotent' => true, 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => true, ], ], ], 'PutResourcePermissionStatement' => [ 'name' => 'PutResourcePermissionStatement', 'http' => [ 'method' => 'POST', 'requestUri' => '/put-resource-permission-statement', 'responseCode' => 200, ], 'input' => [ 'shape' => 'PutResourcePermissionStatementInput', ], 'output' => [ 'shape' => 'PutResourcePermissionStatementOutput', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'ConflictException', ], [ 'shape' => 'ServiceQuotaExceededException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'idempotent' => true, 'staticContextParams' => [ 'IsControlPlane' => [ 'value' => true, ], ], ], 'RevokeOAuth2TokenWithIAM' => [ 'name' => 'RevokeOAuth2TokenWithIAM', 'http' => [ 'method' => 'POST', 'requestUri' => '/v1/revoke?x-amz-client-auth-method=iam', 'responseCode' => 200, ], 'input' => [ 'shape' => 'RevokeOAuth2TokenWithIAMRequest', ], 'output' => [ 'shape' => 'RevokeOAuth2TokenWithIAMResponse', ], 'errors' => [ [ 'shape' => 'TooManyRequestsError', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'ValidationException', ], [ 'shape' => 'AccessDeniedException', ], ], 'idempotent' => true, 'staticContextParams' => [ 'IsOAuthEndpoint' => [ 'value' => true, ], ], ], ], 'shapes' => [ 'AccessDeniedException' => [ 'type' => 'structure', 'required' => [ 'error', 'message', ], 'members' => [ 'error' => [ 'shape' => 'OAuth2ErrorCode', ], 'message' => [ 'shape' => 'String', ], ], 'exception' => true, ], 'AccessToken' => [ 'type' => 'structure', 'required' => [ 'accessKeyId', 'secretAccessKey', 'sessionToken', ], 'members' => [ 'accessKeyId' => [ 'shape' => 'String', 'locationName' => 'accessKeyId', ], 'secretAccessKey' => [ 'shape' => 'String', 'locationName' => 'secretAccessKey', ], 'sessionToken' => [ 'shape' => 'String', 'locationName' => 'sessionToken', ], ], 'sensitive' => true, ], 'AccountId' => [ 'type' => 'string', 'max' => 12, 'min' => 12, 'pattern' => '[0-9]{12}', ], 'AuthorizationCode' => [ 'type' => 'string', 'max' => 512, 'min' => 1, ], 'BearerTokenType' => [ 'type' => 'string', 'pattern' => 'Bearer', ], 'Boolean' => [ 'type' => 'boolean', 'box' => true, ], 'ClientCredentialsGrantType' => [ 'type' => 'string', 'pattern' => 'client_credentials', ], 'ClientId' => [ 'type' => 'string', 'pattern' => 'arn:aws:signin:::devtools/(cross-device|same-device)', ], 'ClientToken' => [ 'type' => 'string', 'max' => 64, 'min' => 1, 'pattern' => '[!-~]+', ], 'CodeVerifier' => [ 'type' => 'string', 'max' => 128, 'min' => 43, 'pattern' => '[A-Za-z0-9\\-._~]+', ], 'Condition' => [ 'type' => 'map', 'key' => [ 'shape' => 'String', ], 'value' => [ 'shape' => 'ConditionValues', ], ], 'ConditionBlock' => [ 'type' => 'map', 'key' => [ 'shape' => 'ConditionType', ], 'value' => [ 'shape' => 'Condition', ], ], 'ConditionType' => [ 'type' => 'string', ], 'ConditionValues' => [ 'type' => 'list', 'member' => [ 'shape' => 'String', ], ], 'ConflictException' => [ 'type' => 'structure', 'required' => [ 'error', 'message', ], 'members' => [ 'error' => [ 'shape' => 'OAuth2ErrorCode', ], 'message' => [ 'shape' => 'String', ], ], 'error' => [ 'httpStatusCode' => 409, 'senderFault' => true, ], 'exception' => true, ], 'ConsolePermissionMaxResults' => [ 'type' => 'integer', 'box' => true, 'max' => 100, 'min' => 1, ], 'CreateOAuth2TokenRequest' => [ 'type' => 'structure', 'required' => [ 'tokenInput', ], 'members' => [ 'tokenInput' => [ 'shape' => 'CreateOAuth2TokenRequestBody', ], ], 'payload' => 'tokenInput', ], 'CreateOAuth2TokenRequestBody' => [ 'type' => 'structure', 'required' => [ 'clientId', 'grantType', ], 'members' => [ 'clientId' => [ 'shape' => 'ClientId', 'locationName' => 'clientId', ], 'grantType' => [ 'shape' => 'GrantType', 'locationName' => 'grantType', ], 'code' => [ 'shape' => 'AuthorizationCode', ], 'redirectUri' => [ 'shape' => 'RedirectUri', 'locationName' => 'redirectUri', ], 'codeVerifier' => [ 'shape' => 'CodeVerifier', 'locationName' => 'codeVerifier', ], 'refreshToken' => [ 'shape' => 'RefreshToken', 'locationName' => 'refreshToken', ], ], ], 'CreateOAuth2TokenResponse' => [ 'type' => 'structure', 'required' => [ 'tokenOutput', ], 'members' => [ 'tokenOutput' => [ 'shape' => 'CreateOAuth2TokenResponseBody', ], ], 'payload' => 'tokenOutput', ], 'CreateOAuth2TokenResponseBody' => [ 'type' => 'structure', 'required' => [ 'accessToken', 'tokenType', 'expiresIn', 'refreshToken', ], 'members' => [ 'accessToken' => [ 'shape' => 'AccessToken', 'locationName' => 'accessToken', ], 'tokenType' => [ 'shape' => 'TokenType', 'locationName' => 'tokenType', ], 'expiresIn' => [ 'shape' => 'ExpiresIn', 'locationName' => 'expiresIn', ], 'refreshToken' => [ 'shape' => 'RefreshToken', 'locationName' => 'refreshToken', ], 'idToken' => [ 'shape' => 'IdToken', 'locationName' => 'idToken', ], ], ], 'CreateOAuth2TokenWithIAMRequest' => [ 'type' => 'structure', 'required' => [ 'grantType', 'resource', ], 'members' => [ 'grantType' => [ 'shape' => 'ClientCredentialsGrantType', 'locationName' => 'grant_type', ], 'resource' => [ 'shape' => 'CreateOAuth2TokenWithIAMRequestResourceString', ], ], ], 'CreateOAuth2TokenWithIAMRequestResourceString' => [ 'type' => 'string', 'max' => 2048, 'min' => 1, ], 'CreateOAuth2TokenWithIAMResponse' => [ 'type' => 'structure', 'required' => [ 'accessToken', 'tokenType', 'expiresIn', ], 'members' => [ 'accessToken' => [ 'shape' => 'OAuthAccessToken', 'locationName' => 'access_token', ], 'tokenType' => [ 'shape' => 'BearerTokenType', 'locationName' => 'token_type', ], 'expiresIn' => [ 'shape' => 'TokenExpiresIn', 'locationName' => 'expires_in', ], ], ], 'DeleteConsoleAuthorizationConfigurationInput' => [ 'type' => 'structure', 'members' => [ 'targetId' => [ 'shape' => 'TargetId', ], ], ], 'DeleteConsoleAuthorizationConfigurationOutput' => [ 'type' => 'structure', 'required' => [ 'targetId', 'scope', 'consoleAuthorizationEnabled', ], 'members' => [ 'targetId' => [ 'shape' => 'TargetId', ], 'scope' => [ 'shape' => 'String', ], 'consoleAuthorizationEnabled' => [ 'shape' => 'Boolean', ], ], ], 'DeleteResourcePermissionStatementInput' => [ 'type' => 'structure', 'required' => [ 'statementId', ], 'members' => [ 'statementId' => [ 'shape' => 'StatementId', ], 'clientToken' => [ 'shape' => 'ClientToken', 'idempotencyToken' => true, ], ], ], 'DeleteResourcePermissionStatementOutput' => [ 'type' => 'structure', 'members' => [], ], 'ExcludedPrincipal' => [ 'type' => 'string', 'max' => 2048, 'min' => 20, 'pattern' => 'arn:aws:((iam::[0-9]{12}:role/[a-zA-Z0-9_+=,.@-]{1,64})|(iam::[0-9]{12}:user/[a-zA-Z0-9_+=,.@-]{1,64})|(sts::[0-9]{12}:federated-user/[a-zA-Z0-9_+=,.@-]{2,193})|(iam::[0-9]{12}:root))', ], 'ExpiresIn' => [ 'type' => 'integer', 'box' => true, 'max' => 900, 'min' => 1, ], 'GetConsoleAuthorizationConfigurationInput' => [ 'type' => 'structure', 'members' => [ 'targetId' => [ 'shape' => 'TargetId', ], ], ], 'GetConsoleAuthorizationConfigurationOutput' => [ 'type' => 'structure', 'required' => [ 'targetId', 'scope', 'consoleAuthorizationEnabled', ], 'members' => [ 'targetId' => [ 'shape' => 'TargetId', ], 'scope' => [ 'shape' => 'String', ], 'consoleAuthorizationEnabled' => [ 'shape' => 'Boolean', ], ], ], 'GetResourcePolicyInput' => [ 'type' => 'structure', 'members' => [], ], 'GetResourcePolicyOutput' => [ 'type' => 'structure', 'required' => [ 'signinResourceBasedPolicy', ], 'members' => [ 'signinResourceBasedPolicy' => [ 'shape' => 'SigninResourceBasedPolicy', ], ], ], 'GrantType' => [ 'type' => 'string', 'pattern' => '(authorization_code|refresh_token)', ], 'IdToken' => [ 'type' => 'string', 'max' => 4096, 'min' => 1, ], 'InternalServerException' => [ 'type' => 'structure', 'required' => [ 'error', 'message', ], 'members' => [ 'error' => [ 'shape' => 'OAuth2ErrorCode', ], 'message' => [ 'shape' => 'String', ], ], 'error' => [ 'httpStatusCode' => 500, ], 'exception' => true, 'fault' => true, ], 'IntrospectOAuth2TokenWithIAMRequest' => [ 'type' => 'structure', 'required' => [ 'token', ], 'members' => [ 'token' => [ 'shape' => 'IntrospectionToken', 'locationName' => 'token', ], 'tokenTypeHint' => [ 'shape' => 'TokenTypeHint', 'locationName' => 'token_type_hint', ], ], ], 'IntrospectOAuth2TokenWithIAMResponse' => [ 'type' => 'structure', 'required' => [ 'active', ], 'members' => [ 'active' => [ 'shape' => 'Boolean', ], 'clientId' => [ 'shape' => 'String', 'locationName' => 'client_id', ], 'userId' => [ 'shape' => 'String', 'locationName' => 'user_id', ], 'tokenType' => [ 'shape' => 'IntrospectedTokenType', 'locationName' => 'token_type', ], 'exp' => [ 'shape' => 'Long', 'locationName' => 'exp', ], 'iat' => [ 'shape' => 'Long', 'locationName' => 'iat', ], 'nbf' => [ 'shape' => 'Long', 'locationName' => 'nbf', ], 'sub' => [ 'shape' => 'String', 'locationName' => 'sub', ], 'aud' => [ 'shape' => 'String', 'locationName' => 'aud', ], 'iss' => [ 'shape' => 'String', 'locationName' => 'iss', ], 'jti' => [ 'shape' => 'String', 'locationName' => 'jti', ], 'accountId' => [ 'shape' => 'AccountId', 'locationName' => 'account_id', ], 'signinSession' => [ 'shape' => 'String', 'locationName' => 'signin_session', ], 'resource' => [ 'shape' => 'String', 'locationName' => 'resource', ], ], ], 'IntrospectedTokenType' => [ 'type' => 'string', 'pattern' => '(access_token|refresh_token)', ], 'IntrospectionToken' => [ 'type' => 'string', 'max' => 4096, 'min' => 1, 'pattern' => 'ASO[AR][A-Za-z0-9+/=_\\-]+', 'sensitive' => true, ], 'ListResourcePermissionStatementsInput' => [ 'type' => 'structure', 'members' => [ 'maxResults' => [ 'shape' => 'ConsolePermissionMaxResults', ], 'nextToken' => [ 'shape' => 'NextToken', ], ], ], 'ListResourcePermissionStatementsOutput' => [ 'type' => 'structure', 'required' => [ 'permissionStatements', ], 'members' => [ 'permissionStatements' => [ 'shape' => 'PermissionStatementSummaries', ], 'nextToken' => [ 'shape' => 'NextToken', ], ], ], 'Long' => [ 'type' => 'long', 'box' => true, ], 'NextToken' => [ 'type' => 'string', 'max' => 2048, 'min' => 0, 'pattern' => '[-a-zA-Z0-9+=/_]*', ], 'OAuth2ErrorCode' => [ 'type' => 'string', 'enum' => [ 'TOKEN_EXPIRED', 'USER_CREDENTIALS_CHANGED', 'INSUFFICIENT_PERMISSIONS', 'AUTHCODE_EXPIRED', 'server_error', 'INVALID_REQUEST', 'RESOURCE_NOT_FOUND', 'CONFLICT', 'SERVICE_QUOTA_EXCEEDED', ], ], 'OAuthAccessToken' => [ 'type' => 'string', 'max' => 4096, 'min' => 1, 'sensitive' => true, ], 'PermissionStatementSummaries' => [ 'type' => 'list', 'member' => [ 'shape' => 'PermissionStatementSummary', ], ], 'PermissionStatementSummary' => [ 'type' => 'structure', 'required' => [ 'sid', ], 'members' => [ 'sid' => [ 'shape' => 'StatementId', ], 'condition' => [ 'shape' => 'ConditionBlock', ], ], ], 'PolicyActions' => [ 'type' => 'list', 'member' => [ 'shape' => 'String', ], ], 'PolicyStatement' => [ 'type' => 'structure', 'members' => [ 'effect' => [ 'shape' => 'String', 'locationName' => 'Effect', ], 'principal' => [ 'shape' => 'Principal', 'locationName' => 'Principal', ], 'action' => [ 'shape' => 'PolicyActions', 'locationName' => 'Action', ], 'resource' => [ 'shape' => 'String', 'locationName' => 'Resource', ], 'condition' => [ 'shape' => 'ConditionBlock', 'locationName' => 'Condition', ], ], ], 'PolicyStatements' => [ 'type' => 'list', 'member' => [ 'shape' => 'PolicyStatement', ], ], 'Principal' => [ 'type' => 'map', 'key' => [ 'shape' => 'String', ], 'value' => [ 'shape' => 'String', ], ], 'PutConsoleAuthorizationConfigurationInput' => [ 'type' => 'structure', 'members' => [ 'targetId' => [ 'shape' => 'TargetId', ], ], ], 'PutConsoleAuthorizationConfigurationOutput' => [ 'type' => 'structure', 'required' => [ 'targetId', 'scope', 'consoleAuthorizationEnabled', ], 'members' => [ 'targetId' => [ 'shape' => 'TargetId', ], 'scope' => [ 'shape' => 'String', ], 'consoleAuthorizationEnabled' => [ 'shape' => 'Boolean', ], ], ], 'PutResourcePermissionStatementInput' => [ 'type' => 'structure', 'members' => [ 'sourceVpc' => [ 'shape' => 'SourceVpc', ], 'signinSourceVpce' => [ 'shape' => 'SourceVpce', ], 'consoleSourceVpce' => [ 'shape' => 'SourceVpce', ], 'vpcSourceIp' => [ 'shape' => 'VpcSourceIp', ], 'sourceIp' => [ 'shape' => 'SourceIp', ], 'requestedRegion' => [ 'shape' => 'RequestedRegion', ], 'excludedPrincipal' => [ 'shape' => 'ExcludedPrincipal', ], 'clientToken' => [ 'shape' => 'ClientToken', 'idempotencyToken' => true, ], ], ], 'PutResourcePermissionStatementOutput' => [ 'type' => 'structure', 'required' => [ 'statementId', ], 'members' => [ 'statementId' => [ 'shape' => 'StatementId', ], ], ], 'RedirectUri' => [ 'type' => 'string', 'max' => 2048, 'min' => 1, ], 'RefreshToken' => [ 'type' => 'string', 'max' => 2048, 'min' => 1, 'sensitive' => true, ], 'RequestedRegion' => [ 'type' => 'string', 'pattern' => '[a-z]{2}(-[a-z]+)+-\\d+', ], 'ResourceNotFoundException' => [ 'type' => 'structure', 'required' => [ 'error', 'message', ], 'members' => [ 'error' => [ 'shape' => 'OAuth2ErrorCode', ], 'message' => [ 'shape' => 'String', ], ], 'error' => [ 'httpStatusCode' => 404, 'senderFault' => true, ], 'exception' => true, ], 'RevocationToken' => [ 'type' => 'string', 'max' => 4096, 'min' => 1, 'pattern' => 'ASOR[A-Za-z0-9+/=_\\-]+', 'sensitive' => true, ], 'RevokeOAuth2TokenWithIAMRequest' => [ 'type' => 'structure', 'required' => [ 'token', ], 'members' => [ 'token' => [ 'shape' => 'RevocationToken', 'locationName' => 'token', ], ], ], 'RevokeOAuth2TokenWithIAMResponse' => [ 'type' => 'structure', 'members' => [], ], 'ServiceQuotaExceededException' => [ 'type' => 'structure', 'required' => [ 'error', 'message', ], 'members' => [ 'error' => [ 'shape' => 'OAuth2ErrorCode', ], 'message' => [ 'shape' => 'String', ], ], 'error' => [ 'httpStatusCode' => 402, 'senderFault' => true, ], 'exception' => true, ], 'SigninResourceBasedPolicy' => [ 'type' => 'structure', 'members' => [ 'version' => [ 'shape' => 'String', 'locationName' => 'Version', ], 'statement' => [ 'shape' => 'PolicyStatements', 'locationName' => 'Statement', ], ], ], 'SourceIp' => [ 'type' => 'string', ], 'SourceVpc' => [ 'type' => 'string', 'pattern' => 'vpc-([0-9a-f]{8}|[0-9a-f]{17})', ], 'SourceVpce' => [ 'type' => 'string', 'pattern' => 'vpce-[a-z0-9]{8,20}', ], 'StatementId' => [ 'type' => 'string', 'pattern' => '[A-Za-z0-9+/]{64}=?', ], 'String' => [ 'type' => 'string', ], 'TargetId' => [ 'type' => 'string', 'max' => 32, 'min' => 12, 'pattern' => '(\\d{12}|o-[a-z0-9]{10}|r-[0-9a-z]{4,32})', ], 'TokenExpiresIn' => [ 'type' => 'integer', 'box' => true, 'max' => 3600, 'min' => 1, ], 'TokenType' => [ 'type' => 'string', 'pattern' => 'aws_sigv4', ], 'TokenTypeHint' => [ 'type' => 'string', 'pattern' => '(access_token|refresh_token)', ], 'TooManyRequestsError' => [ 'type' => 'structure', 'required' => [ 'error', 'message', ], 'members' => [ 'error' => [ 'shape' => 'OAuth2ErrorCode', ], 'message' => [ 'shape' => 'String', ], ], 'error' => [ 'httpStatusCode' => 429, 'senderFault' => true, ], 'exception' => true, ], 'ValidationException' => [ 'type' => 'structure', 'required' => [ 'error', 'message', ], 'members' => [ 'error' => [ 'shape' => 'OAuth2ErrorCode', ], 'message' => [ 'shape' => 'String', ], ], 'error' => [ 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'VpcSourceIp' => [ 'type' => 'string', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/endpoint-bdd-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/endpoint-bdd-1.json.php deleted file mode 100644 index 1b3a78384..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/endpoint-bdd-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.1', 'parameters' => [ 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'IsControlPlane' => [ 'required' => false, 'documentation' => 'Indicates if the operation targets the control plane endpoint', 'type' => 'boolean', ], 'IsOAuthEndpoint' => [ 'required' => false, 'documentation' => 'Indicates if the operation targets the OAuth token endpoint', 'type' => 'boolean', ], ], 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'ref' => 'IsControlPlane', ], false, ], ], true, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'coalesce', 'argv' => [ [ 'ref' => 'IsOAuthEndpoint', ], false, ], ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-cn', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-gov-west-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso-b', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso-f', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso-e', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-eusc', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], true, ], ], ], 'results' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.api.aws', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.api.amazonwebservices.com.cn', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS endpoints are not supported for OAuth operations. Disable FIPS or use a non-OAuth operation.', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.oauth.signin.aws', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.aws.amazon.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws.cn', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws-us-gov.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.c2shome.ic.gov', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.sc2shome.sgov.gov', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.csphome.hci.ic.gov', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.csphome.adc-e.uk', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws-eusc.eu', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin-fips.amazonaws-us-gov.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin-fips.amazonaws-us-gov.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://{Region}.signin.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ], 'root' => 2, 'nodeCount' => 40, 'nodes' => '/////wAAAAH/////AAAAAAAAAAYAAAADAAAAAgAAACQAAAAEAAAABAAAAAUF9eEbAAAABgX14QQF9eEbAAAAAQAAAB0AAAAHAAAAAgAAACQAAAAIAAAAAwAAAAkAAAAfAAAABAAAABYAAAAKAAAABQAAABMAAAALAAAABwAAABUAAAAMAAAACAX14QcAAAANAAAACgX14QgAAAAOAAAADAX14QkAAAAPAAAADQX14QoAAAAQAAAADgX14QsAAAARAAAADwX14QwAAAASAAAAEAX14Q0F9eEQAAAABgX14QUAAAAUAAAABwAAABUF9eEGAAAAEQX14RgF9eEZAAAABgX14QQAAAAXAAAABwAAABsAAAAYAAAACQX14Q4AAAAZAAAACgX14Q8AAAAaAAAACwX14RYF9eEXAAAACwAAABwF9eEVAAAAEQX14RQF9eEVAAAAAgAAACMAAAAeAAAAAwAAACcAAAAfAAAABAAAACAF9eEbAAAABgX14QQAAAAhAAAABwX14RsAAAAiAAAACQX14Q4F9eEbAAAAAwAAACcAAAAkAAAABAAAACYAAAAlAAAABwX14RIF9eETAAAABgX14QQF9eERAAAABQX14QEAAAAoAAAACAX14QIF9eED',]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/endpoint-rule-set-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/endpoint-rule-set-1.json.php deleted file mode 100644 index a57dbfd86..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/endpoint-rule-set-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.0', 'parameters' => [ 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'IsControlPlane' => [ 'required' => false, 'documentation' => 'Indicates if the operation targets the control plane endpoint', 'type' => 'boolean', ], 'IsOAuthEndpoint' => [ 'required' => false, 'documentation' => 'Indicates if the operation targets the OAuth token endpoint', 'type' => 'boolean', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'IsControlPlane', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'IsControlPlane', ], true, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws', ], ], ], 'endpoint' => [ 'url' => 'https://signin.{Region}.api.aws', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-cn', ], ], ], 'endpoint' => [ 'url' => 'https://signin.{Region}.api.amazonwebservices.com.cn', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'IsOAuthEndpoint', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'IsOAuthEndpoint', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'FIPS endpoints are not supported for OAuth operations. Disable FIPS or use a non-OAuth operation.', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'IsOAuthEndpoint', ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'IsOAuthEndpoint', ], true, ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.oauth.signin.aws', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'signin', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.aws.amazon.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-cn', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws.cn', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws-us-gov.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.c2shome.ic.gov', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso-b', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.sc2shome.sgov.gov', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso-f', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.csphome.hci.ic.gov', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-iso-e', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.csphome.adc-e.uk', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-eusc', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws-eusc.eu', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-gov-west-1', ], ], ], 'endpoint' => [ 'url' => 'https://signin-fips.amazonaws-us-gov.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin-fips.amazonaws-us-gov.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.aws.amazon.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-cn', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws.cn', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'endpoint' => [ 'url' => 'https://{Region}.signin.amazonaws-us-gov.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://signin.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ], 'type' => 'tree', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/paginators-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/paginators-1.json.php deleted file mode 100644 index e204a0f2d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/signin/2023-01-01/paginators-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'ListResourcePermissionStatements' => [ 'input_token' => 'nextToken', 'output_token' => 'nextToken', 'limit_key' => 'maxResults', 'result_key' => 'permissionStatements', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/api-2.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/api-2.json.php deleted file mode 100644 index eebcf9892..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/api-2.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '2.0', 'metadata' => [ 'apiVersion' => '2019-06-10', 'endpointPrefix' => 'oidc', 'jsonVersion' => '1.1', 'protocol' => 'rest-json', 'protocols' => [ 'rest-json', ], 'serviceAbbreviation' => 'SSO OIDC', 'serviceFullName' => 'AWS SSO OIDC', 'serviceId' => 'SSO OIDC', 'signatureVersion' => 'v4', 'signingName' => 'sso-oauth', 'uid' => 'sso-oidc-2019-06-10', 'auth' => [ 'aws.auth#sigv4', ], ], 'operations' => [ 'CreateToken' => [ 'name' => 'CreateToken', 'http' => [ 'method' => 'POST', 'requestUri' => '/token', ], 'input' => [ 'shape' => 'CreateTokenRequest', ], 'output' => [ 'shape' => 'CreateTokenResponse', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'InvalidClientException', ], [ 'shape' => 'InvalidGrantException', ], [ 'shape' => 'UnauthorizedClientException', ], [ 'shape' => 'UnsupportedGrantTypeException', ], [ 'shape' => 'InvalidScopeException', ], [ 'shape' => 'AuthorizationPendingException', ], [ 'shape' => 'SlowDownException', ], [ 'shape' => 'AccessDeniedException', ], [ 'shape' => 'ExpiredTokenException', ], [ 'shape' => 'InternalServerException', ], ], 'authtype' => 'none', 'auth' => [ 'smithy.api#noAuth', ], ], 'CreateTokenWithIAM' => [ 'name' => 'CreateTokenWithIAM', 'http' => [ 'method' => 'POST', 'requestUri' => '/token?aws_iam=t', ], 'input' => [ 'shape' => 'CreateTokenWithIAMRequest', ], 'output' => [ 'shape' => 'CreateTokenWithIAMResponse', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'InvalidClientException', ], [ 'shape' => 'InvalidGrantException', ], [ 'shape' => 'UnauthorizedClientException', ], [ 'shape' => 'UnsupportedGrantTypeException', ], [ 'shape' => 'InvalidScopeException', ], [ 'shape' => 'AuthorizationPendingException', ], [ 'shape' => 'SlowDownException', ], [ 'shape' => 'AccessDeniedException', ], [ 'shape' => 'ExpiredTokenException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'InvalidRequestRegionException', ], ], ], 'RegisterClient' => [ 'name' => 'RegisterClient', 'http' => [ 'method' => 'POST', 'requestUri' => '/client/register', ], 'input' => [ 'shape' => 'RegisterClientRequest', ], 'output' => [ 'shape' => 'RegisterClientResponse', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'InvalidScopeException', ], [ 'shape' => 'InvalidClientMetadataException', ], [ 'shape' => 'InternalServerException', ], [ 'shape' => 'InvalidRedirectUriException', ], [ 'shape' => 'UnsupportedGrantTypeException', ], [ 'shape' => 'SlowDownException', ], ], 'authtype' => 'none', 'auth' => [ 'smithy.api#noAuth', ], ], 'StartDeviceAuthorization' => [ 'name' => 'StartDeviceAuthorization', 'http' => [ 'method' => 'POST', 'requestUri' => '/device_authorization', ], 'input' => [ 'shape' => 'StartDeviceAuthorizationRequest', ], 'output' => [ 'shape' => 'StartDeviceAuthorizationResponse', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'InvalidClientException', ], [ 'shape' => 'UnauthorizedClientException', ], [ 'shape' => 'SlowDownException', ], [ 'shape' => 'InternalServerException', ], ], 'authtype' => 'none', 'auth' => [ 'smithy.api#noAuth', ], ], ], 'shapes' => [ 'AccessDeniedException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'reason' => [ 'shape' => 'AccessDeniedExceptionReason', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'AccessDeniedExceptionReason' => [ 'type' => 'string', 'enum' => [ 'KMS_AccessDeniedException', ], ], 'AccessToken' => [ 'type' => 'string', 'sensitive' => true, ], 'ArnType' => [ 'type' => 'string', ], 'Assertion' => [ 'type' => 'string', 'sensitive' => true, ], 'AuthCode' => [ 'type' => 'string', ], 'AuthorizationPendingException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'AwsAdditionalDetails' => [ 'type' => 'structure', 'members' => [ 'identityContext' => [ 'shape' => 'IdentityContext', ], ], ], 'ClientId' => [ 'type' => 'string', ], 'ClientName' => [ 'type' => 'string', ], 'ClientSecret' => [ 'type' => 'string', 'sensitive' => true, ], 'ClientType' => [ 'type' => 'string', ], 'CodeVerifier' => [ 'type' => 'string', 'sensitive' => true, ], 'CreateTokenRequest' => [ 'type' => 'structure', 'required' => [ 'clientId', 'clientSecret', 'grantType', ], 'members' => [ 'clientId' => [ 'shape' => 'ClientId', ], 'clientSecret' => [ 'shape' => 'ClientSecret', ], 'grantType' => [ 'shape' => 'GrantType', ], 'deviceCode' => [ 'shape' => 'DeviceCode', ], 'code' => [ 'shape' => 'AuthCode', ], 'refreshToken' => [ 'shape' => 'RefreshToken', ], 'scope' => [ 'shape' => 'Scopes', ], 'redirectUri' => [ 'shape' => 'URI', ], 'codeVerifier' => [ 'shape' => 'CodeVerifier', ], ], ], 'CreateTokenResponse' => [ 'type' => 'structure', 'members' => [ 'accessToken' => [ 'shape' => 'AccessToken', ], 'tokenType' => [ 'shape' => 'TokenType', ], 'expiresIn' => [ 'shape' => 'ExpirationInSeconds', ], 'refreshToken' => [ 'shape' => 'RefreshToken', ], 'idToken' => [ 'shape' => 'IdToken', ], ], ], 'CreateTokenWithIAMRequest' => [ 'type' => 'structure', 'required' => [ 'clientId', 'grantType', ], 'members' => [ 'clientId' => [ 'shape' => 'ClientId', ], 'grantType' => [ 'shape' => 'GrantType', ], 'code' => [ 'shape' => 'AuthCode', ], 'refreshToken' => [ 'shape' => 'RefreshToken', ], 'assertion' => [ 'shape' => 'Assertion', ], 'scope' => [ 'shape' => 'Scopes', ], 'redirectUri' => [ 'shape' => 'URI', ], 'subjectToken' => [ 'shape' => 'SubjectToken', ], 'subjectTokenType' => [ 'shape' => 'TokenTypeURI', ], 'requestedTokenType' => [ 'shape' => 'TokenTypeURI', ], 'codeVerifier' => [ 'shape' => 'CodeVerifier', ], ], ], 'CreateTokenWithIAMResponse' => [ 'type' => 'structure', 'members' => [ 'accessToken' => [ 'shape' => 'AccessToken', ], 'tokenType' => [ 'shape' => 'TokenType', ], 'expiresIn' => [ 'shape' => 'ExpirationInSeconds', ], 'refreshToken' => [ 'shape' => 'RefreshToken', ], 'idToken' => [ 'shape' => 'IdToken', ], 'issuedTokenType' => [ 'shape' => 'TokenTypeURI', ], 'scope' => [ 'shape' => 'Scopes', ], 'awsAdditionalDetails' => [ 'shape' => 'AwsAdditionalDetails', ], ], ], 'DeviceCode' => [ 'type' => 'string', ], 'Error' => [ 'type' => 'string', ], 'ErrorDescription' => [ 'type' => 'string', ], 'ExpirationInSeconds' => [ 'type' => 'integer', ], 'ExpiredTokenException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'GrantType' => [ 'type' => 'string', ], 'GrantTypes' => [ 'type' => 'list', 'member' => [ 'shape' => 'GrantType', ], ], 'IdToken' => [ 'type' => 'string', 'sensitive' => true, ], 'IdentityContext' => [ 'type' => 'string', ], 'InternalServerException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 500, ], 'exception' => true, 'fault' => true, ], 'IntervalInSeconds' => [ 'type' => 'integer', ], 'InvalidClientException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 401, ], 'exception' => true, ], 'InvalidClientMetadataException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidGrantException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidRedirectUriException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidRequestException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'reason' => [ 'shape' => 'InvalidRequestExceptionReason', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidRequestExceptionReason' => [ 'type' => 'string', 'enum' => [ 'KMS_NotFoundException', 'KMS_InvalidKeyUsageException', 'KMS_InvalidStateException', 'KMS_DisabledException', ], ], 'InvalidRequestRegionException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], 'endpoint' => [ 'shape' => 'Location', ], 'region' => [ 'shape' => 'Region', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'InvalidScopeException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'Location' => [ 'type' => 'string', ], 'LongTimeStampType' => [ 'type' => 'long', ], 'RedirectUris' => [ 'type' => 'list', 'member' => [ 'shape' => 'URI', ], ], 'RefreshToken' => [ 'type' => 'string', 'sensitive' => true, ], 'Region' => [ 'type' => 'string', ], 'RegisterClientRequest' => [ 'type' => 'structure', 'required' => [ 'clientName', 'clientType', ], 'members' => [ 'clientName' => [ 'shape' => 'ClientName', ], 'clientType' => [ 'shape' => 'ClientType', ], 'scopes' => [ 'shape' => 'Scopes', ], 'redirectUris' => [ 'shape' => 'RedirectUris', ], 'grantTypes' => [ 'shape' => 'GrantTypes', ], 'issuerUrl' => [ 'shape' => 'URI', ], 'entitledApplicationArn' => [ 'shape' => 'ArnType', ], ], ], 'RegisterClientResponse' => [ 'type' => 'structure', 'members' => [ 'clientId' => [ 'shape' => 'ClientId', ], 'clientSecret' => [ 'shape' => 'ClientSecret', ], 'clientIdIssuedAt' => [ 'shape' => 'LongTimeStampType', ], 'clientSecretExpiresAt' => [ 'shape' => 'LongTimeStampType', ], 'authorizationEndpoint' => [ 'shape' => 'URI', ], 'tokenEndpoint' => [ 'shape' => 'URI', ], ], ], 'Scope' => [ 'type' => 'string', ], 'Scopes' => [ 'type' => 'list', 'member' => [ 'shape' => 'Scope', ], ], 'SlowDownException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'StartDeviceAuthorizationRequest' => [ 'type' => 'structure', 'required' => [ 'clientId', 'clientSecret', 'startUrl', ], 'members' => [ 'clientId' => [ 'shape' => 'ClientId', ], 'clientSecret' => [ 'shape' => 'ClientSecret', ], 'startUrl' => [ 'shape' => 'URI', ], ], ], 'StartDeviceAuthorizationResponse' => [ 'type' => 'structure', 'members' => [ 'deviceCode' => [ 'shape' => 'DeviceCode', ], 'userCode' => [ 'shape' => 'UserCode', ], 'verificationUri' => [ 'shape' => 'URI', ], 'verificationUriComplete' => [ 'shape' => 'URI', ], 'expiresIn' => [ 'shape' => 'ExpirationInSeconds', ], 'interval' => [ 'shape' => 'IntervalInSeconds', ], ], ], 'SubjectToken' => [ 'type' => 'string', 'sensitive' => true, ], 'TokenType' => [ 'type' => 'string', ], 'TokenTypeURI' => [ 'type' => 'string', ], 'URI' => [ 'type' => 'string', ], 'UnauthorizedClientException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'UnsupportedGrantTypeException' => [ 'type' => 'structure', 'members' => [ 'error' => [ 'shape' => 'Error', ], 'error_description' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'UserCode' => [ 'type' => 'string', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/endpoint-bdd-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/endpoint-bdd-1.json.php deleted file mode 100644 index d1c3533e1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/endpoint-bdd-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.1', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], ], 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'results' => [ [ 'conditions' => [], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc.{Region}.amazonaws.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ], 'root' => 2, 'nodeCount' => 14, 'nodes' => '/////wAAAAH/////AAAAAAAAAA0AAAADAAAAAQAAAAQF9eEMAAAAAgAAAAUF9eEMAAAAAwAAAAgAAAAGAAAABAAAAAcF9eELAAAABQX14QkF9eEKAAAABAAAAAsAAAAJAAAABgAAAAoF9eEIAAAABwX14QYF9eEHAAAABQAAAAwF9eEFAAAABgX14QQF9eEFAAAAAwX14QEAAAAOAAAABAX14QIF9eED',]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json.php deleted file mode 100644 index 00336ca15..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.0', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'endpoint' => [ 'url' => 'https://oidc.{Region}.amazonaws.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://oidc.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/paginators-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/paginators-1.json.php deleted file mode 100644 index 188bff211..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso-oidc/2019-06-10/paginators-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/api-2.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/api-2.json.php deleted file mode 100644 index a32c7d004..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/api-2.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '2.0', 'metadata' => [ 'apiVersion' => '2019-06-10', 'endpointPrefix' => 'portal.sso', 'jsonVersion' => '1.1', 'protocol' => 'rest-json', 'protocols' => [ 'rest-json', ], 'serviceAbbreviation' => 'SSO', 'serviceFullName' => 'AWS Single Sign-On', 'serviceId' => 'SSO', 'signatureVersion' => 'v4', 'signingName' => 'awsssoportal', 'uid' => 'sso-2019-06-10', 'auth' => [ 'aws.auth#sigv4', ], ], 'operations' => [ 'GetRoleCredentials' => [ 'name' => 'GetRoleCredentials', 'http' => [ 'method' => 'GET', 'requestUri' => '/federation/credentials', ], 'input' => [ 'shape' => 'GetRoleCredentialsRequest', ], 'output' => [ 'shape' => 'GetRoleCredentialsResponse', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'UnauthorizedException', ], [ 'shape' => 'TooManyRequestsException', ], [ 'shape' => 'ResourceNotFoundException', ], ], 'authtype' => 'none', 'auth' => [ 'smithy.api#noAuth', ], ], 'ListAccountRoles' => [ 'name' => 'ListAccountRoles', 'http' => [ 'method' => 'GET', 'requestUri' => '/assignment/roles', ], 'input' => [ 'shape' => 'ListAccountRolesRequest', ], 'output' => [ 'shape' => 'ListAccountRolesResponse', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'UnauthorizedException', ], [ 'shape' => 'TooManyRequestsException', ], [ 'shape' => 'ResourceNotFoundException', ], ], 'authtype' => 'none', 'auth' => [ 'smithy.api#noAuth', ], ], 'ListAccounts' => [ 'name' => 'ListAccounts', 'http' => [ 'method' => 'GET', 'requestUri' => '/assignment/accounts', ], 'input' => [ 'shape' => 'ListAccountsRequest', ], 'output' => [ 'shape' => 'ListAccountsResponse', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'UnauthorizedException', ], [ 'shape' => 'TooManyRequestsException', ], [ 'shape' => 'ResourceNotFoundException', ], ], 'authtype' => 'none', 'auth' => [ 'smithy.api#noAuth', ], ], 'Logout' => [ 'name' => 'Logout', 'http' => [ 'method' => 'POST', 'requestUri' => '/logout', ], 'input' => [ 'shape' => 'LogoutRequest', ], 'errors' => [ [ 'shape' => 'InvalidRequestException', ], [ 'shape' => 'UnauthorizedException', ], [ 'shape' => 'TooManyRequestsException', ], ], 'authtype' => 'none', 'auth' => [ 'smithy.api#noAuth', ], ], ], 'shapes' => [ 'AccessKeyType' => [ 'type' => 'string', ], 'AccessTokenType' => [ 'type' => 'string', 'sensitive' => true, ], 'AccountIdType' => [ 'type' => 'string', ], 'AccountInfo' => [ 'type' => 'structure', 'members' => [ 'accountId' => [ 'shape' => 'AccountIdType', ], 'accountName' => [ 'shape' => 'AccountNameType', ], 'emailAddress' => [ 'shape' => 'EmailAddressType', ], ], ], 'AccountListType' => [ 'type' => 'list', 'member' => [ 'shape' => 'AccountInfo', ], ], 'AccountNameType' => [ 'type' => 'string', ], 'EmailAddressType' => [ 'type' => 'string', 'max' => 254, 'min' => 1, ], 'ErrorDescription' => [ 'type' => 'string', ], 'ExpirationTimestampType' => [ 'type' => 'long', ], 'GetRoleCredentialsRequest' => [ 'type' => 'structure', 'required' => [ 'roleName', 'accountId', 'accessToken', ], 'members' => [ 'roleName' => [ 'shape' => 'RoleNameType', 'location' => 'querystring', 'locationName' => 'role_name', ], 'accountId' => [ 'shape' => 'AccountIdType', 'location' => 'querystring', 'locationName' => 'account_id', ], 'accessToken' => [ 'shape' => 'AccessTokenType', 'location' => 'header', 'locationName' => 'x-amz-sso_bearer_token', ], ], ], 'GetRoleCredentialsResponse' => [ 'type' => 'structure', 'members' => [ 'roleCredentials' => [ 'shape' => 'RoleCredentials', ], ], ], 'InvalidRequestException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 400, ], 'exception' => true, ], 'ListAccountRolesRequest' => [ 'type' => 'structure', 'required' => [ 'accessToken', 'accountId', ], 'members' => [ 'nextToken' => [ 'shape' => 'NextTokenType', 'location' => 'querystring', 'locationName' => 'next_token', ], 'maxResults' => [ 'shape' => 'MaxResultType', 'location' => 'querystring', 'locationName' => 'max_result', ], 'accessToken' => [ 'shape' => 'AccessTokenType', 'location' => 'header', 'locationName' => 'x-amz-sso_bearer_token', ], 'accountId' => [ 'shape' => 'AccountIdType', 'location' => 'querystring', 'locationName' => 'account_id', ], ], ], 'ListAccountRolesResponse' => [ 'type' => 'structure', 'members' => [ 'nextToken' => [ 'shape' => 'NextTokenType', ], 'roleList' => [ 'shape' => 'RoleListType', ], ], ], 'ListAccountsRequest' => [ 'type' => 'structure', 'required' => [ 'accessToken', ], 'members' => [ 'nextToken' => [ 'shape' => 'NextTokenType', 'location' => 'querystring', 'locationName' => 'next_token', ], 'maxResults' => [ 'shape' => 'MaxResultType', 'location' => 'querystring', 'locationName' => 'max_result', ], 'accessToken' => [ 'shape' => 'AccessTokenType', 'location' => 'header', 'locationName' => 'x-amz-sso_bearer_token', ], ], ], 'ListAccountsResponse' => [ 'type' => 'structure', 'members' => [ 'nextToken' => [ 'shape' => 'NextTokenType', ], 'accountList' => [ 'shape' => 'AccountListType', ], ], ], 'LogoutRequest' => [ 'type' => 'structure', 'required' => [ 'accessToken', ], 'members' => [ 'accessToken' => [ 'shape' => 'AccessTokenType', 'location' => 'header', 'locationName' => 'x-amz-sso_bearer_token', ], ], ], 'MaxResultType' => [ 'type' => 'integer', 'box' => true, 'max' => 100, 'min' => 1, ], 'NextTokenType' => [ 'type' => 'string', ], 'ResourceNotFoundException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 404, ], 'exception' => true, ], 'RoleCredentials' => [ 'type' => 'structure', 'members' => [ 'accessKeyId' => [ 'shape' => 'AccessKeyType', ], 'secretAccessKey' => [ 'shape' => 'SecretAccessKeyType', ], 'sessionToken' => [ 'shape' => 'SessionTokenType', ], 'expiration' => [ 'shape' => 'ExpirationTimestampType', ], ], ], 'RoleInfo' => [ 'type' => 'structure', 'members' => [ 'roleName' => [ 'shape' => 'RoleNameType', ], 'accountId' => [ 'shape' => 'AccountIdType', ], ], ], 'RoleListType' => [ 'type' => 'list', 'member' => [ 'shape' => 'RoleInfo', ], ], 'RoleNameType' => [ 'type' => 'string', ], 'SecretAccessKeyType' => [ 'type' => 'string', 'sensitive' => true, ], 'SessionTokenType' => [ 'type' => 'string', 'sensitive' => true, ], 'TooManyRequestsException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 429, ], 'exception' => true, ], 'UnauthorizedException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'ErrorDescription', ], ], 'error' => [ 'httpStatusCode' => 401, ], 'exception' => true, ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/endpoint-bdd-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/endpoint-bdd-1.json.php deleted file mode 100644 index 8ba8f3626..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/endpoint-bdd-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.1', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], ], 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'results' => [ [ 'conditions' => [], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso.{Region}.amazonaws.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ], 'root' => 2, 'nodeCount' => 14, 'nodes' => '/////wAAAAH/////AAAAAAAAAA0AAAADAAAAAQAAAAQF9eEMAAAAAgAAAAUF9eEMAAAAAwAAAAgAAAAGAAAABAAAAAcF9eELAAAABQX14QkF9eEKAAAABAAAAAsAAAAJAAAABgAAAAoF9eEIAAAABwX14QYF9eEHAAAABQAAAAwF9eEFAAAABgX14QQF9eEFAAAAAwX14QEAAAAOAAAABAX14QIF9eED',]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/endpoint-rule-set-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/endpoint-rule-set-1.json.php deleted file mode 100644 index e0e6d4ecb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/endpoint-rule-set-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.0', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'endpoint' => [ 'url' => 'https://portal.sso.{Region}.amazonaws.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://portal.sso.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/paginators-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/paginators-1.json.php deleted file mode 100644 index 38d7738fd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sso/2019-06-10/paginators-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [ 'ListAccountRoles' => [ 'input_token' => 'nextToken', 'output_token' => 'nextToken', 'limit_key' => 'maxResults', 'result_key' => 'roleList', ], 'ListAccounts' => [ 'input_token' => 'nextToken', 'output_token' => 'nextToken', 'limit_key' => 'maxResults', 'result_key' => 'accountList', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/api-2.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/api-2.json.php deleted file mode 100644 index 720ee0aee..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/api-2.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '2.0', 'metadata' => [ 'apiVersion' => '2011-06-15', 'auth' => [ 'aws.auth#sigv4', 'aws.auth#sigv4a', ], 'endpointPrefix' => 'sts', 'globalEndpoint' => 'sts.amazonaws.com', 'protocol' => 'query', 'protocols' => [ 'query', ], 'serviceAbbreviation' => 'AWS STS', 'serviceFullName' => 'AWS Security Token Service', 'serviceId' => 'STS', 'signatureVersion' => 'v4', 'uid' => 'sts-2011-06-15', 'xmlNamespace' => 'https://sts.amazonaws.com/doc/2011-06-15/', ], 'operations' => [ 'AssumeRole' => [ 'name' => 'AssumeRole', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'AssumeRoleRequest', ], 'output' => [ 'shape' => 'AssumeRoleResponse', 'resultWrapper' => 'AssumeRoleResult', ], 'errors' => [ [ 'shape' => 'MalformedPolicyDocumentException', ], [ 'shape' => 'PackedPolicyTooLargeException', ], [ 'shape' => 'RegionDisabledException', ], [ 'shape' => 'ExpiredTokenException', ], ], ], 'AssumeRoleWithSAML' => [ 'name' => 'AssumeRoleWithSAML', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'AssumeRoleWithSAMLRequest', ], 'output' => [ 'shape' => 'AssumeRoleWithSAMLResponse', 'resultWrapper' => 'AssumeRoleWithSAMLResult', ], 'errors' => [ [ 'shape' => 'MalformedPolicyDocumentException', ], [ 'shape' => 'PackedPolicyTooLargeException', ], [ 'shape' => 'IDPRejectedClaimException', ], [ 'shape' => 'InvalidIdentityTokenException', ], [ 'shape' => 'ExpiredTokenException', ], [ 'shape' => 'RegionDisabledException', ], ], 'auth' => [ 'smithy.api#noAuth', ], 'authtype' => 'none', ], 'AssumeRoleWithWebIdentity' => [ 'name' => 'AssumeRoleWithWebIdentity', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'AssumeRoleWithWebIdentityRequest', ], 'output' => [ 'shape' => 'AssumeRoleWithWebIdentityResponse', 'resultWrapper' => 'AssumeRoleWithWebIdentityResult', ], 'errors' => [ [ 'shape' => 'MalformedPolicyDocumentException', ], [ 'shape' => 'PackedPolicyTooLargeException', ], [ 'shape' => 'IDPRejectedClaimException', ], [ 'shape' => 'IDPCommunicationErrorException', ], [ 'shape' => 'InvalidIdentityTokenException', ], [ 'shape' => 'ExpiredTokenException', ], [ 'shape' => 'RegionDisabledException', ], ], 'auth' => [ 'smithy.api#noAuth', ], 'authtype' => 'none', ], 'AssumeRoot' => [ 'name' => 'AssumeRoot', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'AssumeRootRequest', ], 'output' => [ 'shape' => 'AssumeRootResponse', 'resultWrapper' => 'AssumeRootResult', ], 'errors' => [ [ 'shape' => 'RegionDisabledException', ], [ 'shape' => 'ExpiredTokenException', ], ], ], 'DecodeAuthorizationMessage' => [ 'name' => 'DecodeAuthorizationMessage', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'DecodeAuthorizationMessageRequest', ], 'output' => [ 'shape' => 'DecodeAuthorizationMessageResponse', 'resultWrapper' => 'DecodeAuthorizationMessageResult', ], 'errors' => [ [ 'shape' => 'InvalidAuthorizationMessageException', ], ], ], 'GetAccessKeyInfo' => [ 'name' => 'GetAccessKeyInfo', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetAccessKeyInfoRequest', ], 'output' => [ 'shape' => 'GetAccessKeyInfoResponse', 'resultWrapper' => 'GetAccessKeyInfoResult', ], ], 'GetCallerIdentity' => [ 'name' => 'GetCallerIdentity', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetCallerIdentityRequest', ], 'output' => [ 'shape' => 'GetCallerIdentityResponse', 'resultWrapper' => 'GetCallerIdentityResult', ], ], 'GetDelegatedAccessToken' => [ 'name' => 'GetDelegatedAccessToken', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetDelegatedAccessTokenRequest', ], 'output' => [ 'shape' => 'GetDelegatedAccessTokenResponse', 'resultWrapper' => 'GetDelegatedAccessTokenResult', ], 'errors' => [ [ 'shape' => 'ExpiredTradeInTokenException', ], [ 'shape' => 'RegionDisabledException', ], [ 'shape' => 'PackedPolicyTooLargeException', ], ], ], 'GetFederationToken' => [ 'name' => 'GetFederationToken', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetFederationTokenRequest', ], 'output' => [ 'shape' => 'GetFederationTokenResponse', 'resultWrapper' => 'GetFederationTokenResult', ], 'errors' => [ [ 'shape' => 'MalformedPolicyDocumentException', ], [ 'shape' => 'PackedPolicyTooLargeException', ], [ 'shape' => 'RegionDisabledException', ], ], ], 'GetSessionToken' => [ 'name' => 'GetSessionToken', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetSessionTokenRequest', ], 'output' => [ 'shape' => 'GetSessionTokenResponse', 'resultWrapper' => 'GetSessionTokenResult', ], 'errors' => [ [ 'shape' => 'RegionDisabledException', ], ], ], 'GetWebIdentityToken' => [ 'name' => 'GetWebIdentityToken', 'http' => [ 'method' => 'POST', 'requestUri' => '/', ], 'input' => [ 'shape' => 'GetWebIdentityTokenRequest', ], 'output' => [ 'shape' => 'GetWebIdentityTokenResponse', 'resultWrapper' => 'GetWebIdentityTokenResult', ], 'errors' => [ [ 'shape' => 'SessionDurationEscalationException', ], [ 'shape' => 'OutboundWebIdentityFederationDisabledException', ], [ 'shape' => 'JWTPayloadSizeExceededException', ], ], ], ], 'shapes' => [ 'AssumeRoleRequest' => [ 'type' => 'structure', 'required' => [ 'RoleArn', 'RoleSessionName', ], 'members' => [ 'RoleArn' => [ 'shape' => 'arnType', ], 'RoleSessionName' => [ 'shape' => 'roleSessionNameType', ], 'PolicyArns' => [ 'shape' => 'policyDescriptorListType', ], 'Policy' => [ 'shape' => 'unrestrictedSessionPolicyDocumentType', ], 'DurationSeconds' => [ 'shape' => 'roleDurationSecondsType', ], 'Tags' => [ 'shape' => 'tagListType', ], 'TransitiveTagKeys' => [ 'shape' => 'tagKeyListType', ], 'ExternalId' => [ 'shape' => 'externalIdType', ], 'SerialNumber' => [ 'shape' => 'serialNumberType', ], 'TokenCode' => [ 'shape' => 'tokenCodeType', ], 'SourceIdentity' => [ 'shape' => 'sourceIdentityType', ], 'ProvidedContexts' => [ 'shape' => 'ProvidedContextsListType', ], ], ], 'AssumeRoleResponse' => [ 'type' => 'structure', 'members' => [ 'Credentials' => [ 'shape' => 'Credentials', ], 'AssumedRoleUser' => [ 'shape' => 'AssumedRoleUser', ], 'PackedPolicySize' => [ 'shape' => 'nonNegativeIntegerType', ], 'SourceIdentity' => [ 'shape' => 'sourceIdentityType', ], ], ], 'AssumeRoleWithSAMLRequest' => [ 'type' => 'structure', 'required' => [ 'RoleArn', 'PrincipalArn', 'SAMLAssertion', ], 'members' => [ 'RoleArn' => [ 'shape' => 'arnType', ], 'PrincipalArn' => [ 'shape' => 'arnType', ], 'SAMLAssertion' => [ 'shape' => 'SAMLAssertionType', ], 'PolicyArns' => [ 'shape' => 'policyDescriptorListType', ], 'Policy' => [ 'shape' => 'sessionPolicyDocumentType', ], 'DurationSeconds' => [ 'shape' => 'roleDurationSecondsType', ], ], ], 'AssumeRoleWithSAMLResponse' => [ 'type' => 'structure', 'members' => [ 'Credentials' => [ 'shape' => 'Credentials', ], 'AssumedRoleUser' => [ 'shape' => 'AssumedRoleUser', ], 'PackedPolicySize' => [ 'shape' => 'nonNegativeIntegerType', ], 'Subject' => [ 'shape' => 'Subject', ], 'SubjectType' => [ 'shape' => 'SubjectType', ], 'Issuer' => [ 'shape' => 'Issuer', ], 'Audience' => [ 'shape' => 'Audience', ], 'NameQualifier' => [ 'shape' => 'NameQualifier', ], 'SourceIdentity' => [ 'shape' => 'sourceIdentityType', ], ], ], 'AssumeRoleWithWebIdentityRequest' => [ 'type' => 'structure', 'required' => [ 'RoleArn', 'RoleSessionName', 'WebIdentityToken', ], 'members' => [ 'RoleArn' => [ 'shape' => 'arnType', ], 'RoleSessionName' => [ 'shape' => 'roleSessionNameType', ], 'WebIdentityToken' => [ 'shape' => 'clientTokenType', ], 'ProviderId' => [ 'shape' => 'urlType', ], 'PolicyArns' => [ 'shape' => 'policyDescriptorListType', ], 'Policy' => [ 'shape' => 'sessionPolicyDocumentType', ], 'DurationSeconds' => [ 'shape' => 'roleDurationSecondsType', ], ], ], 'AssumeRoleWithWebIdentityResponse' => [ 'type' => 'structure', 'members' => [ 'Credentials' => [ 'shape' => 'Credentials', ], 'SubjectFromWebIdentityToken' => [ 'shape' => 'webIdentitySubjectType', ], 'AssumedRoleUser' => [ 'shape' => 'AssumedRoleUser', ], 'PackedPolicySize' => [ 'shape' => 'nonNegativeIntegerType', ], 'Provider' => [ 'shape' => 'Issuer', ], 'Audience' => [ 'shape' => 'Audience', ], 'SourceIdentity' => [ 'shape' => 'sourceIdentityType', ], ], ], 'AssumeRootRequest' => [ 'type' => 'structure', 'required' => [ 'TargetPrincipal', 'TaskPolicyArn', ], 'members' => [ 'TargetPrincipal' => [ 'shape' => 'TargetPrincipalType', ], 'TaskPolicyArn' => [ 'shape' => 'PolicyDescriptorType', ], 'DurationSeconds' => [ 'shape' => 'RootDurationSecondsType', ], ], ], 'AssumeRootResponse' => [ 'type' => 'structure', 'members' => [ 'Credentials' => [ 'shape' => 'Credentials', ], 'SourceIdentity' => [ 'shape' => 'sourceIdentityType', ], ], ], 'AssumedRoleUser' => [ 'type' => 'structure', 'required' => [ 'AssumedRoleId', 'Arn', ], 'members' => [ 'AssumedRoleId' => [ 'shape' => 'assumedRoleIdType', ], 'Arn' => [ 'shape' => 'arnType', ], ], ], 'Audience' => [ 'type' => 'string', ], 'Credentials' => [ 'type' => 'structure', 'required' => [ 'AccessKeyId', 'SecretAccessKey', 'SessionToken', 'Expiration', ], 'members' => [ 'AccessKeyId' => [ 'shape' => 'accessKeyIdType', ], 'SecretAccessKey' => [ 'shape' => 'accessKeySecretType', ], 'SessionToken' => [ 'shape' => 'tokenType', ], 'Expiration' => [ 'shape' => 'dateType', ], ], ], 'DecodeAuthorizationMessageRequest' => [ 'type' => 'structure', 'required' => [ 'EncodedMessage', ], 'members' => [ 'EncodedMessage' => [ 'shape' => 'encodedMessageType', ], ], ], 'DecodeAuthorizationMessageResponse' => [ 'type' => 'structure', 'members' => [ 'DecodedMessage' => [ 'shape' => 'decodedMessageType', ], ], ], 'ExpiredTokenException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'expiredIdentityTokenMessage', ], ], 'error' => [ 'code' => 'ExpiredTokenException', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'ExpiredTradeInTokenException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'expiredTradeInTokenExceptionMessage', ], ], 'error' => [ 'code' => 'ExpiredTradeInTokenException', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'FederatedUser' => [ 'type' => 'structure', 'required' => [ 'FederatedUserId', 'Arn', ], 'members' => [ 'FederatedUserId' => [ 'shape' => 'federatedIdType', ], 'Arn' => [ 'shape' => 'arnType', ], ], ], 'GetAccessKeyInfoRequest' => [ 'type' => 'structure', 'required' => [ 'AccessKeyId', ], 'members' => [ 'AccessKeyId' => [ 'shape' => 'accessKeyIdType', ], ], ], 'GetAccessKeyInfoResponse' => [ 'type' => 'structure', 'members' => [ 'Account' => [ 'shape' => 'accountType', ], ], ], 'GetCallerIdentityRequest' => [ 'type' => 'structure', 'members' => [], ], 'GetCallerIdentityResponse' => [ 'type' => 'structure', 'members' => [ 'UserId' => [ 'shape' => 'userIdType', ], 'Account' => [ 'shape' => 'accountType', ], 'Arn' => [ 'shape' => 'arnType', ], ], ], 'GetDelegatedAccessTokenRequest' => [ 'type' => 'structure', 'required' => [ 'TradeInToken', ], 'members' => [ 'TradeInToken' => [ 'shape' => 'tradeInTokenType', ], ], ], 'GetDelegatedAccessTokenResponse' => [ 'type' => 'structure', 'members' => [ 'Credentials' => [ 'shape' => 'Credentials', ], 'PackedPolicySize' => [ 'shape' => 'nonNegativeIntegerType', ], 'AssumedPrincipal' => [ 'shape' => 'arnType', ], ], ], 'GetFederationTokenRequest' => [ 'type' => 'structure', 'required' => [ 'Name', ], 'members' => [ 'Name' => [ 'shape' => 'userNameType', ], 'Policy' => [ 'shape' => 'sessionPolicyDocumentType', ], 'PolicyArns' => [ 'shape' => 'policyDescriptorListType', ], 'DurationSeconds' => [ 'shape' => 'durationSecondsType', ], 'Tags' => [ 'shape' => 'tagListType', ], ], ], 'GetFederationTokenResponse' => [ 'type' => 'structure', 'members' => [ 'Credentials' => [ 'shape' => 'Credentials', ], 'FederatedUser' => [ 'shape' => 'FederatedUser', ], 'PackedPolicySize' => [ 'shape' => 'nonNegativeIntegerType', ], ], ], 'GetSessionTokenRequest' => [ 'type' => 'structure', 'members' => [ 'DurationSeconds' => [ 'shape' => 'durationSecondsType', ], 'SerialNumber' => [ 'shape' => 'serialNumberType', ], 'TokenCode' => [ 'shape' => 'tokenCodeType', ], ], ], 'GetSessionTokenResponse' => [ 'type' => 'structure', 'members' => [ 'Credentials' => [ 'shape' => 'Credentials', ], ], ], 'GetWebIdentityTokenRequest' => [ 'type' => 'structure', 'required' => [ 'Audience', 'SigningAlgorithm', ], 'members' => [ 'Audience' => [ 'shape' => 'webIdentityTokenAudienceListType', ], 'DurationSeconds' => [ 'shape' => 'webIdentityTokenDurationSecondsType', ], 'SigningAlgorithm' => [ 'shape' => 'jwtAlgorithmType', ], 'Tags' => [ 'shape' => 'tagListType', ], ], ], 'GetWebIdentityTokenResponse' => [ 'type' => 'structure', 'members' => [ 'WebIdentityToken' => [ 'shape' => 'webIdentityTokenType', ], 'Expiration' => [ 'shape' => 'dateType', ], ], ], 'IDPCommunicationErrorException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'idpCommunicationErrorMessage', ], ], 'error' => [ 'code' => 'IDPCommunicationError', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'IDPRejectedClaimException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'idpRejectedClaimMessage', ], ], 'error' => [ 'code' => 'IDPRejectedClaim', 'httpStatusCode' => 403, 'senderFault' => true, ], 'exception' => true, ], 'InvalidAuthorizationMessageException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'invalidAuthorizationMessage', ], ], 'error' => [ 'code' => 'InvalidAuthorizationMessageException', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'InvalidIdentityTokenException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'invalidIdentityTokenMessage', ], ], 'error' => [ 'code' => 'InvalidIdentityToken', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'Issuer' => [ 'type' => 'string', ], 'JWTPayloadSizeExceededException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'jwtPayloadSizeExceededException', ], ], 'error' => [ 'code' => 'JWTPayloadSizeExceededException', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'MalformedPolicyDocumentException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'malformedPolicyDocumentMessage', ], ], 'error' => [ 'code' => 'MalformedPolicyDocument', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'NameQualifier' => [ 'type' => 'string', ], 'OutboundWebIdentityFederationDisabledException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'outboundWebIdentityFederationDisabledException', ], ], 'error' => [ 'code' => 'OutboundWebIdentityFederationDisabledException', 'httpStatusCode' => 403, 'senderFault' => true, ], 'exception' => true, ], 'PackedPolicyTooLargeException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'packedPolicyTooLargeMessage', ], ], 'error' => [ 'code' => 'PackedPolicyTooLarge', 'httpStatusCode' => 400, 'senderFault' => true, ], 'exception' => true, ], 'PolicyDescriptorType' => [ 'type' => 'structure', 'members' => [ 'arn' => [ 'shape' => 'arnType', ], ], ], 'ProvidedContext' => [ 'type' => 'structure', 'members' => [ 'ProviderArn' => [ 'shape' => 'arnType', ], 'ContextAssertion' => [ 'shape' => 'contextAssertionType', ], ], ], 'ProvidedContextsListType' => [ 'type' => 'list', 'member' => [ 'shape' => 'ProvidedContext', ], 'max' => 5, 'min' => 1, ], 'RegionDisabledException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'regionDisabledMessage', ], ], 'error' => [ 'code' => 'RegionDisabledException', 'httpStatusCode' => 403, 'senderFault' => true, ], 'exception' => true, ], 'RootDurationSecondsType' => [ 'type' => 'integer', 'max' => 900, 'min' => 0, ], 'SAMLAssertionType' => [ 'type' => 'string', 'max' => 100000, 'min' => 4, 'sensitive' => true, ], 'SessionDurationEscalationException' => [ 'type' => 'structure', 'members' => [ 'message' => [ 'shape' => 'sessionDurationEscalationException', ], ], 'error' => [ 'code' => 'SessionDurationEscalationException', 'httpStatusCode' => 403, 'senderFault' => true, ], 'exception' => true, ], 'Subject' => [ 'type' => 'string', ], 'SubjectType' => [ 'type' => 'string', ], 'Tag' => [ 'type' => 'structure', 'required' => [ 'Key', 'Value', ], 'members' => [ 'Key' => [ 'shape' => 'tagKeyType', ], 'Value' => [ 'shape' => 'tagValueType', ], ], ], 'TargetPrincipalType' => [ 'type' => 'string', 'max' => 2048, 'min' => 12, ], 'accessKeyIdType' => [ 'type' => 'string', 'max' => 128, 'min' => 16, 'pattern' => '[\\w]*', ], 'accessKeySecretType' => [ 'type' => 'string', 'sensitive' => true, ], 'accountType' => [ 'type' => 'string', ], 'arnType' => [ 'type' => 'string', 'max' => 2048, 'min' => 20, 'pattern' => '[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]+', ], 'assumedRoleIdType' => [ 'type' => 'string', 'max' => 193, 'min' => 2, 'pattern' => '[\\w+=,.@:-]*', ], 'clientTokenType' => [ 'type' => 'string', 'max' => 20000, 'min' => 4, 'sensitive' => true, ], 'contextAssertionType' => [ 'type' => 'string', 'max' => 2048, 'min' => 4, ], 'dateType' => [ 'type' => 'timestamp', ], 'decodedMessageType' => [ 'type' => 'string', ], 'durationSecondsType' => [ 'type' => 'integer', 'max' => 129600, 'min' => 900, ], 'encodedMessageType' => [ 'type' => 'string', 'max' => 10240, 'min' => 1, ], 'expiredIdentityTokenMessage' => [ 'type' => 'string', ], 'expiredTradeInTokenExceptionMessage' => [ 'type' => 'string', ], 'externalIdType' => [ 'type' => 'string', 'max' => 1224, 'min' => 2, 'pattern' => '[\\w+=,.@:\\/-]*', ], 'federatedIdType' => [ 'type' => 'string', 'max' => 193, 'min' => 2, 'pattern' => '[\\w+=,.@\\:-]*', ], 'idpCommunicationErrorMessage' => [ 'type' => 'string', ], 'idpRejectedClaimMessage' => [ 'type' => 'string', ], 'invalidAuthorizationMessage' => [ 'type' => 'string', ], 'invalidIdentityTokenMessage' => [ 'type' => 'string', ], 'jwtAlgorithmType' => [ 'type' => 'string', 'max' => 5, 'min' => 5, ], 'jwtPayloadSizeExceededException' => [ 'type' => 'string', ], 'malformedPolicyDocumentMessage' => [ 'type' => 'string', ], 'nonNegativeIntegerType' => [ 'type' => 'integer', 'min' => 0, ], 'outboundWebIdentityFederationDisabledException' => [ 'type' => 'string', ], 'packedPolicyTooLargeMessage' => [ 'type' => 'string', ], 'policyDescriptorListType' => [ 'type' => 'list', 'member' => [ 'shape' => 'PolicyDescriptorType', ], ], 'regionDisabledMessage' => [ 'type' => 'string', ], 'roleDurationSecondsType' => [ 'type' => 'integer', 'max' => 43200, 'min' => 900, ], 'roleSessionNameType' => [ 'type' => 'string', 'max' => 64, 'min' => 2, 'pattern' => '[\\w+=,.@-]*', ], 'serialNumberType' => [ 'type' => 'string', 'max' => 256, 'min' => 9, 'pattern' => '[\\w+=/:,.@-]*', ], 'sessionDurationEscalationException' => [ 'type' => 'string', ], 'sessionPolicyDocumentType' => [ 'type' => 'string', 'max' => 2048, 'min' => 1, 'pattern' => '[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+', ], 'sourceIdentityType' => [ 'type' => 'string', 'max' => 64, 'min' => 2, 'pattern' => '[\\w+=,.@-]*', ], 'tagKeyListType' => [ 'type' => 'list', 'member' => [ 'shape' => 'tagKeyType', ], 'max' => 50, ], 'tagKeyType' => [ 'type' => 'string', 'max' => 128, 'min' => 1, 'pattern' => '[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]+', ], 'tagListType' => [ 'type' => 'list', 'member' => [ 'shape' => 'Tag', ], 'max' => 50, ], 'tagValueType' => [ 'type' => 'string', 'max' => 256, 'min' => 0, 'pattern' => '[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*', ], 'tokenCodeType' => [ 'type' => 'string', 'max' => 6, 'min' => 6, 'pattern' => '[\\d]*', ], 'tokenType' => [ 'type' => 'string', ], 'tradeInTokenType' => [ 'type' => 'string', 'sensitive' => true, ], 'unrestrictedSessionPolicyDocumentType' => [ 'type' => 'string', 'min' => 1, 'pattern' => '[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+', ], 'urlType' => [ 'type' => 'string', 'max' => 2048, 'min' => 4, ], 'userIdType' => [ 'type' => 'string', ], 'userNameType' => [ 'type' => 'string', 'max' => 32, 'min' => 2, 'pattern' => '[\\w+=,.@-]*', ], 'webIdentitySubjectType' => [ 'type' => 'string', 'max' => 255, 'min' => 6, ], 'webIdentityTokenAudienceListType' => [ 'type' => 'list', 'member' => [ 'shape' => 'webIdentityTokenAudienceStringType', ], 'max' => 10, 'min' => 1, ], 'webIdentityTokenAudienceStringType' => [ 'type' => 'string', 'max' => 1000, 'min' => 1, ], 'webIdentityTokenDurationSecondsType' => [ 'type' => 'integer', 'max' => 3600, 'min' => 60, ], 'webIdentityTokenType' => [ 'type' => 'string', 'sensitive' => true, ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/endpoint-bdd-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/endpoint-bdd-1.json.php deleted file mode 100644 index e0fd17e12..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/endpoint-bdd-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.1', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], 'UseGlobalEndpoint' => [ 'builtIn' => 'AWS::STS::UseGlobalEndpoint', 'required' => true, 'default' => false, 'documentation' => 'Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.', 'type' => 'boolean', ], ], 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-central-1', ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-south-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-north-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-west-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-west-2', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-west-3', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'sa-east-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-2', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-west-2', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-west-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ca-central-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-southeast-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-northeast-1', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-southeast-2', ], ], [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'results' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.{Region}.amazonaws.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ], 'root' => 2, 'nodeCount' => 31, 'nodes' => '/////wAAAAH/////AAAAAAAAAB4AAAADAAAAAQAAAAQF9eEOAAAAAgAAAAUF9eEOAAAAAwAAABkAAAAGAAAABAAAABgAAAAHAAAABQX14QEAAAAIAAAABgAAAAkF9eENAAAABwX14QEAAAAKAAAACgX14QEAAAALAAAACwX14QEAAAAMAAAADAX14QEAAAANAAAADQX14QEAAAAOAAAADgX14QEAAAAPAAAADwX14QEAAAAQAAAAEAX14QEAAAARAAAAEQX14QEAAAASAAAAEgX14QEAAAATAAAAEwX14QEAAAAUAAAAFAX14QEAAAAVAAAAFQX14QEAAAAWAAAAFgX14QEAAAAXAAAAFwX14QEF9eECAAAACAX14QsF9eEMAAAABAAAABwAAAAaAAAACQAAABsF9eEKAAAAGAX14QgF9eEJAAAACAAAAB0F9eEHAAAACQX14QYF9eEHAAAAAwX14QMAAAAfAAAABAX14QQF9eEF',]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/endpoint-rule-set-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/endpoint-rule-set-1.json.php deleted file mode 100644 index 6d8b551fd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/endpoint-rule-set-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - '1.0', 'parameters' => [ 'Region' => [ 'builtIn' => 'AWS::Region', 'required' => false, 'documentation' => 'The AWS region used to dispatch the request.', 'type' => 'string', ], 'UseDualStack' => [ 'builtIn' => 'AWS::UseDualStack', 'required' => true, 'default' => false, 'documentation' => 'When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.', 'type' => 'boolean', ], 'UseFIPS' => [ 'builtIn' => 'AWS::UseFIPS', 'required' => true, 'default' => false, 'documentation' => 'When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.', 'type' => 'boolean', ], 'Endpoint' => [ 'builtIn' => 'SDK::Endpoint', 'required' => false, 'documentation' => 'Override the endpoint used to send this request', 'type' => 'string', ], 'UseGlobalEndpoint' => [ 'builtIn' => 'AWS::STS::UseGlobalEndpoint', 'required' => true, 'default' => false, 'documentation' => 'Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.', 'type' => 'boolean', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseGlobalEndpoint', ], true, ], ], [ 'fn' => 'not', 'argv' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], ], [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], false, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], false, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-northeast-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-south-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-southeast-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ap-southeast-2', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'ca-central-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-central-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-north-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-west-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-west-2', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'eu-west-3', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'sa-east-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-east-2', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-west-1', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'us-west-2', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => '{Region}', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Endpoint', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'error' => 'Invalid Configuration: FIPS and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'error' => 'Invalid Configuration: Dualstack and custom endpoint are not supported', 'type' => 'error', ], [ 'conditions' => [], 'endpoint' => [ 'url' => [ 'ref' => 'Endpoint', ], 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'isSet', 'argv' => [ [ 'ref' => 'Region', ], ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'aws.partition', 'argv' => [ [ 'ref' => 'Region', ], ], 'assign' => 'PartitionResult', ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], ], ], [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS and DualStack are enabled, but this partition does not support one or both', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseFIPS', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsFIPS', ], ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'name', ], ], 'aws-us-gov', ], ], ], 'endpoint' => [ 'url' => 'https://sts.{Region}.amazonaws.com', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts-fips.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'FIPS is enabled but this partition does not support FIPS', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ [ 'ref' => 'UseDualStack', ], true, ], ], ], 'rules' => [ [ 'conditions' => [ [ 'fn' => 'booleanEquals', 'argv' => [ true, [ 'fn' => 'getAttr', 'argv' => [ [ 'ref' => 'PartitionResult', ], 'supportsDualStack', ], ], ], ], ], 'rules' => [ [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'DualStack is enabled but this partition does not support DualStack', 'type' => 'error', ], ], 'type' => 'tree', ], [ 'conditions' => [ [ 'fn' => 'stringEquals', 'argv' => [ [ 'ref' => 'Region', ], 'aws-global', ], ], ], 'endpoint' => [ 'url' => 'https://sts.amazonaws.com', 'properties' => [ 'authSchemes' => [ [ 'name' => 'sigv4', 'signingName' => 'sts', 'signingRegion' => 'us-east-1', ], ], ], 'headers' => [], ], 'type' => 'endpoint', ], [ 'conditions' => [], 'endpoint' => [ 'url' => 'https://sts.{Region}.{PartitionResult#dnsSuffix}', 'properties' => [], 'headers' => [], ], 'type' => 'endpoint', ], ], 'type' => 'tree', ], ], 'type' => 'tree', ], [ 'conditions' => [], 'error' => 'Invalid Configuration: Missing Region', 'type' => 'error', ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/paginators-1.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/paginators-1.json.php deleted file mode 100644 index d76231321..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/paginators-1.json.php +++ /dev/null @@ -1,3 +0,0 @@ - [],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/smoke.json.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/smoke.json.php deleted file mode 100644 index 28082e83e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/data/sts/2011-06-15/smoke.json.php +++ /dev/null @@ -1,3 +0,0 @@ - 1, 'defaultRegion' => 'us-west-2', 'testCases' => [ [ 'operationName' => 'GetSessionToken', 'input' => [], 'errorExpectedFromService' => false, ], [ 'operationName' => 'GetFederationToken', 'input' => [ 'Name' => 'temp', 'Policy' => '{\\"temp\\":true}', ], 'errorExpectedFromService' => true, ], ],]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/functions.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/functions.php deleted file mode 100644 index 6f4ed46ac..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/aws/aws-sdk-php/src/functions.php +++ /dev/null @@ -1,587 +0,0 @@ - true, '..' => true]; - $pathLen = strlen($path) + 1; - $iterator = dir_iterator($path, $context); - $queue = []; - do { - while ($iterator->valid()) { - $file = $iterator->current(); - $iterator->next(); - if (isset($invalid[basename($file)])) { - continue; - } - $fullPath = "{$path}/{$file}"; - yield $fullPath; - if (is_dir($fullPath)) { - $queue[] = $iterator; - $iterator = map( - dir_iterator($fullPath, $context), - function ($file) use ($fullPath, $pathLen) { - return substr("{$fullPath}/{$file}", $pathLen); - } - ); - continue; - } - } - $iterator = array_pop($queue); - } while ($iterator); -} - -//----------------------------------------------------------------------------- -// Misc. functions. -//----------------------------------------------------------------------------- - -/** - * Debug function used to describe the provided value type and class. - * - * @param mixed $input - * - * @return string Returns a string containing the type of the variable and - * if a class is provided, the class name. - */ -function describe_type($input) -{ - switch (gettype($input)) { - case 'object': - return 'object(' . get_class($input) . ')'; - case 'array': - return 'array(' . count($input) . ')'; - default: - ob_start(); - var_dump($input); - // normalize float vs double - return str_replace('double(', 'float(', rtrim(ob_get_clean())); - } -} - -/** - * Creates a default HTTP handler based on the available clients. - * - * @return callable - */ -function default_http_handler() -{ - return new \Aws\Handler\Guzzle\GuzzleHandler(); -} - -/** - * Gets the default user agent string depending on the Guzzle version - * - * @return string - */ -function default_user_agent() -{ - return Utils::defaultUserAgent(); -} - -/** - * Serialize a request for a command but do not send it. - * - * Returns a promise that is fulfilled with the serialized request. - * - * @param CommandInterface $command Command to serialize. - * - * @return RequestInterface - * @throws \RuntimeException - */ -function serialize(CommandInterface $command) -{ - $request = null; - $handlerList = $command->getHandlerList(); - - // Return a mock result. - $handlerList->setHandler( - function (CommandInterface $_, RequestInterface $r) use (&$request) { - $request = $r; - return new FulfilledPromise(new Result([])); - } - ); - - call_user_func($handlerList->resolve(), $command)->wait(); - if (!$request instanceof RequestInterface) { - throw new \RuntimeException( - 'Calling handler did not serialize request' - ); - } - - return $request; -} - -/** - * Retrieves data for a service from the SDK's service manifest file. - * - * Manifest data is stored statically, so it does not need to be loaded more - * than once per process. The JSON data is also cached in opcache. - * - * @param string $service Case-insensitive namespace or endpoint prefix of the - * service for which you are retrieving manifest data. - * - * @return array - * @throws \InvalidArgumentException if the service is not supported. - */ -function manifest($service = null) -{ - // Load the manifest and create aliases for lowercased namespaces - static $manifest = []; - static $aliases = []; - if (empty($manifest)) { - $manifest = load_compiled_json(__DIR__ . '/data/manifest.json'); - foreach ($manifest as $endpoint => $info) { - $alias = strtolower($info['namespace']); - if ($alias !== $endpoint) { - $aliases[$alias] = $endpoint; - } - } - } - - // If no service specified, then return the whole manifest. - if ($service === null) { - return $manifest; - } - - // Look up the service's info in the manifest data. - $service = strtolower($service); - if (isset($manifest[$service])) { - return $manifest[$service] + ['endpoint' => $service]; - } - - if (isset($aliases[$service])) { - return manifest($aliases[$service]); - } - - throw new \InvalidArgumentException( - "The service \"{$service}\" is not provided by the AWS SDK for PHP." - ); -} - -/** - * Checks if supplied parameter is a valid hostname - * - * @param string $hostname - * @return bool - */ -function is_valid_hostname($hostname) -{ - return ( - preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*\.?$/i", $hostname) - && preg_match("/^.{1,253}$/", $hostname) - && preg_match("/^[^\.]{1,63}(\.[^\.]{0,63})*$/", $hostname) - ); -} - -/** - * Checks if supplied parameter is a valid host label - * - * @param $label - * @return bool - */ -function is_valid_hostlabel($label) -{ - return preg_match("/^(?!-)[a-zA-Z0-9-]{1,63}(? static function () use ($stream) { - $stream->detach(); - }, - ]); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/bin/jp.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/bin/jp.php deleted file mode 100755 index fc4e0a769..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/bin/jp.php +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env php -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if ( - (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) - || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) - ) { - return include("phpvfscomposer://" . __DIR__ . '/..'.'/mtdowling/jmespath.php/bin/jp.php'); - } -} - -return include __DIR__ . '/..'.'/mtdowling/jmespath.php/bin/jp.php'; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/ClassLoader.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/ClassLoader.php deleted file mode 100644 index 7824d8f7e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/ClassLoader.php +++ /dev/null @@ -1,579 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var \Closure(string):void */ - private static $includeFile; - - /** @var string|null */ - private $vendorDir; - - // PSR-4 - /** - * @var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var list - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * List of PSR-0 prefixes - * - * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) - * - * @var array>> - */ - private $prefixesPsr0 = array(); - /** - * @var list - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var array - */ - private $missingClasses = array(); - - /** @var string|null */ - private $apcuPrefix; - - /** - * @var array - */ - private static $registeredLoaders = array(); - - /** - * @param string|null $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); - } - - /** - * @return array> - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return list - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return list - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return array Array of classname => path - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders keyed by their corresponding vendor directories. - * - * @return array - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - 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); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/InstalledVersions.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/InstalledVersions.php deleted file mode 100644 index 2052022fd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,396 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - * - * @final - */ -class InstalledVersions -{ - /** - * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to - * @internal - */ - private static $selfDir = null; - - /** - * @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}|array{}|null - */ - private static $installed; - - /** - * @var bool - */ - private static $installedIsLocalDir; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints((string) $constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @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[] - * @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} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // 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 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @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} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - - // when using reload, we disable the duplicate protection to ensure that self::$installed data is - // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not, - // so we have to assume it does not, and that may result in duplicate data being returned when listing - // all installed packages for example - self::$installedIsLocalDir = false; - } - - /** - * @return string - */ - private static function getSelfDir() - { - if (self::$selfDir === null) { - self::$selfDir = strtr(__DIR__, '\\', '/'); - } - - return self::$selfDir; - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - $copiedLocalDir = false; - - if (self::$canGetVendors) { - $selfDir = self::getSelfDir(); - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - $vendorDir = strtr($vendorDir, '\\', '/'); - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } 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} $required */ - $required = require $vendorDir.'/composer/installed.php'; - self::$installedByVendor[$vendorDir] = $required; - $installed[] = $required; - if (self::$installed === null && $vendorDir.'/composer' === $selfDir) { - self::$installed = $required; - self::$installedIsLocalDir = true; - } - } - if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) { - $copiedLocalDir = true; - } - } - } - - if (null === self::$installed) { - // 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 - 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} $required */ - $required = require __DIR__ . '/installed.php'; - self::$installed = $required; - } else { - self::$installed = array(); - } - } - - if (self::$installed !== array() && !$copiedLocalDir) { - $installed[] = self::$installed; - } - - return $installed; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/LICENSE deleted file mode 100644 index f27399a04..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_classmap.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_classmap.php deleted file mode 100644 index aa11f7246..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,604 +0,0 @@ - $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/AwsCredentials.php', - 'AWS\\CRT\\Auth\\CredentialsProvider' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/CredentialsProvider.php', - 'AWS\\CRT\\Auth\\Signable' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/Signable.php', - 'AWS\\CRT\\Auth\\SignatureType' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/SignatureType.php', - 'AWS\\CRT\\Auth\\SignedBodyHeaderType' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/SignedBodyHeaderType.php', - 'AWS\\CRT\\Auth\\Signing' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/Signing.php', - 'AWS\\CRT\\Auth\\SigningAlgorithm' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/SigningAlgorithm.php', - 'AWS\\CRT\\Auth\\SigningConfigAWS' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/SigningConfigAWS.php', - 'AWS\\CRT\\Auth\\SigningResult' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/SigningResult.php', - 'AWS\\CRT\\Auth\\StaticCredentialsProvider' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Auth/StaticCredentialsProvider.php', - 'AWS\\CRT\\CRT' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/CRT.php', - 'AWS\\CRT\\HTTP\\Headers' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Headers.php', - 'AWS\\CRT\\HTTP\\Message' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Message.php', - 'AWS\\CRT\\HTTP\\Request' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Request.php', - 'AWS\\CRT\\HTTP\\Response' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Response.php', - 'AWS\\CRT\\IO\\EventLoopGroup' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/IO/EventLoopGroup.php', - 'AWS\\CRT\\IO\\InputStream' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/IO/InputStream.php', - 'AWS\\CRT\\Internal\\Encoding' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Internal/Encoding.php', - 'AWS\\CRT\\Internal\\Extension' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Internal/Extension.php', - 'AWS\\CRT\\Log' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Log.php', - 'AWS\\CRT\\NativeResource' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/NativeResource.php', - 'AWS\\CRT\\OptionValue' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Options.php', - 'AWS\\CRT\\Options' => $vendorDir . '/aws/aws-crt-php/src/AWS/CRT/Options.php', - 'AllowDynamicProperties' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/AllowDynamicProperties.php', - 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', - 'Aws\\AbstractConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/AbstractConfigurationProvider.php', - 'Aws\\Api\\AbstractModel' => $vendorDir . '/aws/aws-sdk-php/src/Api/AbstractModel.php', - 'Aws\\Api\\ApiProvider' => $vendorDir . '/aws/aws-sdk-php/src/Api/ApiProvider.php', - 'Aws\\Api\\Cbor\\CborDecoder' => $vendorDir . '/aws/aws-sdk-php/src/Api/Cbor/CborDecoder.php', - 'Aws\\Api\\Cbor\\CborEncoder' => $vendorDir . '/aws/aws-sdk-php/src/Api/Cbor/CborEncoder.php', - 'Aws\\Api\\Cbor\\Exception\\CborException' => $vendorDir . '/aws/aws-sdk-php/src/Api/Cbor/Exception/CborException.php', - 'Aws\\Api\\DateTimeResult' => $vendorDir . '/aws/aws-sdk-php/src/Api/DateTimeResult.php', - 'Aws\\Api\\DocModel' => $vendorDir . '/aws/aws-sdk-php/src/Api/DocModel.php', - 'Aws\\Api\\ErrorParser\\AbstractErrorParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/ErrorParser/AbstractErrorParser.php', - 'Aws\\Api\\ErrorParser\\AbstractRpcV2ErrorParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/ErrorParser/AbstractRpcV2ErrorParser.php', - 'Aws\\Api\\ErrorParser\\JsonParserTrait' => $vendorDir . '/aws/aws-sdk-php/src/Api/ErrorParser/JsonParserTrait.php', - 'Aws\\Api\\ErrorParser\\JsonRpcErrorParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/ErrorParser/JsonRpcErrorParser.php', - 'Aws\\Api\\ErrorParser\\RestJsonErrorParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/ErrorParser/RestJsonErrorParser.php', - 'Aws\\Api\\ErrorParser\\RpcV2CborErrorParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/ErrorParser/RpcV2CborErrorParser.php', - 'Aws\\Api\\ErrorParser\\XmlErrorParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/ErrorParser/XmlErrorParser.php', - 'Aws\\Api\\Exception\\RpcV2CborException' => $vendorDir . '/aws/aws-sdk-php/src/Api/Exception/RpcV2CborException.php', - 'Aws\\Api\\ListShape' => $vendorDir . '/aws/aws-sdk-php/src/Api/ListShape.php', - 'Aws\\Api\\MapShape' => $vendorDir . '/aws/aws-sdk-php/src/Api/MapShape.php', - 'Aws\\Api\\Operation' => $vendorDir . '/aws/aws-sdk-php/src/Api/Operation.php', - 'Aws\\Api\\Parser\\AbstractParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/AbstractParser.php', - 'Aws\\Api\\Parser\\AbstractRestParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/AbstractRestParser.php', - 'Aws\\Api\\Parser\\AbstractRpcV2Parser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/AbstractRpcV2Parser.php', - 'Aws\\Api\\Parser\\Crc32ValidatingParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/Crc32ValidatingParser.php', - 'Aws\\Api\\Parser\\DecodingEventStreamIterator' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/DecodingEventStreamIterator.php', - 'Aws\\Api\\Parser\\EventParsingIterator' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/EventParsingIterator.php', - 'Aws\\Api\\Parser\\Exception\\ParserException' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/Exception/ParserException.php', - 'Aws\\Api\\Parser\\JsonParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/JsonParser.php', - 'Aws\\Api\\Parser\\JsonRpcParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/JsonRpcParser.php', - 'Aws\\Api\\Parser\\MetadataParserTrait' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php', - 'Aws\\Api\\Parser\\NonSeekableStreamDecodingEventStreamIterator' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/NonSeekableStreamDecodingEventStreamIterator.php', - 'Aws\\Api\\Parser\\PayloadParserTrait' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/PayloadParserTrait.php', - 'Aws\\Api\\Parser\\QueryParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/QueryParser.php', - 'Aws\\Api\\Parser\\RestJsonParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/RestJsonParser.php', - 'Aws\\Api\\Parser\\RestXmlParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/RestXmlParser.php', - 'Aws\\Api\\Parser\\RpcV2CborParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/RpcV2CborParser.php', - 'Aws\\Api\\Parser\\RpcV2ParserTrait' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/RpcV2ParserTrait.php', - 'Aws\\Api\\Parser\\XmlParser' => $vendorDir . '/aws/aws-sdk-php/src/Api/Parser/XmlParser.php', - 'Aws\\Api\\Serializer\\AbstractRpcV2Serializer' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/AbstractRpcV2Serializer.php', - 'Aws\\Api\\Serializer\\Ec2ParamBuilder' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/Ec2ParamBuilder.php', - 'Aws\\Api\\Serializer\\JsonBody' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/JsonBody.php', - 'Aws\\Api\\Serializer\\JsonRpcSerializer' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php', - 'Aws\\Api\\Serializer\\QueryParamBuilder' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/QueryParamBuilder.php', - 'Aws\\Api\\Serializer\\QuerySerializer' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/QuerySerializer.php', - 'Aws\\Api\\Serializer\\RestJsonSerializer' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/RestJsonSerializer.php', - 'Aws\\Api\\Serializer\\RestSerializer' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/RestSerializer.php', - 'Aws\\Api\\Serializer\\RestXmlSerializer' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/RestXmlSerializer.php', - 'Aws\\Api\\Serializer\\RpcV2CborSerializer' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/RpcV2CborSerializer.php', - 'Aws\\Api\\Serializer\\XmlBody' => $vendorDir . '/aws/aws-sdk-php/src/Api/Serializer/XmlBody.php', - 'Aws\\Api\\Service' => $vendorDir . '/aws/aws-sdk-php/src/Api/Service.php', - 'Aws\\Api\\Shape' => $vendorDir . '/aws/aws-sdk-php/src/Api/Shape.php', - 'Aws\\Api\\ShapeMap' => $vendorDir . '/aws/aws-sdk-php/src/Api/ShapeMap.php', - 'Aws\\Api\\StructureShape' => $vendorDir . '/aws/aws-sdk-php/src/Api/StructureShape.php', - 'Aws\\Api\\SupportedProtocols' => $vendorDir . '/aws/aws-sdk-php/src/Api/SupportedProtocols.php', - 'Aws\\Api\\TimestampShape' => $vendorDir . '/aws/aws-sdk-php/src/Api/TimestampShape.php', - 'Aws\\Api\\Validator' => $vendorDir . '/aws/aws-sdk-php/src/Api/Validator.php', - 'Aws\\Arn\\AccessPointArn' => $vendorDir . '/aws/aws-sdk-php/src/Arn/AccessPointArn.php', - 'Aws\\Arn\\AccessPointArnInterface' => $vendorDir . '/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php', - 'Aws\\Arn\\Arn' => $vendorDir . '/aws/aws-sdk-php/src/Arn/Arn.php', - 'Aws\\Arn\\ArnInterface' => $vendorDir . '/aws/aws-sdk-php/src/Arn/ArnInterface.php', - 'Aws\\Arn\\ArnParser' => $vendorDir . '/aws/aws-sdk-php/src/Arn/ArnParser.php', - 'Aws\\Arn\\Exception\\InvalidArnException' => $vendorDir . '/aws/aws-sdk-php/src/Arn/Exception/InvalidArnException.php', - 'Aws\\Arn\\ObjectLambdaAccessPointArn' => $vendorDir . '/aws/aws-sdk-php/src/Arn/ObjectLambdaAccessPointArn.php', - 'Aws\\Arn\\ResourceTypeAndIdTrait' => $vendorDir . '/aws/aws-sdk-php/src/Arn/ResourceTypeAndIdTrait.php', - 'Aws\\Arn\\S3\\AccessPointArn' => $vendorDir . '/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php', - 'Aws\\Arn\\S3\\BucketArnInterface' => $vendorDir . '/aws/aws-sdk-php/src/Arn/S3/BucketArnInterface.php', - 'Aws\\Arn\\S3\\MultiRegionAccessPointArn' => $vendorDir . '/aws/aws-sdk-php/src/Arn/S3/MultiRegionAccessPointArn.php', - 'Aws\\Arn\\S3\\OutpostsAccessPointArn' => $vendorDir . '/aws/aws-sdk-php/src/Arn/S3/OutpostsAccessPointArn.php', - 'Aws\\Arn\\S3\\OutpostsArnInterface' => $vendorDir . '/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php', - 'Aws\\Arn\\S3\\OutpostsBucketArn' => $vendorDir . '/aws/aws-sdk-php/src/Arn/S3/OutpostsBucketArn.php', - 'Aws\\Auth\\AuthSchemeResolver' => $vendorDir . '/aws/aws-sdk-php/src/Auth/AuthSchemeResolver.php', - 'Aws\\Auth\\AuthSchemeResolverInterface' => $vendorDir . '/aws/aws-sdk-php/src/Auth/AuthSchemeResolverInterface.php', - 'Aws\\Auth\\AuthSelectionMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/Auth/AuthSelectionMiddleware.php', - 'Aws\\Auth\\Exception\\UnresolvedAuthSchemeException' => $vendorDir . '/aws/aws-sdk-php/src/Auth/Exception/UnresolvedAuthSchemeException.php', - 'Aws\\AwsClient' => $vendorDir . '/aws/aws-sdk-php/src/AwsClient.php', - 'Aws\\AwsClientInterface' => $vendorDir . '/aws/aws-sdk-php/src/AwsClientInterface.php', - 'Aws\\AwsClientTrait' => $vendorDir . '/aws/aws-sdk-php/src/AwsClientTrait.php', - 'Aws\\CacheInterface' => $vendorDir . '/aws/aws-sdk-php/src/CacheInterface.php', - 'Aws\\Cbor\\CborDecoder' => $vendorDir . '/aws/aws-sdk-php/src/Cbor/CborDecoder.php', - 'Aws\\Cbor\\CborEncoder' => $vendorDir . '/aws/aws-sdk-php/src/Cbor/CborEncoder.php', - 'Aws\\Cbor\\Exception\\CborException' => $vendorDir . '/aws/aws-sdk-php/src/Cbor/Exception/CborException.php', - 'Aws\\ClientResolver' => $vendorDir . '/aws/aws-sdk-php/src/ClientResolver.php', - 'Aws\\ClientSideMonitoring\\AbstractMonitoringMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/AbstractMonitoringMiddleware.php', - 'Aws\\ClientSideMonitoring\\ApiCallAttemptMonitoringMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php', - 'Aws\\ClientSideMonitoring\\ApiCallMonitoringMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallMonitoringMiddleware.php', - 'Aws\\ClientSideMonitoring\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/Configuration.php', - 'Aws\\ClientSideMonitoring\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationInterface.php', - 'Aws\\ClientSideMonitoring\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationProvider.php', - 'Aws\\ClientSideMonitoring\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/Exception/ConfigurationException.php', - 'Aws\\ClientSideMonitoring\\MonitoringMiddlewareInterface' => $vendorDir . '/aws/aws-sdk-php/src/ClientSideMonitoring/MonitoringMiddlewareInterface.php', - 'Aws\\Command' => $vendorDir . '/aws/aws-sdk-php/src/Command.php', - 'Aws\\CommandInterface' => $vendorDir . '/aws/aws-sdk-php/src/CommandInterface.php', - 'Aws\\CommandPool' => $vendorDir . '/aws/aws-sdk-php/src/CommandPool.php', - 'Aws\\ConfigurationProviderInterface' => $vendorDir . '/aws/aws-sdk-php/src/ConfigurationProviderInterface.php', - 'Aws\\Configuration\\ConfigurationResolver' => $vendorDir . '/aws/aws-sdk-php/src/Configuration/ConfigurationResolver.php', - 'Aws\\Credentials\\AssumeRoleCredentialProvider' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/AssumeRoleCredentialProvider.php', - 'Aws\\Credentials\\AssumeRoleWithWebIdentityCredentialProvider' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/AssumeRoleWithWebIdentityCredentialProvider.php', - 'Aws\\Credentials\\CredentialProvider' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/CredentialProvider.php', - 'Aws\\Credentials\\CredentialSources' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/CredentialSources.php', - 'Aws\\Credentials\\Credentials' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/Credentials.php', - 'Aws\\Credentials\\CredentialsInterface' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/CredentialsInterface.php', - 'Aws\\Credentials\\CredentialsUtils' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/CredentialsUtils.php', - 'Aws\\Credentials\\EcsCredentialProvider' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/EcsCredentialProvider.php', - 'Aws\\Credentials\\InstanceProfileProvider' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php', - 'Aws\\Credentials\\LoginCredentialProvider' => $vendorDir . '/aws/aws-sdk-php/src/Credentials/LoginCredentialProvider.php', - 'Aws\\Crypto\\AbstractCryptoClient' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AbstractCryptoClient.php', - 'Aws\\Crypto\\AbstractCryptoClientV2' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AbstractCryptoClientV2.php', - 'Aws\\Crypto\\AbstractCryptoClientV3' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AbstractCryptoClientV3.php', - 'Aws\\Crypto\\AesDecryptingStream' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AesDecryptingStream.php', - 'Aws\\Crypto\\AesEncryptingStream' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AesEncryptingStream.php', - 'Aws\\Crypto\\AesGcmDecryptingStream' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AesGcmDecryptingStream.php', - 'Aws\\Crypto\\AesGcmEncryptingStream' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php', - 'Aws\\Crypto\\AesStreamInterface' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AesStreamInterface.php', - 'Aws\\Crypto\\AesStreamInterfaceV2' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AesStreamInterfaceV2.php', - 'Aws\\Crypto\\AlgorithmConstants' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AlgorithmConstants.php', - 'Aws\\Crypto\\AlgorithmSuite' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/AlgorithmSuite.php', - 'Aws\\Crypto\\Cipher\\Cbc' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php', - 'Aws\\Crypto\\Cipher\\CipherBuilderTrait' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php', - 'Aws\\Crypto\\Cipher\\CipherMethod' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/Cipher/CipherMethod.php', - 'Aws\\Crypto\\DecryptionTrait' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/DecryptionTrait.php', - 'Aws\\Crypto\\DecryptionTraitV2' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/DecryptionTraitV2.php', - 'Aws\\Crypto\\DecryptionTraitV3' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/DecryptionTraitV3.php', - 'Aws\\Crypto\\EncryptionTrait' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/EncryptionTrait.php', - 'Aws\\Crypto\\EncryptionTraitV2' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/EncryptionTraitV2.php', - 'Aws\\Crypto\\EncryptionTraitV3' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/EncryptionTraitV3.php', - 'Aws\\Crypto\\KmsMaterialsProvider' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/KmsMaterialsProvider.php', - 'Aws\\Crypto\\KmsMaterialsProviderV2' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV2.php', - 'Aws\\Crypto\\KmsMaterialsProviderV3' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV3.php', - 'Aws\\Crypto\\MaterialsProvider' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MaterialsProvider.php', - 'Aws\\Crypto\\MaterialsProviderInterface' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterface.php', - 'Aws\\Crypto\\MaterialsProviderInterfaceV2' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterfaceV2.php', - 'Aws\\Crypto\\MaterialsProviderInterfaceV3' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterfaceV3.php', - 'Aws\\Crypto\\MaterialsProviderV2' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderV2.php', - 'Aws\\Crypto\\MaterialsProviderV3' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderV3.php', - 'Aws\\Crypto\\MetadataEnvelope' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MetadataEnvelope.php', - 'Aws\\Crypto\\MetadataStrategyInterface' => $vendorDir . '/aws/aws-sdk-php/src/Crypto/MetadataStrategyInterface.php', - 'Aws\\DefaultsMode\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/DefaultsMode/Configuration.php', - 'Aws\\DefaultsMode\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/DefaultsMode/ConfigurationInterface.php', - 'Aws\\DefaultsMode\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/DefaultsMode/ConfigurationProvider.php', - 'Aws\\DefaultsMode\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/DefaultsMode/Exception/ConfigurationException.php', - 'Aws\\DoctrineCacheAdapter' => $vendorDir . '/aws/aws-sdk-php/src/DoctrineCacheAdapter.php', - 'Aws\\EndpointDiscovery\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/EndpointDiscovery/Configuration.php', - 'Aws\\EndpointDiscovery\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationInterface.php', - 'Aws\\EndpointDiscovery\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationProvider.php', - 'Aws\\EndpointDiscovery\\EndpointDiscoveryMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/EndpointDiscovery/EndpointDiscoveryMiddleware.php', - 'Aws\\EndpointDiscovery\\EndpointList' => $vendorDir . '/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php', - 'Aws\\EndpointDiscovery\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/EndpointDiscovery/Exception/ConfigurationException.php', - 'Aws\\EndpointParameterMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/EndpointParameterMiddleware.php', - 'Aws\\EndpointV2\\Bdd\\BddEvaluator' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddEvaluator.php', - 'Aws\\EndpointV2\\Bdd\\BddNodeDecoder' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddNodeDecoder.php', - 'Aws\\EndpointV2\\Bdd\\BddResultResolver' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddResultResolver.php', - 'Aws\\EndpointV2\\Bdd\\BddRuleset' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddRuleset.php', - 'Aws\\EndpointV2\\EndpointDefinitionProvider' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/EndpointDefinitionProvider.php', - 'Aws\\EndpointV2\\EndpointProviderV2' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php', - 'Aws\\EndpointV2\\EndpointV2Middleware' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/EndpointV2Middleware.php', - 'Aws\\EndpointV2\\EndpointV2SerializerTrait' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/EndpointV2SerializerTrait.php', - 'Aws\\EndpointV2\\Rule\\AbstractRule' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Rule/AbstractRule.php', - 'Aws\\EndpointV2\\Rule\\EndpointRule' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Rule/EndpointRule.php', - 'Aws\\EndpointV2\\Rule\\ErrorRule' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Rule/ErrorRule.php', - 'Aws\\EndpointV2\\Rule\\RuleCreator' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Rule/RuleCreator.php', - 'Aws\\EndpointV2\\Rule\\TreeRule' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Rule/TreeRule.php', - 'Aws\\EndpointV2\\Ruleset\\Ruleset' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php', - 'Aws\\EndpointV2\\Ruleset\\RulesetEndpoint' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetEndpoint.php', - 'Aws\\EndpointV2\\Ruleset\\RulesetParameter' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetParameter.php', - 'Aws\\EndpointV2\\Ruleset\\RulesetStandardLibrary' => $vendorDir . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetStandardLibrary.php', - 'Aws\\Endpoint\\EndpointProvider' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/EndpointProvider.php', - 'Aws\\Endpoint\\Partition' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/Partition.php', - 'Aws\\Endpoint\\PartitionEndpointProvider' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php', - 'Aws\\Endpoint\\PartitionInterface' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/PartitionInterface.php', - 'Aws\\Endpoint\\PatternEndpointProvider' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/PatternEndpointProvider.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Configuration.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationInterface.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationProvider.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Exception/ConfigurationException.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/Configuration.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationInterface.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationProvider.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/Exception/ConfigurationException.php', - 'Aws\\Exception\\AwsException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/AwsException.php', - 'Aws\\Exception\\CommonRuntimeException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/CommonRuntimeException.php', - 'Aws\\Exception\\CouldNotCreateChecksumException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/CouldNotCreateChecksumException.php', - 'Aws\\Exception\\CredentialsException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/CredentialsException.php', - 'Aws\\Exception\\CryptoException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/CryptoException.php', - 'Aws\\Exception\\CryptoPolyfillException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/CryptoPolyfillException.php', - 'Aws\\Exception\\EventStreamDataException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/EventStreamDataException.php', - 'Aws\\Exception\\IncalculablePayloadException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/IncalculablePayloadException.php', - 'Aws\\Exception\\InvalidJsonException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/InvalidJsonException.php', - 'Aws\\Exception\\InvalidRegionException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/InvalidRegionException.php', - 'Aws\\Exception\\MultipartUploadException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/MultipartUploadException.php', - 'Aws\\Exception\\TokenException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/TokenException.php', - 'Aws\\Exception\\UnresolvedApiException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/UnresolvedApiException.php', - 'Aws\\Exception\\UnresolvedEndpointException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/UnresolvedEndpointException.php', - 'Aws\\Exception\\UnresolvedSignatureException' => $vendorDir . '/aws/aws-sdk-php/src/Exception/UnresolvedSignatureException.php', - 'Aws\\HandlerList' => $vendorDir . '/aws/aws-sdk-php/src/HandlerList.php', - 'Aws\\Handler\\Guzzle\\GuzzleHandler' => $vendorDir . '/aws/aws-sdk-php/src/Handler/Guzzle/GuzzleHandler.php', - 'Aws\\Handler\\HttpHandlerError' => $vendorDir . '/aws/aws-sdk-php/src/Handler/HttpHandlerError.php', - 'Aws\\HasDataTrait' => $vendorDir . '/aws/aws-sdk-php/src/HasDataTrait.php', - 'Aws\\HasMonitoringEventsTrait' => $vendorDir . '/aws/aws-sdk-php/src/HasMonitoringEventsTrait.php', - 'Aws\\HashInterface' => $vendorDir . '/aws/aws-sdk-php/src/HashInterface.php', - 'Aws\\HashingStream' => $vendorDir . '/aws/aws-sdk-php/src/HashingStream.php', - 'Aws\\History' => $vendorDir . '/aws/aws-sdk-php/src/History.php', - 'Aws\\IdempotencyTokenMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/IdempotencyTokenMiddleware.php', - 'Aws\\Identity\\AwsCredentialIdentity' => $vendorDir . '/aws/aws-sdk-php/src/Identity/AwsCredentialIdentity.php', - 'Aws\\Identity\\BearerTokenIdentity' => $vendorDir . '/aws/aws-sdk-php/src/Identity/BearerTokenIdentity.php', - 'Aws\\Identity\\IdentityInterface' => $vendorDir . '/aws/aws-sdk-php/src/Identity/IdentityInterface.php', - 'Aws\\Identity\\S3\\S3ExpressIdentity' => $vendorDir . '/aws/aws-sdk-php/src/Identity/S3/S3ExpressIdentity.php', - 'Aws\\Identity\\S3\\S3ExpressIdentityProvider' => $vendorDir . '/aws/aws-sdk-php/src/Identity/S3/S3ExpressIdentityProvider.php', - 'Aws\\InputValidationMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/InputValidationMiddleware.php', - 'Aws\\JsonCompiler' => $vendorDir . '/aws/aws-sdk-php/src/JsonCompiler.php', - 'Aws\\Kms\\Exception\\KmsException' => $vendorDir . '/aws/aws-sdk-php/src/Kms/Exception/KmsException.php', - 'Aws\\Kms\\KmsClient' => $vendorDir . '/aws/aws-sdk-php/src/Kms/KmsClient.php', - 'Aws\\LruArrayCache' => $vendorDir . '/aws/aws-sdk-php/src/LruArrayCache.php', - 'Aws\\MetricsBuilder' => $vendorDir . '/aws/aws-sdk-php/src/MetricsBuilder.php', - 'Aws\\Middleware' => $vendorDir . '/aws/aws-sdk-php/src/Middleware.php', - 'Aws\\MockHandler' => $vendorDir . '/aws/aws-sdk-php/src/MockHandler.php', - 'Aws\\MonitoringEventsInterface' => $vendorDir . '/aws/aws-sdk-php/src/MonitoringEventsInterface.php', - 'Aws\\MultiRegionClient' => $vendorDir . '/aws/aws-sdk-php/src/MultiRegionClient.php', - 'Aws\\Multipart\\AbstractUploadManager' => $vendorDir . '/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php', - 'Aws\\Multipart\\AbstractUploader' => $vendorDir . '/aws/aws-sdk-php/src/Multipart/AbstractUploader.php', - 'Aws\\Multipart\\UploadState' => $vendorDir . '/aws/aws-sdk-php/src/Multipart/UploadState.php', - 'Aws\\PhpHash' => $vendorDir . '/aws/aws-sdk-php/src/PhpHash.php', - 'Aws\\PresignUrlMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/PresignUrlMiddleware.php', - 'Aws\\Psr16CacheAdapter' => $vendorDir . '/aws/aws-sdk-php/src/Psr16CacheAdapter.php', - 'Aws\\PsrCacheAdapter' => $vendorDir . '/aws/aws-sdk-php/src/PsrCacheAdapter.php', - 'Aws\\QueryCompatibleInputMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/QueryCompatibleInputMiddleware.php', - 'Aws\\RequestCompressionMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/RequestCompressionMiddleware.php', - 'Aws\\ResponseContainerInterface' => $vendorDir . '/aws/aws-sdk-php/src/ResponseContainerInterface.php', - 'Aws\\Result' => $vendorDir . '/aws/aws-sdk-php/src/Result.php', - 'Aws\\ResultInterface' => $vendorDir . '/aws/aws-sdk-php/src/ResultInterface.php', - 'Aws\\ResultPaginator' => $vendorDir . '/aws/aws-sdk-php/src/ResultPaginator.php', - 'Aws\\RetryMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/RetryMiddleware.php', - 'Aws\\RetryMiddlewareV2' => $vendorDir . '/aws/aws-sdk-php/src/RetryMiddlewareV2.php', - 'Aws\\Retry\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/Retry/Configuration.php', - 'Aws\\Retry\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/Retry/ConfigurationInterface.php', - 'Aws\\Retry\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/Retry/ConfigurationProvider.php', - 'Aws\\Retry\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/Retry/Exception/ConfigurationException.php', - 'Aws\\Retry\\QuotaManager' => $vendorDir . '/aws/aws-sdk-php/src/Retry/QuotaManager.php', - 'Aws\\Retry\\RateLimiter' => $vendorDir . '/aws/aws-sdk-php/src/Retry/RateLimiter.php', - 'Aws\\Retry\\RetryHelperTrait' => $vendorDir . '/aws/aws-sdk-php/src/Retry/RetryHelperTrait.php', - 'Aws\\Retry\\V3\\LongPolling' => $vendorDir . '/aws/aws-sdk-php/src/Retry/V3/LongPolling.php', - 'Aws\\Retry\\V3\\OptIn' => $vendorDir . '/aws/aws-sdk-php/src/Retry/V3/OptIn.php', - 'Aws\\Retry\\V3\\QuotaManager' => $vendorDir . '/aws/aws-sdk-php/src/Retry/V3/QuotaManager.php', - 'Aws\\Retry\\V3\\RetryMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/Retry/V3/RetryMiddleware.php', - 'Aws\\S3\\AmbiguousSuccessParser' => $vendorDir . '/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php', - 'Aws\\S3\\ApplyChecksumMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/ApplyChecksumMiddleware.php', - 'Aws\\S3\\BatchDelete' => $vendorDir . '/aws/aws-sdk-php/src/S3/BatchDelete.php', - 'Aws\\S3\\BucketEndpointArnMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/BucketEndpointArnMiddleware.php', - 'Aws\\S3\\BucketEndpointMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/BucketEndpointMiddleware.php', - 'Aws\\S3\\CalculatesChecksumTrait' => $vendorDir . '/aws/aws-sdk-php/src/S3/CalculatesChecksumTrait.php', - 'Aws\\S3\\Crypto\\CryptoParamsTrait' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTrait.php', - 'Aws\\S3\\Crypto\\CryptoParamsTraitV2' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTraitV2.php', - 'Aws\\S3\\Crypto\\CryptoParamsTraitV3' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTraitV3.php', - 'Aws\\S3\\Crypto\\HeadersMetadataStrategy' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/HeadersMetadataStrategy.php', - 'Aws\\S3\\Crypto\\InstructionFileMetadataStrategy' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php', - 'Aws\\S3\\Crypto\\S3EncryptionClient' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClient.php', - 'Aws\\S3\\Crypto\\S3EncryptionClientV2' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV2.php', - 'Aws\\S3\\Crypto\\S3EncryptionClientV3' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV3.php', - 'Aws\\S3\\Crypto\\S3EncryptionMultipartUploader' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploader.php', - 'Aws\\S3\\Crypto\\S3EncryptionMultipartUploaderV2' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV2.php', - 'Aws\\S3\\Crypto\\S3EncryptionMultipartUploaderV3' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV3.php', - 'Aws\\S3\\Crypto\\UserAgentTrait' => $vendorDir . '/aws/aws-sdk-php/src/S3/Crypto/UserAgentTrait.php', - 'Aws\\S3\\EndpointRegionHelperTrait' => $vendorDir . '/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php', - 'Aws\\S3\\Exception\\DeleteMultipleObjectsException' => $vendorDir . '/aws/aws-sdk-php/src/S3/Exception/DeleteMultipleObjectsException.php', - 'Aws\\S3\\Exception\\MultipartCopyAnnotationException' => $vendorDir . '/aws/aws-sdk-php/src/S3/Exception/MultipartCopyAnnotationException.php', - 'Aws\\S3\\Exception\\PermanentRedirectException' => $vendorDir . '/aws/aws-sdk-php/src/S3/Exception/PermanentRedirectException.php', - 'Aws\\S3\\Exception\\S3Exception' => $vendorDir . '/aws/aws-sdk-php/src/S3/Exception/S3Exception.php', - 'Aws\\S3\\Exception\\S3MultipartUploadException' => $vendorDir . '/aws/aws-sdk-php/src/S3/Exception/S3MultipartUploadException.php', - 'Aws\\S3\\ExpiresParsingMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/ExpiresParsingMiddleware.php', - 'Aws\\S3\\GetBucketLocationParser' => $vendorDir . '/aws/aws-sdk-php/src/S3/GetBucketLocationParser.php', - 'Aws\\S3\\MultipartCopy' => $vendorDir . '/aws/aws-sdk-php/src/S3/MultipartCopy.php', - 'Aws\\S3\\MultipartUploader' => $vendorDir . '/aws/aws-sdk-php/src/S3/MultipartUploader.php', - 'Aws\\S3\\MultipartUploadingTrait' => $vendorDir . '/aws/aws-sdk-php/src/S3/MultipartUploadingTrait.php', - 'Aws\\S3\\ObjectCopier' => $vendorDir . '/aws/aws-sdk-php/src/S3/ObjectCopier.php', - 'Aws\\S3\\ObjectUploader' => $vendorDir . '/aws/aws-sdk-php/src/S3/ObjectUploader.php', - 'Aws\\S3\\Parser\\GetBucketLocationResultMutator' => $vendorDir . '/aws/aws-sdk-php/src/S3/Parser/GetBucketLocationResultMutator.php', - 'Aws\\S3\\Parser\\S3Parser' => $vendorDir . '/aws/aws-sdk-php/src/S3/Parser/S3Parser.php', - 'Aws\\S3\\Parser\\S3ResultMutator' => $vendorDir . '/aws/aws-sdk-php/src/S3/Parser/S3ResultMutator.php', - 'Aws\\S3\\Parser\\ValidateResponseChecksumResultMutator' => $vendorDir . '/aws/aws-sdk-php/src/S3/Parser/ValidateResponseChecksumResultMutator.php', - 'Aws\\S3\\PermanentRedirectMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php', - 'Aws\\S3\\PostObject' => $vendorDir . '/aws/aws-sdk-php/src/S3/PostObject.php', - 'Aws\\S3\\PostObjectV4' => $vendorDir . '/aws/aws-sdk-php/src/S3/PostObjectV4.php', - 'Aws\\S3\\PutObjectUrlMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/PutObjectUrlMiddleware.php', - 'Aws\\S3\\RegionalEndpoint\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/Configuration.php', - 'Aws\\S3\\RegionalEndpoint\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationInterface.php', - 'Aws\\S3\\RegionalEndpoint\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationProvider.php', - 'Aws\\S3\\RegionalEndpoint\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/Exception/ConfigurationException.php', - 'Aws\\S3\\RetryableMalformedResponseParser' => $vendorDir . '/aws/aws-sdk-php/src/S3/RetryableMalformedResponseParser.php', - 'Aws\\S3\\S3Client' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Client.php', - 'Aws\\S3\\S3ClientInterface' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3ClientInterface.php', - 'Aws\\S3\\S3ClientTrait' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3ClientTrait.php', - 'Aws\\S3\\S3EndpointMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3EndpointMiddleware.php', - 'Aws\\S3\\S3MultiRegionClient' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3MultiRegionClient.php', - 'Aws\\S3\\S3Transfer\\AbstractMultipartDownloader' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartDownloader.php', - 'Aws\\S3\\S3Transfer\\AbstractMultipartUploader' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartUploader.php', - 'Aws\\S3\\S3Transfer\\DirectoryDownloader' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryDownloader.php', - 'Aws\\S3\\S3Transfer\\DirectoryUploader' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryUploader.php', - 'Aws\\S3\\S3Transfer\\Exception\\FileDownloadException' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Exception/FileDownloadException.php', - 'Aws\\S3\\S3Transfer\\Exception\\ProgressTrackerException' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Exception/ProgressTrackerException.php', - 'Aws\\S3\\S3Transfer\\Exception\\S3TransferException' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Exception/S3TransferException.php', - 'Aws\\S3\\S3Transfer\\Models\\AbstractResumableTransfer' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/AbstractResumableTransfer.php', - 'Aws\\S3\\S3Transfer\\Models\\AbstractTransferRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/AbstractTransferRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadDirectoryRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadDirectoryResult' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryResult.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadFileRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadFileRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadResult' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadResult.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumableDownload' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableDownload.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumableUpload' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableUpload.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumeDownloadRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeDownloadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumeUploadRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeUploadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\S3TransferManagerConfig' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/S3TransferManagerConfig.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadDirectoryRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadDirectoryResult' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryResult.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadRequest' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadResult' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadResult.php', - 'Aws\\S3\\S3Transfer\\MultipartUploader' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/MultipartUploader.php', - 'Aws\\S3\\S3Transfer\\PartGetMultipartDownloader' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/PartGetMultipartDownloader.php', - 'Aws\\S3\\S3Transfer\\Progress\\AbstractProgressBarFormat' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\AbstractTransferListener' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractTransferListener.php', - 'Aws\\S3\\S3Transfer\\Progress\\ColoredTransferProgressBarFormat' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ColoredTransferProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\ConsoleProgressBar' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ConsoleProgressBar.php', - 'Aws\\S3\\S3Transfer\\Progress\\DirectoryProgressTracker' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryProgressTracker.php', - 'Aws\\S3\\S3Transfer\\Progress\\DirectoryTransferProgressAggregator' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressAggregator.php', - 'Aws\\S3\\S3Transfer\\Progress\\DirectoryTransferProgressSnapshot' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressSnapshot.php', - 'Aws\\S3\\S3Transfer\\Progress\\MultiProgressBarFormat' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/MultiProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\MultiProgressTracker' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/MultiProgressTracker.php', - 'Aws\\S3\\S3Transfer\\Progress\\PlainProgressBarFormat' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/PlainProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\ProgressBarFactoryInterface' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ProgressBarFactoryInterface.php', - 'Aws\\S3\\S3Transfer\\Progress\\ProgressBarInterface' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ProgressBarInterface.php', - 'Aws\\S3\\S3Transfer\\Progress\\ProgressTrackerInterface' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ProgressTrackerInterface.php', - 'Aws\\S3\\S3Transfer\\Progress\\SingleProgressTracker' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/SingleProgressTracker.php', - 'Aws\\S3\\S3Transfer\\Progress\\TransferListenerNotifier' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferListenerNotifier.php', - 'Aws\\S3\\S3Transfer\\Progress\\TransferProgressBarFormat' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\TransferProgressSnapshot' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferProgressSnapshot.php', - 'Aws\\S3\\S3Transfer\\RangeGetMultipartDownloader' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/RangeGetMultipartDownloader.php', - 'Aws\\S3\\S3Transfer\\S3TransferManager' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/S3TransferManager.php', - 'Aws\\S3\\S3Transfer\\Utils\\AbstractDownloadHandler' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/AbstractDownloadHandler.php', - 'Aws\\S3\\S3Transfer\\Utils\\FileDownloadHandler' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/FileDownloadHandler.php', - 'Aws\\S3\\S3Transfer\\Utils\\ResumableDownloadHandlerInterface' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/ResumableDownloadHandlerInterface.php', - 'Aws\\S3\\S3Transfer\\Utils\\StreamDownloadHandler' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/StreamDownloadHandler.php', - 'Aws\\S3\\S3UriParser' => $vendorDir . '/aws/aws-sdk-php/src/S3/S3UriParser.php', - 'Aws\\S3\\SSECMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/S3/SSECMiddleware.php', - 'Aws\\S3\\StreamWrapper' => $vendorDir . '/aws/aws-sdk-php/src/S3/StreamWrapper.php', - 'Aws\\S3\\Transfer' => $vendorDir . '/aws/aws-sdk-php/src/S3/Transfer.php', - 'Aws\\S3\\UseArnRegion\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/S3/UseArnRegion/Configuration.php', - 'Aws\\S3\\UseArnRegion\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationInterface.php', - 'Aws\\S3\\UseArnRegion\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationProvider.php', - 'Aws\\S3\\UseArnRegion\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/S3/UseArnRegion/Exception/ConfigurationException.php', - 'Aws\\S3\\ValidateResponseChecksumParser' => $vendorDir . '/aws/aws-sdk-php/src/S3/ValidateResponseChecksumParser.php', - 'Aws\\SSOOIDC\\Exception\\SSOOIDCException' => $vendorDir . '/aws/aws-sdk-php/src/SSOOIDC/Exception/SSOOIDCException.php', - 'Aws\\SSOOIDC\\SSOOIDCClient' => $vendorDir . '/aws/aws-sdk-php/src/SSOOIDC/SSOOIDCClient.php', - 'Aws\\SSO\\Exception\\SSOException' => $vendorDir . '/aws/aws-sdk-php/src/SSO/Exception/SSOException.php', - 'Aws\\SSO\\SSOClient' => $vendorDir . '/aws/aws-sdk-php/src/SSO/SSOClient.php', - 'Aws\\Script\\Composer\\Composer' => $vendorDir . '/aws/aws-sdk-php/src/Script/Composer/Composer.php', - 'Aws\\Sdk' => $vendorDir . '/aws/aws-sdk-php/src/Sdk.php', - 'Aws\\Signature\\AnonymousSignature' => $vendorDir . '/aws/aws-sdk-php/src/Signature/AnonymousSignature.php', - 'Aws\\Signature\\DpopSignature' => $vendorDir . '/aws/aws-sdk-php/src/Signature/DpopSignature.php', - 'Aws\\Signature\\S3ExpressSignature' => $vendorDir . '/aws/aws-sdk-php/src/Signature/S3ExpressSignature.php', - 'Aws\\Signature\\S3SignatureV4' => $vendorDir . '/aws/aws-sdk-php/src/Signature/S3SignatureV4.php', - 'Aws\\Signature\\SignatureInterface' => $vendorDir . '/aws/aws-sdk-php/src/Signature/SignatureInterface.php', - 'Aws\\Signature\\SignatureProvider' => $vendorDir . '/aws/aws-sdk-php/src/Signature/SignatureProvider.php', - 'Aws\\Signature\\SignatureTrait' => $vendorDir . '/aws/aws-sdk-php/src/Signature/SignatureTrait.php', - 'Aws\\Signature\\SignatureV4' => $vendorDir . '/aws/aws-sdk-php/src/Signature/SignatureV4.php', - 'Aws\\Signin\\Exception\\SigninException' => $vendorDir . '/aws/aws-sdk-php/src/Signin/Exception/SigninException.php', - 'Aws\\Signin\\SigninClient' => $vendorDir . '/aws/aws-sdk-php/src/Signin/SigninClient.php', - 'Aws\\StreamRequestPayloadMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/StreamRequestPayloadMiddleware.php', - 'Aws\\Sts\\Exception\\StsException' => $vendorDir . '/aws/aws-sdk-php/src/Sts/Exception/StsException.php', - 'Aws\\Sts\\RegionalEndpoints\\Configuration' => $vendorDir . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Configuration.php', - 'Aws\\Sts\\RegionalEndpoints\\ConfigurationInterface' => $vendorDir . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php', - 'Aws\\Sts\\RegionalEndpoints\\ConfigurationProvider' => $vendorDir . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationProvider.php', - 'Aws\\Sts\\RegionalEndpoints\\Exception\\ConfigurationException' => $vendorDir . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php', - 'Aws\\Sts\\StsClient' => $vendorDir . '/aws/aws-sdk-php/src/Sts/StsClient.php', - 'Aws\\Token\\BearerTokenAuthorization' => $vendorDir . '/aws/aws-sdk-php/src/Token/BearerTokenAuthorization.php', - 'Aws\\Token\\BedrockTokenProvider' => $vendorDir . '/aws/aws-sdk-php/src/Token/BedrockTokenProvider.php', - 'Aws\\Token\\ParsesIniTrait' => $vendorDir . '/aws/aws-sdk-php/src/Token/ParsesIniTrait.php', - 'Aws\\Token\\RefreshableTokenProviderInterface' => $vendorDir . '/aws/aws-sdk-php/src/Token/RefreshableTokenProviderInterface.php', - 'Aws\\Token\\SsoToken' => $vendorDir . '/aws/aws-sdk-php/src/Token/SsoToken.php', - 'Aws\\Token\\SsoTokenProvider' => $vendorDir . '/aws/aws-sdk-php/src/Token/SsoTokenProvider.php', - 'Aws\\Token\\Token' => $vendorDir . '/aws/aws-sdk-php/src/Token/Token.php', - 'Aws\\Token\\TokenAuthorization' => $vendorDir . '/aws/aws-sdk-php/src/Token/TokenAuthorization.php', - 'Aws\\Token\\TokenInterface' => $vendorDir . '/aws/aws-sdk-php/src/Token/TokenInterface.php', - 'Aws\\Token\\TokenProvider' => $vendorDir . '/aws/aws-sdk-php/src/Token/TokenProvider.php', - 'Aws\\Token\\TokenSource' => $vendorDir . '/aws/aws-sdk-php/src/Token/TokenSource.php', - 'Aws\\TraceMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/TraceMiddleware.php', - 'Aws\\UserAgentMiddleware' => $vendorDir . '/aws/aws-sdk-php/src/UserAgentMiddleware.php', - 'Aws\\Waiter' => $vendorDir . '/aws/aws-sdk-php/src/Waiter.php', - 'Aws\\WrappedHttpHandler' => $vendorDir . '/aws/aws-sdk-php/src/WrappedHttpHandler.php', - 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', - 'GuzzleHttp\\AuthMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/AuthMiddleware.php', - 'GuzzleHttp\\Auth\\DigestAuth' => $vendorDir . '/guzzlehttp/guzzle/src/Auth/DigestAuth.php', - 'GuzzleHttp\\Auth\\DigestChallenge' => $vendorDir . '/guzzlehttp/guzzle/src/Auth/DigestChallenge.php', - 'GuzzleHttp\\BodySummarizer' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizer.php', - 'GuzzleHttp\\BodySummarizerInterface' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php', - 'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php', - 'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php', - 'GuzzleHttp\\ClientTrait' => $vendorDir . '/guzzlehttp/guzzle/src/ClientTrait.php', - 'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php', - 'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php', - 'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php', - 'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php', - 'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php', - 'GuzzleHttp\\Env' => $vendorDir . '/guzzlehttp/guzzle/src/Env.php', - 'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php', - 'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php', - 'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php', - 'GuzzleHttp\\Exception\\ConnectTimeoutException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectTimeoutException.php', - 'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php', - 'GuzzleHttp\\Exception\\HandlerClosedException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/HandlerClosedException.php', - 'GuzzleHttp\\Exception\\InvalidArgumentException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', - 'GuzzleHttp\\Exception\\NetworkException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/NetworkException.php', - 'GuzzleHttp\\Exception\\NetworkTimeoutException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/NetworkTimeoutException.php', - 'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php', - 'GuzzleHttp\\Exception\\ResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ResponseException.php', - 'GuzzleHttp\\Exception\\ResponseTimeoutException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ResponseTimeoutException.php', - 'GuzzleHttp\\Exception\\ResponseTransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ResponseTransferException.php', - 'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php', - 'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php', - 'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php', - 'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php', - 'GuzzleHttp\\Handler\\Clock' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Clock.php', - 'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php', - 'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php', - 'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php', - 'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php', - 'GuzzleHttp\\Handler\\CurlShareHandleState' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlShareHandleState.php', - 'GuzzleHttp\\Handler\\CurlVersion' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlVersion.php', - 'GuzzleHttp\\Handler\\DeadlineSourceStream' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/DeadlineSourceStream.php', - 'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php', - 'GuzzleHttp\\Handler\\EncodedBodyStream' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EncodedBodyStream.php', - 'GuzzleHttp\\Handler\\HeaderProcessor' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php', - 'GuzzleHttp\\Handler\\HostValidator' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/HostValidator.php', - 'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php', - 'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php', - 'GuzzleHttp\\Handler\\ProxyEnv' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/ProxyEnv.php', - 'GuzzleHttp\\Handler\\RequestFraming' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/RequestFraming.php', - 'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php', - 'GuzzleHttp\\Handler\\Timeout' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Timeout.php', - 'GuzzleHttp\\Handler\\TlsVersion' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/TlsVersion.php', - 'GuzzleHttp\\Handler\\TransferByteCounter' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/TransferByteCounter.php', - 'GuzzleHttp\\HostIdentity' => $vendorDir . '/guzzlehttp/guzzle/src/HostIdentity.php', - 'GuzzleHttp\\Idn' => $vendorDir . '/guzzlehttp/guzzle/src/Idn.php', - 'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php', - 'GuzzleHttp\\MessageFormatterInterface' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatterInterface.php', - 'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php', - 'GuzzleHttp\\Multiplexing' => $vendorDir . '/guzzlehttp/guzzle/src/Multiplexing.php', - 'GuzzleHttp\\NonSerializableTrait' => $vendorDir . '/guzzlehttp/guzzle/src/NonSerializableTrait.php', - 'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php', - 'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php', - 'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php', - 'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php', - 'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php', - 'GuzzleHttp\\Promise\\Create' => $vendorDir . '/guzzlehttp/promises/src/Create.php', - 'GuzzleHttp\\Promise\\Each' => $vendorDir . '/guzzlehttp/promises/src/Each.php', - 'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php', - 'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php', - 'GuzzleHttp\\Promise\\Is' => $vendorDir . '/guzzlehttp/promises/src/Is.php', - 'GuzzleHttp\\Promise\\NonSerializableTrait' => $vendorDir . '/guzzlehttp/promises/src/NonSerializableTrait.php', - 'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php', - 'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php', - 'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php', - 'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php', - 'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php', - 'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php', - 'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php', - 'GuzzleHttp\\Promise\\Utils' => $vendorDir . '/guzzlehttp/promises/src/Utils.php', - 'GuzzleHttp\\ProxyOptions' => $vendorDir . '/guzzlehttp/guzzle/src/ProxyOptions.php', - 'GuzzleHttp\\ProxySelection' => $vendorDir . '/guzzlehttp/guzzle/src/ProxySelection.php', - 'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php', - 'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php', - 'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php', - 'GuzzleHttp\\Psr7\\DiagnosticValue' => $vendorDir . '/guzzlehttp/psr7/src/DiagnosticValue.php', - 'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php', - 'GuzzleHttp\\Psr7\\Exception\\MalformedUriException' => $vendorDir . '/guzzlehttp/psr7/src/Exception/MalformedUriException.php', - 'GuzzleHttp\\Psr7\\Exception\\TimeoutException' => $vendorDir . '/guzzlehttp/psr7/src/Exception/TimeoutException.php', - 'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php', - 'GuzzleHttp\\Psr7\\Header' => $vendorDir . '/guzzlehttp/psr7/src/Header.php', - 'GuzzleHttp\\Psr7\\HttpFactory' => $vendorDir . '/guzzlehttp/psr7/src/HttpFactory.php', - 'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php', - 'GuzzleHttp\\Psr7\\Integers' => $vendorDir . '/guzzlehttp/psr7/src/Integers.php', - 'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php', - 'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php', - 'GuzzleHttp\\Psr7\\Message' => $vendorDir . '/guzzlehttp/psr7/src/Message.php', - 'GuzzleHttp\\Psr7\\MessageParser' => $vendorDir . '/guzzlehttp/psr7/src/MessageParser.php', - 'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php', - 'GuzzleHttp\\Psr7\\MimeType' => $vendorDir . '/guzzlehttp/psr7/src/MimeType.php', - 'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php', - 'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php', - 'GuzzleHttp\\Psr7\\NonSerializableStreamTrait' => $vendorDir . '/guzzlehttp/psr7/src/NonSerializableStreamTrait.php', - 'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php', - 'GuzzleHttp\\Psr7\\Query' => $vendorDir . '/guzzlehttp/psr7/src/Query.php', - 'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php', - 'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php', - 'GuzzleHttp\\Psr7\\Rfc3986' => $vendorDir . '/guzzlehttp/psr7/src/Rfc3986.php', - 'GuzzleHttp\\Psr7\\Rfc9110' => $vendorDir . '/guzzlehttp/psr7/src/Rfc9110.php', - 'GuzzleHttp\\Psr7\\Rfc9112' => $vendorDir . '/guzzlehttp/psr7/src/Rfc9112.php', - 'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php', - 'GuzzleHttp\\Psr7\\ServerRequestGlobalsFactory' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequestGlobalsFactory.php', - 'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php', - 'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php', - 'GuzzleHttp\\Psr7\\StreamTimeout' => $vendorDir . '/guzzlehttp/psr7/src/StreamTimeout.php', - 'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php', - 'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php', - 'GuzzleHttp\\Psr7\\UploadedFileNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFileNormalizer.php', - 'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php', - 'GuzzleHttp\\Psr7\\UriComparator' => $vendorDir . '/guzzlehttp/psr7/src/UriComparator.php', - 'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php', - 'GuzzleHttp\\Psr7\\UriParser' => $vendorDir . '/guzzlehttp/psr7/src/UriParser.php', - 'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php', - 'GuzzleHttp\\Psr7\\Utils' => $vendorDir . '/guzzlehttp/psr7/src/Utils.php', - 'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php', - 'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php', - 'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php', - 'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php', - 'GuzzleHttp\\TransportSharing' => $vendorDir . '/guzzlehttp/guzzle/src/TransportSharing.php', - 'GuzzleHttp\\Utils' => $vendorDir . '/guzzlehttp/guzzle/src/Utils.php', - 'JmesPath\\AstRuntime' => $vendorDir . '/mtdowling/jmespath.php/src/AstRuntime.php', - 'JmesPath\\CompilerRuntime' => $vendorDir . '/mtdowling/jmespath.php/src/CompilerRuntime.php', - 'JmesPath\\DebugRuntime' => $vendorDir . '/mtdowling/jmespath.php/src/DebugRuntime.php', - 'JmesPath\\Env' => $vendorDir . '/mtdowling/jmespath.php/src/Env.php', - 'JmesPath\\FnDispatcher' => $vendorDir . '/mtdowling/jmespath.php/src/FnDispatcher.php', - 'JmesPath\\Lexer' => $vendorDir . '/mtdowling/jmespath.php/src/Lexer.php', - 'JmesPath\\Parser' => $vendorDir . '/mtdowling/jmespath.php/src/Parser.php', - 'JmesPath\\SyntaxErrorException' => $vendorDir . '/mtdowling/jmespath.php/src/SyntaxErrorException.php', - 'JmesPath\\TreeCompiler' => $vendorDir . '/mtdowling/jmespath.php/src/TreeCompiler.php', - 'JmesPath\\TreeInterpreter' => $vendorDir . '/mtdowling/jmespath.php/src/TreeInterpreter.php', - 'JmesPath\\Utils' => $vendorDir . '/mtdowling/jmespath.php/src/Utils.php', - 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'Psr\\Http\\Client\\ClientExceptionInterface' => $vendorDir . '/psr/http-client/src/ClientExceptionInterface.php', - 'Psr\\Http\\Client\\ClientInterface' => $vendorDir . '/psr/http-client/src/ClientInterface.php', - 'Psr\\Http\\Client\\NetworkExceptionInterface' => $vendorDir . '/psr/http-client/src/NetworkExceptionInterface.php', - 'Psr\\Http\\Client\\RequestExceptionInterface' => $vendorDir . '/psr/http-client/src/RequestExceptionInterface.php', - 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', - 'Psr\\Http\\Message\\RequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/RequestFactoryInterface.php', - 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', - 'Psr\\Http\\Message\\ResponseFactoryInterface' => $vendorDir . '/psr/http-factory/src/ResponseFactoryInterface.php', - 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php', - 'Psr\\Http\\Message\\ServerRequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/ServerRequestFactoryInterface.php', - 'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php', - 'Psr\\Http\\Message\\StreamFactoryInterface' => $vendorDir . '/psr/http-factory/src/StreamFactoryInterface.php', - 'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php', - 'Psr\\Http\\Message\\UploadedFileFactoryInterface' => $vendorDir . '/psr/http-factory/src/UploadedFileFactoryInterface.php', - 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php', - 'Psr\\Http\\Message\\UriFactoryInterface' => $vendorDir . '/psr/http-factory/src/UriFactoryInterface.php', - 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php', - 'Random\\BrokenRandomEngineError' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/Random/BrokenRandomEngineError.php', - 'Random\\CryptoSafeEngine' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/Random/CryptoSafeEngine.php', - 'Random\\Engine' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/Random/Engine.php', - 'Random\\Engine\\Secure' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/Random/Engine/Secure.php', - 'Random\\RandomError' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/Random/RandomError.php', - 'Random\\RandomException' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/Random/RandomException.php', - 'SensitiveParameter' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/SensitiveParameter.php', - 'SensitiveParameterValue' => $vendorDir . '/symfony/polyfill-php82/Resources/stubs/SensitiveParameterValue.php', - 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/filesystem/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => $vendorDir . '/symfony/filesystem/Exception/RuntimeException.php', - 'Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php', - 'Symfony\\Component\\Filesystem\\Path' => $vendorDir . '/symfony/filesystem/Path.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php', - 'Symfony\\Polyfill\\Php80\\PhpToken' => $vendorDir . '/symfony/polyfill-php80/PhpToken.php', - 'Symfony\\Polyfill\\Php82\\NoDynamicProperties' => $vendorDir . '/symfony/polyfill-php82/NoDynamicProperties.php', - 'Symfony\\Polyfill\\Php82\\Php82' => $vendorDir . '/symfony/polyfill-php82/Php82.php', - 'Symfony\\Polyfill\\Php82\\Random\\Engine\\Secure' => $vendorDir . '/symfony/polyfill-php82/Random/Engine/Secure.php', - 'Symfony\\Polyfill\\Php82\\SensitiveParameterValue' => $vendorDir . '/symfony/polyfill-php82/SensitiveParameterValue.php', - 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', - 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', -); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_files.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_files.php deleted file mode 100644 index ecfcf6f1d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_files.php +++ /dev/null @@ -1,15 +0,0 @@ - $vendorDir . '/symfony/polyfill-php80/bootstrap.php', - '5897ea0ac4cccf14d323035e65887801' => $vendorDir . '/symfony/polyfill-php82/bootstrap.php', - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', - 'b067bc7112e384b61c701452d53a14a8' => $vendorDir . '/mtdowling/jmespath.php/src/JmesPath.php', - '8a9dc1de0ca7e01f3e08231539562f61' => $vendorDir . '/aws/aws-sdk-php/src/functions.php', -); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_namespaces.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3ad..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/symfony/polyfill-php82'), - 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), - 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), - 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), - 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), - 'ServerlessWpStreamWrapper\\' => array($baseDir . '/src'), - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), - 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'), - 'JmesPath\\' => array($vendorDir . '/mtdowling/jmespath.php/src'), - 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), - 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), - 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), - 'Aws\\' => array($vendorDir . '/aws/aws-sdk-php/src'), -); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_real.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_real.php deleted file mode 100644 index ad7a97b45..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_real.php +++ /dev/null @@ -1,50 +0,0 @@ -register(true); - - $filesToLoad = \Composer\Autoload\ComposerStaticInite6ae8f42cbb37ec38c835aca25a07303::$files; - $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } - }, null, null); - foreach ($filesToLoad as $fileIdentifier => $file) { - $requireFile($fileIdentifier, $file); - } - - return $loader; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_static.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_static.php deleted file mode 100644 index 4c266aa9d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/autoload_static.php +++ /dev/null @@ -1,712 +0,0 @@ - __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', - '5897ea0ac4cccf14d323035e65887801' => __DIR__ . '/..' . '/symfony/polyfill-php82/bootstrap.php', - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - 'b067bc7112e384b61c701452d53a14a8' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/JmesPath.php', - '8a9dc1de0ca7e01f3e08231539562f61' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/functions.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'S' => - array ( - 'Symfony\\Polyfill\\Php82\\' => 23, - 'Symfony\\Polyfill\\Php80\\' => 23, - 'Symfony\\Polyfill\\Mbstring\\' => 26, - 'Symfony\\Polyfill\\Ctype\\' => 23, - 'Symfony\\Component\\Filesystem\\' => 29, - 'ServerlessWpStreamWrapper\\' => 26, - ), - 'P' => - array ( - 'Psr\\Http\\Message\\' => 17, - 'Psr\\Http\\Client\\' => 16, - ), - 'J' => - array ( - 'JmesPath\\' => 9, - ), - 'G' => - array ( - 'GuzzleHttp\\Psr7\\' => 16, - 'GuzzleHttp\\Promise\\' => 19, - 'GuzzleHttp\\' => 11, - ), - 'A' => - array ( - 'Aws\\' => 4, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Symfony\\Polyfill\\Php82\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php82', - ), - 'Symfony\\Polyfill\\Php80\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', - ), - 'Symfony\\Polyfill\\Mbstring\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', - ), - 'Symfony\\Polyfill\\Ctype\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', - ), - 'Symfony\\Component\\Filesystem\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/filesystem', - ), - 'ServerlessWpStreamWrapper\\' => - array ( - 0 => __DIR__ . '/../..' . '/src', - ), - 'Psr\\Http\\Message\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/http-factory/src', - 1 => __DIR__ . '/..' . '/psr/http-message/src', - ), - 'Psr\\Http\\Client\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/http-client/src', - ), - 'JmesPath\\' => - array ( - 0 => __DIR__ . '/..' . '/mtdowling/jmespath.php/src', - ), - 'GuzzleHttp\\Psr7\\' => - array ( - 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src', - ), - 'GuzzleHttp\\Promise\\' => - array ( - 0 => __DIR__ . '/..' . '/guzzlehttp/promises/src', - ), - 'GuzzleHttp\\' => - array ( - 0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src', - ), - 'Aws\\' => - array ( - 0 => __DIR__ . '/..' . '/aws/aws-sdk-php/src', - ), - ); - - public static $classMap = array ( - 'AWS\\CRT\\Auth\\AwsCredentials' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/AwsCredentials.php', - 'AWS\\CRT\\Auth\\CredentialsProvider' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/CredentialsProvider.php', - 'AWS\\CRT\\Auth\\Signable' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/Signable.php', - 'AWS\\CRT\\Auth\\SignatureType' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/SignatureType.php', - 'AWS\\CRT\\Auth\\SignedBodyHeaderType' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/SignedBodyHeaderType.php', - 'AWS\\CRT\\Auth\\Signing' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/Signing.php', - 'AWS\\CRT\\Auth\\SigningAlgorithm' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/SigningAlgorithm.php', - 'AWS\\CRT\\Auth\\SigningConfigAWS' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/SigningConfigAWS.php', - 'AWS\\CRT\\Auth\\SigningResult' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/SigningResult.php', - 'AWS\\CRT\\Auth\\StaticCredentialsProvider' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Auth/StaticCredentialsProvider.php', - 'AWS\\CRT\\CRT' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/CRT.php', - 'AWS\\CRT\\HTTP\\Headers' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Headers.php', - 'AWS\\CRT\\HTTP\\Message' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Message.php', - 'AWS\\CRT\\HTTP\\Request' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Request.php', - 'AWS\\CRT\\HTTP\\Response' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/HTTP/Response.php', - 'AWS\\CRT\\IO\\EventLoopGroup' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/IO/EventLoopGroup.php', - 'AWS\\CRT\\IO\\InputStream' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/IO/InputStream.php', - 'AWS\\CRT\\Internal\\Encoding' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Internal/Encoding.php', - 'AWS\\CRT\\Internal\\Extension' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Internal/Extension.php', - 'AWS\\CRT\\Log' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Log.php', - 'AWS\\CRT\\NativeResource' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/NativeResource.php', - 'AWS\\CRT\\OptionValue' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Options.php', - 'AWS\\CRT\\Options' => __DIR__ . '/..' . '/aws/aws-crt-php/src/AWS/CRT/Options.php', - 'AllowDynamicProperties' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/AllowDynamicProperties.php', - 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', - 'Aws\\AbstractConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/AbstractConfigurationProvider.php', - 'Aws\\Api\\AbstractModel' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/AbstractModel.php', - 'Aws\\Api\\ApiProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ApiProvider.php', - 'Aws\\Api\\Cbor\\CborDecoder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Cbor/CborDecoder.php', - 'Aws\\Api\\Cbor\\CborEncoder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Cbor/CborEncoder.php', - 'Aws\\Api\\Cbor\\Exception\\CborException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Cbor/Exception/CborException.php', - 'Aws\\Api\\DateTimeResult' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/DateTimeResult.php', - 'Aws\\Api\\DocModel' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/DocModel.php', - 'Aws\\Api\\ErrorParser\\AbstractErrorParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ErrorParser/AbstractErrorParser.php', - 'Aws\\Api\\ErrorParser\\AbstractRpcV2ErrorParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ErrorParser/AbstractRpcV2ErrorParser.php', - 'Aws\\Api\\ErrorParser\\JsonParserTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ErrorParser/JsonParserTrait.php', - 'Aws\\Api\\ErrorParser\\JsonRpcErrorParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ErrorParser/JsonRpcErrorParser.php', - 'Aws\\Api\\ErrorParser\\RestJsonErrorParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ErrorParser/RestJsonErrorParser.php', - 'Aws\\Api\\ErrorParser\\RpcV2CborErrorParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ErrorParser/RpcV2CborErrorParser.php', - 'Aws\\Api\\ErrorParser\\XmlErrorParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ErrorParser/XmlErrorParser.php', - 'Aws\\Api\\Exception\\RpcV2CborException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Exception/RpcV2CborException.php', - 'Aws\\Api\\ListShape' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ListShape.php', - 'Aws\\Api\\MapShape' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/MapShape.php', - 'Aws\\Api\\Operation' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Operation.php', - 'Aws\\Api\\Parser\\AbstractParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/AbstractParser.php', - 'Aws\\Api\\Parser\\AbstractRestParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/AbstractRestParser.php', - 'Aws\\Api\\Parser\\AbstractRpcV2Parser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/AbstractRpcV2Parser.php', - 'Aws\\Api\\Parser\\Crc32ValidatingParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/Crc32ValidatingParser.php', - 'Aws\\Api\\Parser\\DecodingEventStreamIterator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/DecodingEventStreamIterator.php', - 'Aws\\Api\\Parser\\EventParsingIterator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/EventParsingIterator.php', - 'Aws\\Api\\Parser\\Exception\\ParserException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/Exception/ParserException.php', - 'Aws\\Api\\Parser\\JsonParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/JsonParser.php', - 'Aws\\Api\\Parser\\JsonRpcParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/JsonRpcParser.php', - 'Aws\\Api\\Parser\\MetadataParserTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php', - 'Aws\\Api\\Parser\\NonSeekableStreamDecodingEventStreamIterator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/NonSeekableStreamDecodingEventStreamIterator.php', - 'Aws\\Api\\Parser\\PayloadParserTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/PayloadParserTrait.php', - 'Aws\\Api\\Parser\\QueryParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/QueryParser.php', - 'Aws\\Api\\Parser\\RestJsonParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/RestJsonParser.php', - 'Aws\\Api\\Parser\\RestXmlParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/RestXmlParser.php', - 'Aws\\Api\\Parser\\RpcV2CborParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/RpcV2CborParser.php', - 'Aws\\Api\\Parser\\RpcV2ParserTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/RpcV2ParserTrait.php', - 'Aws\\Api\\Parser\\XmlParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Parser/XmlParser.php', - 'Aws\\Api\\Serializer\\AbstractRpcV2Serializer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/AbstractRpcV2Serializer.php', - 'Aws\\Api\\Serializer\\Ec2ParamBuilder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/Ec2ParamBuilder.php', - 'Aws\\Api\\Serializer\\JsonBody' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/JsonBody.php', - 'Aws\\Api\\Serializer\\JsonRpcSerializer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php', - 'Aws\\Api\\Serializer\\QueryParamBuilder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/QueryParamBuilder.php', - 'Aws\\Api\\Serializer\\QuerySerializer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/QuerySerializer.php', - 'Aws\\Api\\Serializer\\RestJsonSerializer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/RestJsonSerializer.php', - 'Aws\\Api\\Serializer\\RestSerializer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/RestSerializer.php', - 'Aws\\Api\\Serializer\\RestXmlSerializer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/RestXmlSerializer.php', - 'Aws\\Api\\Serializer\\RpcV2CborSerializer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/RpcV2CborSerializer.php', - 'Aws\\Api\\Serializer\\XmlBody' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Serializer/XmlBody.php', - 'Aws\\Api\\Service' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Service.php', - 'Aws\\Api\\Shape' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Shape.php', - 'Aws\\Api\\ShapeMap' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/ShapeMap.php', - 'Aws\\Api\\StructureShape' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/StructureShape.php', - 'Aws\\Api\\SupportedProtocols' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/SupportedProtocols.php', - 'Aws\\Api\\TimestampShape' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/TimestampShape.php', - 'Aws\\Api\\Validator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Api/Validator.php', - 'Aws\\Arn\\AccessPointArn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/AccessPointArn.php', - 'Aws\\Arn\\AccessPointArnInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php', - 'Aws\\Arn\\Arn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/Arn.php', - 'Aws\\Arn\\ArnInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/ArnInterface.php', - 'Aws\\Arn\\ArnParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/ArnParser.php', - 'Aws\\Arn\\Exception\\InvalidArnException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/Exception/InvalidArnException.php', - 'Aws\\Arn\\ObjectLambdaAccessPointArn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/ObjectLambdaAccessPointArn.php', - 'Aws\\Arn\\ResourceTypeAndIdTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/ResourceTypeAndIdTrait.php', - 'Aws\\Arn\\S3\\AccessPointArn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php', - 'Aws\\Arn\\S3\\BucketArnInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/S3/BucketArnInterface.php', - 'Aws\\Arn\\S3\\MultiRegionAccessPointArn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/S3/MultiRegionAccessPointArn.php', - 'Aws\\Arn\\S3\\OutpostsAccessPointArn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/S3/OutpostsAccessPointArn.php', - 'Aws\\Arn\\S3\\OutpostsArnInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php', - 'Aws\\Arn\\S3\\OutpostsBucketArn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Arn/S3/OutpostsBucketArn.php', - 'Aws\\Auth\\AuthSchemeResolver' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Auth/AuthSchemeResolver.php', - 'Aws\\Auth\\AuthSchemeResolverInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Auth/AuthSchemeResolverInterface.php', - 'Aws\\Auth\\AuthSelectionMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Auth/AuthSelectionMiddleware.php', - 'Aws\\Auth\\Exception\\UnresolvedAuthSchemeException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Auth/Exception/UnresolvedAuthSchemeException.php', - 'Aws\\AwsClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/AwsClient.php', - 'Aws\\AwsClientInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/AwsClientInterface.php', - 'Aws\\AwsClientTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/AwsClientTrait.php', - 'Aws\\CacheInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/CacheInterface.php', - 'Aws\\Cbor\\CborDecoder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Cbor/CborDecoder.php', - 'Aws\\Cbor\\CborEncoder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Cbor/CborEncoder.php', - 'Aws\\Cbor\\Exception\\CborException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Cbor/Exception/CborException.php', - 'Aws\\ClientResolver' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientResolver.php', - 'Aws\\ClientSideMonitoring\\AbstractMonitoringMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/AbstractMonitoringMiddleware.php', - 'Aws\\ClientSideMonitoring\\ApiCallAttemptMonitoringMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php', - 'Aws\\ClientSideMonitoring\\ApiCallMonitoringMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallMonitoringMiddleware.php', - 'Aws\\ClientSideMonitoring\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/Configuration.php', - 'Aws\\ClientSideMonitoring\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationInterface.php', - 'Aws\\ClientSideMonitoring\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationProvider.php', - 'Aws\\ClientSideMonitoring\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/Exception/ConfigurationException.php', - 'Aws\\ClientSideMonitoring\\MonitoringMiddlewareInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ClientSideMonitoring/MonitoringMiddlewareInterface.php', - 'Aws\\Command' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Command.php', - 'Aws\\CommandInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/CommandInterface.php', - 'Aws\\CommandPool' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/CommandPool.php', - 'Aws\\ConfigurationProviderInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ConfigurationProviderInterface.php', - 'Aws\\Configuration\\ConfigurationResolver' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Configuration/ConfigurationResolver.php', - 'Aws\\Credentials\\AssumeRoleCredentialProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/AssumeRoleCredentialProvider.php', - 'Aws\\Credentials\\AssumeRoleWithWebIdentityCredentialProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/AssumeRoleWithWebIdentityCredentialProvider.php', - 'Aws\\Credentials\\CredentialProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/CredentialProvider.php', - 'Aws\\Credentials\\CredentialSources' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/CredentialSources.php', - 'Aws\\Credentials\\Credentials' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/Credentials.php', - 'Aws\\Credentials\\CredentialsInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/CredentialsInterface.php', - 'Aws\\Credentials\\CredentialsUtils' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/CredentialsUtils.php', - 'Aws\\Credentials\\EcsCredentialProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/EcsCredentialProvider.php', - 'Aws\\Credentials\\InstanceProfileProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php', - 'Aws\\Credentials\\LoginCredentialProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Credentials/LoginCredentialProvider.php', - 'Aws\\Crypto\\AbstractCryptoClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AbstractCryptoClient.php', - 'Aws\\Crypto\\AbstractCryptoClientV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AbstractCryptoClientV2.php', - 'Aws\\Crypto\\AbstractCryptoClientV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AbstractCryptoClientV3.php', - 'Aws\\Crypto\\AesDecryptingStream' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AesDecryptingStream.php', - 'Aws\\Crypto\\AesEncryptingStream' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AesEncryptingStream.php', - 'Aws\\Crypto\\AesGcmDecryptingStream' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AesGcmDecryptingStream.php', - 'Aws\\Crypto\\AesGcmEncryptingStream' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php', - 'Aws\\Crypto\\AesStreamInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AesStreamInterface.php', - 'Aws\\Crypto\\AesStreamInterfaceV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AesStreamInterfaceV2.php', - 'Aws\\Crypto\\AlgorithmConstants' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AlgorithmConstants.php', - 'Aws\\Crypto\\AlgorithmSuite' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/AlgorithmSuite.php', - 'Aws\\Crypto\\Cipher\\Cbc' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php', - 'Aws\\Crypto\\Cipher\\CipherBuilderTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php', - 'Aws\\Crypto\\Cipher\\CipherMethod' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/Cipher/CipherMethod.php', - 'Aws\\Crypto\\DecryptionTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/DecryptionTrait.php', - 'Aws\\Crypto\\DecryptionTraitV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/DecryptionTraitV2.php', - 'Aws\\Crypto\\DecryptionTraitV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/DecryptionTraitV3.php', - 'Aws\\Crypto\\EncryptionTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/EncryptionTrait.php', - 'Aws\\Crypto\\EncryptionTraitV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/EncryptionTraitV2.php', - 'Aws\\Crypto\\EncryptionTraitV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/EncryptionTraitV3.php', - 'Aws\\Crypto\\KmsMaterialsProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/KmsMaterialsProvider.php', - 'Aws\\Crypto\\KmsMaterialsProviderV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV2.php', - 'Aws\\Crypto\\KmsMaterialsProviderV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV3.php', - 'Aws\\Crypto\\MaterialsProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MaterialsProvider.php', - 'Aws\\Crypto\\MaterialsProviderInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterface.php', - 'Aws\\Crypto\\MaterialsProviderInterfaceV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterfaceV2.php', - 'Aws\\Crypto\\MaterialsProviderInterfaceV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterfaceV3.php', - 'Aws\\Crypto\\MaterialsProviderV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderV2.php', - 'Aws\\Crypto\\MaterialsProviderV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MaterialsProviderV3.php', - 'Aws\\Crypto\\MetadataEnvelope' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MetadataEnvelope.php', - 'Aws\\Crypto\\MetadataStrategyInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Crypto/MetadataStrategyInterface.php', - 'Aws\\DefaultsMode\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/DefaultsMode/Configuration.php', - 'Aws\\DefaultsMode\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/DefaultsMode/ConfigurationInterface.php', - 'Aws\\DefaultsMode\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/DefaultsMode/ConfigurationProvider.php', - 'Aws\\DefaultsMode\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/DefaultsMode/Exception/ConfigurationException.php', - 'Aws\\DoctrineCacheAdapter' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/DoctrineCacheAdapter.php', - 'Aws\\EndpointDiscovery\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointDiscovery/Configuration.php', - 'Aws\\EndpointDiscovery\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationInterface.php', - 'Aws\\EndpointDiscovery\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationProvider.php', - 'Aws\\EndpointDiscovery\\EndpointDiscoveryMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointDiscovery/EndpointDiscoveryMiddleware.php', - 'Aws\\EndpointDiscovery\\EndpointList' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php', - 'Aws\\EndpointDiscovery\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointDiscovery/Exception/ConfigurationException.php', - 'Aws\\EndpointParameterMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointParameterMiddleware.php', - 'Aws\\EndpointV2\\Bdd\\BddEvaluator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddEvaluator.php', - 'Aws\\EndpointV2\\Bdd\\BddNodeDecoder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddNodeDecoder.php', - 'Aws\\EndpointV2\\Bdd\\BddResultResolver' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddResultResolver.php', - 'Aws\\EndpointV2\\Bdd\\BddRuleset' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Bdd/BddRuleset.php', - 'Aws\\EndpointV2\\EndpointDefinitionProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/EndpointDefinitionProvider.php', - 'Aws\\EndpointV2\\EndpointProviderV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php', - 'Aws\\EndpointV2\\EndpointV2Middleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/EndpointV2Middleware.php', - 'Aws\\EndpointV2\\EndpointV2SerializerTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/EndpointV2SerializerTrait.php', - 'Aws\\EndpointV2\\Rule\\AbstractRule' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Rule/AbstractRule.php', - 'Aws\\EndpointV2\\Rule\\EndpointRule' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Rule/EndpointRule.php', - 'Aws\\EndpointV2\\Rule\\ErrorRule' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Rule/ErrorRule.php', - 'Aws\\EndpointV2\\Rule\\RuleCreator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Rule/RuleCreator.php', - 'Aws\\EndpointV2\\Rule\\TreeRule' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Rule/TreeRule.php', - 'Aws\\EndpointV2\\Ruleset\\Ruleset' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php', - 'Aws\\EndpointV2\\Ruleset\\RulesetEndpoint' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetEndpoint.php', - 'Aws\\EndpointV2\\Ruleset\\RulesetParameter' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetParameter.php', - 'Aws\\EndpointV2\\Ruleset\\RulesetStandardLibrary' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/EndpointV2/Ruleset/RulesetStandardLibrary.php', - 'Aws\\Endpoint\\EndpointProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/EndpointProvider.php', - 'Aws\\Endpoint\\Partition' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/Partition.php', - 'Aws\\Endpoint\\PartitionEndpointProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php', - 'Aws\\Endpoint\\PartitionInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/PartitionInterface.php', - 'Aws\\Endpoint\\PatternEndpointProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/PatternEndpointProvider.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Configuration.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationInterface.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationProvider.php', - 'Aws\\Endpoint\\UseDualstackEndpoint\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/Exception/ConfigurationException.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/Configuration.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationInterface.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationProvider.php', - 'Aws\\Endpoint\\UseFipsEndpoint\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/Exception/ConfigurationException.php', - 'Aws\\Exception\\AwsException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/AwsException.php', - 'Aws\\Exception\\CommonRuntimeException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/CommonRuntimeException.php', - 'Aws\\Exception\\CouldNotCreateChecksumException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/CouldNotCreateChecksumException.php', - 'Aws\\Exception\\CredentialsException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/CredentialsException.php', - 'Aws\\Exception\\CryptoException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/CryptoException.php', - 'Aws\\Exception\\CryptoPolyfillException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/CryptoPolyfillException.php', - 'Aws\\Exception\\EventStreamDataException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/EventStreamDataException.php', - 'Aws\\Exception\\IncalculablePayloadException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/IncalculablePayloadException.php', - 'Aws\\Exception\\InvalidJsonException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/InvalidJsonException.php', - 'Aws\\Exception\\InvalidRegionException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/InvalidRegionException.php', - 'Aws\\Exception\\MultipartUploadException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/MultipartUploadException.php', - 'Aws\\Exception\\TokenException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/TokenException.php', - 'Aws\\Exception\\UnresolvedApiException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/UnresolvedApiException.php', - 'Aws\\Exception\\UnresolvedEndpointException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/UnresolvedEndpointException.php', - 'Aws\\Exception\\UnresolvedSignatureException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Exception/UnresolvedSignatureException.php', - 'Aws\\HandlerList' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/HandlerList.php', - 'Aws\\Handler\\Guzzle\\GuzzleHandler' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Handler/Guzzle/GuzzleHandler.php', - 'Aws\\Handler\\HttpHandlerError' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Handler/HttpHandlerError.php', - 'Aws\\HasDataTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/HasDataTrait.php', - 'Aws\\HasMonitoringEventsTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/HasMonitoringEventsTrait.php', - 'Aws\\HashInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/HashInterface.php', - 'Aws\\HashingStream' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/HashingStream.php', - 'Aws\\History' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/History.php', - 'Aws\\IdempotencyTokenMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/IdempotencyTokenMiddleware.php', - 'Aws\\Identity\\AwsCredentialIdentity' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Identity/AwsCredentialIdentity.php', - 'Aws\\Identity\\BearerTokenIdentity' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Identity/BearerTokenIdentity.php', - 'Aws\\Identity\\IdentityInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Identity/IdentityInterface.php', - 'Aws\\Identity\\S3\\S3ExpressIdentity' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Identity/S3/S3ExpressIdentity.php', - 'Aws\\Identity\\S3\\S3ExpressIdentityProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Identity/S3/S3ExpressIdentityProvider.php', - 'Aws\\InputValidationMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/InputValidationMiddleware.php', - 'Aws\\JsonCompiler' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/JsonCompiler.php', - 'Aws\\Kms\\Exception\\KmsException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Kms/Exception/KmsException.php', - 'Aws\\Kms\\KmsClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Kms/KmsClient.php', - 'Aws\\LruArrayCache' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/LruArrayCache.php', - 'Aws\\MetricsBuilder' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/MetricsBuilder.php', - 'Aws\\Middleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Middleware.php', - 'Aws\\MockHandler' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/MockHandler.php', - 'Aws\\MonitoringEventsInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/MonitoringEventsInterface.php', - 'Aws\\MultiRegionClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/MultiRegionClient.php', - 'Aws\\Multipart\\AbstractUploadManager' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php', - 'Aws\\Multipart\\AbstractUploader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Multipart/AbstractUploader.php', - 'Aws\\Multipart\\UploadState' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Multipart/UploadState.php', - 'Aws\\PhpHash' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/PhpHash.php', - 'Aws\\PresignUrlMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/PresignUrlMiddleware.php', - 'Aws\\Psr16CacheAdapter' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Psr16CacheAdapter.php', - 'Aws\\PsrCacheAdapter' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/PsrCacheAdapter.php', - 'Aws\\QueryCompatibleInputMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/QueryCompatibleInputMiddleware.php', - 'Aws\\RequestCompressionMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/RequestCompressionMiddleware.php', - 'Aws\\ResponseContainerInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ResponseContainerInterface.php', - 'Aws\\Result' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Result.php', - 'Aws\\ResultInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ResultInterface.php', - 'Aws\\ResultPaginator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/ResultPaginator.php', - 'Aws\\RetryMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/RetryMiddleware.php', - 'Aws\\RetryMiddlewareV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/RetryMiddlewareV2.php', - 'Aws\\Retry\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/Configuration.php', - 'Aws\\Retry\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/ConfigurationInterface.php', - 'Aws\\Retry\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/ConfigurationProvider.php', - 'Aws\\Retry\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/Exception/ConfigurationException.php', - 'Aws\\Retry\\QuotaManager' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/QuotaManager.php', - 'Aws\\Retry\\RateLimiter' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/RateLimiter.php', - 'Aws\\Retry\\RetryHelperTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/RetryHelperTrait.php', - 'Aws\\Retry\\V3\\LongPolling' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/V3/LongPolling.php', - 'Aws\\Retry\\V3\\OptIn' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/V3/OptIn.php', - 'Aws\\Retry\\V3\\QuotaManager' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/V3/QuotaManager.php', - 'Aws\\Retry\\V3\\RetryMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Retry/V3/RetryMiddleware.php', - 'Aws\\S3\\AmbiguousSuccessParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php', - 'Aws\\S3\\ApplyChecksumMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/ApplyChecksumMiddleware.php', - 'Aws\\S3\\BatchDelete' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/BatchDelete.php', - 'Aws\\S3\\BucketEndpointArnMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/BucketEndpointArnMiddleware.php', - 'Aws\\S3\\BucketEndpointMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/BucketEndpointMiddleware.php', - 'Aws\\S3\\CalculatesChecksumTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/CalculatesChecksumTrait.php', - 'Aws\\S3\\Crypto\\CryptoParamsTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTrait.php', - 'Aws\\S3\\Crypto\\CryptoParamsTraitV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTraitV2.php', - 'Aws\\S3\\Crypto\\CryptoParamsTraitV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/CryptoParamsTraitV3.php', - 'Aws\\S3\\Crypto\\HeadersMetadataStrategy' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/HeadersMetadataStrategy.php', - 'Aws\\S3\\Crypto\\InstructionFileMetadataStrategy' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php', - 'Aws\\S3\\Crypto\\S3EncryptionClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClient.php', - 'Aws\\S3\\Crypto\\S3EncryptionClientV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV2.php', - 'Aws\\S3\\Crypto\\S3EncryptionClientV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionClientV3.php', - 'Aws\\S3\\Crypto\\S3EncryptionMultipartUploader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploader.php', - 'Aws\\S3\\Crypto\\S3EncryptionMultipartUploaderV2' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV2.php', - 'Aws\\S3\\Crypto\\S3EncryptionMultipartUploaderV3' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/S3EncryptionMultipartUploaderV3.php', - 'Aws\\S3\\Crypto\\UserAgentTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Crypto/UserAgentTrait.php', - 'Aws\\S3\\EndpointRegionHelperTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php', - 'Aws\\S3\\Exception\\DeleteMultipleObjectsException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Exception/DeleteMultipleObjectsException.php', - 'Aws\\S3\\Exception\\MultipartCopyAnnotationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Exception/MultipartCopyAnnotationException.php', - 'Aws\\S3\\Exception\\PermanentRedirectException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Exception/PermanentRedirectException.php', - 'Aws\\S3\\Exception\\S3Exception' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Exception/S3Exception.php', - 'Aws\\S3\\Exception\\S3MultipartUploadException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Exception/S3MultipartUploadException.php', - 'Aws\\S3\\ExpiresParsingMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/ExpiresParsingMiddleware.php', - 'Aws\\S3\\GetBucketLocationParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/GetBucketLocationParser.php', - 'Aws\\S3\\MultipartCopy' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/MultipartCopy.php', - 'Aws\\S3\\MultipartUploader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/MultipartUploader.php', - 'Aws\\S3\\MultipartUploadingTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/MultipartUploadingTrait.php', - 'Aws\\S3\\ObjectCopier' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/ObjectCopier.php', - 'Aws\\S3\\ObjectUploader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/ObjectUploader.php', - 'Aws\\S3\\Parser\\GetBucketLocationResultMutator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Parser/GetBucketLocationResultMutator.php', - 'Aws\\S3\\Parser\\S3Parser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Parser/S3Parser.php', - 'Aws\\S3\\Parser\\S3ResultMutator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Parser/S3ResultMutator.php', - 'Aws\\S3\\Parser\\ValidateResponseChecksumResultMutator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Parser/ValidateResponseChecksumResultMutator.php', - 'Aws\\S3\\PermanentRedirectMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php', - 'Aws\\S3\\PostObject' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/PostObject.php', - 'Aws\\S3\\PostObjectV4' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/PostObjectV4.php', - 'Aws\\S3\\PutObjectUrlMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/PutObjectUrlMiddleware.php', - 'Aws\\S3\\RegionalEndpoint\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/Configuration.php', - 'Aws\\S3\\RegionalEndpoint\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationInterface.php', - 'Aws\\S3\\RegionalEndpoint\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationProvider.php', - 'Aws\\S3\\RegionalEndpoint\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/RegionalEndpoint/Exception/ConfigurationException.php', - 'Aws\\S3\\RetryableMalformedResponseParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/RetryableMalformedResponseParser.php', - 'Aws\\S3\\S3Client' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Client.php', - 'Aws\\S3\\S3ClientInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3ClientInterface.php', - 'Aws\\S3\\S3ClientTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3ClientTrait.php', - 'Aws\\S3\\S3EndpointMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3EndpointMiddleware.php', - 'Aws\\S3\\S3MultiRegionClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3MultiRegionClient.php', - 'Aws\\S3\\S3Transfer\\AbstractMultipartDownloader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartDownloader.php', - 'Aws\\S3\\S3Transfer\\AbstractMultipartUploader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/AbstractMultipartUploader.php', - 'Aws\\S3\\S3Transfer\\DirectoryDownloader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryDownloader.php', - 'Aws\\S3\\S3Transfer\\DirectoryUploader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/DirectoryUploader.php', - 'Aws\\S3\\S3Transfer\\Exception\\FileDownloadException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Exception/FileDownloadException.php', - 'Aws\\S3\\S3Transfer\\Exception\\ProgressTrackerException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Exception/ProgressTrackerException.php', - 'Aws\\S3\\S3Transfer\\Exception\\S3TransferException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Exception/S3TransferException.php', - 'Aws\\S3\\S3Transfer\\Models\\AbstractResumableTransfer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/AbstractResumableTransfer.php', - 'Aws\\S3\\S3Transfer\\Models\\AbstractTransferRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/AbstractTransferRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadDirectoryRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadDirectoryResult' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadDirectoryResult.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadFileRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadFileRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\DownloadResult' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/DownloadResult.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumableDownload' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableDownload.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumableUpload' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumableUpload.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumeDownloadRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeDownloadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\ResumeUploadRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/ResumeUploadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\S3TransferManagerConfig' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/S3TransferManagerConfig.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadDirectoryRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadDirectoryResult' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadDirectoryResult.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadRequest' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadRequest.php', - 'Aws\\S3\\S3Transfer\\Models\\UploadResult' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Models/UploadResult.php', - 'Aws\\S3\\S3Transfer\\MultipartUploader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/MultipartUploader.php', - 'Aws\\S3\\S3Transfer\\PartGetMultipartDownloader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/PartGetMultipartDownloader.php', - 'Aws\\S3\\S3Transfer\\Progress\\AbstractProgressBarFormat' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\AbstractTransferListener' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/AbstractTransferListener.php', - 'Aws\\S3\\S3Transfer\\Progress\\ColoredTransferProgressBarFormat' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ColoredTransferProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\ConsoleProgressBar' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ConsoleProgressBar.php', - 'Aws\\S3\\S3Transfer\\Progress\\DirectoryProgressTracker' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryProgressTracker.php', - 'Aws\\S3\\S3Transfer\\Progress\\DirectoryTransferProgressAggregator' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressAggregator.php', - 'Aws\\S3\\S3Transfer\\Progress\\DirectoryTransferProgressSnapshot' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/DirectoryTransferProgressSnapshot.php', - 'Aws\\S3\\S3Transfer\\Progress\\MultiProgressBarFormat' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/MultiProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\MultiProgressTracker' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/MultiProgressTracker.php', - 'Aws\\S3\\S3Transfer\\Progress\\PlainProgressBarFormat' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/PlainProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\ProgressBarFactoryInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ProgressBarFactoryInterface.php', - 'Aws\\S3\\S3Transfer\\Progress\\ProgressBarInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ProgressBarInterface.php', - 'Aws\\S3\\S3Transfer\\Progress\\ProgressTrackerInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/ProgressTrackerInterface.php', - 'Aws\\S3\\S3Transfer\\Progress\\SingleProgressTracker' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/SingleProgressTracker.php', - 'Aws\\S3\\S3Transfer\\Progress\\TransferListenerNotifier' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferListenerNotifier.php', - 'Aws\\S3\\S3Transfer\\Progress\\TransferProgressBarFormat' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferProgressBarFormat.php', - 'Aws\\S3\\S3Transfer\\Progress\\TransferProgressSnapshot' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Progress/TransferProgressSnapshot.php', - 'Aws\\S3\\S3Transfer\\RangeGetMultipartDownloader' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/RangeGetMultipartDownloader.php', - 'Aws\\S3\\S3Transfer\\S3TransferManager' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/S3TransferManager.php', - 'Aws\\S3\\S3Transfer\\Utils\\AbstractDownloadHandler' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/AbstractDownloadHandler.php', - 'Aws\\S3\\S3Transfer\\Utils\\FileDownloadHandler' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/FileDownloadHandler.php', - 'Aws\\S3\\S3Transfer\\Utils\\ResumableDownloadHandlerInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/ResumableDownloadHandlerInterface.php', - 'Aws\\S3\\S3Transfer\\Utils\\StreamDownloadHandler' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3Transfer/Utils/StreamDownloadHandler.php', - 'Aws\\S3\\S3UriParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/S3UriParser.php', - 'Aws\\S3\\SSECMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/SSECMiddleware.php', - 'Aws\\S3\\StreamWrapper' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/StreamWrapper.php', - 'Aws\\S3\\Transfer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/Transfer.php', - 'Aws\\S3\\UseArnRegion\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/UseArnRegion/Configuration.php', - 'Aws\\S3\\UseArnRegion\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationInterface.php', - 'Aws\\S3\\UseArnRegion\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationProvider.php', - 'Aws\\S3\\UseArnRegion\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/UseArnRegion/Exception/ConfigurationException.php', - 'Aws\\S3\\ValidateResponseChecksumParser' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/S3/ValidateResponseChecksumParser.php', - 'Aws\\SSOOIDC\\Exception\\SSOOIDCException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/SSOOIDC/Exception/SSOOIDCException.php', - 'Aws\\SSOOIDC\\SSOOIDCClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/SSOOIDC/SSOOIDCClient.php', - 'Aws\\SSO\\Exception\\SSOException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/SSO/Exception/SSOException.php', - 'Aws\\SSO\\SSOClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/SSO/SSOClient.php', - 'Aws\\Script\\Composer\\Composer' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Script/Composer/Composer.php', - 'Aws\\Sdk' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Sdk.php', - 'Aws\\Signature\\AnonymousSignature' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/AnonymousSignature.php', - 'Aws\\Signature\\DpopSignature' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/DpopSignature.php', - 'Aws\\Signature\\S3ExpressSignature' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/S3ExpressSignature.php', - 'Aws\\Signature\\S3SignatureV4' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/S3SignatureV4.php', - 'Aws\\Signature\\SignatureInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/SignatureInterface.php', - 'Aws\\Signature\\SignatureProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/SignatureProvider.php', - 'Aws\\Signature\\SignatureTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/SignatureTrait.php', - 'Aws\\Signature\\SignatureV4' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signature/SignatureV4.php', - 'Aws\\Signin\\Exception\\SigninException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signin/Exception/SigninException.php', - 'Aws\\Signin\\SigninClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Signin/SigninClient.php', - 'Aws\\StreamRequestPayloadMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/StreamRequestPayloadMiddleware.php', - 'Aws\\Sts\\Exception\\StsException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Sts/Exception/StsException.php', - 'Aws\\Sts\\RegionalEndpoints\\Configuration' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Configuration.php', - 'Aws\\Sts\\RegionalEndpoints\\ConfigurationInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php', - 'Aws\\Sts\\RegionalEndpoints\\ConfigurationProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationProvider.php', - 'Aws\\Sts\\RegionalEndpoints\\Exception\\ConfigurationException' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php', - 'Aws\\Sts\\StsClient' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Sts/StsClient.php', - 'Aws\\Token\\BearerTokenAuthorization' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/BearerTokenAuthorization.php', - 'Aws\\Token\\BedrockTokenProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/BedrockTokenProvider.php', - 'Aws\\Token\\ParsesIniTrait' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/ParsesIniTrait.php', - 'Aws\\Token\\RefreshableTokenProviderInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/RefreshableTokenProviderInterface.php', - 'Aws\\Token\\SsoToken' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/SsoToken.php', - 'Aws\\Token\\SsoTokenProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/SsoTokenProvider.php', - 'Aws\\Token\\Token' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/Token.php', - 'Aws\\Token\\TokenAuthorization' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/TokenAuthorization.php', - 'Aws\\Token\\TokenInterface' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/TokenInterface.php', - 'Aws\\Token\\TokenProvider' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/TokenProvider.php', - 'Aws\\Token\\TokenSource' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Token/TokenSource.php', - 'Aws\\TraceMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/TraceMiddleware.php', - 'Aws\\UserAgentMiddleware' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/UserAgentMiddleware.php', - 'Aws\\Waiter' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/Waiter.php', - 'Aws\\WrappedHttpHandler' => __DIR__ . '/..' . '/aws/aws-sdk-php/src/WrappedHttpHandler.php', - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'GuzzleHttp\\AuthMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/AuthMiddleware.php', - 'GuzzleHttp\\Auth\\DigestAuth' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Auth/DigestAuth.php', - 'GuzzleHttp\\Auth\\DigestChallenge' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Auth/DigestChallenge.php', - 'GuzzleHttp\\BodySummarizer' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizer.php', - 'GuzzleHttp\\BodySummarizerInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php', - 'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php', - 'GuzzleHttp\\ClientInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientInterface.php', - 'GuzzleHttp\\ClientTrait' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientTrait.php', - 'GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php', - 'GuzzleHttp\\Cookie\\CookieJarInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php', - 'GuzzleHttp\\Cookie\\FileCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php', - 'GuzzleHttp\\Cookie\\SessionCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php', - 'GuzzleHttp\\Cookie\\SetCookie' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php', - 'GuzzleHttp\\Env' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Env.php', - 'GuzzleHttp\\Exception\\BadResponseException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php', - 'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php', - 'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php', - 'GuzzleHttp\\Exception\\ConnectTimeoutException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectTimeoutException.php', - 'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php', - 'GuzzleHttp\\Exception\\HandlerClosedException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/HandlerClosedException.php', - 'GuzzleHttp\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', - 'GuzzleHttp\\Exception\\NetworkException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/NetworkException.php', - 'GuzzleHttp\\Exception\\NetworkTimeoutException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/NetworkTimeoutException.php', - 'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php', - 'GuzzleHttp\\Exception\\ResponseException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ResponseException.php', - 'GuzzleHttp\\Exception\\ResponseTimeoutException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ResponseTimeoutException.php', - 'GuzzleHttp\\Exception\\ResponseTransferException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ResponseTransferException.php', - 'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php', - 'GuzzleHttp\\Exception\\TooManyRedirectsException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php', - 'GuzzleHttp\\Exception\\TransferException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TransferException.php', - 'GuzzleHttp\\HandlerStack' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/HandlerStack.php', - 'GuzzleHttp\\Handler\\Clock' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Clock.php', - 'GuzzleHttp\\Handler\\CurlFactory' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php', - 'GuzzleHttp\\Handler\\CurlFactoryInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php', - 'GuzzleHttp\\Handler\\CurlHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php', - 'GuzzleHttp\\Handler\\CurlMultiHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php', - 'GuzzleHttp\\Handler\\CurlShareHandleState' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlShareHandleState.php', - 'GuzzleHttp\\Handler\\CurlVersion' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlVersion.php', - 'GuzzleHttp\\Handler\\DeadlineSourceStream' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/DeadlineSourceStream.php', - 'GuzzleHttp\\Handler\\EasyHandle' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php', - 'GuzzleHttp\\Handler\\EncodedBodyStream' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/EncodedBodyStream.php', - 'GuzzleHttp\\Handler\\HeaderProcessor' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php', - 'GuzzleHttp\\Handler\\HostValidator' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/HostValidator.php', - 'GuzzleHttp\\Handler\\MockHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/MockHandler.php', - 'GuzzleHttp\\Handler\\Proxy' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Proxy.php', - 'GuzzleHttp\\Handler\\ProxyEnv' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/ProxyEnv.php', - 'GuzzleHttp\\Handler\\RequestFraming' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/RequestFraming.php', - 'GuzzleHttp\\Handler\\StreamHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php', - 'GuzzleHttp\\Handler\\Timeout' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Timeout.php', - 'GuzzleHttp\\Handler\\TlsVersion' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/TlsVersion.php', - 'GuzzleHttp\\Handler\\TransferByteCounter' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/TransferByteCounter.php', - 'GuzzleHttp\\HostIdentity' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/HostIdentity.php', - 'GuzzleHttp\\Idn' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Idn.php', - 'GuzzleHttp\\MessageFormatter' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatter.php', - 'GuzzleHttp\\MessageFormatterInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatterInterface.php', - 'GuzzleHttp\\Middleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Middleware.php', - 'GuzzleHttp\\Multiplexing' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Multiplexing.php', - 'GuzzleHttp\\NonSerializableTrait' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/NonSerializableTrait.php', - 'GuzzleHttp\\Pool' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Pool.php', - 'GuzzleHttp\\PrepareBodyMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php', - 'GuzzleHttp\\Promise\\AggregateException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/AggregateException.php', - 'GuzzleHttp\\Promise\\CancellationException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/CancellationException.php', - 'GuzzleHttp\\Promise\\Coroutine' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Coroutine.php', - 'GuzzleHttp\\Promise\\Create' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Create.php', - 'GuzzleHttp\\Promise\\Each' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Each.php', - 'GuzzleHttp\\Promise\\EachPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/EachPromise.php', - 'GuzzleHttp\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/FulfilledPromise.php', - 'GuzzleHttp\\Promise\\Is' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Is.php', - 'GuzzleHttp\\Promise\\NonSerializableTrait' => __DIR__ . '/..' . '/guzzlehttp/promises/src/NonSerializableTrait.php', - 'GuzzleHttp\\Promise\\Promise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Promise.php', - 'GuzzleHttp\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromiseInterface.php', - 'GuzzleHttp\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromisorInterface.php', - 'GuzzleHttp\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectedPromise.php', - 'GuzzleHttp\\Promise\\RejectionException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectionException.php', - 'GuzzleHttp\\Promise\\TaskQueue' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueue.php', - 'GuzzleHttp\\Promise\\TaskQueueInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueueInterface.php', - 'GuzzleHttp\\Promise\\Utils' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Utils.php', - 'GuzzleHttp\\ProxyOptions' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ProxyOptions.php', - 'GuzzleHttp\\ProxySelection' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ProxySelection.php', - 'GuzzleHttp\\Psr7\\AppendStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/AppendStream.php', - 'GuzzleHttp\\Psr7\\BufferStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/BufferStream.php', - 'GuzzleHttp\\Psr7\\CachingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/CachingStream.php', - 'GuzzleHttp\\Psr7\\DiagnosticValue' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/DiagnosticValue.php', - 'GuzzleHttp\\Psr7\\DroppingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/DroppingStream.php', - 'GuzzleHttp\\Psr7\\Exception\\MalformedUriException' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Exception/MalformedUriException.php', - 'GuzzleHttp\\Psr7\\Exception\\TimeoutException' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Exception/TimeoutException.php', - 'GuzzleHttp\\Psr7\\FnStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/FnStream.php', - 'GuzzleHttp\\Psr7\\Header' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Header.php', - 'GuzzleHttp\\Psr7\\HttpFactory' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/HttpFactory.php', - 'GuzzleHttp\\Psr7\\InflateStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/InflateStream.php', - 'GuzzleHttp\\Psr7\\Integers' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Integers.php', - 'GuzzleHttp\\Psr7\\LazyOpenStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LazyOpenStream.php', - 'GuzzleHttp\\Psr7\\LimitStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LimitStream.php', - 'GuzzleHttp\\Psr7\\Message' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Message.php', - 'GuzzleHttp\\Psr7\\MessageParser' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MessageParser.php', - 'GuzzleHttp\\Psr7\\MessageTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MessageTrait.php', - 'GuzzleHttp\\Psr7\\MimeType' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MimeType.php', - 'GuzzleHttp\\Psr7\\MultipartStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MultipartStream.php', - 'GuzzleHttp\\Psr7\\NoSeekStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/NoSeekStream.php', - 'GuzzleHttp\\Psr7\\NonSerializableStreamTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/NonSerializableStreamTrait.php', - 'GuzzleHttp\\Psr7\\PumpStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/PumpStream.php', - 'GuzzleHttp\\Psr7\\Query' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Query.php', - 'GuzzleHttp\\Psr7\\Request' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Request.php', - 'GuzzleHttp\\Psr7\\Response' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Response.php', - 'GuzzleHttp\\Psr7\\Rfc3986' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Rfc3986.php', - 'GuzzleHttp\\Psr7\\Rfc9110' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Rfc9110.php', - 'GuzzleHttp\\Psr7\\Rfc9112' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Rfc9112.php', - 'GuzzleHttp\\Psr7\\ServerRequest' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/ServerRequest.php', - 'GuzzleHttp\\Psr7\\ServerRequestGlobalsFactory' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/ServerRequestGlobalsFactory.php', - 'GuzzleHttp\\Psr7\\Stream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Stream.php', - 'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php', - 'GuzzleHttp\\Psr7\\StreamTimeout' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamTimeout.php', - 'GuzzleHttp\\Psr7\\StreamWrapper' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamWrapper.php', - 'GuzzleHttp\\Psr7\\UploadedFile' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UploadedFile.php', - 'GuzzleHttp\\Psr7\\UploadedFileNormalizer' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UploadedFileNormalizer.php', - 'GuzzleHttp\\Psr7\\Uri' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Uri.php', - 'GuzzleHttp\\Psr7\\UriComparator' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriComparator.php', - 'GuzzleHttp\\Psr7\\UriNormalizer' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriNormalizer.php', - 'GuzzleHttp\\Psr7\\UriParser' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriParser.php', - 'GuzzleHttp\\Psr7\\UriResolver' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriResolver.php', - 'GuzzleHttp\\Psr7\\Utils' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Utils.php', - 'GuzzleHttp\\RedirectMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RedirectMiddleware.php', - 'GuzzleHttp\\RequestOptions' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RequestOptions.php', - 'GuzzleHttp\\RetryMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RetryMiddleware.php', - 'GuzzleHttp\\TransferStats' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/TransferStats.php', - 'GuzzleHttp\\TransportSharing' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/TransportSharing.php', - 'GuzzleHttp\\Utils' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Utils.php', - 'JmesPath\\AstRuntime' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/AstRuntime.php', - 'JmesPath\\CompilerRuntime' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/CompilerRuntime.php', - 'JmesPath\\DebugRuntime' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/DebugRuntime.php', - 'JmesPath\\Env' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/Env.php', - 'JmesPath\\FnDispatcher' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/FnDispatcher.php', - 'JmesPath\\Lexer' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/Lexer.php', - 'JmesPath\\Parser' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/Parser.php', - 'JmesPath\\SyntaxErrorException' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/SyntaxErrorException.php', - 'JmesPath\\TreeCompiler' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/TreeCompiler.php', - 'JmesPath\\TreeInterpreter' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/TreeInterpreter.php', - 'JmesPath\\Utils' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/Utils.php', - 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'Psr\\Http\\Client\\ClientExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/ClientExceptionInterface.php', - 'Psr\\Http\\Client\\ClientInterface' => __DIR__ . '/..' . '/psr/http-client/src/ClientInterface.php', - 'Psr\\Http\\Client\\NetworkExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/NetworkExceptionInterface.php', - 'Psr\\Http\\Client\\RequestExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/RequestExceptionInterface.php', - 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', - 'Psr\\Http\\Message\\RequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/RequestFactoryInterface.php', - 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', - 'Psr\\Http\\Message\\ResponseFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ResponseFactoryInterface.php', - 'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php', - 'Psr\\Http\\Message\\ServerRequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ServerRequestFactoryInterface.php', - 'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php', - 'Psr\\Http\\Message\\StreamFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/StreamFactoryInterface.php', - 'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php', - 'Psr\\Http\\Message\\UploadedFileFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UploadedFileFactoryInterface.php', - 'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php', - 'Psr\\Http\\Message\\UriFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UriFactoryInterface.php', - 'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php', - 'Random\\BrokenRandomEngineError' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/Random/BrokenRandomEngineError.php', - 'Random\\CryptoSafeEngine' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/Random/CryptoSafeEngine.php', - 'Random\\Engine' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/Random/Engine.php', - 'Random\\Engine\\Secure' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/Random/Engine/Secure.php', - 'Random\\RandomError' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/Random/RandomError.php', - 'Random\\RandomException' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/Random/RandomException.php', - 'SensitiveParameter' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/SensitiveParameter.php', - 'SensitiveParameterValue' => __DIR__ . '/..' . '/symfony/polyfill-php82/Resources/stubs/SensitiveParameterValue.php', - 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/RuntimeException.php', - 'Symfony\\Component\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/symfony/filesystem/Filesystem.php', - 'Symfony\\Component\\Filesystem\\Path' => __DIR__ . '/..' . '/symfony/filesystem/Path.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php', - 'Symfony\\Polyfill\\Php80\\PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/PhpToken.php', - 'Symfony\\Polyfill\\Php82\\NoDynamicProperties' => __DIR__ . '/..' . '/symfony/polyfill-php82/NoDynamicProperties.php', - 'Symfony\\Polyfill\\Php82\\Php82' => __DIR__ . '/..' . '/symfony/polyfill-php82/Php82.php', - 'Symfony\\Polyfill\\Php82\\Random\\Engine\\Secure' => __DIR__ . '/..' . '/symfony/polyfill-php82/Random/Engine/Secure.php', - 'Symfony\\Polyfill\\Php82\\SensitiveParameterValue' => __DIR__ . '/..' . '/symfony/polyfill-php82/SensitiveParameterValue.php', - 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', - 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInite6ae8f42cbb37ec38c835aca25a07303::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInite6ae8f42cbb37ec38c835aca25a07303::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInite6ae8f42cbb37ec38c835aca25a07303::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/installed.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/installed.json deleted file mode 100644 index 665973627..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/installed.json +++ /dev/null @@ -1,1155 +0,0 @@ -{ - "packages": [ - { - "name": "aws/aws-crt-php", - "version": "v1.2.7", - "version_normalized": "1.2.7.0", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", - "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." - }, - "time": "2024-10-18T22:15:13+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "https://github.com/awslabs/aws-crt-php", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" - }, - "install-path": "../aws/aws-crt-php" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.391.1", - "version_normalized": "3.391.1.0", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "90920ce5518aa864e04da0224bb0ba0ee9e31d7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/90920ce5518aa864e04da0224bb0ba0ee9e31d7f", - "reference": "90920ce5518aa864e04da0224bb0ba0ee9e31d7f", - "shasum": "" - }, - "require": { - "aws/aws-crt-php": "^1.2.3", - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^7.8.2 || ^8.0", - "guzzlehttp/promises": "^2.0.3 || ^3.0", - "guzzlehttp/psr7": "^2.6.3 || ^3.0", - "mtdowling/jmespath.php": "^2.9.1", - "php": ">=8.1", - "psr/http-message": "^1.0 || ^2.0", - "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "composer/composer": "^2.7.8", - "dms/phpunit-arraysubset-asserts": "^v0.5.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-sockets": "*", - "phpunit/phpunit": "^10.0", - "psr/cache": "^2.0 || ^3.0", - "psr/simple-cache": "^2.0 || ^3.0", - "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", - "yoast/phpunit-polyfills": "^2.0" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-pcntl": "To use client-side monitoring", - "ext-sockets": "To use client-side monitoring" - }, - "time": "2026-08-07T20:18:18+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Aws\\": "src/" - }, - "exclude-from-classmap": [ - "src/data/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "https://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "https://aws.amazon.com/sdk-for-php", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://github.com/aws/aws-sdk-php/discussions", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.391.1" - }, - "install-path": "../aws/aws-sdk-php" - }, - { - "name": "guzzlehttp/guzzle", - "version": "8.0.2", - "version_normalized": "8.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "d1cbca76970939a9c2ced55b1e25ea26f34fc773" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d1cbca76970939a9c2ced55b1e25ea26f34fc773", - "reference": "d1cbca76970939a9c2ced55b1e25ea26f34fc773", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^3.0.1", - "guzzlehttp/psr7": "^3.0", - "php": "^7.4 || ^8.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php82": "^1.27" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "4.0.1", - "guzzlehttp/test-server": "^1.0", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^9.6.34", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "time": "2026-08-05T19:50:26+00:00", - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/8.0.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "install-path": "../guzzlehttp/guzzle" - }, - { - "name": "guzzlehttp/promises", - "version": "3.0.1", - "version_normalized": "3.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "64f38b87fa7d371853804161bfc701c9bc2cc00a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/64f38b87fa7d371853804161bfc701c9bc2cc00a", - "reference": "64f38b87fa7d371853804161bfc701c9bc2cc00a", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^9.6.34" - }, - "time": "2026-08-05T19:35:04+00:00", - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "install-path": "../guzzlehttp/promises" - }, - { - "name": "guzzlehttp/psr7", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "b094ded77ee97a6027ad6cf0e8c7b9f88381814c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b094ded77ee97a6027ad6cf0e8c7b9f88381814c", - "reference": "b094ded77ee97a6027ad6cf0e8c7b9f88381814c", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/http-factory": "^1.1", - "psr/http-message": "^2.0", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php82": "^1.27" - }, - "provide": { - "psr/http-factory-implementation": "1.1", - "psr/http-message-implementation": "2.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "1.1.0", - "jshttp/mime-db": "1.54.0.1", - "php-http/psr7-integration-tests": "^1.5.1", - "phpunit/phpunit": "^9.6.34" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "time": "2026-07-20T13:48:31+00:00", - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "install-path": "../guzzlehttp/psr7" - }, - { - "name": "mtdowling/jmespath.php", - "version": "2.9.2", - "version_normalized": "2.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", - "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^3.0.3", - "phpunit/phpunit": "^8.5.52" - }, - "time": "2026-07-06T18:56:19+00:00", - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.9-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/JmesPath.php" - ], - "psr-4": { - "JmesPath\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.9.2" - }, - "install-path": "../mtdowling/jmespath.php" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "time": "2023-09-23T14:17:50+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "install-path": "../psr/http-client" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "time": "2024-04-15T12:06:14+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "install-path": "../psr/http-factory" - }, - { - "name": "psr/http-message", - "version": "2.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "time": "2023-04-04T09:54:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "install-path": "../psr/http-message" - }, - { - "name": "symfony/filesystem", - "version": "v7.4.15", - "version_normalized": "7.4.15.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ff16a16bf87fdf264638b8f6995b3515975e3c79", - "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" - }, - "time": "2026-07-22T07:36:05+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.15" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/filesystem" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.37.0", - "version_normalized": "1.37.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2026-04-10T16:19:22+00:00", - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-ctype" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.38.2", - "version_normalized": "1.38.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2026-05-27T06:59:30+00:00", - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-mbstring" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.37.0", - "version_normalized": "1.37.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "time": "2026-04-10T16:19:22+00:00", - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-php80" - }, - { - "name": "symfony/polyfill-php82", - "version": "v1.38.1", - "version_normalized": "1.38.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php82.git", - "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", - "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "time": "2026-05-26T12:45:58+00:00", - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php82\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php82/tree/v1.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-php82" - } - ], - "dev": false, - "dev-package-names": [] -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/installed.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/installed.php deleted file mode 100644 index ee38cf187..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/installed.php +++ /dev/null @@ -1,167 +0,0 @@ - array( - 'name' => 'mitchmac/serverlesswp-stream-wrapper', - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => null, - 'type' => 'wordpress-plugin', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev' => false, - ), - 'versions' => array( - 'aws/aws-crt-php' => array( - 'pretty_version' => 'v1.2.7', - 'version' => '1.2.7.0', - 'reference' => 'd71d9906c7bb63a28295447ba12e74723bd3730e', - 'type' => 'library', - 'install_path' => __DIR__ . '/../aws/aws-crt-php', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'aws/aws-sdk-php' => array( - 'pretty_version' => '3.391.1', - 'version' => '3.391.1.0', - 'reference' => '90920ce5518aa864e04da0224bb0ba0ee9e31d7f', - 'type' => 'library', - 'install_path' => __DIR__ . '/../aws/aws-sdk-php', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'guzzlehttp/guzzle' => array( - 'pretty_version' => '8.0.2', - 'version' => '8.0.2.0', - 'reference' => 'd1cbca76970939a9c2ced55b1e25ea26f34fc773', - 'type' => 'library', - 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'guzzlehttp/promises' => array( - 'pretty_version' => '3.0.1', - 'version' => '3.0.1.0', - 'reference' => '64f38b87fa7d371853804161bfc701c9bc2cc00a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../guzzlehttp/promises', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'guzzlehttp/psr7' => array( - 'pretty_version' => '3.0.0', - 'version' => '3.0.0.0', - 'reference' => 'b094ded77ee97a6027ad6cf0e8c7b9f88381814c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../guzzlehttp/psr7', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'mitchmac/serverlesswp-stream-wrapper' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => null, - 'type' => 'wordpress-plugin', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'mtdowling/jmespath.php' => array( - 'pretty_version' => '2.9.2', - 'version' => '2.9.2.0', - 'reference' => '2157c5e50e813ec6a96c1eed3be7f64a20fb32a8', - 'type' => 'library', - 'install_path' => __DIR__ . '/../mtdowling/jmespath.php', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/http-client' => array( - 'pretty_version' => '1.0.3', - 'version' => '1.0.3.0', - 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/http-client', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/http-client-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0', - ), - ), - 'psr/http-factory' => array( - 'pretty_version' => '1.1.0', - 'version' => '1.1.0.0', - 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/http-factory', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/http-factory-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.1', - ), - ), - 'psr/http-message' => array( - 'pretty_version' => '2.0', - 'version' => '2.0.0.0', - 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/http-message', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/http-message-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '2.0', - ), - ), - 'symfony/filesystem' => array( - 'pretty_version' => 'v7.4.15', - 'version' => '7.4.15.0', - 'reference' => 'ff16a16bf87fdf264638b8f6995b3515975e3c79', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/filesystem', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.37.0', - 'version' => '1.37.0.0', - 'reference' => '141046a8f9477948ff284fa65be2095baafb94f2', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.38.2', - 'version' => '1.38.2.0', - 'reference' => 'd3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.37.0', - 'version' => '1.37.0.0', - 'reference' => 'dfb55726c3a76ea3b6459fcfda1ec2d80a682411', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php80', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-php82' => array( - 'pretty_version' => 'v1.38.1', - 'version' => '1.38.1.0', - 'reference' => '002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php82', - 'aliases' => array(), - 'dev_requirement' => false, - ), - ), -); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/platform_check.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/platform_check.php deleted file mode 100644 index 14bf88da3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/composer/platform_check.php +++ /dev/null @@ -1,25 +0,0 @@ -= 80200)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 8.2.0". You are running ' . PHP_VERSION . '.'; -} - -if ($issues) { - if (!headers_sent()) { - header('HTTP/1.1 500 Internal Server Error'); - } - if (!ini_get('display_errors')) { - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); - } elseif (!headers_sent()) { - echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; - } - } - throw new \RuntimeException( - 'Composer detected issues in your platform: ' . implode(' ', $issues) - ); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/AGENTS.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/AGENTS.md deleted file mode 100644 index 564546fe3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/AGENTS.md +++ /dev/null @@ -1,76 +0,0 @@ -# Agent Guidelines - -## Code and tooling - -- All code must remain compatible with PHP 7.4. Run PHPStan and PHP-CS-Fixer - only under a PHP 7.4.x runtime; never run either tool under any other PHP - major.minor version. -- Use fully qualified `#[\SensitiveParameter]` on concrete executable - parameters when their established role normally carries a secret, - credential-bearing aggregate, or confidential Guzzle-owned container, and - the active frame can throw or invoke throwing code. -- Repeat the attribute on every qualifying owned caller, callee, concrete trait - method, and closure parameter. Do not add it to interfaces, abstract-only - declarations, pure/no-realistic-throw helpers, assignment-only sites, - arbitrary generic payloads, or completed non-recoverable derivatives. -- For PHP 7.4 compatibility, put `#[\SensitiveParameter]` on its own line and - the parameter on the following line, expand the complete parameter list, and - never add a comma after the final parameter. Native trace redaction starts on - PHP 8.2 and does not redact logs, messages, properties, wire traffic, captured - variables, return values, or the separate backtrace `$this`/`object`. -- Always pass an explicit character list to `trim()`, `ltrim()`, and `rtrim()`; - never rely on the default characters. -- Handle `preg_*` engine failures: when the result is used as data, test for - `false` or `null` and throw a `\RuntimeException` including - `preg_last_error_msg()`; boolean validation guards must compare strictly, such - as `=== 1`, so an engine failure can only ever fail closed. Diagnostic - escaping is the narrow exception: use a deterministic bytewise fallback rather - than throwing, so it cannot obscure the original exception. -- Anchor validation patterns to the true end of input with the `D` modifier or - `\z`; a bare `$` accepts a trailing newline. -- Never embed raw control bytes in exception messages and other diagnostics; - escape or redact the offending value first. -- Helper classes that expose only public static methods are `final` and have a - private constructor. -- Resist native PHP serialization when a class holds live state (streams, - resources, handles, callbacks, credentials) or when magic methods such as - `__destruct()` have side effects that untrusted unserialized data could - redirect, as with the file and session write fixes in Guzzle's persisting - cookie jars. Plain data holders, such as Guzzle's in-memory cookie jar, remain - serializable. -- To resist, `__serialize()` and `__unserialize()` both throw - `\LogicException(static::class.' should never be serialized')` and its - unserialized counterpart, usually via the `@internal` `NonSerializableTrait`. - Where a `__destruct()` has such a side effect, it is enabled only by the - constructor and disabled in `__wakeup()` and `__unserialize()` before - throwing, so the protection holds even if the exception is swallowed. -- In general, numeric inputs should not accept non-finite floats. In situations - where they are accepted and we need to cast to a string, we should branch on - `\is_finite($value)`, using `(string) $value` for the finite case and - `\is_nan($value) ? 'NAN' : ($value > 0 ? 'INF' : '-INF')` otherwise. -- Never call `strtolower()`, `strtoupper()`, `strcasecmp()`, `stripos()`, or - other locale-sensitive case functions; use the locale-independent - `GuzzleHttp\Psr7\Utils::asciiToLower()`, `asciiToUpper()`, - `caselessEquals()`, and `caselessContains()` helpers instead. -- Changes in behavior need a `CHANGELOG.md` entry in the unreleased section of - the target branch and an `UPGRADING.md` note when the behavior differs between - major versions. - -## Contributor references - -- Read the [exception guidelines](docs/contributing/exception-guidelines.md) - before deciding which exception a change should throw. -- Read the - [cURL connection reuse reference](docs/contributing/curl-connection-reuse.md) - before working on the cURL handlers or connection reuse and sharing behavior. - -## Documentation - -- Wrap markdown prose and PHPDoc text to 80 columns using greedy wrapping. Never - split a markdown link or an inline code span across a line break; a line that - cannot be broken may exceed the limit. Avoid em dashes. -- Keep PHPDoc and the corresponding `docs/` pages in sync: shared prose is - deliberately word-for-word identical, including boilerplate copied verbatim - between related functions, so apply the same edit to every copy. Only - formatting and linking may differ, such as a docs link becoming a PHPDoc - `@see` tag; the wording must never drift. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/CHANGELOG.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/CHANGELOG.md deleted file mode 100644 index 89554bb5c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ /dev/null @@ -1,2236 +0,0 @@ -# Change Log - -Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version. - - -## 8.0.2 - 2026-08-05 - -### Changed - -- Adjusted `guzzlehttp/promises` version constraint to `^3.0.1` - -### Fixed - -- Fail a cURL multi handler wait with an attributable error when the transfer is no longer tracked -- Fix `StreamHandler` resolving numeric IPv4 hosts differently from cURL handlers on macOS and Windows -- Fix `StreamHandler` TLS peer names and proxy authorities for numeric IPv4 hosts on all platforms -- Settle a cURL multi handler transfer displaced by a request reusing its native handle ID - - -## 8.0.1 - 2026-07-26 - -### Security - -- Reject request URI hosts and `Host` header values that are not printable ASCII (GHSA-v5mv-p594-2x33) -- Reject URI hosts with a percent escape or that are not valid RFC 3986 hosts (GHSA-v5mv-p594-2x33) -- Reject numeric-looking URI hosts with trailing dots, read as IPv4 addresses (GHSA-v5mv-p594-2x33) -- Treat percent-escaped cookie domains as exact-match-only (GHSA-f7vp-7xgx-4w4r) -- Regenerate a derived `Host` header after client URI rewrites (GHSA-v5mv-p594-2x33) - - -## 8.0.0 - 2026-07-20 - -### Added - -- Add `SensitiveParameter` metadata to credential-bearing parameters so PHP 8.2+ redacts their values in exception traces -- Add HTTP/3 request support to the built-in cURL handlers when PHP 8.4+ and libcurl provide HTTP/3 support -- Add `Multiplexing::NONE` support as a client, cURL multi handler, and conditional request option -- Add generic and structured PHPDoc annotations to client request/config option, async promise, handler, middleware, pool, and mock handler APIs -- Add `ConnectTimeoutException` for connect-phase timeouts, extending `ConnectException` -- Add `NetworkException` for no-response network failures -- Add `NetworkTimeoutException` for no-response transport timeouts -- Add `ResponseTransferException`, with `ResponseTimeoutException` for response-transfer timeouts -- Add PSR-17 `request_factory`, `response_factory`, `stream_factory`, and `uri_factory` request options -- Add explicit `close()` lifecycle methods to the built-in cURL handlers and concrete cURL factory -- Add `HandlerClosedException` for pending transfers rejected by `CurlMultiHandler::close()` -- Add persistent transport sharing modes (`TransportSharing::PERSISTENT_PREFER` and `TransportSharing::PERSISTENT_REQUIRE`) -- Add `ProxyOptions` for proxy option resolution -- Add `ResponseException` for request failures with responses -- Add auth middleware for built-in Basic and Digest authentication - -### Changed - -- Canonicalize IPv6 hosts in Digest challenge cache keys -- Canonicalize IPv6 hosts in cookie domains, host-only identities, and domain matching -- Restrict cookie domain suffix matching to valid non-literal, nonnumeric host names -- Reject Secure cookies and insecure overlays received over insecure connections -- Enforce the `__Secure-` and `__Host-` prefix requirements on response cookies -- Hardened `FileCookieJar` and `SessionCookieJar` persistence against unsafe unserialization -- Reject native PHP serialization of runtime objects -- Restrict persisted `FileCookieJar` cookie files to owner-only permissions -- Require persisted cookie data to use JSON lists and construct all records before changing the jar -- Normalize persistent cookie JSON failures as `RuntimeException` -- Moved the internal `Utils` time, timeout, IDN, and environment helpers to dedicated internal classes -- Adjusted `guzzlehttp/promises` version constraint to `^3.0` -- Adjusted `guzzlehttp/psr7` version constraint to `^3.0` -- Quote multipart `Content-Type` boundary parameters when required -- Added parameter and return types to `SetCookie` methods -- Added native property types to supported public cURL handler state properties -- Added a `string` return type to `SetCookie::__toString()` -- Validate proxy and no-proxy option types strictly across handlers -- Match leading-dot no-proxy entries against the bare domain and split string no-proxy lists on whitespace -- Validate `force_ip_resolve`, protocols, and `delay` ranges at the client boundary -- Treat a matching proxy `no` entry as final even without a scheme-specific proxy entry -- Validate proxy URLs in the built-in handlers and reject malformed or unsupported ones up front -- Default a port-less proxy to 1080 in the stream handler, matching libcurl -- Downgrade HTTP/3 requests to HTTP/2 or HTTP/1.1 when the proxy is resolved from environment variables -- Throw `RequestException`, not `InvalidArgumentException`, for an unavailable proxy or TLS feature -- Resolve proxy environment variables in the stream handler, consistent with the cURL handlers -- Honor `no_proxy`/`NO_PROXY` from the environment in the stream handler, including `*` to disable proxying -- Reject an environment-resolved `https://` or SOCKS proxy in the stream handler, matching its `proxy` option behavior -- Require cURL proxy header separation for first-class `Proxy-Authorization` on every route -- Reject every first-class `Proxy-Authorization` field, including empty, on stream proxies -- Reject raw `CURLOPT_PROXYHEADER` without proxy header separation support -- Pass the request as the second argument to `on_headers` callbacks -- Pass the `Pool` iterable key as a trailing argument to per-request observer callbacks -- Declare strict types across remaining source files -- Reject request option values that do not match their documented types -- Reject invalid `idn_conversion`, `retries`, and built-in handler `on_stats` option values before use -- Reject non-finite floats in the `query` and `form_params` options -- Reject non-string scalar values in the `body` option -- Apply automatic `Expect: 100-Continue` injection to HTTP/1.1 requests only -- Reject invalid `SetCookie` constructor field types instead of coercing them -- Validate and normalize request framing across the built-in cURL and stream handlers -- Reject raw cURL request options outside the built-in cURL handlers' allow-list -- Reject non-string raw cURL header-list entries before applying them -- Reject proxy tunnels that require fresh connections when persistent transport sharing requires reuse -- Reject PHP stream context options outside the built-in stream handler allow-list -- Reject selected request options ignored by incompatible built-in handlers -- Treat only `null` as an omitted path or name when clearing cookies -- Validate malformed `auth` request option arrays -- Reject colons in built-in Basic usernames and ASCII control characters in Basic credentials -- Move built-in Basic and Digest authentication handling to the default auth middleware -- Reject unchallenged Digest probes for body-bearing requests instead of replaying the request unauthenticated -- Reject malformed Digest challenge parameter lists that libcurl's Digest parser may have tolerated -- Reuse Digest challenges to authorize subsequent body-less requests preemptively -- Advance the Digest nonce count when a stale challenge repeats the same nonce during the initial handshake -- Remove first-class NTLM authentication from the `auth` request option -- Stop forwarding the generic `auth` request option when following cross-origin redirects -- Limit the `Referer` header to the origin on cross-origin redirects -- Follow only redirect status codes 301, 302, 303, 307, and 308 -- Reject invalid `HandlerStack::remove()` arguments -- Require `Pool` request collections to be iterable -- Raised the built-in cURL handler floor to libcurl 7.34.0 with SSL support -- Store response cookies without a `Domain` attribute as host-only cookies -- Prefer cookie `Max-Age` over `Expires` when both attributes are present -- Match cookie names case-sensitively in `CookieJar::getCookieByName()` -- Ignore float-like or exponent `Max-Age` cookie values instead of truncating them -- Tighten invalid response handling and avoid exposing response-derived cURL stats -- Reject malformed response protocol versions and reason phrases -- Escape controls and malformed UTF-8 when copying raw values into exception messages -- Reject malformed or conflicting response `Content-Length` and combinations with `Transfer-Encoding` -- Expose raw stream-handler `Transfer-Encoding` metadata and coalesced framing in `progress` on newer PHP -- Wrap malformed redirect `Location` values in `BadResponseException` -- Default HTTPS requests sent by the built-in cURL and stream handlers to TLS 1.2 or newer -- Apply the stream handler `crypto_method` option through the SSL context so it consistently controls the minimum TLS version -- Validate built-in handler timeout options before applying them -- Require a request when constructing `TransferException` and its subclasses -- Classify empty, malformed, or handler-unsupported request protocol versions as request exceptions -- Classify additional cURL transport failures without a response as `NetworkException` -- Classify stream connect failures as `ConnectException`, with connect timeouts as `ConnectTimeoutException` -- Classify stream transport failures without a response as `NetworkException`, with timeouts as `NetworkTimeoutException` -- Classify generic response-aware request failures as `ResponseException` -- Classify response-aware transfer failures as `ResponseTransferException` -- The stream handler returns an empty body and releases the connection at the end of the headers for HEAD and CONNECT-2xx exchanges and 1xx, 204, and 304 responses -- The stream handler no longer writes to the `sink` option or reads trailing bytes for responses that cannot carry a body -- Reject short buffered stream-handler bodies against `Content-Length`, including decoded gzip/deflate -- Normalize duplicate `Content-Length` casings and preserve encoded values on decoded responses -- Reject unrepresentable byte counts and response sizes requiring integer bounds as `ResponseException` -- Ignore cURL informational responses other than `101 Switching Protocols` before the final response -- Treat response sink rewind failures as `ResponseException` and skip non-seekable sink rewinds -- Classify redirect request-body rewind failures as `ResponseException` -- Ignore stream source close failures after a complete response body transfer -- Throw `GuzzleHttp\Exception\InvalidArgumentException` for invalid built-in handler options -- Classify built-in cURL handle, `sink`, and HTTP/3 setup failures as `RequestException` -- Throw `ConnectTimeoutException` for connect timeouts -- Throw `NetworkTimeoutException` for cURL no-response timeout errors -- Throw `ResponseTimeoutException` for response-aware transfer timeouts -- Enforce the `timeout` option as a total transfer deadline in the stream handler when it buffers the response -- Reject stream handler responses whose header block arrives after the `timeout` deadline -- Stop consulting the `default_socket_timeout` ini setting in the stream handler -- Treat stream handler `read_timeout` as an idle timeout for every request stage, defaulting to 60 seconds -- Default the cURL connect timeout to 60 seconds, with `connect_timeout` set to `0` disabling it -- Stop the stream handler from injecting `User-Agent` and `From` header values from the `user_agent` and `from` ini settings -- Classify request-body stream size detection, read, stringification, and rewind failures as `RequestException` or `ResponseException` by phase -- Classify cURL response sink write failures, including timeouts, as `ResponseException` or `RequestException` by phase -- Treat request method names case-sensitively in built-in handler and redirect method-specific behavior -- Treat PHP resources passed as `sink` as caller-owned in the built-in cURL and stream handlers -- Use the configured PSR-17 URI factory when parsing redirect `Location` headers -- Allow built-in cURL handler `progress` callbacks to abort transfers with truthy return values -- Normalize built-in handler `progress` callback arguments to integer byte counts -- Reject built-in cURL `progress` throwables with `ResponseException` when a response exists, otherwise `RequestException` -- Release built-in cURL easy handles before invoking `on_stats` -- Prefer `CURLOPT_XFERINFOFUNCTION` for built-in cURL progress callbacks when available -- Made `MessageFormatter` final and required `Middleware::log()` formatters to implement `MessageFormatterInterface` -- Made `CurlFactory`, `CurlHandler`, `CurlMultiHandler`, `MockHandler`, and `StreamHandler` final -- Made static utility classes non-instantiable and declared `GuzzleHttp\Handler\Proxy` final -- Pass the request to `on_trailers` callbacks, reject non-callable `on_trailers` values, and wrap `on_trailers` callback exceptions in `ResponseException` -- Wait for in-progress HTTP/2-capable connections by default (`multiplex` defaults to `Multiplexing::WAIT`) -- Require libcurl 7.65.2 or newer for HTTP/2 requests so multiplex waiting is never silently unavailable -- Require libcurl 7.54.0 for HTTPS proxies and requests tunneled through HTTP proxies -- Suppress proxy CONNECT response headers for tunneled requests -- Point rejections of the raw `CURLOPT_PIPEWAIT` cURL option at the `multiplex` request option -- Reject raw `CURLMOPT_PIPELINING` in favour of the `multiplex` cURL multi handler option -- Reject required multiplexing when the final `CURLOPT_HTTPAUTH` mask permits NTLM -- Reject cURL multi options that the runtime libcurl cannot apply -- Reject unknown handler constructor options -- Reject invalid `select_timeout` cURL multi handler option values -- Reject raw cURL multi connection cap options in favour of the named options -- Parse `Set-Cookie` strings with RFC 6265 whitespace trimming -- Ignore valueless `Set-Cookie` attributes that require a value when parsing -- Trim only the trailing CRLF from the stream handler header block -- Fail streamed uploads immediately when the body cannot be resent for an auth challenge - -### Removed - -- Dropped support for PHP 7.2 and 7.3 -- Removed `Client::__call()`; use the typed HTTP verb methods or `request()`/`requestAsync()` -- Removed `ClientInterface::getConfig()`; the concrete `Client::getConfig()` remains available -- Removed support for the `GUZZLE_CURL_SELECT_TIMEOUT` environment variable; use `CurlMultiHandler`'s `select_timeout` option -- Removed support for the `handler` request option; configure the handler on the client -- Removed direct access to `CurlMultiHandler::$_mh`; pass `CURLMOPT_*` values through constructor `options` instead -- Removed `RedirectMiddleware::$defaultSettings`; use `RedirectMiddleware::DEFAULT_SETTINGS` -- Removed the deprecated `RetryMiddleware::exponentialDelay()` method -- Removed the deprecated `RequestException::wrapException()` method -- Removed the deprecated `Utils::describeType()` method -- Removed `Utils::jsonDecode()` and `Utils::jsonEncode()` in favor of native JSON functions -- Removed deprecated `GuzzleHttp` namespace functions in favor of native or class equivalents -- Removed `Utils::defaultCaBundle()`; rely on the system trust store or pass a bundle path via the `verify` option -- Removed `HandlerStack::__toString()` -- Removed `RequestException::getHandlerContext()` and `ConnectException::getHandlerContext()` -- Removed response access from `RequestException`; use `ResponseException` -- Removed `Utils::isHostInNoProxy()`; use `ProxyOptions` helpers for Guzzle 8 no-proxy matching -- Removed `Utils::isUriInNoProxy()`; use `ProxyOptions::isUriInNoProxy()` -- Removed `Handler\Proxy::wrapTlsFallback()`; the default handler stack selects the cURL or stream handler by TLS support automatically - - -## 7.15.1 - 2026-07-18 - -### Security - -- Preserve host-only cookie scope and require explicit persistence markers (GHSA-wm3w-8rrp-j577) -- Bound response cookie admission and generated `Cookie` headers (GHSA-f283-ghqc-fg79) -- Exclude URI fragments from `Referer` headers generated for redirects (GHSA-h95v-h523-3mw8) - - -## 7.15.0 - 2026-07-17 - -### Added - -- Added `Multiplexing::NONE` support as a client, cURL multi handler, and conditional request option - -### Changed - -- Adjusted `guzzlehttp/psr7` version constraint to `^2.13` -- Use locale-independent ASCII folding for all case normalization and comparison -- Bound cURL upload reads to the declared `Content-Length` -- Sanitize the cURL error text exposed through exception handler context -- Fail closed when a named cURL multi connection cap cannot be applied -- Reject the request-level `CURLOPT_SHARE` cURL option when named connection caps are configured -- Strengthen old-libcurl SOCKS isolation for raw `CURLOPT_PRE_PROXY` and opaque share handles -- Isolate HTTP proxy tunnels from opaque shared connection caches -- Trigger runtime deprecations for previously deprecated functionality in 7.1.0 - -### Deprecated - -- Deprecated `Utils::jsonDecode()` and `Utils::jsonEncode()` in favor of native JSON functions -- Deprecated passing `CURLMOPT_PIPELINING` in the cURL multi handler `options` array -- Deprecated passing `CURLOPT_PROXYHEADER` without cURL proxy header separation support - -### Fixed - -- Defer cURL requests created from multi callbacks until native execution unwinds -- Fail synchronous waits from native cURL callbacks promptly instead of self-deadlocking -- Guard cURL multi handle removal against progress callbacks re-entering the handler -- Scope promise waits on the cURL multi handler to the awaited transfer -- Strip `Content-Length` and `Transfer-Encoding` when redirects discard the request body -- Stop re-applying the `delay` request option to followed redirects - - -## 7.14.2 - 2026-07-14 - -### Security - -- Prevent first-class and proxy URL credentials from reaching origins (GHSA-94pj-82f3-465w) - - -## 7.14.1 - 2026-07-13 - -### Changed - -- Adjusted `guzzlehttp/psr7` version constraint to `^2.12.5` - -### Fixed - -- Fail closed when a proxy tunnel isolation cURL option cannot be applied -- Normalize Stringable proxy credential values before computing connection-reuse section signatures -- Restore conservative credential redaction for unparseable proxies with multiple `@` separators -- Redact request URI credentials from the stream handler connection error message -- Reject enabled response streaming (`stream => true`) on cap-configured stream handlers -- Distinguish CurlMultiHandler and StreamHandler outcomes in connection-cap custom-handler guidance -- Reject raw cURL options that conflict with explicit multiplexing guarantees -- Stop explicit multiplexing conflict checks faulting on non-array cURL multi `options` values -- Reject required multiplexing when the final `CURLOPT_HTTPAUTH` mask permits NTLM -- Require an integer `CURLMOPT_PIPELINING` when combined with explicit multiplexing -- Check the required multiplexing cleartext proxy rule against the final cURL configuration -- Bound cURL multi handler blocking selects by the earliest pending request delay -- Stop synchronous cURL multi handler waits blocking on other transfers once the target has settled -- Stop cURL multi completion processing double-settling promises canceled from completion callbacks -- Run ready promise queue tasks before sleeping for delayed cURL multi requests -- Avoid integer overflow in cURL multi delay timing on 32-bit platforms -- Roll back failed cURL multi handle attachment instead of leaving requests pending -- Release the cURL easy handle when the `on_stats` callback throws -- Normalize response trailer field names to lowercase with values in wire order -- Retain response trailers only when an `on_trailers` callback is configured -- Validate the `on_trailers` callback before starting a cURL transfer -- Reject the `on_trailers` request option on the stream handler, which cannot observe trailers -- Match cookies, proxy schemes, auth types, and header names with locale-independent ASCII folding -- Reject proxy option values that Guzzle cannot classify identically to ext-curl - - -## 7.14.0 - 2026-07-08 - -### Added - -- Added the `on_trailers` request option to expose parsed HTTP response trailers -- Added the `multiplex` request option with `Multiplexing::*` modes to control or require HTTP/2 multiplexing -- Added rejection of explicit `multiplex` requests when `CURLMOPT_PIPELINING` disables multiplexing -- Added the `max_host_connections` and `max_total_connections` client and cURL multi handler options - -### Changed - -- Redirects that discard the request body no longer require it to be rewindable -- Synchronous cURL multi handler requests no longer wait for other queued transfers -- Section SOCKS proxy connections by credentials on libcurl before 7.69.0 -- Reject request-level `CURLOPT_SHARE` when combined with authenticated SOCKS proxy configuration -- Redact proxy userinfo containing raw control bytes in cURL errors -- Check linked curl/libcurl NTLM support before applying NTLM auth -- Clarify that NTLM is deprecated by both Guzzle and curl/libcurl -- Remove deprecation for the raw cURL `CURLOPT_CERTINFO` option -- Warn when a cURL multi option cannot be applied - -### Deprecated - -- Deprecate the raw `CURLOPT_PIPEWAIT` cURL option in favour of the `multiplex` request option -- Deprecate unknown handler constructor options -- Deprecate invalid `select_timeout` cURL multi handler option values -- Deprecate raw cURL multi connection cap options in favour of the named options - - -## 7.13.3 - 2026-07-08 - -### Changed - -- Adjusted `guzzlehttp/promises` version constraint to `^2.5.1` -- Adjusted `guzzlehttp/psr7` version constraint to `^2.12.4` -- Pass explicit trim characters ahead of the PHP 8.6 trim default change - -### Fixed - -- Stop matching cookie domains against hosts with a trailing newline -- Reject HTTP status codes and certificate type extensions with a trailing newline -- Treat PCRE engine failures as invalid cookie names during cookie validation -- Report PCRE engine failures when formatting log messages -- Report PCRE engine failures when splitting `no_proxy` values - - -## 7.13.2 - 2026-07-05 - -### Fixed - -- Stop the cURL multi handler busy-waiting on request delays shorter than one second -- Stop cURL HEAD requests with request bodies hanging on responses that declare a content length -- The cURL handler no longer transmits request bodies on HEAD requests -- Preserve response headers when a response includes HTTP trailers -- Harden cURL response header block detection when HTTP trailers are received -- Corrected the PSR-7 class names in the Pool iterator exception -- Redirect body rewind failures no longer leak a bare `RuntimeException` - - -## 7.13.1 - 2026-06-29 - -### Fixed - -- Allow middleware to rewrite partial URIs before transports validate them - - -## 7.13.0 - 2026-06-29 - -### Added - -- Added the `crypto_method_max` request option to cap the maximum TLS protocol version -- Added HTTP QUERY redirect support, preserving method and body on 301 and 302 - -### Changed - -- Section proxy tunnel connection reuse by credential so distinct credentials never share a tunnel -- Isolate concurrent foreign cURL proxy tunnels added while another owner's tunnel is active -- Route credentialed HTTP(S) proxy Proxy-Authorization headers through cURL proxy header handling -- Reject request-level `CURLOPT_SHARE` when combined with authenticated HTTP/HTTPS proxy tunnel configuration -- Remove deprecation for raw cURL `CURLOPT_PREREQFUNCTION` callbacks when defined by PHP cURL -- Route TLS 1.2 `crypto_method` requests to the stream handler when cURL cannot select TLS 1.2 -- Reject final request URIs missing a scheme or host before transfer - -### Deprecated - -- Deprecate invalid protocols, force_ip_resolve, delay, cookies, and allow_redirects values - - -## 7.12.3 - 2026-06-23 - -### Changed - -- Adjusted `guzzlehttp/psr7` version constraint to `^2.12.3` - -### Security - -- Treat IP and numeric cookie domains as exact-match-only (GHSA-g446-98w2-8p5w) - - -## 7.12.2 - 2026-06-23 - -### Fixed - -- Clamp out-of-range `Max-Age` so a very large value no longer overflows to an already-expired timestamp -- Use strict comparison in `CookieJar` conflict resolution so distinct numeric-string names don't overwrite -- Store a cookie whose `Domain` has a trailing dot on the origin host instead of silently discarding it -- Fix `StreamHandler` hard-failing on bracketed IPv6 literal hosts when `force_ip_resolve` is set -- Use strict cookie `Path` comparison so `CookieJar::clear()` with a numeric path keeps a distinct-path cookie -- Fixed cookie handling for falsey `Domain`, `Max-Age`, path, and name values -- Fixed `decode_content` handling for falsey string values -- Fixed deprecated request option values reaching built-in handlers before normalization - - -## 7.12.1 - 2026-06-18 - -### Changed - -- Adjusted `guzzlehttp/psr7` version constraint to `^2.12.1` - -### Fixed - -- Reject proxy URLs with a malformed scheme in the cURL handlers instead of letting libcurl mishandle them - -### Security - -- Reject HTTPS proxies when the installed libcurl lacks HTTPS-proxy support (GHSA-wpwq-4j6v-78m3) -- Reject dot-only cookie `Domain` attributes as match-all (GHSA-cwxw-98qj-8qjx) - - -## 7.12.0 - 2026-06-16 - -### Added - -- Added `RequestOptions` constants for `curl`, `retries`, and `stream_context` - -### Changed - -- Adjusted `guzzlehttp/psr7` version constraint to `^2.12` -- Constrain cURL transport sharing to safe libcurl DNS and SSL session support -- Resolve proxy environment variables in the cURL handlers; libcurl no longer reads the environment itself -- Ignore proxy environment variables when the `proxy` request option makes a decision -- Disable proxy environment variables on Windows SAPIs other than CLI (httpoxy hardening) -- Redact proxy credentials from cURL handler error messages, following `Psr7\Utils::redactUserInfo()` -- Normalize no-proxy domain and IP literal matching across the cURL and stream handlers - -### Deprecated - -- Deprecated the request-level `handler` option, which will be ignored in 8.0 -- Deprecated raw cURL request options outside the built-in cURL handlers' allow-list -- Deprecated the `CURLOPT_PROXYTYPE` cURL request option; set the proxy type via a scheme-prefixed proxy URL -- Deprecated PHP stream context options outside the built-in stream handler allow-list -- Deprecated passing `ntlm` as a built-in `auth` type -- Deprecated `Utils::describeType()` -- Deprecated non-finite floats in the `query` and `form_params` options; 8.0 rejects them -- Deprecated non-string scalar values in the `body` option; 8.0 rejects them - -### Fixed - -- Fix cURL TLS and HTTP/2 capability detection using libcurl feature checks -- Fix proxy `no` list matches being re-proxied through environment-configured proxies by libcurl -- Fix `no` list and `NO_PROXY` matching to support IP CIDR ranges, matching libcurl -- Fix the stream handler not applying scheme-less proxies and their credentials - - -## 7.11.2 - 2026-06-12 - -### Fixed - -- Fixed non-finite float values emitting coercion warnings on PHP 8.5 - - -## 7.11.1 - 2026-06-07 - -### Fixed - -- Ignore request-level `transport_sharing`, matching other unknown request options - - -## 7.11.0 - 2026-06-02 - -### Added - -- Added support for providing the `proxy` request option's `no` value as a comma-delimited string -- Added the `protocols` request option to restrict allowed URI schemes for request transfers -- Added `cert_type` and `ssl_key_type` request options for TLS certificate and private-key file types -- Added PHP stream handler support for the `ssl_key` request option -- Added transport sharing via the `transport_sharing` client and cURL handler options - -### Changed - -- Adjusted `guzzlehttp/promises` version constraint to `^2.5` -- Adjusted `guzzlehttp/psr7` version constraint to `^2.11` -- Allowed domainless `SetCookie` instances to be stored without wildcard request matching -- Changed no-proxy matching to respect request ports for host-and-port rules -- Prevented `CurlMultiHandler` destructors from throwing during cleanup -- Improved invalid response handling across handlers - -### Deprecated - -- Deprecated non-iterable `Pool` request collections, which will be rejected in 8.0 -- Deprecated non-uppercase easy request methods; 8.0 preserves method casing -- Deprecated non-string `headers` request option values, which will be rejected in 8.0 -- Deprecated empty `headers` request option value arrays, which will be rejected in 8.0 -- Deprecated empty and malformed request protocol versions, which will be rejected in 8.0 -- Deprecated conflicting raw cURL request options, including `CURLOPT_SHARE`, which will be rejected in 8.0 -- Deprecated scalar-coerced `idn_conversion` request option values, which will be rejected in 8.0 -- Deprecated invalid documented request option value types, which will be rejected in 8.0 -- Deprecated selected request options ignored by incompatible built-in handlers, which will be rejected in 8.0 -- Deprecated `RequestException::wrapException()`, which will be removed in 8.0 -- Deprecated `RetryMiddleware::exponentialDelay()`, which will be removed in 8.0 - - -## 7.10.6 - 2026-06-01 - -### Fixed - -- `CurlMultiHandler` now rejects the promise when `CurlFactory::finish()` throws, preserving sibling transfers -- `SetCookie` now normalizes unparseable `Expires` values to `null` instead of `false` -- Fix stream handler decoded `gzip`/`deflate` truncation by dropping invalid `Content-Length` - - -## 7.10.5 - 2026-05-27 - -### Fixed - -- Defer cURL multi cancellation cleanup until after progress callbacks return -- Classify additional stream handler connection failures as `ConnectException` - - -## 7.10.4 - 2026-05-22 - -### Fixed - -- Fix IPv6 literal matching in no-proxy rules -- Handle cURL multi completion messages without handles after cancelled transfers -- Fix magic client request methods such as `options()` to uppercase inferred HTTP methods - - -## 7.10.3 - 2026-05-20 - -### Fixed - -- Fail clearly when an HTTP response header line is invalid -- Remove middleware by name when the name is also a callable string -- Treat empty request protocol versions as HTTP/1.1 - - -## 7.10.2 - 2026-05-20 - -### Fixed - -- Normalize HTTP version request options before applying them to PSR-7 requests -- Use string values for headers generated by request preparation and response decoding - - -## 7.10.1 - 2026-05-19 - -### Fixed - -- Fail clearly when cURL options cannot be applied -- Fail clearly when the certificate option is malformed -- Fail clearly when JSON decode depth is invalid -- Fail clearly when session cookie data is malformed -- Fail clearly when the stream progress option is not callable -- Prevent response creation failures from exposing stale cURL responses - - -## 7.10.0 - 2025-08-23 - -### Added - -- Support for PHP 8.5 - -### Changed - -- Adjusted `guzzlehttp/promises` version constraint to `^2.3` -- Adjusted `guzzlehttp/psr7` version constraint to `^2.8` - - -## 7.9.3 - 2025-03-27 - -### Changed - -- Remove explicit content-length header for GET requests -- Improve compatibility with bad servers for boolean cookie values - - -## 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 - -### Changed - -- Updated links in docs to their canonical versions -- Replaced `call_user_func*` with native calls - - -## 7.8.0 - 2023-08-27 - -### Added - -- Support for PHP 8.3 -- Added automatic closing of handles on `CurlFactory` object destruction - - -## 7.7.1 - 2023-08-27 - -### Changed - -- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler` - - -## 7.7.0 - 2023-05-21 - -### Added - -- Support `guzzlehttp/promises` v2 - - -## 7.6.1 - 2023-05-15 - -### Fixed - -- Fix `SetCookie::fromString` MaxAge deprecation warning and skip invalid MaxAge values - - -## 7.6.0 - 2023-05-14 - -### Added - -- Support for setting the minimum TLS version in a unified way -- Apply on request the version set in options parameters - - -## 7.5.2 - 2023-05-14 - -### Fixed - -- Fixed set cookie constructor validation -- Fixed handling of files with `'0'` body - -### Changed - -- Corrected docs and default connect timeout value to 300 seconds - - -## 7.5.1 - 2023-04-17 - -### Fixed - -- Fixed `NO_PROXY` settings so that setting the `proxy` option to `no` overrides the env variable - -### Changed - -- Adjusted `guzzlehttp/psr7` version constraint to `^1.9.1 || ^2.4.5` - - -## 7.5.0 - 2022-08-28 - -### Added - -- Support PHP 8.2 -- Add request to delay closure params - - -## 7.4.5 - 2022-06-20 - -### Fixed - -* Fix change in port should be considered a change in origin -* Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin - - -## 7.4.4 - 2022-06-09 - -### Fixed - -* Fix failure to strip Authorization header on HTTP downgrade -* Fix failure to strip the Cookie header on change in host or HTTP downgrade - - -## 7.4.3 - 2022-05-25 - -### Fixed - -* Fix cross-domain cookie leakage - - -## 7.4.2 - 2022-03-20 - -### Fixed - -- Remove curl auth on cross-domain redirects to align with the Authorization HTTP header -- Reject non-HTTP schemes in StreamHandler -- Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve` - - -## 7.4.1 - 2021-12-06 - -### Changed - -- Replaced implicit URI to string coercion [#2946](https://github.com/guzzle/guzzle/pull/2946) -- Allow `symfony/deprecation-contracts` version 3 [#2961](https://github.com/guzzle/guzzle/pull/2961) - -### Fixed - -- Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950) - - -## 7.4.0 - 2021-10-18 - -### Added - -- Support PHP 8.1 [#2929](https://github.com/guzzle/guzzle/pull/2929), [#2939](https://github.com/guzzle/guzzle/pull/2939) -- Support `psr/log` version 2 and 3 [#2943](https://github.com/guzzle/guzzle/pull/2943) - -### Fixed - -- Make sure we always call `restore_error_handler()` [#2915](https://github.com/guzzle/guzzle/pull/2915) -- Fix progress parameter type compatibility between the cURL and stream handlers [#2936](https://github.com/guzzle/guzzle/pull/2936) -- Throw `InvalidArgumentException` when an incorrect `headers` array is provided [#2916](https://github.com/guzzle/guzzle/pull/2916), [#2942](https://github.com/guzzle/guzzle/pull/2942) - -### Changed - -- Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945) - - -## 7.3.0 - 2021-03-23 - -### Added - -- Support for DER and P12 certificates [#2413](https://github.com/guzzle/guzzle/pull/2413) -- Support the cURL (http://) scheme for StreamHandler proxies [#2850](https://github.com/guzzle/guzzle/pull/2850) -- Support for `guzzlehttp/psr7:^2.0` [#2878](https://github.com/guzzle/guzzle/pull/2878) - -### Fixed - -- Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872) - - -## 7.2.0 - 2020-10-10 - -### Added - -- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789) -- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795) - -### Fixed - -- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591) -- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595) -- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804) - -### Changed - -- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660) -- Avoid "functions" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712) - -### Deprecated - -- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786) - - -## 7.1.1 - 2020-09-30 - -### Fixed - -- Incorrect EOF detection for response body streams on Windows. - -### Changed - -- We dont connect curl `sink` on HEAD requests. -- Removed some PHP 5 workarounds - - -## 7.1.0 - 2020-09-22 - -### Added - -- `GuzzleHttp\MessageFormatterInterface` - -### Fixed - -- Fixed issue that caused cookies with no value not to be stored. -- On redirects, we allow all safe methods like GET, HEAD and OPTIONS. -- Fixed logging on empty responses. -- Make sure MessageFormatter::format returns string - -### Deprecated - -- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead. -- `ClientInterface::getConfig()` -- `Client::getConfig()` -- `Client::__call()` -- `Utils::defaultCaBundle()` -- `CurlFactory::LOW_CURL_VERSION_NUMBER` - - -## 7.0.1 - 2020-06-27 - -* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699) - - -## 7.0.0 - 2020-06-27 - -No changes since 7.0.0-rc1. - - -## 7.0.0-rc1 - 2020-06-15 - -### Changed - -* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629) -* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675) - - -## 7.0.0-beta2 - 2020-05-25 - -### Added - -* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546) -* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583) - -### Changed - -* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531) -* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529) -* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546) -* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550) -* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529) -* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541) -* Updated the default User Agent to "GuzzleHttp/7" [#2654](https://github.com/guzzle/guzzle/pull/2654) - -### Fixed - -* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626) - -### Removed - -* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528) - - -## 7.0.0-beta1 - 2019-12-30 - -The diff might look very big but 95% of Guzzle users will be able to upgrade without modification. -Please see [the upgrade document](UPGRADING.md) that describes all BC breaking changes. - -### Added - -* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474) -* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499) -* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424) - -### Changed - -* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427) -* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450) -* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444) -* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454) -* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462) -* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461) -* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495) - -### Fixed - -* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311) - -### Removed - -* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162) -* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425) -* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433) -* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440) -* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464) - - -## 6.5.2 - 2019-12-23 - -* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) - - -## 6.5.1 - 2019-12-21 - -* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454) -* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424) - - -## 6.5.0 - 2019-12-07 - -* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) -* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287) -* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132) -* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132) -* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) -* Deprecated `ClientInterface::VERSION` - - -## 6.4.1 - 2019-10-23 - -* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that -* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar` - - -## 6.4.0 - 2019-10-23 - -* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108) -* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081) -* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161) -* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163) -* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242) -* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284) -* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273) -* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335) -* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362) - - -## 6.3.3 - 2018-04-22 - -* Fix: Default headers when decode_content is specified - - -## 6.3.2 - 2018-03-26 - -* Fix: Release process - - -## 6.3.1 - 2018-03-26 - -* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014) -* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012) -* Bug fix: Malformed domain that contains a "/" [#1999](https://github.com/guzzle/guzzle/pull/1999) -* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998) -* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953) -* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915) -* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916) - -+ Minor code cleanups, documentation fixes and clarifications. - - -## 6.3.0 - 2017-06-22 - -* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659) -* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621) -* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580) -* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609) -* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641) -* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611) -* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811) -* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642) -* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569) -* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711) -* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745) -* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721) -* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318) -* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684) -* Improvement: Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827) - -+ Minor code cleanups, documentation fixes and clarifications. - - -## 6.2.3 - 2017-02-28 - -* Fix deprecations with guzzle/psr7 version 1.4 - - -## 6.2.2 - 2016-10-08 - -* Allow to pass nullable Response to delay callable -* Only add scheme when host is present -* Fix drain case where content-length is the literal string zero -* Obfuscate in-URL credentials in exceptions - - -## 6.2.1 - 2016-07-18 - -* Address HTTP_PROXY security vulnerability, CVE-2016-5385: - https://httpoxy.org/ -* Fixing timeout bug with StreamHandler: - https://github.com/guzzle/guzzle/pull/1488 -* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when - a server does not honor `Connection: close`. -* Ignore URI fragment when sending requests. - - -## 6.2.0 - 2016-03-21 - -* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`. - https://github.com/guzzle/guzzle/pull/1389 -* Bug fix: Fix sleep calculation when waiting for delayed requests. - https://github.com/guzzle/guzzle/pull/1324 -* Feature: More flexible history containers. - https://github.com/guzzle/guzzle/pull/1373 -* Bug fix: defer sink stream opening in StreamHandler. - https://github.com/guzzle/guzzle/pull/1377 -* Bug fix: do not attempt to escape cookie values. - https://github.com/guzzle/guzzle/pull/1406 -* Feature: report original content encoding and length on decoded responses. - https://github.com/guzzle/guzzle/pull/1409 -* Bug fix: rewind seekable request bodies before dispatching to cURL. - https://github.com/guzzle/guzzle/pull/1422 -* Bug fix: provide an empty string to `http_build_query` for HHVM workaround. - https://github.com/guzzle/guzzle/pull/1367 - - -## 6.1.1 - 2015-11-22 - -* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler - https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4 -* Feature: HandlerStack is now more generic. - https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e -* Bug fix: setting verify to false in the StreamHandler now disables peer - verification. https://github.com/guzzle/guzzle/issues/1256 -* Feature: Middleware now uses an exception factory, including more error - context. https://github.com/guzzle/guzzle/pull/1282 -* Feature: better support for disabled functions. - https://github.com/guzzle/guzzle/pull/1287 -* Bug fix: fixed regression where MockHandler was not using `sink`. - https://github.com/guzzle/guzzle/pull/1292 - - -## 6.1.0 - 2015-09-08 - -* Feature: Added the `on_stats` request option to provide access to transfer - statistics for requests. https://github.com/guzzle/guzzle/pull/1202 -* Feature: Added the ability to persist session cookies in CookieJars. - https://github.com/guzzle/guzzle/pull/1195 -* Feature: Some compatibility updates for Google APP Engine - https://github.com/guzzle/guzzle/pull/1216 -* Feature: Added support for NO_PROXY to prevent the use of a proxy based on - a simple set of rules. https://github.com/guzzle/guzzle/pull/1197 -* Feature: Cookies can now contain square brackets. - https://github.com/guzzle/guzzle/pull/1237 -* Bug fix: Now correctly parsing `=` inside of quotes in Cookies. - https://github.com/guzzle/guzzle/pull/1232 -* Bug fix: Cusotm cURL options now correctly override curl options of the - same name. https://github.com/guzzle/guzzle/pull/1221 -* Bug fix: Content-Type header is now added when using an explicitly provided - multipart body. https://github.com/guzzle/guzzle/pull/1218 -* Bug fix: Now ignoring Set-Cookie headers that have no name. -* Bug fix: Reason phrase is no longer cast to an int in some cases in the - cURL handler. https://github.com/guzzle/guzzle/pull/1187 -* Bug fix: Remove the Authorization header when redirecting if the Host - header changes. https://github.com/guzzle/guzzle/pull/1207 -* Bug fix: Cookie path matching fixes - https://github.com/guzzle/guzzle/issues/1129 -* Bug fix: Fixing the cURL `body_as_string` setting - https://github.com/guzzle/guzzle/pull/1201 -* Bug fix: quotes are no longer stripped when parsing cookies. - https://github.com/guzzle/guzzle/issues/1172 -* Bug fix: `form_params` and `query` now always uses the `&` separator. - https://github.com/guzzle/guzzle/pull/1163 -* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set. - https://github.com/guzzle/guzzle/pull/1189 - - -## 6.0.2 - 2015-07-04 - -* Fixed a memory leak in the curl handlers in which references to callbacks - were not being removed by `curl_reset`. -* Cookies are now extracted properly before redirects. -* Cookies now allow more character ranges. -* Decoded Content-Encoding responses are now modified to correctly reflect - their state if the encoding was automatically removed by a handler. This - means that the `Content-Encoding` header may be removed an the - `Content-Length` modified to reflect the message size after removing the - encoding. -* Added a more explicit error message when trying to use `form_params` and - `multipart` in the same request. -* Several fixes for HHVM support. -* Functions are now conditionally required using an additional level of - indirection to help with global Composer installations. - - -## 6.0.1 - 2015-05-27 - -* Fixed a bug with serializing the `query` request option where the `&` - separator was missing. -* Added a better error message for when `body` is provided as an array. Please - use `form_params` or `multipart` instead. -* Various doc fixes. - - -## 6.0.0 - 2015-05-26 - -* See the UPGRADING.md document for more information. -* Added `multipart` and `form_params` request options. -* Added `synchronous` request option. -* Added the `on_headers` request option. -* Fixed `expect` handling. -* No longer adding default middlewares in the client ctor. These need to be - present on the provided handler in order to work. -* Requests are no longer initiated when sending async requests with the - CurlMultiHandler. This prevents unexpected recursion from requests completing - while ticking the cURL loop. -* Removed the semantics of setting `default` to `true`. This is no longer - required now that the cURL loop is not ticked for async requests. -* Added request and response logging middleware. -* No longer allowing self signed certificates when using the StreamHandler. -* Ensuring that `sink` is valid if saving to a file. -* Request exceptions now include a "handler context" which provides handler - specific contextual information. -* Added `GuzzleHttp\RequestOptions` to allow request options to be applied - using constants. -* `$maxHandles` has been removed from CurlMultiHandler. -* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package. - - -## 5.3.0 - 2015-05-19 - -* Mock now supports `save_to` -* Marked `AbstractRequestEvent::getTransaction()` as public. -* Fixed a bug in which multiple headers using different casing would overwrite - previous headers in the associative array. -* Added `Utils::getDefaultHandler()` -* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated. -* URL scheme is now always lowercased. - - -## 6.0.0-beta.1 - -* Requires PHP >= 5.5 -* Updated to use PSR-7 - * Requires immutable messages, which basically means an event based system - owned by a request instance is no longer possible. - * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7). - * Removed the dependency on `guzzlehttp/streams`. These stream abstractions - are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7` - namespace. -* Added middleware and handler system - * Replaced the Guzzle event and subscriber system with a middleware system. - * No longer depends on RingPHP, but rather places the HTTP handlers directly - in Guzzle, operating on PSR-7 messages. - * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which - means the `guzzlehttp/retry-subscriber` is now obsolete. - * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`. -* Asynchronous responses - * No longer supports the `future` request option to send an async request. - Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`, - `getAsync`, etc.). - * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid - recursion required by chaining and forwarding react promises. See - https://github.com/guzzle/promises - * Added `requestAsync` and `sendAsync` to send request asynchronously. - * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests - asynchronously. -* Request options - * POST and form updates - * Added the `form_fields` and `form_files` request options. - * Removed the `GuzzleHttp\Post` namespace. - * The `body` request option no longer accepts an array for POST requests. - * The `exceptions` request option has been deprecated in favor of the - `http_errors` request options. - * The `save_to` request option has been deprecated in favor of `sink` request - option. -* Clients no longer accept an array of URI template string and variables for - URI variables. You will need to expand URI templates before passing them - into a client constructor or request method. -* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are - now magic methods that will send synchronous requests. -* Replaced `Utils.php` with plain functions in `functions.php`. -* Removed `GuzzleHttp\Collection`. -* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as - an array. -* Removed `GuzzleHttp\Query`. Query string handling is now handled using an - associative array passed into the `query` request option. The query string - is serialized using PHP's `http_build_query`. If you need more control, you - can pass the query string in as a string. -* `GuzzleHttp\QueryParser` has been replaced with the - `GuzzleHttp\Psr7\parse_query`. - - -## 5.2.0 - 2015-01-27 - -* Added `AppliesHeadersInterface` to make applying headers to a request based - on the body more generic and not specific to `PostBodyInterface`. -* Reduced the number of stack frames needed to send requests. -* Nested futures are now resolved in the client rather than the RequestFsm -* Finishing state transitions is now handled in the RequestFsm rather than the - RingBridge. -* Added a guard in the Pool class to not use recursion for request retries. - - -## 5.1.0 - 2014-12-19 - -* Pool class no longer uses recursion when a request is intercepted. -* The size of a Pool can now be dynamically adjusted using a callback. - See https://github.com/guzzle/guzzle/pull/943. -* Setting a request option to `null` when creating a request with a client will - ensure that the option is not set. This allows you to overwrite default - request options on a per-request basis. - See https://github.com/guzzle/guzzle/pull/937. -* Added the ability to limit which protocols are allowed for redirects by - specifying a `protocols` array in the `allow_redirects` request option. -* Nested futures due to retries are now resolved when waiting for synchronous - responses. See https://github.com/guzzle/guzzle/pull/947. -* `"0"` is now an allowed URI path. See - https://github.com/guzzle/guzzle/pull/935. -* `Query` no longer typehints on the `$query` argument in the constructor, - allowing for strings and arrays. -* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle - specific exceptions if necessary. - - -## 5.0.3 - 2014-11-03 - -This change updates query strings so that they are treated as un-encoded values -by default where the value represents an un-encoded value to send over the -wire. A Query object then encodes the value before sending over the wire. This -means that even value query string values (e.g., ":") are url encoded. This -makes the Query class match PHP's http_build_query function. However, if you -want to send requests over the wire using valid query string characters that do -not need to be encoded, then you can provide a string to Url::setQuery() and -pass true as the second argument to specify that the query string is a raw -string that should not be parsed or encoded (unless a call to getQuery() is -subsequently made, forcing the query-string to be converted into a Query -object). - - -## 5.0.2 - 2014-10-30 - -* Added a trailing `\r\n` to multipart/form-data payloads. See - https://github.com/guzzle/guzzle/pull/871 -* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs. -* Status codes are now returned as integers. See - https://github.com/guzzle/guzzle/issues/881 -* No longer overwriting an existing `application/x-www-form-urlencoded` header - when sending POST requests, allowing for customized headers. See - https://github.com/guzzle/guzzle/issues/877 -* Improved path URL serialization. - - * No longer double percent-encoding characters in the path or query string if - they are already encoded. - * Now properly encoding the supplied path to a URL object, instead of only - encoding ' ' and '?'. - * Note: This has been changed in 5.0.3 to now encode query string values by - default unless the `rawString` argument is provided when setting the query - string on a URL: Now allowing many more characters to be present in the - query string without being percent encoded. See - https://datatracker.ietf.org/doc/html/rfc3986#appendix-A - - -## 5.0.1 - 2014-10-16 - -Bugfix release. - -* Fixed an issue where connection errors still returned response object in - error and end events event though the response is unusable. This has been - corrected so that a response is not returned in the `getResponse` method of - these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867 -* Fixed an issue where transfer statistics were not being populated in the - RingBridge. https://github.com/guzzle/guzzle/issues/866 - - -## 5.0.0 - 2014-10-12 - -Adding support for non-blocking responses and some minor API cleanup. - -### New Features - -* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`. -* Added a public API for creating a default HTTP adapter. -* Updated the redirect plugin to be non-blocking so that redirects are sent - concurrently. Other plugins like this can now be updated to be non-blocking. -* Added a "progress" event so that you can get upload and download progress - events. -* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers - requests concurrently using a capped pool size as efficiently as possible. -* Added `hasListeners()` to EmitterInterface. -* Removed `GuzzleHttp\ClientInterface::sendAll` and marked - `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the - recommended way). - -### Breaking changes - -The breaking changes in this release are relatively minor. The biggest thing to -look out for is that request and response objects no longer implement fluent -interfaces. - -* Removed the fluent interfaces (i.e., `return $this`) from requests, - responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`, - `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and - `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of - why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/. - This also makes the Guzzle message interfaces compatible with the current - PSR-7 message proposal. -* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except - for the HTTP request functions from function.php, these functions are now - implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode` - moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to - `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to - `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be - `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php - caused problems for many users: they aren't PSR-4 compliant, require an - explicit include, and needed an if-guard to ensure that the functions are not - declared multiple times. -* Rewrote adapter layer. - * Removing all classes from `GuzzleHttp\Adapter`, these are now - implemented as callables that are stored in `GuzzleHttp\Ring\Client`. - * Removed the concept of "parallel adapters". Sending requests serially or - concurrently is now handled using a single adapter. - * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The - Transaction object now exposes the request, response, and client as public - properties. The getters and setters have been removed. -* Removed the "headers" event. This event was only useful for changing the - body a response once the headers of the response were known. You can implement - a similar behavior in a number of ways. One example might be to use a - FnStream that has access to the transaction being sent. For example, when the - first byte is written, you could check if the response headers match your - expectations, and if so, change the actual stream body that is being - written to. -* Removed the `asArray` parameter from - `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header - value as an array, then use the newly added `getHeaderAsArray()` method of - `MessageInterface`. This change makes the Guzzle interfaces compatible with - the PSR-7 interfaces. -* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add - custom request options using double-dispatch (this was an implementation - detail). Instead, you should now provide an associative array to the - constructor which is a mapping of the request option name mapping to a - function that applies the option value to a request. -* Removed the concept of "throwImmediately" from exceptions and error events. - This control mechanism was used to stop a transfer of concurrent requests - from completing. This can now be handled by throwing the exception or by - cancelling a pool of requests or each outstanding future request individually. -* Updated to "GuzzleHttp\Streams" 3.0. - * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a - `maxLen` parameter. This update makes the Guzzle streams project - compatible with the current PSR-7 proposal. - * `GuzzleHttp\Stream\Stream::__construct`, - `GuzzleHttp\Stream\Stream::factory`, and - `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second - argument. They now accept an associative array of options, including the - "size" key and "metadata" key which can be used to provide custom metadata. - - -## 4.2.2 - 2014-09-08 - -* Fixed a memory leak in the CurlAdapter when reusing cURL handles. -* No longer using `request_fulluri` in stream adapter proxies. -* Relative redirects are now based on the last response, not the first response. - -## 4.2.1 - 2014-08-19 - -* Ensuring that the StreamAdapter does not always add a Content-Type header -* Adding automated github releases with a phar and zip - -## 4.2.0 - 2014-08-17 - -* Now merging in default options using a case-insensitive comparison. - Closes https://github.com/guzzle/guzzle/issues/767 -* Added the ability to automatically decode `Content-Encoding` response bodies - using the `decode_content` request option. This is set to `true` by default - to decode the response body if it comes over the wire with a - `Content-Encoding`. Set this value to `false` to disable decoding the - response content, and pass a string to provide a request `Accept-Encoding` - header and turn on automatic response decoding. This feature now allows you - to pass an `Accept-Encoding` header in the headers of a request but still - disable automatic response decoding. - Closes https://github.com/guzzle/guzzle/issues/764 -* Added the ability to throw an exception immediately when transferring - requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760 -* Updating guzzlehttp/streams dependency to ~2.1 -* No longer utilizing the now deprecated namespaced methods from the stream - package. - -## 4.1.8 - 2014-08-14 - -* Fixed an issue in the CurlFactory that caused setting the `stream=false` - request option to throw an exception. - See: https://github.com/guzzle/guzzle/issues/769 -* TransactionIterator now calls rewind on the inner iterator. - See: https://github.com/guzzle/guzzle/pull/765 -* You can now set the `Content-Type` header to `multipart/form-data` - when creating POST requests to force multipart bodies. - See https://github.com/guzzle/guzzle/issues/768 - -## 4.1.7 - 2014-08-07 - -* Fixed an error in the HistoryPlugin that caused the same request and response - to be logged multiple times when an HTTP protocol error occurs. -* Ensuring that cURL does not add a default Content-Type when no Content-Type - has been supplied by the user. This prevents the adapter layer from modifying - the request that is sent over the wire after any listeners may have already - put the request in a desired state (e.g., signed the request). -* Throwing an exception when you attempt to send requests that have the - "stream" set to true in parallel using the MultiAdapter. -* Only calling curl_multi_select when there are active cURL handles. This was - previously changed and caused performance problems on some systems due to PHP - always selecting until the maximum select timeout. -* Fixed a bug where multipart/form-data POST fields were not correctly - aggregated (e.g., values with "&"). - -## 4.1.6 - 2014-08-03 - -* Added helper methods to make it easier to represent messages as strings, - including getting the start line and getting headers as a string. - -## 4.1.5 - 2014-08-02 - -* Automatically retrying cURL "Connection died, retrying a fresh connect" - errors when possible. -* cURL implementation cleanup -* Allowing multiple event subscriber listeners to be registered per event by - passing an array of arrays of listener configuration. - -## 4.1.4 - 2014-07-22 - -* Fixed a bug that caused multi-part POST requests with more than one field to - serialize incorrectly. -* Paths can now be set to "0" -* `ResponseInterface::xml` now accepts a `libxml_options` option and added a - missing default argument that was required when parsing XML response bodies. -* A `save_to` stream is now created lazily, which means that files are not - created on disk unless a request succeeds. - -## 4.1.3 - 2014-07-15 - -* Various fixes to multipart/form-data POST uploads -* Wrapping function.php in an if-statement to ensure Guzzle can be used - globally and in a Composer install -* Fixed an issue with generating and merging in events to an event array -* POST headers are only applied before sending a request to allow you to change - the query aggregator used before uploading -* Added much more robust query string parsing -* Fixed various parsing and normalization issues with URLs -* Fixing an issue where multi-valued headers were not being utilized correctly - in the StreamAdapter - -## 4.1.2 - 2014-06-18 - -* Added support for sending payloads with GET requests - -## 4.1.1 - 2014-06-08 - -* Fixed an issue related to using custom message factory options in subclasses -* Fixed an issue with nested form fields in a multi-part POST -* Fixed an issue with using the `json` request option for POST requests -* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar` - -## 4.1.0 - 2014-05-27 - -* Added a `json` request option to easily serialize JSON payloads. -* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON. -* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`. -* Added the ability to provide an emitter to a client in the client constructor. -* Added the ability to persist a cookie session using $_SESSION. -* Added a trait that can be used to add event listeners to an iterator. -* Removed request method constants from RequestInterface. -* Fixed warning when invalid request start-lines are received. -* Updated MessageFactory to work with custom request option methods. -* Updated cacert bundle to latest build. - -4.0.2 (2014-04-16) ------------------- - -* Proxy requests using the StreamAdapter now properly use request_fulluri (#632) -* Added the ability to set scalars as POST fields (#628) - -## 4.0.1 - 2014-04-04 - -* The HTTP status code of a response is now set as the exception code of - RequestException objects. -* 303 redirects will now correctly switch from POST to GET requests. -* The default parallel adapter of a client now correctly uses the MultiAdapter. -* HasDataTrait now initializes the internal data array as an empty array so - that the toArray() method always returns an array. - -## 4.0.0 - 2014-03-29 - -* For information on changes and upgrading, see: - https://github.com/guzzle/guzzle/blob/4.x/UPGRADING.md#3x-to-40 -* Added `GuzzleHttp\batch()` as a convenience function for sending requests in - parallel without needing to write asynchronous code. -* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`. - You can now pass a callable or an array of associative arrays where each - associative array contains the "fn", "priority", and "once" keys. - -## 4.0.0.rc-2 - 2014-03-25 - -* Removed `getConfig()` and `setConfig()` from clients to avoid confusion - around whether things like base_url, message_factory, etc. should be able to - be retrieved or modified. -* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface -* functions.php functions were renamed using snake_case to match PHP idioms -* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and - `GUZZLE_CURL_SELECT_TIMEOUT` environment variables -* Added the ability to specify custom `sendAll()` event priorities -* Added the ability to specify custom stream context options to the stream - adapter. -* Added a functions.php function for `get_path()` and `set_path()` -* CurlAdapter and MultiAdapter now use a callable to generate curl resources -* MockAdapter now properly reads a body and emits a `headers` event -* Updated Url class to check if a scheme and host are set before adding ":" - and "//". This allows empty Url (e.g., "") to be serialized as "". -* Parsing invalid XML no longer emits warnings -* Curl classes now properly throw AdapterExceptions -* Various performance optimizations -* Streams are created with the faster `Stream\create()` function -* Marked deprecation_proxy() as internal -* Test server is now a collection of static methods on a class - -## 4.0.0-rc.1 - 2014-03-15 - -* See https://github.com/guzzle/guzzle/blob/4.x/UPGRADING.md#3x-to-40 - -## 3.8.1 - 2014-01-28 - -* Bug: Always using GET requests when redirecting from a 303 response -* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in - `Guzzle\Http\ClientInterface::setSslVerification()` -* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL -* Bug: The body of a request can now be set to `"0"` -* Sending PHP stream requests no longer forces `HTTP/1.0` -* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of - each sub-exception -* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than - clobbering everything). -* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators) -* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`. - For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`. -* Now properly escaping the regular expression delimiter when matching Cookie domains. -* Network access is now disabled when loading XML documents - -## 3.8.0 - 2013-12-05 - -* Added the ability to define a POST name for a file -* JSON response parsing now properly walks additionalProperties -* cURL error code 18 is now retried automatically in the BackoffPlugin -* Fixed a cURL error when URLs contain fragments -* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were - CurlExceptions -* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e) -* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS` -* Fixed a bug that was encountered when parsing empty header parameters -* UriTemplate now has a `setRegex()` method to match the docs -* The `debug` request parameter now checks if it is truthy rather than if it exists -* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin -* Added the ability to combine URLs using strict RFC 3986 compliance -* Command objects can now return the validation errors encountered by the command -* Various fixes to cache revalidation (#437 and 29797e5) -* Various fixes to the AsyncPlugin -* Cleaned up build scripts - -## 3.7.4 - 2013-10-02 - -* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430) -* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp - (see https://github.com/aws/aws-sdk-php/issues/147) -* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots -* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420) -* Updated the bundled cacert.pem (#419) -* OauthPlugin now supports adding authentication to headers or query string (#425) - -## 3.7.3 - 2013-09-08 - -* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and - `CommandTransferException`. -* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description -* Schemas are only injected into response models when explicitly configured. -* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of - an EntityBody. -* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator. -* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`. -* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody() -* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin -* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests -* Bug fix: Properly parsing headers that contain commas contained in quotes -* Bug fix: mimetype guessing based on a filename is now case-insensitive - -## 3.7.2 - 2013-08-02 - -* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander - See https://github.com/guzzle/guzzle/issues/371 -* Bug fix: Cookie domains are now matched correctly according to RFC 6265 - See https://github.com/guzzle/guzzle/issues/377 -* Bug fix: GET parameters are now used when calculating an OAuth signature -* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted -* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched -* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input. - See https://github.com/guzzle/guzzle/issues/379 -* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See - https://github.com/guzzle/guzzle/pull/380 -* cURL multi cleanup and optimizations - -## 3.7.1 - 2013-07-05 - -* Bug fix: Setting default options on a client now works -* Bug fix: Setting options on HEAD requests now works. See #352 -* Bug fix: Moving stream factory before send event to before building the stream. See #353 -* Bug fix: Cookies no longer match on IP addresses per RFC 6265 -* Bug fix: Correctly parsing header parameters that are in `<>` and quotes -* Added `cert` and `ssl_key` as request options -* `Host` header can now diverge from the host part of a URL if the header is set manually -* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter -* OAuth parameters are only added via the plugin if they aren't already set -* Exceptions are now thrown when a URL cannot be parsed -* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails -* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin - -## 3.7.0 - 2013-06-10 - -* See UPGRADING.md for more information on how to upgrade. -* Requests now support the ability to specify an array of $options when creating a request to more easily modify a - request. You can pass a 'request.options' configuration setting to a client to apply default request options to - every request created by a client (e.g. default query string variables, headers, curl options, etc.). -* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`. - See `Guzzle\Http\StaticClient::mount`. -* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests - created by a command (e.g. custom headers, query string variables, timeout settings, etc.). -* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the - headers of a response -* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key - (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`) -* ServiceBuilders now support storing and retrieving arbitrary data -* CachePlugin can now purge all resources for a given URI -* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource -* CachePlugin now uses the Vary header to determine if a resource is a cache hit -* `Guzzle\Http\Message\Response` now implements `\Serializable` -* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters -* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable -* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()` -* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size -* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message -* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older - Symfony users can still use the old version of Monolog. -* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`. - Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`. -* Several performance improvements to `Guzzle\Common\Collection` -* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`: - createRequest, head, delete, put, patch, post, options, prepareRequest -* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()` -* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface` -* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to - `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a - resource, string, or EntityBody into the $options parameter to specify the download location of the response. -* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a - default `array()` -* Added `Guzzle\Stream\StreamInterface::isRepeatable` -* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use - $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or - $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`. -* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`. -* Removed `Guzzle\Http\ClientInterface::expandTemplate()` -* Removed `Guzzle\Http\ClientInterface::setRequestFactory()` -* Removed `Guzzle\Http\ClientInterface::getCurlMulti()` -* Removed `Guzzle\Http\Message\RequestInterface::canCache` -* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect` -* Removed `Guzzle\Http\Message\RequestInterface::isRedirect` -* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods. -* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting - `Guzzle\Common\Version::$emitWarnings` to true. -* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use - `$request->getResponseBody()->isRepeatable()` instead. -* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use - `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. -* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use - `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. -* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead. -* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead. -* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated -* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. - These will work through Guzzle 4.0 -* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params]. -* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client. -* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`. -* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. -* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8. -* Marked `Guzzle\Common\Collection::inject()` as deprecated. -* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');` -* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a - CacheStorageInterface. These two objects and interface will be removed in a future version. -* Always setting X-cache headers on cached responses -* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin -* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface - $request, Response $response);` -* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);` -* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);` -* Added `CacheStorageInterface::purge($url)` -* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin - $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache, - CanCacheStrategyInterface $canCache = null)` -* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)` - -## 3.6.0 - 2013-05-29 - -* ServiceDescription now implements ToArrayInterface -* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters -* Guzzle can now correctly parse incomplete URLs -* Mixed casing of headers are now forced to be a single consistent casing across all values for that header. -* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution -* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader(). -* Specific header implementations can be created for complex headers. When a message creates a header, it uses a - HeaderFactory which can map specific headers to specific header classes. There is now a Link header and - CacheControl header implementation. -* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate -* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti() -* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in - Guzzle\Http\Curl\RequestMediator -* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string. -* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface -* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders() -* Removed Guzzle\Parser\ParserRegister::get(). Use getParser() -* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser(). -* All response header helper functions return a string rather than mixing Header objects and strings inconsistently -* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle - directly via interfaces -* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist - but are a no-op until removed. -* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a - `Guzzle\Service\Command\ArrayCommandInterface`. -* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response - on a request while the request is still being transferred -* The ability to case-insensitively search for header values -* Guzzle\Http\Message\Header::hasExactHeader -* Guzzle\Http\Message\Header::raw. Use getAll() -* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object - instead. -* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess -* Added the ability to cast Model objects to a string to view debug information. - -## 3.5.0 - 2013-05-13 - -* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times -* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove - itself from the EventDispatcher) -* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values -* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too -* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a - non-existent key -* Bug: All __call() method arguments are now required (helps with mocking frameworks) -* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference - to help with refcount based garbage collection of resources created by sending a request -* Deprecating ZF1 cache and log adapters. These will be removed in the next major version. -* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the - HistoryPlugin for a history. -* Added a `responseBody` alias for the `response_body` location -* Refactored internals to no longer rely on Response::getRequest() -* HistoryPlugin can now be cast to a string -* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests - and responses that are sent over the wire -* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects - -## 3.4.3 - 2013-04-30 - -* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response -* Added a check to re-extract the temp cacert bundle from the phar before sending each request - -## 3.4.2 - 2013-04-29 - -* Bug fix: Stream objects now work correctly with "a" and "a+" modes -* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present -* Bug fix: AsyncPlugin no longer forces HEAD requests -* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter -* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails -* Setting a response on a request will write to the custom request body from the response body if one is specified -* LogPlugin now writes to php://output when STDERR is undefined -* Added the ability to set multiple POST files for the same key in a single call -* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default -* Added the ability to queue CurlExceptions to the MockPlugin -* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send) -* Configuration loading now allows remote files - -## 3.4.1 - 2013-04-16 - -* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti - handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost. -* Exceptions are now properly grouped when sending requests in parallel -* Redirects are now properly aggregated when a multi transaction fails -* Redirects now set the response on the original object even in the event of a failure -* Bug fix: Model names are now properly set even when using $refs -* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax -* Added support for oauth_callback in OAuth signatures -* Added support for oauth_verifier in OAuth signatures -* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection - -## 3.4.0 - 2013-04-11 - -* Bug fix: URLs are now resolved correctly based on https://datatracker.ietf.org/doc/html/rfc3986#section-5.2. #289 -* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289 -* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263 -* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264. -* Bug fix: Added `number` type to service descriptions. -* Bug fix: empty parameters are removed from an OAuth signature -* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header -* Bug fix: Fixed "array to string" error when validating a union of types in a service description -* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream -* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin. -* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs. -* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections. -* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if - the Content-Type can be determined based on the entity body or the path of the request. -* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder. -* Added support for a PSR-3 LogAdapter. -* Added a `command.after_prepare` event -* Added `oauth_callback` parameter to the OauthPlugin -* Added the ability to create a custom stream class when using a stream factory -* Added a CachingEntityBody decorator -* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized. -* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar. -* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies -* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This - means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use - POST fields or files (the latter is only used when emulating a form POST in the browser). -* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest - -## 3.3.1 - 2013-03-10 - -* Added the ability to create PHP streaming responses from HTTP requests -* Bug fix: Running any filters when parsing response headers with service descriptions -* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing -* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across - response location visitors. -* Bug fix: Removed the possibility of creating configuration files with circular dependencies -* RequestFactory::create() now uses the key of a POST file when setting the POST file name -* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set - -## 3.3.0 - 2013-03-03 - -* A large number of performance optimizations have been made -* Bug fix: Added 'wb' as a valid write mode for streams -* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned -* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()` -* BC: Removed `Guzzle\Http\Utils` class -* BC: Setting a service description on a client will no longer modify the client's command factories. -* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using - the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io' -* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to - lowercase -* Operation parameter objects are now lazy loaded internally -* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses -* Added support for instantiating responseType=class responseClass classes. Classes must implement - `Guzzle\Service\Command\ResponseClassInterface` -* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These - additional properties also support locations and can be used to parse JSON responses where the outermost part of the - JSON is an array -* Added support for nested renaming of JSON models (rename sentAs to name) -* CachePlugin - * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error - * Debug headers can now added to cached response in the CachePlugin - -## 3.2.0 - 2013-02-14 - -* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients. -* URLs with no path no longer contain a "/" by default -* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url. -* BadResponseException no longer includes the full request and response message -* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface -* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface -* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription -* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list -* xmlEncoding can now be customized for the XML declaration of a XML service description operation -* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value - aggregation and no longer uses callbacks -* The URL encoding implementation of Guzzle\Http\QueryString can now be customized -* Bug fix: Filters were not always invoked for array service description parameters -* Bug fix: Redirects now use a target response body rather than a temporary response body -* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded -* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives - -## 3.1.2 - 2013-01-27 - -* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the - response body. For example, the XmlVisitor now parses the XML response into an array in the before() method. -* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent -* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444) -* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse() -* Setting default headers on a client after setting the user-agent will not erase the user-agent setting - -## 3.1.1 - 2013-01-20 - -* Adding wildcard support to Guzzle\Common\Collection::getPath() -* Adding alias support to ServiceBuilder configs -* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface - -## 3.1.0 - 2013-01-12 - -* BC: CurlException now extends from RequestException rather than BadResponseException -* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse() -* Added getData to ServiceDescriptionInterface -* Added context array to RequestInterface::setState() -* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http -* Bug: Adding required content-type when JSON request visitor adds JSON to a command -* Bug: Fixing the serialization of a service description with custom data -* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing - an array of successful and failed responses -* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection -* Added Guzzle\Http\IoEmittingEntityBody -* Moved command filtration from validators to location visitors -* Added `extends` attributes to service description parameters -* Added getModels to ServiceDescriptionInterface - -## 3.0.7 - 2012-12-19 - -* Fixing phar detection when forcing a cacert to system if null or true -* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()` -* Cleaning up `Guzzle\Common\Collection::inject` method -* Adding a response_body location to service descriptions - -## 3.0.6 - 2012-12-09 - -* CurlMulti performance improvements -* Adding setErrorResponses() to Operation -* composer.json tweaks - -## 3.0.5 - 2012-11-18 - -* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin -* Bug: Response body can now be a string containing "0" -* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert -* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs -* Added support for XML attributes in service description responses -* DefaultRequestSerializer now supports array URI parameter values for URI template expansion -* Added better mimetype guessing to requests and post files - -## 3.0.4 - 2012-11-11 - -* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value -* Bug: Cookies can now be added that have a name, domain, or value set to "0" -* Bug: Using the system cacert bundle when using the Phar -* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures -* Enhanced cookie jar de-duplication -* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added -* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies -* Added the ability to create any sort of hash for a stream rather than just an MD5 hash - -## 3.0.3 - 2012-11-04 - -* Implementing redirects in PHP rather than cURL -* Added PECL URI template extension and using as default parser if available -* Bug: Fixed Content-Length parsing of Response factory -* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams. -* Adding ToArrayInterface throughout library -* Fixing OauthPlugin to create unique nonce values per request - -## 3.0.2 - 2012-10-25 - -* Magic methods are enabled by default on clients -* Magic methods return the result of a command -* Service clients no longer require a base_url option in the factory -* Bug: Fixed an issue with URI templates where null template variables were being expanded - -## 3.0.1 - 2012-10-22 - -* Models can now be used like regular collection objects by calling filter, map, etc. -* Models no longer require a Parameter structure or initial data in the constructor -* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator` - -## 3.0.0 - 2012-10-15 - -* Rewrote service description format to be based on Swagger - * Now based on JSON schema - * Added nested input structures and nested response models - * Support for JSON and XML input and output models - * Renamed `commands` to `operations` - * Removed dot class notation - * Removed custom types -* Broke the project into smaller top-level namespaces to be more component friendly -* Removed support for XML configs and descriptions. Use arrays or JSON files. -* Removed the Validation component and Inspector -* Moved all cookie code to Guzzle\Plugin\Cookie -* Magic methods on a Guzzle\Service\Client now return the command un-executed. -* Calling getResult() or getResponse() on a command will lazily execute the command if needed. -* Now shipping with cURL's CA certs and using it by default -* Added previousResponse() method to response objects -* No longer sending Accept and Accept-Encoding headers on every request -* Only sending an Expect header by default when a payload is greater than 1MB -* Added/moved client options: - * curl.blacklist to curl.option.blacklist - * Added ssl.certificate_authority -* Added a Guzzle\Iterator component -* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin -* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin) -* Added a more robust caching plugin -* Added setBody to response objects -* Updating LogPlugin to use a more flexible MessageFormatter -* Added a completely revamped build process -* Cleaning up Collection class and removing default values from the get method -* Fixed ZF2 cache adapters - -## 2.8.8 - 2012-10-15 - -* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did - -## 2.8.7 - 2012-09-30 - -* Bug: Fixed config file aliases for JSON includes -* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests -* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload -* Bug: Hardening request and response parsing to account for missing parts -* Bug: Fixed PEAR packaging -* Bug: Fixed Request::getInfo -* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail -* Adding the ability for the namespace Iterator factory to look in multiple directories -* Added more getters/setters/removers from service descriptions -* Added the ability to remove POST fields from OAuth signatures -* OAuth plugin now supports 2-legged OAuth - -## 2.8.6 - 2012-09-05 - -* Added the ability to modify and build service descriptions -* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command -* Added a `json` parameter location -* Now allowing dot notation for classes in the CacheAdapterFactory -* Using the union of two arrays rather than an array_merge when extending service builder services and service params -* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references - in service builder config files. -* Services defined in two different config files that include one another will by default replace the previously - defined service, but you can now create services that extend themselves and merge their settings over the previous -* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like - '_default' with a default JSON configuration file. - -## 2.8.5 - 2012-08-29 - -* Bug: Suppressed empty arrays from URI templates -* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching -* Added support for HTTP responses that do not contain a reason phrase in the start-line -* AbstractCommand commands are now invokable -* Added a way to get the data used when signing an Oauth request before a request is sent - -## 2.8.4 - 2012-08-15 - -* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin -* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable. -* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream -* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream -* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5()) -* Added additional response status codes -* Removed SSL information from the default User-Agent header -* DELETE requests can now send an entity body -* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries -* Added the ability of the MockPlugin to consume mocked request bodies -* LogPlugin now exposes request and response objects in the extras array - -## 2.8.3 - 2012-07-30 - -* Bug: Fixed a case where empty POST requests were sent as GET requests -* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body -* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new -* Added multiple inheritance to service description commands -* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()` -* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything -* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles - -## 2.8.2 - 2012-07-24 - -* Bug: Query string values set to 0 are no longer dropped from the query string -* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()` -* Bug: `+` is now treated as an encoded space when parsing query strings -* QueryString and Collection performance improvements -* Allowing dot notation for class paths in filters attribute of a service descriptions - -## 2.8.1 - 2012-07-16 - -* Loosening Event Dispatcher dependency -* POST redirects can now be customized using CURLOPT_POSTREDIR - -## 2.8.0 - 2012-07-15 - -* BC: Guzzle\Http\Query - * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl) - * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding() - * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool) - * Changed the aggregation functions of QueryString to be static methods - * Can now use fromString() with querystrings that have a leading ? -* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters -* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body -* Cookies are no longer URL decoded by default -* Bug: URI template variables set to null are no longer expanded - -## 2.7.2 - 2012-07-02 - -* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser. -* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty() -* CachePlugin now allows for a custom request parameter function to check if a request can be cached -* Bug fix: CachePlugin now only caches GET and HEAD requests by default -* Bug fix: Using header glue when transferring headers over the wire -* Allowing deeply nested arrays for composite variables in URI templates -* Batch divisors can now return iterators or arrays - -## 2.7.1 - 2012-06-26 - -* Minor patch to update version number in UA string -* Updating build process - -## 2.7.0 - 2012-06-25 - -* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes. -* BC: Removed magic setX methods from commands -* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method -* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable. -* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity) -* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace -* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin -* Added the ability to set POST fields and files in a service description -* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method -* Adding a command.before_prepare event to clients -* Added BatchClosureTransfer and BatchClosureDivisor -* BatchTransferException now includes references to the batch divisor and transfer strategies -* Fixed some tests so that they pass more reliably -* Added Guzzle\Common\Log\ArrayLogAdapter - -## 2.6.6 - 2012-06-10 - -* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin -* BC: Removing Guzzle\Service\Command\CommandSet -* Adding generic batching system (replaces the batch queue plugin and command set) -* Updating ZF cache and log adapters and now using ZF's composer repository -* Bug: Setting the name of each ApiParam when creating through an ApiCommand -* Adding result_type, result_doc, deprecated, and doc_url to service descriptions -* Bug: Changed the default cookie header casing back to 'Cookie' - -## 2.6.5 - 2012-06-03 - -* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource() -* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from -* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data -* BC: Renaming methods in the CookieJarInterface -* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations -* Making the default glue for HTTP headers ';' instead of ',' -* Adding a removeValue to Guzzle\Http\Message\Header -* Adding getCookies() to request interface. -* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber() - -## 2.6.4 - 2012-05-30 - -* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class. -* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand -* Bug: Fixing magic method command calls on clients -* Bug: Email constraint only validates strings -* Bug: Aggregate POST fields when POST files are present in curl handle -* Bug: Fixing default User-Agent header -* Bug: Only appending or prepending parameters in commands if they are specified -* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes -* Allowing the use of dot notation for class namespaces when using instance_of constraint -* Added any_match validation constraint -* Added an AsyncPlugin -* Passing request object to the calculateWait method of the ExponentialBackoffPlugin -* Allowing the result of a command object to be changed -* Parsing location and type sub values when instantiating a service description rather than over and over at runtime - -## 2.6.3 - 2012-05-23 - -* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options. -* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields. -* You can now use an array of data when creating PUT request bodies in the request factory. -* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable. -* [Http] Adding support for Content-Type in multipart POST uploads per upload -* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1]) -* Adding more POST data operations for easier manipulation of POST data. -* You can now set empty POST fields. -* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files. -* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate. -* CS updates - -## 2.6.2 - 2012-05-19 - -* [Http] Better handling of nested scope requests in CurlMulti. Requests are now always prepares in the send() method rather than the addRequest() method. - -## 2.6.1 - 2012-05-19 - -* [BC] Removing 'path' support in service descriptions. Use 'uri'. -* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache. -* [BC] Removing Guzzle\Common\NullObject. Use https://github.com/mtdowling/NullObject if you need it. -* [BC] Removing Guzzle\Common\XmlElement. -* All commands, both dynamic and concrete, have ApiCommand objects. -* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits. -* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored. -* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible. - -## 2.6.0 - 2012-05-15 - -* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder -* [BC] Executing a Command returns the result of the command rather than the command -* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed. -* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args. -* [BC] Moving ResourceIterator* to Guzzle\Service\Resource -* [BC] Completely refactored ResourceIterators to iterate over a cloned command object -* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate -* [BC] Guzzle\Guzzle is now deprecated -* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject -* Adding Guzzle\Version class to give version information about Guzzle -* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate() -* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data -* ServiceDescription and ServiceBuilder are now cacheable using similar configs -* Changing the format of XML and JSON service builder configs. Backwards compatible. -* Cleaned up Cookie parsing -* Trimming the default Guzzle User-Agent header -* Adding a setOnComplete() method to Commands that is called when a command completes -* Keeping track of requests that were mocked in the MockPlugin -* Fixed a caching bug in the CacheAdapterFactory -* Inspector objects can be injected into a Command object -* Refactoring a lot of code and tests to be case insensitive when dealing with headers -* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL -* Adding the ability to set global option overrides to service builder configs -* Adding the ability to include other service builder config files from within XML and JSON files -* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method. - -## 2.5.0 - 2012-05-08 - -* Major performance improvements -* [BC] Simplifying Guzzle\Common\Collection. Please check to see if you are using features that are now deprecated. -* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component. -* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates. Use "{}" -* Added the ability to passed parameters to all requests created by a client -* Added callback functionality to the ExponentialBackoffPlugin -* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies. -* Rewinding request stream bodies when retrying requests -* Exception is thrown when JSON response body cannot be decoded -* Added configurable magic method calls to clients and commands. This is off by default. -* Fixed a defect that added a hash to every parsed URL part -* Fixed duplicate none generation for OauthPlugin. -* Emitting an event each time a client is generated by a ServiceBuilder -* Using an ApiParams object instead of a Collection for parameters of an ApiCommand -* cache.* request parameters should be renamed to params.cache.* -* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle. -* Added the ability to disable type validation of service descriptions -* ServiceDescriptions and ServiceBuilders are now Serializable diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/LICENSE deleted file mode 100644 index fd2375d88..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011 Michael Dowling -Copyright (c) 2012 Jeremy Lindblom -Copyright (c) 2014 Graham Campbell -Copyright (c) 2015 Márk Sági-Kazár -Copyright (c) 2015 Tobias Schultze -Copyright (c) 2016 Tobias Nyholm -Copyright (c) 2016 George Mponos - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/README.md deleted file mode 100644 index 069ad355b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/README.md +++ /dev/null @@ -1,96 +0,0 @@ -![Guzzle](.github/logo.png?raw=true) - -# Guzzle, PHP HTTP Client - -Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and -trivial to integrate with web services. - -- Simple interface for building query strings, POST requests, streaming large - uploads, streaming large downloads, using HTTP cookies, uploading JSON data, - etc... -- Can send both synchronous and asynchronous requests using the same interface. -- Uses PSR-7 interfaces for requests, responses, and streams. This allows you - to utilize other PSR-7 compatible libraries with Guzzle. -- Supports PSR-18, allowing interoperability with other PSR-18 HTTP clients. -- Abstracts away the underlying HTTP transport, allowing you to write - environment and transport agnostic code; i.e., no hard dependency on cURL, - PHP streams, sockets, or non-blocking event loops. -- Middleware system allows you to augment and compose client behavior. - -## Installation - -The recommended way to install Guzzle is through -[Composer](https://getcomposer.org/). - -```bash -composer require guzzlehttp/guzzle -``` - -## Version Guidance - -| Version | Status | PHP Version | -|---------|--------------|--------------| -| 8.0 | Latest | >=7.4,<8.6 | -| 7.15 | Maintenance | >=7.2.5,<8.6 | -| 6.5 | End of Life | >=5.5,<8.0 | - -## Quick Start - -```php -$client = new \GuzzleHttp\Client(); -$response = $client->request('GET', 'https://api.example.com/users/123'); - -echo $response->getStatusCode(); // 200 -echo $response->getHeaderLine('content-type'); // 'application/json' -echo $response->getBody(); // '{"id": 123, "name": "Ada"}' -``` - -For more examples, see the [Quick Start](docs/quick-start.md). - -## Documentation - -- [Quick Start](docs/quick-start.md) -- [Overview](docs/overview.md) -- [Request Options](docs/request-options.md) -- [Uploading Data](docs/uploading-data.md) -- [Cookies](docs/cookies.md) -- [Exceptions](docs/exceptions.md) -- [Guzzle and PSR-7](docs/guzzle-and-psr-7.md) -- [Handlers](docs/handlers.md) -- [Middleware](docs/middleware.md) -- [Testing Guzzle Clients](docs/testing-guzzle-clients.md) -- [FAQ](docs/faq.md) -- [Package Ecosystem](docs/package-ecosystem.md) -- [Upgrade Guide](UPGRADING.md) -- [Changelog](CHANGELOG.md) - -We use GitHub issues only to discuss bugs and new features. For support, use -[Stack Overflow](https://stackoverflow.com/questions/tagged/guzzle), the -[#guzzle](https://app.slack.com/client/T0D2S9JCT/CE6UAAKL4) channel on -[PHP-HTTP Slack](https://slack.httplug.io/), or -[Gitter](https://gitter.im/guzzle/guzzle). - -## Security - -If you discover a security vulnerability within this package, please send an -email to security@tidelift.com. All security vulnerabilities will be promptly -addressed. Please do not disclose security-related issues publicly until a fix -has been announced. Please see -[Security Policy](https://github.com/guzzle/guzzle/security/policy) for more -information. - -## License - -Guzzle is made available under the MIT License (MIT). Please see -[License File](LICENSE) for more information. - -## For Enterprise - -Available as part of the Tidelift Subscription - -The maintainers of Guzzle and thousands of other packages are working with -Tidelift to deliver commercial support and maintenance for the open source -dependencies you use to build your applications. Save time, reduce risk, and -improve code health, while paying the maintainers of the exact dependencies you -use. -[Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-guzzle?utm_source=packagist-guzzlehttp-guzzle&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/UPGRADING.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/UPGRADING.md deleted file mode 100644 index 37b889860..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/UPGRADING.md +++ /dev/null @@ -1,2771 +0,0 @@ -Guzzle Upgrade Guide -==================== - -7.0 to 8.0 ----------- - -Guzzle 8 is a major release that raises the minimum PHP version, updates the -Guzzle dependency stack, adopts stricter PSR-7 header and request method -behavior, changes some network exception classification, and tightens validation -for request options, protocols, transport settings, cookies, and native method -signatures. It also adds generic PHPDoc types to async APIs for static analysis. - -#### PHP Version and Dependencies - -Guzzle 8 requires PHP `^7.4 || ^8.0`. Guzzle 7 supported PHP -`^7.2.5 || ^8.0`. - -Guzzle 8 also requires Guzzle Promises 3.x and Guzzle PSR-7 3.x. If your -application pins either package directly, update those constraints to allow the -new major versions. - -Read the [Guzzle PSR-7 3.x upgrade guide][psr7-upgrade-guide] as part of every -Guzzle 8 upgrade. Guzzle's normal request and response APIs use Guzzle PSR-7, so -PSR-7 changes can affect applications even when they do not instantiate PSR-7 -classes directly. This guide calls out the most common inherited PSR-7 changes, -but it does not repeat every PSR-7 behavior change. - -Pay particular attention to [that PSR-7 upgrade guide][psr7-upgrade-guide] if -your application constructs requests, modifies responses, sets headers, uploads -files, builds multipart requests, works with URIs, or inspects streams. - -Also read the [Guzzle Promises 3.x upgrade guide][promises-upgrade-guide] if you -use async requests, custom handlers, middleware, pools, or promise helpers. - -Guzzle 8 now requires `psr/http-factory:^1.0` directly. - -[psr7-upgrade-guide]: https://github.com/guzzle/psr7/blob/3.0/UPGRADING.md -[promises-upgrade-guide]: https://github.com/guzzle/promises/blob/3.0/UPGRADING.md - -#### IPv6 Origin Canonicalization - -Guzzle PSR-7 3.x serializes IPv6 hosts in native URIs in their RFC 5952 -canonical form, and its `UriComparator::isCrossOrigin()` canonicalizes -bracketed IPv6 literals from any PSR-7 implementation before comparing -origins. Redirects between equivalent spellings of one IPv6 address are -therefore same-origin in Guzzle 8: `Authorization` and `Cookie` headers, the -`auth` option, cURL authentication options, and the same-scheme `Referer` path -and query may be retained where Guzzle 7 stripped or reduced them, and absolute -Digest `domain` protection spaces can cover an equivalent spelling of the same -address. - -Guzzle 8 also keys its own host-scoped state, the Digest challenge cache and -the cookie jar, on the canonical IPv6 form, so equivalent spellings share one -entry instead of fragmenting state. A cached Digest challenge may be reused -preemptively across spellings instead of causing another 401 probe. Host-only -cookies extracted from one spelling match requests using another, persisted -cookie domain text is canonical, and equivalent cookie entries coalesce. Bare -IPv6 cookie domains, which the cookie API permissively accepts, canonicalize -without gaining brackets, and bare and bracketed forms remain distinct -identities. Cookie-domain matching remains exact-only for IP literals and IP -addresses, and DNS suffix matching now requires both the cookie domain and the -request host to be valid non-literal, nonnumeric host names. A host counts as -numeric on its rightmost label alone, so a cookie domain such as -`svc.0xdeadbeef` is exact-only in Guzzle 8 although Guzzle 7 reads it as a name -and matches its subdomains. - -Configured proxy endpoints are not canonicalized, no-proxy matching was -already representation-independent, and the URI text sent to the transport is -not rewritten: a foreign `UriInterface` that reports a noncanonical IPv6 -spelling is serialized as supplied. IPvFuture literals, zone-bearing values, -and invalid bracketed text keep their ASCII-case-folded textual identity in -these Digest and cookie comparisons. - -#### PSR-7 Header Values - -Guzzle 8 uses Guzzle PSR-7 3.x, and several of its behavior changes surface -through normal Guzzle client usage. This section summarizes the inherited PSR-7 -changes most likely to affect Guzzle users; read the -[Guzzle PSR-7 3.x upgrade guide][psr7-upgrade-guide] for the complete list. - -Header values passed through the `headers` request option or PSR-7 request APIs -must now be strings or non-empty arrays of strings. Empty strings remain valid -explicit header values, but empty arrays, `null`, `false`, integers, floats, and -other non-string values are no longer cast or accepted. - -If your application builds headers from configuration, user input, or typed -domain values, normalize them before creating or sending requests: - -```php -// 7.x, no longer accepted in 8.0 -$client->request('GET', '/', [ - 'headers' => ['Api-Version' => 1], -]); - -// 8.0 -$client->request('GET', '/', [ - 'headers' => ['Api-Version' => '1'], -]); -``` - -#### Request Method Casing - -Guzzle 8 preserves explicitly provided request method casing. HTTP method names -are case-sensitive, so Guzzle now sends the method exactly as provided and -applies built-in method-specific behavior only to exact standard method names -such as `GET`, `HEAD`, `POST`, and `PUT`. - -If you previously relied on `new Request('get', ...)` or -`$client->request('get', ...)` being sent or treated as `GET`, normalize the -method before constructing or sending the request: - -```php -$client->request('GET', 'https://example.com'); -``` - -The convenience methods such as `$client->get()`, `$client->post()`, and their -async variants continue to use uppercase standard methods. - -#### Auth Request Option Changes - -Digest authentication is no longer implemented with cURL `CURLOPT_HTTPAUTH` and -`CURLOPT_USERPWD`. Guzzle supports legacy non-session Digest challenges without -`qop` and challenges with `qop=auth`; session algorithms require `qop`. -`auth-int` is not supported. To use libcurl's native Digest implementation -instead, omit `auth` and configure cURL options directly with a cURL handler, -including `CURLOPT_HTTPAUTH => CURLAUTH_DIGEST` and `CURLOPT_USERPWD`. - -Guzzle 8 no longer treats `ntlm` as a built-in `auth` type. If an existing -NTLM-only integration must be kept temporarily, configure cURL options directly -with a cURL handler and a libcurl build that still supports NTLM: - -```php -$client->request('GET', '/', [ - 'curl' => [ - CURLOPT_HTTPAUTH => CURLAUTH_NTLM, - CURLOPT_USERPWD => 'username:password', - ], -]); -``` - -This is not a long-term migration path. curl/libcurl has deprecated NTLM -because it is weak, deprecated by Microsoft, and does not work over HTTP/2 or -HTTP/3. curl made NTLM opt-in in curl 8.20.0 and plans to remove support in -September 2026. - -Digest requests that carry a body send the initial unauthenticated probe with an -empty body and `Content-Length: 0`, as libcurl does. The body is sent on -authenticated attempts: once in the normal one-challenge handshake, and again if -a stale-nonce challenge must be retried. Because of this, non-seekable request -bodies work with Digest authentication unless a stale-nonce retry forces a -rewind. Followed redirects also rewind the body under the normal redirect rules, -independently of Digest. If the server answers the probe with anything other -than a 401 response, a 407 proxy challenge, or a followable redirect, the request -fails with a `GuzzleHttp\Exception\ResponseException` carrying that response, -because the probe did not represent the original request; remove the `auth` -option for endpoints that do not require authentication. See "Differences from -libcurl's Digest implementation" below. - -#### Differences from libcurl's Digest implementation - -Guzzle 8's Digest middleware deliberately diverges from libcurl, which -implemented the `auth` option's Digest support in Guzzle 7, in the following -ways: - -- **Unchallenged probes fail loudly.** Body-bearing requests are probed with an - empty body. If the server answers the probe with anything other than a 401 - response, a 407 proxy challenge, or a followable redirect, Guzzle throws - `GuzzleHttp\Exception\ResponseException` with that response attached. This - exception pre-empts the `ClientException` or `ServerException` that - `http_errors` would otherwise raise for such a response; `catch - (RequestException $e)` catches both. For unchallenged sub-300 probe responses - libcurl instead re-issues the request unauthenticated, which can cause the - server to process both the empty probe and the replay; for other statuses it - surfaces the probe response. If a server does not require authentication, - remove the `auth` option. -- **Probe payload headers.** The probe strips the payload-describing headers: - `Expect`, `Transfer-Encoding`, `Trailer`, `Content-Range`, - `Content-Encoding`, `Content-MD5`, `Digest`, `Content-Digest`, and - `Repr-Digest`, and forces `Content-Length: 0`. `Content-Type` is kept, as - libcurl does. libcurl's probe is bodyless but not header-identical: it keeps a - caller-supplied `Expect`, keeps HTTP/1.1 `Transfer-Encoding`, sending a - chunked probe with a zero chunk and no `Content-Length`, and forwards other - caller headers untouched. Guzzle's stripping is deliberately stricter. -- **`auth-int` is rejected.** Challenges offering only `qop=auth-int` are - ignored. libcurl selects `auth-int` when `auth` is absent but hashes an empty - entity body, providing no actual body integrity. -- **Challenge selection.** With multiple Digest challenges, Guzzle picks the - strongest supported algorithm. libcurl decodes the first Digest - `WWW-Authenticate` header field and ignores later Digest fields. Multiple - Digest challenges inside one field are parser-dependent in curl. -- **Strict challenge parsing.** Challenges with duplicated or malformed - parameters are rejected. When another usable Digest challenge is present, it - is used instead, always across separate `WWW-Authenticate` header fields and - in some same-field shapes. The 401 is returned untouched only when no usable - Digest challenge remains. libcurl is lenient: later duplicate values overwrite - earlier ones, `stale` and `userhash` flags are sticky once set, and malformed - tails are tolerated after enough valid material has been parsed. -- **Challenge reuse.** Cached challenges authorize later body-less requests - preemptively with incremented nonce counts; body-bearing requests always - re-probe, and only challenges that produced an authenticated success are - cached. libcurl kept Digest state per easy handle, which Guzzle 7 reset between - requests, so 7.x re-handshook every request. Guzzle honors the RFC 7616 - `domain` parameter when scoping reuse, and curl's Digest state has no `domain` - handling. Guzzle generates a fresh cnonce per Authorization header, where - curl's non-SSPI implementation reuses one cnonce per nonce while incrementing - `nc`. When `domain` is absent the cached challenge covers the whole origin, so - on origins that host multiple realms or trust boundaries a preemptive request - can disclose the username or userhash and password-derived response material - for one realm to another same-origin endpoint before it challenges; use - separate origins, a server-side `domain`, or disable reuse by replacing the - default auth middleware with `GuzzleHttp\Middleware::auth(false)` as shown in - the `auth` request option documentation. -- **Per-leg observability.** Each handshake leg is a separate transfer: - `on_stats`, `on_headers`, and `progress` fire per leg, and `delay` applies - once, before the first Digest leg: the probe, or a preemptive request when - challenge reuse applies. libcurl performed the whole handshake inside one - transfer with one stats callback. -- **Streaming sinks.** With `stream => true` plus a configured `sink`, a Digest - request drains the final body into the sink, protecting sinks from challenge - bodies on handlers that ignore `stream`. A non-digest request on the stream - handler leaves the sink untouched. -- **Proxy Digest (407) is not implemented.** The response passes through. The - built-in cURL handlers allow proxy credentials but not `CURLOPT_PROXYAUTH`, - and libcurl defaults proxy auth to Basic, so proxy Digest requires a custom - handler. - -Non-seekable request bodies work for the normal handshake because the probe never -consumes them. A stale-nonce retry after the body has been consumed still -requires a seekable body, the same limit libcurl has. - -Built-in Basic and Digest authentication continue to work for clients using -Guzzle's default handler or `GuzzleHttp\HandlerStack::create($handler)`, but -they are now applied by the default auth middleware instead of while the client -constructs the request. If you pass a raw custom handler directly to `Client`, -remove default middleware, or build a handler stack manually, Basic and Digest -authentication will only be applied when your stack includes -`GuzzleHttp\Middleware::auth()`. Unknown auth type strings are left in the -request options for custom middleware or custom handlers. - -Guzzle also validates non-empty auth arrays before applying them: indexes `0` -and `1` must be username and password strings, and index `2`, when present, must -be a string or `null`. Invalid auth arrays that previously emitted warnings, -coerced values, or did nothing now throw -`GuzzleHttp\Exception\InvalidArgumentException`. - -```php -// Valid: -$client->request('GET', '/', [ - 'auth' => ['username', 'password', 'basic'], -]); - -// Invalid in 8.0: -$client->request('GET', '/', [ - 'auth' => ['username'], -]); -``` - -Guzzle 8's built-in authentication middleware rejects Basic `auth` credentials -when the username contains a colon or either the username or password contains -an ASCII control character. Guzzle 7 encoded and sent these values. Colons -remain valid in passwords. - -Guzzle 8 also no longer forwards the generic `auth` request option when -automatic redirects cross origin. Guzzle already removed the `Authorization` and -`Cookie` headers and cURL HTTP authentication options on cross-origin redirects; -this now also applies to handler-visible `auth` state. - -Same-origin redirects continue to preserve `auth`. If an application or custom -handler intentionally reused `auth` across redirected origins, disable automatic -redirects or handle redirects manually so each origin receives explicit -credentials. - -#### Exception Hierarchy and Classification - -Some Guzzle 8.0 exception changes add intermediate classes, while others -intentionally reclassify specific failures. Broad `TransferException` and -`GuzzleException` catch blocks still catch all Guzzle transfer failures, and -`RequestException` still catches response-aware and other non-network request -failures. More specific catch blocks need auditing: Guzzle 8.0 splits timeout -failures into connect-phase, no-response network, and response-aware timeout -classes, and the built-in cURL and stream handlers classify more transport -failures by transfer phase. This section covers upgrading from Guzzle 7.x to -Guzzle 8.0. The `ConnectException` inheritance change happened earlier, in -Guzzle 7.0.0, when it moved out from under `RequestException`; see the 6.0 to -7.0 notes for that migration. The hierarchy changes are easiest to compare in -the two trees below. - -Guzzle 7.x uses this hierarchy: - -```text -. \RuntimeException -└── TransferException (implements GuzzleException) - ├── ConnectException (implements NetworkExceptionInterface) - └── RequestException (implements RequestExceptionInterface) - ├── BadResponseException - │ ├── ClientException - │ └── ServerException - └── TooManyRedirectsException -``` - -Guzzle 8.0 uses this hierarchy: - -```text -. \RuntimeException -└── TransferException (implements GuzzleException) - ├── HandlerClosedException - ├── NetworkException (implements NetworkExceptionInterface) - │ ├── ConnectException - │ │ └── ConnectTimeoutException - │ └── NetworkTimeoutException - └── RequestException (implements RequestExceptionInterface) - └── ResponseException - ├── BadResponseException - │ ├── ClientException - │ └── ServerException - ├── ResponseTransferException - │ └── ResponseTimeoutException - └── TooManyRedirectsException -``` - -`NetworkException` is new in Guzzle 8.0 as the base class for no-response -network failures. Throughout Guzzle 7.x, `ConnectException` implements -`Psr\Http\Client\NetworkExceptionInterface` directly and there is no -Guzzle-specific network base class. Reusable packages that support both Guzzle -7.x and 8.0 should catch `Psr\Http\Client\NetworkExceptionInterface` for -no-response network failures. Applications or packages that require Guzzle 8.0 -may catch `GuzzleHttp\Exception\NetworkException` for all no-response network -failures. Keep catching `ConnectException` only when handling connection -establishment failures specifically. - -Guzzle 8.0 also makes response-aware request failures explicit. Guzzle 7.x does -not have `ResponseException`, and response-aware request failures remain under -`RequestException` throughout Guzzle 7.x. In Guzzle 8.0, `ResponseException` is -the base class for request failures where response headers were received and a -response object is available. `ResponseTransferException` is used for -transfer-level failures after headers, including response-aware network, -protocol, content-decoding, partial-body, and response-body transfer failures. -`BadResponseException` and `TooManyRedirectsException` also extend -`ResponseException`; custom subclasses of those existing classes, or of -`ClientException` and `ServerException`, must not override the now-final -`ResponseException::__construct()`. - -Only this branch exposes response access: `RequestException` no longer stores -responses, no longer accepts a response constructor argument, and no longer has -`getResponse()` or `hasResponse()` methods. Catch `ResponseException`, or test -with `instanceof ResponseException`, before calling `getResponse()`. - -Timeout exception classes are now split by the transport phase the handler can -determine. `ConnectTimeoutException` is thrown for detected connect timeouts -(DNS resolution, TCP connect, proxy CONNECT, or TLS handshake). It extends -`ConnectException`, so code that catches `ConnectException` will also catch -connect timeouts. `NetworkTimeoutException` is thrown for other detected -transport timeouts before response headers are received. It extends -`NetworkException`, but not `ConnectException`. `ResponseTimeoutException` is -thrown for response transfer timeouts after response headers are received. It -extends `ResponseTransferException` and exposes the response. - -Timeouts that originate from caller-supplied PSR-7 streams are not transport -timeouts. Reading the request body stream, including size detection, -stringification, rewind, and upload reads, is a `RequestException` before a -response and a `ResponseException` after response headers. A slow response -`sink` write is a `ResponseException` once a response exists, or a -`RequestException` otherwise. - -If a handler throws `Error`, `TypeError`, or another non-`Exception` `Throwable` -before returning a promise, `Client::sendAsync()` returns a rejected promise. -Waiting on it rethrows the original throwable. During request and response body -handling outside native cURL callbacks, Guzzle still wraps `\Exception` failures -as `RequestException` or `ResponseException` where appropriate, while -non-`Exception` throwables propagate unchanged. Native cURL callbacks remain -different. A throwable from a cURL `sink` write is wrapped as -`ResponseException` when a response was received, or `RequestException` -otherwise, and the cURL handlers continue to report `CURLE_WRITE_ERROR` as -`on_stats` handler error data. - -`HandlerClosedException` is new in Guzzle 8.0. It extends `TransferException` -and is used when an explicitly closed `CurlMultiHandler` rejects transfers that -are still pending, including delayed transfers. Existing Guzzle 7.x code should -not normally see this exception just by upgrading. Guzzle 7.x did not have this -exception or a public cURL handler `close()` method, and destructor cleanup did -not reject pending promises. If you add deterministic cleanup with -`CurlMultiHandler::close()`, wait for or cancel outstanding transfers first, or -handle `HandlerClosedException` or `TransferException` for pending promises you -may still observe. - -When updating catch blocks for Guzzle 8.0, catch the more specific no-response -and response-aware failures before `RequestException`: - -```php -use GuzzleHttp\Exception\NetworkException; -use GuzzleHttp\Exception\RequestException; -use GuzzleHttp\Exception\ResponseException; -use GuzzleHttp\Exception\ResponseTransferException; - -try { - $client->request('GET', $uri); -} catch (NetworkException $e) { - // No-response network failures, including reclassified cURL and stream - // handler failures. -} catch (ResponseTransferException $e) { - $response = $e->getResponse(); - - // Transfer-level failures after response headers were received. -} catch (ResponseException $e) { - $response = $e->getResponse(); - - // Other request failures after response headers were received. -} catch (RequestException $e) { - // Request failures where Guzzle does not expose a response object. -} -``` - -The built-in handlers also reclassify several failures that Guzzle 7.x reported -as `RequestException` or `ConnectException`: - -- Connection-establishment failures (DNS and proxy resolution, TCP connect, TLS - setup, and QUIC connect) are `ConnectException`. -- Other failures with no response, such as send and receive errors and - no-response HTTP/2 and HTTP/3 protocol errors, are `NetworkException`. -- Response-transfer failures after response headers were received are - `ResponseTransferException`. This includes response-aware cURL connection, - network, protocol, content-decoding, partial-body, and response body transfer - failures. Response-body network stalls are `ResponseTimeoutException`, while - `sink` write failures, progress callback failures, deterministic response - size/platform-limit failures, or request-body stalls after headers are plain - `ResponseException` instances. -- Post-transfer response finalization failures are also plain - `ResponseException`. A seekable response sink that fails to rewind does not - become a `ResponseTransferException`. Non-seekable sinks are not rewound, and - source close cleanup after a complete stream-handler download is best effort. -- Other non-transfer or local failures that occur after a response was received - are `ResponseException`. - -This applies to both the cURL and stream handlers; the exact error codes and -messages each one maps onto these classes are an implementation detail. - -The cURL handler no longer treats non-`101` informational responses such as -`100 Continue`, `102 Processing`, or `103 Early Hints` as the final response. If -a cURL transfer fails after receiving only one of those interim responses, -Guzzle now reports a no-response failure such as `NetworkException` instead of a -`ResponseTransferException` carrying the interim `1xx` response. Code that -previously caught this path with `RequestException` or -`RequestExceptionInterface` should catch `NetworkExceptionInterface` or -`TransferException` instead. `101 Switching Protocols` is unchanged and is still -surfaced as a response. - -The built-in cURL and stream handlers now reject a response subject to body -framing when its `Content-Length` is malformed, conflicting, or present with -`Transfer-Encoding`. Equivalent decimal duplicates remain valid, including -leading zeros. Framing failures detected from a complete header block occur -before `on_headers` sees that response or any of its body bytes are delivered, -and raise `ResponseTransferException`. A transport that rejects the block first -can instead report its existing transfer failure. When a handler needs the -length as a PHP integer, a valid value above `PHP_INT_MAX` raises plain -`ResponseException` with the underlying `OverflowException` available through -`getPrevious()`. The stream handler does not impose this platform limit on -`stream => true` responses. Framing validation does not apply to responses to -`HEAD`, any `1xx`, `204`, `304`, or successful `CONNECT`. `205 Reset Content` -remains subject to framing validation. - -The stream handler also raises `ResponseTransferException` after draining a -non-streamed response when a valid, positive `Content-Length` declares more -bytes than it receives. For decoded gzip and deflate, the length applies to -encoded bytes before decompression, and the original values remain in -`x-encoded-content-length`. Valid `stream => true` responses remain lazy after -header validation. - -For chunked responses through the stream handler, the transport resource's -`wrapper_data` can now retain the original `Transfer-Encoding`. This is visible -on streamed bodies and to custom stream factories. On PHP 8.1.20+, 8.2.7+, and -8.3+, `progress` also counts raw chunk framing coalesced with the response -headers. Later socket reads were already counted before decoding. Guzzle's -response continues to expose the decoded body without that consumed header. - -The deprecated `RequestException::wrapException()` method was removed. Create a -`RequestException` directly for request failures where Guzzle does not expose a -response object. Its third constructor argument is now the exception code, -followed by the previous exception. For failures with a response, create -`ResponseException`, `ResponseTransferException`, `ResponseTimeoutException`, -`BadResponseException`, `ClientException`, `ServerException`, or -`TooManyRedirectsException` instead. If you used the removed -`getHandlerContext()` methods to classify failures, use the more granular -exception classes above instead, or use `on_stats` when you need handler timing -or statistics. `GuzzleHttp\Exception\InvalidArgumentException` remains outside -the transfer exception hierarchy and is still used for invalid configuration or -request option values that can be rejected before a transfer starts. - -`RequestException::create()` no longer accepts a handler-context array. Its -fourth argument is now the optional `BodySummarizerInterface`; remove any -handler-context argument and use the new exception classes or `on_stats` when you -need transport details. - -`TransferException` itself now also requires the failing request as its second -constructor argument, and its message argument is no longer optional; -`getRequest()` is available on the entire transfer exception hierarchy. The -subclasses' own constructors, such as `RequestException` and -`ConnectException`, already required a request in Guzzle 7, so only code -constructing the base class changes: replace `new TransferException('msg')` -with `new TransferException('msg', $request)`. - -#### Request Body Framing - -Before sending a body, the built-in cURL and stream handlers now finalize the -request framing. Each `Content-Length` value must be a non-negative decimal -integer that the selected transport can represent. Multiple values are allowed -only when they agree. Guzzle emits a single canonical value, and it must match -the available body size when that size is known. A request cannot include both -`Content-Length` and `Transfer-Encoding`. The only request transfer coding -Guzzle supports is a single `chunked` value on HTTP/1.1. Guzzle removes that -marker and adds an exact length when one is available. Otherwise, it lets the -transport choose valid wire framing. Other codings, coding chains, repeated -`chunked` values, unknown-length HTTP/1.0 bodies, and `chunked` on other HTTP -versions are rejected. - -A `Transfer-Encoding: chunked` header is only a provisional framing marker: -Guzzle treats the request body as content, never as pre-encoded chunks. Callers -that pre-encoded bodies for Guzzle 7's stream handler must remove the chunk -framing before upgrading, or the server receives it as literal content. - -For an unknown-size body with an explicit `Content-Length`, the stream handler -treats that length as the body boundary and does not read beyond it. Both -handlers reject premature EOF and request-body streams that return more bytes -than requested. The stream handler captures an otherwise unknown body once and -sends it with its exact length. Violations raise `RequestException` before a -response, or plain `ResponseException` if a cURL request-body read fails after -response headers. Omit both framing headers and let Guzzle choose. - -`PrepareBodyMiddleware` now adds a provisional `Transfer-Encoding: chunked` -marker only to unknown-size HTTP/1.1 bodies. For other protocol versions, custom -handlers receive no provisional framing header. - -A retry that reuses a consumed non-seekable body now fails if its known -remaining size no longer matches an explicit `Content-Length`. Use a seekable or -otherwise repeatable body for requests that may be retried. - -#### Request Option Validation - -Guzzle 8 rejects additional malformed request option values at the client -boundary. `force_ip_resolve` must be `v4` or `v6`; `protocols` and -`allow_redirects.protocols` may contain only `http` and `https`; and `delay` -must be finite and non-negative. Per-request `cookies` values must be `false` -or a `CookieJarInterface`; the `true` shorthand is only valid in the client -constructor. - -The following 33 options are now validated against their documented types -before a transfer starts. - -The boolean flags `http_errors`, `stream`, and `synchronous` must be `bool`. -`decode_content` and `verify` accept `bool` or `string`, `expect` accepts -`bool` or `int`, and `debug` accepts `bool` or a stream resource. -`allow_redirects` accepts `bool` or an array in which `max` is an `int`; -`strict`, `referer`, and `track_redirects` are `bool`; `on_redirect` is a -callable; and `protocols` is a non-empty array of `http` and `https` strings. - -`crypto_method`, `crypto_method_max`, and `retries` must be `int`. -`connect_timeout`, `read_timeout`, and `timeout` must be `int` or `float`, -`delay` must be a finite, non-negative `int` or `float`, and `version` accepts -`string`, `int`, or `float`. `cert_type` and `ssl_key_type` must be `string`. - -`cert` and `ssl_key` accept a `string` path or a `[path, password]` array -whose optional password may be a `string` or `null`. `auth` accepts `false`, a -`string`, or a `[username, password]` array of strings with an optional third -element that may be a `string` or `null`. - -`headers` must be an array whose values are strings or non-empty arrays of -strings. `form_params` must be an array of strings, numbers, booleans, `null`, -or nested arrays of the same, and its floats must be finite. `multipart` must -be an array of part arrays, each with a `string` or `int` `name`, a `contents` -entry, optional `string` header values, and an optional `string` `filename`. -`protocols` must be a non-empty array containing only `http` and `https`. -`curl` and `stream_context` must be arrays. - -`on_headers`, `on_stats`, `on_trailers`, and `progress` must be callables. -`sink` accepts a `string` path, a stream resource, or a `StreamInterface`, and -per-request `cookies` values must be `false` or a `CookieJarInterface` as -described above. Invalid values throw -`GuzzleHttp\Exception\InvalidArgumentException` naming the option and the -expected types. - -A few build- or version-specific rejections that previously threw -`InvalidArgumentException` now throw `RequestException`, matching how the -HTTP-version capability checks already behave: requesting `crypto_method` TLS -1.3 on a libcurl built without it, and a stream-handler proxy whose raw -transport this PHP build's `stream_get_transports()` does not provide (for -example `tls://` on a build without OpenSSL). The same input works on another -build, so it is a request failure rather than a caller error; a scheme invalid -on every build (such as `udp://` or `ftp://` for a proxy) still throws -`InvalidArgumentException`. Only code catching the specific exception type for -these build-misses needs to change. - -#### Per-request Handler Option - -Guzzle 7 deprecated the `handler` request option with a warning that Guzzle 8 -would ignore request-level handlers. Guzzle 8 rejects the option instead: -passing `handler` in per-request options throws -`GuzzleHttp\Exception\InvalidArgumentException` before a transfer starts. -Silently ignoring the option would fail open — a test that supplied a -per-request `MockHandler` would fall through to the client's real handler and -hit the network. Configure the handler when creating the client, or use a -separate client instance for requests that need a different handler: - -```php -// Guzzle 7 (deprecated, used the request-level handler) -$client->request('GET', '/status', ['handler' => $mockHandler]); - -// Guzzle 8 -$client = new Client(['handler' => HandlerStack::create($mockHandler)]); -$client->request('GET', '/status'); -``` - -#### Body Summaries In HTTP Error Exceptions - -Guzzle's default `http_errors` middleware uses `BodySummarizer` to include a -short response body summary in response-aware exception messages. In Guzzle 7, -creating that summary rewound seekable response bodies to the beginning. In -Guzzle 8, `BodySummarizer` still summarizes from the beginning of the body, but -then restores the body cursor to its previous position. - -Most applications do not need changes. Check only code that catches -response-aware exceptions from `http_errors` and then reads the response body -while relying on exception creation to leave that body rewound. If you need to -read the body from the beginning after catching the exception, call -`Message::rewindBody()` explicitly. - -#### Request Protocol Versions - -Invalid request protocol versions are no longer treated as omitted. Passing -`'version' => ''`, `'version' => 'HTTP/1.1'`, or sending a PSR-7 request whose -protocol version is empty or malformed now fails before the request is sent. - -Omit the `version` request option to use Guzzle's default HTTP/1.1 behavior, or -pass an explicit supported protocol version such as `'1.1'`. Do not include the -`HTTP/` prefix. - -Invalid `version` request option values are still rejected with -`GuzzleHttp\Exception\InvalidArgumentException` before a request is sent. -Empty or malformed protocol versions returned by a `RequestInterface`, and -well-formed but unsupported protocol versions such as HTTP/3 with the stream -handler, now fail with `GuzzleHttp\Exception\RequestException`. If you -previously caught `InvalidArgumentException` or `ConnectException` for request -protocol version failures, catch `RequestException` or `GuzzleException` -instead. - -#### Callback Semantics - -If you use the `progress` request option with the built-in cURL handlers, audit -callbacks for return values. Any truthy return value now aborts the transfer and -rejects the request with `ResponseException` when a response is available, or -`RequestException` otherwise. Return `0`, `false`, or nothing to keep the -transfer running. - -If a cURL `progress` callback throws, catch `ResponseException` for -response-aware failures or `RequestException` for broader request failures, and -inspect `getPrevious()` for the original throwable. The throwable no longer -escapes directly from the native cURL callback. - -The stream handler still ignores `progress` return values. - -Exceptions thrown by `on_stats` remain unwrapped, so existing catch logic for -`on_stats` exceptions does not need to change. The built-in cURL handlers now -release native easy handles before invoking `on_stats`. Built-in handlers now -reject non-callable `on_stats` values before starting the transfer, and the -built-in cURL handlers reject non-callable `on_trailers` values the same way. -Raw callbacks passed through the `curl` request option remain low-level cURL -callbacks and are not normalized by Guzzle. - -The `on_headers` request option callback now receives the request as its second -argument. Existing userland callbacks that accept only the response continue to -work, but callbacks that inspect all arguments, for example with -`func_get_args()` or a variadic parameter, will observe the additional -`Psr\Http\Message\RequestInterface` argument. - -The `on_trailers` request option callback now receives the request as its third -argument, after the trailer array and the response; callbacks that accept only -the first two arguments continue to work. Exceptions thrown by `on_trailers` -now reject the request with `ResponseException` instead of `RequestException`, -and the callback now runs before `on_stats` instead of after it, so `on_stats` -observes an `on_trailers` failure as the transfer's outcome. - -When requests are sent through `GuzzleHttp\Pool`, the pool now appends the -request's iterable key as one extra trailing argument to any `on_headers`, -`on_trailers`, `on_stats`, `progress`, and `allow_redirects.on_redirect` -callbacks provided via its "options" configuration; callable requests yielded -to the pool likewise receive the wrapped callbacks in their options argument. -Existing userland callbacks that do not declare the extra parameter continue -to work unchanged, but callbacks that inspect all arguments, for example with -`func_get_args()` or a variadic parameter, will observe the additional -argument, and arity-strict PHP internal callables used directly may reject the -extra argument and should be wrapped in a userland callback. `progress` return -values are still honoured, and requests sent directly through a client are -unaffected. - -The built-in handlers invoke `on_headers` for the final response headers and for -`101 Switching Protocols`, but not for other informational `1xx` responses such -as `100 Continue` or `103 Early Hints`. Guzzle does not expose a separate Early -Hints API; a dedicated interim-response hook may be added in a future minor -release. - -#### No-Content Response Bodies - -The stream handler never reads the response body of a HEAD request, of a 1xx, -204, or 304 response, or of a 2xx response to a CONNECT request. Such responses -now always carry an empty body created by the configured `stream_factory`; the -transport connection is closed as soon as the headers (and the `on_headers` -callback) complete successfully; the `sink` option is not opened or written -(string path sinks create no file); and `stream => true` yields the empty stream -rather than the live transport stream. In particular, `stream => true` no longer -exposes the live transport for a 2xx CONNECT response. Per RFC 9110 these -responses cannot carry content, so any bytes a misbehaving server sends after -the header section are never read. The cURL handler already behaved this way via -libcurl. - -#### HTTP/2 Multiplexing - -The `multiplex` request option defaults to `Multiplexing::WAIT`: -HTTP/2 requests on the cURL handlers set libcurl's `CURLOPT_PIPEWAIT`, so a -concurrent burst waits for an in-progress connection it may be able to share -instead of dialing one connection per request. Guzzle 7 leaves this to libcurl, -which never waits by default. Pass -`'multiplex' => Multiplexing::EAGER` to restore the old dialing -behaviour, or `Multiplexing::REQUIRE_EAGER`/`Multiplexing::REQUIRE_WAIT` to -fail loudly unless a multiplexed protocol is guaranteed. - -HTTP/2 requests also now require libcurl 7.65.2 or newer, so waiting is never -silently unavailable where HTTP/2 works. - -#### Sink Resource Ownership - -PHP resources passed as the `sink` request option are no longer closed when the -response body is closed or garbage-collected by the built-in cURL and stream -handlers. Applications that relied on Guzzle closing a raw resource sink should -close the resource explicitly or pass a string path instead. - -#### Stream Handler Header Serialization - -The stream handler now trims only the trailing CRLF pair from the serialized -header block it passes to the PHP stream context. Guzzle 7 also removed other -trailing whitespace there, which could drop trailing spaces or horizontal tabs -from the final header value when a request came from a PSR-7 implementation -that does not trim header values. - -#### TLS Minimum Version - -The built-in cURL and stream handlers now default HTTPS requests to TLS 1.2 or -newer. Applications that must connect to legacy TLS 1.0 or TLS 1.1 endpoints can -explicitly lower the minimum version with the `crypto_method` request option: - -```php -$client->request('GET', 'https://legacy.example.com', [ - 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT, -]); -``` - -#### cURL Minimum Version - -Guzzle 8 requires libcurl 7.34.0 or higher with SSL/TLS support when using the -built-in cURL handlers. If this requirement is not met, the default handler -stack will not select cURL automatically, and manually configured cURL handlers -reject requests. - -`GuzzleHttp\Handler\Proxy::wrapTlsFallback()` has been removed. Custom handler -stacks no longer need it; the default handler stack selects the cURL or stream -handler based on this TLS support automatically. - -#### cURL Handler Lifecycle - -Applications that manage built-in cURL handlers or factories directly should -treat closed instances as unusable. Reusing a closed `CurlHandler`, -`CurlMultiHandler`, or `CurlFactory` throws `BadMethodCallException`; create a -new instance instead. - -If `CurlMultiHandler::close()` is called while transfers are pending, those -promises are rejected with `GuzzleHttp\Exception\HandlerClosedException`. -Destructor cleanup remains best-effort and does not reject pending promises. - -A custom `handle_factory` passed to a built-in cURL handler remains -caller-owned. Closing the handler does not close an injected factory. - -#### Timeout Option Validation - -Built-in handlers validate timeout option values when they apply those options. -`timeout` is applied by both built-in transports. `connect_timeout` is applied -by cURL handlers and accepted without effect by the stream handler. -`read_timeout` is applied by the stream handler and accepted without effect by -cURL handlers. When a built-in handler applies a timeout option, positive -values below `0.001` seconds now throw `InvalidArgumentException` instead of -being converted to no timeout. - -#### Stream Handler Timeout Enforcement - -The stream handler now enforces the `timeout` request option as a total -transfer deadline when it buffers the response, matching the cURL handlers' -treatment of the option as the total time of the request. Once the deadline -passes while the response body is being buffered, the transfer is aborted and -the request is rejected with `ResponseTimeoutException`. Each body read is -bounded by the shorter of the `read_timeout` idle timeout and the remaining -total timeout. A response whose header block arrives in small pieces past the -deadline is rejected once the headers are complete, because PHP's HTTP stream -wrapper can only bound the time between packets while waiting for response -headers. In Guzzle 7, the stream handler applies `timeout` only while -connecting and as the idle time between packets, so a server that keeps -sending small pieces of data can extend a request past the configured timeout -indefinitely and still produce a successful response. - -With the `stream` request option enabled, a response whose header block -completes past the deadline is rejected in the same way, and the response -carried by the exception has a closed body. The deadline does not apply to the -streamed response body, which is governed by the `read_timeout` idle timeout. - -#### Stream Handler Timeout Model - -The stream handler now treats `timeout` and `read_timeout` as orthogonal -controls. `timeout` is the total deadline for completing a buffered request or -obtaining a streamed response, with no deadline by default. `read_timeout` is -an idle timeout bounding how long the connection may sit silent at any stage, -while connecting, waiting for response headers, and between reads on the body, -defaulting to 60 seconds; `0` disables it. Any received data resets the idle -clock; nothing resets the deadline. - -In Guzzle 7, both behaviours fall back to the `default_socket_timeout` ini -setting (60 seconds by default), `timeout` also acts as the idle cap, and -`read_timeout` only governs streamed reads. Set `read_timeout` explicitly to -tune or disable idle protection; `default_socket_timeout` no longer has any -effect on the stream handler. - -#### Connect Timeout Default - -The built-in cURL handlers now default the connect timeout to 60 seconds -instead of libcurl's 300, and `connect_timeout` set to `0` now disables the -connect timeout instead of selecting the 300-second libcurl default, matching -how `0` disables the `timeout` and `read_timeout` options. The stream handler -still accepts `connect_timeout` without effect; its connect phase is bounded -by the `read_timeout` idle timeout, which shares the 60-second default. - -#### Stream Handler Header Injection - -The stream handler no longer lets PHP's HTTP stream wrapper inject header -values from ini configuration. A request without a User-Agent header no longer -sends the `user_agent` ini value, and the `from` ini value is no longer sent: -the wrapper offers no way to omit the From header entirely, so deployments -that configure the ini send an empty From header instead of the configured -address. Both now match the cURL handlers, which ignore those ini settings. -Set the headers explicitly on the request or client to send them. - -#### Proxy Option Validation - -The `proxy` request option is validated more strictly. Proxy values must be -strings, and the `proxy['no']` value may be either an array of strings or a -comma- or whitespace-delimited string such as the value from the `NO_PROXY` -environment variable. Other values now throw `InvalidArgumentException`. -Guzzle 7 skips invalid `no` entries instead of rejecting them. - -When a request uses HTTP/3 and a proxy is resolved from the environment, the -request is now downgraded to HTTP/2 or HTTP/1.1 in the same way as for proxies -configured through the `proxy` request option, since current libcurl releases -cannot carry HTTP/3 over an HTTP proxy. A request excluded by the environment -`no_proxy` list stays direct and keeps HTTP/3. - -#### No-Proxy Interpretation - -No-proxy lists are interpreted identically everywhere they appear — the option's -`no` list, the client-mapped `NO_PROXY` environment variable, and the -environment `no_proxy` consulted by the built-in handlers — and the shared -interpretation follows libcurl's. Compared to Guzzle 7, this changes how string -lists are tokenized, how leading-dot entries match, and what a match means. - -String `no` lists are split on whitespace as well as commas, and a leading-dot -entry such as `.example.com` now matches `example.com` as well as its -subdomains, exactly like the bare `example.com` entry. Both changes align the -option's matching with libcurl's interpretation of `no_proxy`, which the -environment path already followed. In Guzzle 7, the client mapping removes -spaces from `NO_PROXY` values, while the option form treats space-joined -values as a single entry that never matches and limits leading-dot entries to -subdomains. - -A matching `no` entry now applies even when the array does not configure a proxy -for the request scheme: the request goes direct, and the built-in handlers do -not fall back to an environment proxy for it. The `no` list is also validated in -that case. Guzzle 7 ignores the `no` list entirely unless the array selects a -proxy for the request scheme. - -#### Proxy URL Validation - -The stream handler now throws `InvalidArgumentException` for any proxy URL -whose scheme it cannot execute: `https://`, SOCKS (`socks4://`, `socks4a://`, -`socks5://`, `socks5h://`), and anything other than `http://` or a raw PHP -transport such as `tcp://`, `ssl://`, or `tls://`. Guzzle 7 passed these to -PHP, which failed later with an "unable to find the socket transport" error. -The cURL handlers reject a `proxy` URL whose scheme libcurl cannot use as a -proxy with the same exception. Raw PHP transport values still pass through the -stream wrapper unchanged. - -Both handlers also reject a malformed proxy URL (an invalid host, an -out-of-range port, or leading junk before the scheme) up front with the same -`InvalidArgumentException`, instead of passing it to libcurl or PHP to fail on -later. - -An `http://` or scheme-less proxy that omits the port now defaults to 1080, -libcurl's default HTTP proxy port, so `proxy.example.com` resolves to -`tcp://proxy.example.com:1080`. Guzzle 7 passed a port-less proxy through -unchanged, which PHP's stream wrapper could not use because it requires an -explicit port. - -#### Proxy Tunnels and HTTPS Proxies - -Requests tunneled through an HTTP proxy, meaning an `https://` target sent -through an `http://` or `https://` proxy, or a tunnel forced with raw `curl` -options, now require libcurl 7.54.0 or newer. HTTPS proxies (an `https://` -proxy URL, where the connection to the proxy itself is encrypted) also now -require libcurl 7.54.0 built with HTTPS-proxy support, raised from the 7.52.0 -floor used in Guzzle 7. The built-in cURL handlers reject such requests on -older libcurl with a `RequestException` before they are sent, matching the -other build- and version-specific capability checks. - -On supported libcurl, the proxy's CONNECT reply is suppressed with -`CURLOPT_SUPPRESS_CONNECT_HEADERS`. Guzzle 7 delivered the interim -`200 Connection established` header block to the `on_headers` callback and -could attach it to exceptions as a response. In Guzzle 8, `on_headers` -observes only origin responses, and a tunneled transfer failure is classified -by its transport phase instead of as a response failure carrying the proxy's -interim reply. - -#### Proxy-Authorization Headers - -In Guzzle 8, every first-class `Proxy-Authorization` field handled by a built-in -cURL handler requires libcurl 7.37.0 or newer with proxy header separation -support, regardless of Guzzle's predicted route. This includes an empty field, -which keeps its cURL header-control meaning in the proxy-only list, and requests -predicted to be direct, no-proxy-bypassed, or sent through SOCKS. A request is -rejected with a `RequestException` before network I/O when separation is not -available. Guzzle 7 instead omits the field on those known non-HTTP-proxy routes -and requires separation only when it cannot safely discard the field. - -Guzzle 8 also rejects a raw `CURLOPT_PROXYHEADER` list when proxy header -separation is unavailable. Guzzle 7.15 only deprecates the raw option and passes -it through to the installed PHP cURL extension and libcurl. - -When the stream handler selects a proxy, Guzzle 8 rejects any first-class -`Proxy-Authorization` field, including an empty value, because PHP streams have -no proxy-only header channel. Guzzle 7 instead accepts exactly one value, -rejects carriage returns and line feeds, and adds one canonical proxy -authorization line after selecting the proxy. That first-class value, including -an empty one, takes precedence over Basic credentials in proxy URL userinfo; -multiple values are rejected. Direct and no-proxy-bypassed stream requests omit -the field in both versions. Configure Basic proxy credentials in the proxy URI -or use a cURL handler for a first-class proxy authorization field. - -#### Proxy Tunnels Under Shared Connection Caches - -From libcurl 7.57.0, a cURL share handle passed directly to `CurlFactory` and -Guzzle's worker-global persistent sharing pools are treated as opaque -connection caches: anonymous HTTP and HTTPS proxy tunnels are forced onto -fresh, non-reusable connections, and `TransportSharing::PERSISTENT_REQUIRE` -rejects them. Guzzle 7 applies the same policy to its configured share handles -and additionally rejects the deprecated request-level `CURLOPT_SHARE` option -for proxy tunnels there; Guzzle 8 rejects that raw option outright, so only -the configured and persistent surfaces exist. Handler-lifetime -`transport_sharing` keeps ordinary tunnel reuse because its shares never lock -connections. - -#### Proxy Environment Variable Resolution - -The stream handler now resolves proxies from the environment the same way the -cURL handlers do. When the `proxy` request option makes no decision for a -request, it reads `http_proxy` (lowercase only), `https_proxy`/`HTTPS_PROXY`, -and `all_proxy`/`ALL_PROXY`, and consults `no_proxy`/`NO_PROXY` — including `*` -to disable proxying entirely. The uppercase `HTTP_PROXY` is never read (an -httpoxy defense), empty values are treated as unset, and on Windows proxy -environment variables are resolved only under the CLI SAPI. Guzzle 7's stream -handler never consulted the environment; it honored only the explicit `proxy` -option. - -Because the stream handler cannot tunnel or speak TLS to a proxy, an -`https_proxy` or `all_proxy` set to an `https://` or SOCKS URL now throws -`InvalidArgumentException`, exactly as the same value passed through the `proxy` -option already does, instead of connecting directly. An environment `http://` -proxy used for an "https" request still fails at connect time, because the -handler cannot open a CONNECT tunnel. - -To ignore the proxy environment variables for a request or client, set the -`proxy` option to `''`: an explicit option decision is final, so this forces a -direct connection with no environment fallback. To send only selected hosts -directly, add them to the `proxy` option's `no` list, or list them in -`no_proxy`/`NO_PROXY` (`*` bypasses every host). These work identically on both -built-in handlers. - -#### Handler-Specific Option Overrides - -Handler-specific overrides remain available for finer transport control when -they do not conflict with Guzzle-managed behavior. The built-in cURL handlers -now reject raw cURL options that override request method, URI, body, headers, -timeouts, redirects, proxy URLs and types, TLS verification or client -credentials, progress/debug callbacks, sink handling, cookies, protocols, -connection coalescing, or cURL share handles. Use first-class Guzzle request -options for those settings. Allowed raw cURL header-list options, such as -`CURLOPT_PROXYHEADER`, now accept only strings or stringable objects as entries. - -The cURL handlers also reject stream-only `stream_context` options, but accept -`read_timeout` without effect. The stream handler rejects cURL-only options it -cannot honor, but accepts `connect_timeout` without effect. These timeout options -are intentionally best-effort so shared request configuration can be reused -across transports. - -#### Expect: 100-Continue Injection - -Automatic `Expect: 100-Continue` injection now applies only to HTTP/1.1 requests. -HTTP/1.0, HTTP/2, and HTTP/3 requests do not receive the header from Guzzle's -body-preparation middleware. - -The stream handler rejects an explicit `expect` option when it results in an -`Expect` header, because PHP streams do not support the `100-Continue` workflow. -Set `expect => false` for stream-handler requests that must avoid this rejection. - -#### Native Type Declarations - -Guzzle 8 adds native parameter and return types where PHP 7.4 allows. Code -overriding affected methods must update method signatures accordingly. - -`SetCookie::__toString()` now returns `string`. - -`HandlerStack::remove()` now throws `TypeError` when passed a value that is -neither a callable nor a middleware name string. - -`Pool::__construct()` and `Pool::batch()` now require iterable request collections. - -`SetCookie::setSecure()`, `SetCookie::setDiscard()`, and -`SetCookie::setHttpOnly()` now require boolean parameters. Calls from files that -declare strict types will throw `TypeError` for non-boolean values. - -`SetCookie::getExpires()` now returns `int|null`. Invalid textual expiration -dates are treated as `null`. - -#### IDN Conversion Option Types - -The `idn_conversion` request option must be `true`, `false`, `null`, or an -integer `IDNA_*` bitmask. Numeric strings and floats that previously worked -through PHP scalar coercion are no longer accepted. - -Integer `0` remains a valid option bitmask. Use `false` or `null` to disable IDN -conversion. - -#### Generic Promise and Structured PHPDoc Types - -Guzzle's async client APIs, handlers, and middleware callable annotations now use -generic `PromiseInterface` PHPDoc types. This is a -static-analysis-only change at runtime, but projects with stricter static -analysis may see new or different diagnostics. - -Code using unparameterized promise types continues to work. If your project -implements Guzzle client interfaces, provides custom handlers or middleware, or -uses stricter static analysis, you may need to update your PHPDoc annotations to -include promise fulfillment and rejection types. - -Public client config, request option, pool option, handler, middleware, mock -handler, and history middleware PHPDoc now uses structured array and callable -shapes. This does not change runtime behavior, but stricter static analysis may -now report invalid option keys, invalid option value types, or lower-arity -callback annotations that were previously hidden behind loose `array` or -`callable` PHPDoc. - -If your project implements `ClientInterface`, extends client behavior through -traits, builds custom handlers or middleware, or documents reusable request -option arrays, update those PHPDoc annotations to match the supported request -option and callback shapes. - -#### Multipart Request Serialization - -Guzzle 8 uses Guzzle PSR-7 3.x for multipart request bodies. Multipart parts -created through the `multipart` request option no longer include generated -per-part `Content-Length` headers by default. If your tests compare raw -multipart payloads, remove those generated part headers from expected strings. - -Generated multipart `Content-Disposition` header `name` and `filename` -parameters now escape double quotes, carriage returns, and line feeds as `%22`, -`%0D`, and `%0A`. Literal backslashes and other characters are serialized -unchanged, matching browser multipart form submission behavior. Custom multipart -part header names and values, and explicit PSR-7 multipart boundaries, are also -validated by PSR-7. - -Custom multipart part header values also preserve trailing spaces and tabs in the -serialized request body, so raw body snapshots or signatures may need updated -expectations. - -Guzzle now quotes the `boundary` parameter in generated -`Content-Type: multipart/form-data` headers when an explicit PSR-7 -`MultipartStream` boundary contains characters that require quoting. -Automatically generated boundaries are unchanged. - -You can still pass an explicit `Content-Length` header in a multipart element's -`headers` array if a non-standard peer requires it. - -#### Cross-Origin Redirect Referer Header - -With the optional `referer` redirect setting enabled (off by default), Guzzle -now sends only the request origin (scheme, host, and port) in the `Referer` -header on a cross-origin redirect. It previously sent the referring URI, -including the path, query string, and fragment, which could leak secrets such -as reset tokens or signed query parameters to the new origin. - -Same-origin redirects still send the path and query, with any user information -and fragment removed. The `Referer` header is omitted entirely when the scheme -changes, including an `https` to `http` downgrade. This matches the -`strict-origin-when-cross-origin` policy that modern browsers use by default. - -If you relied on the full URL crossing origins, collect it with the -`on_redirect` setting, or disable automatic redirects and follow them manually. - -#### Automatic Redirects - -Guzzle now follows only the redirect status codes 301, 302, 303, 307, and 308 -when `allow_redirects` is enabled. Other 3xx responses, including 300, 304, 305, -and 306, are returned to the caller unchanged even when they carry a Location -header, in line with RFC 9110 section 15.4. Code that relied on Guzzle following -one of those responses should handle it directly or inspect it with an -on_redirect callback. - -#### Secure Cookie Integrity - -Guzzle 8 ignores `Secure` cookies received over non-HTTPS requests. It also -ignores an insecure cookie received over a non-HTTPS request when its name and -domain overlap an existing `Secure` cookie and its path falls within the -existing cookie's protected path. This includes deletions sent with -`Max-Age=0`. - -Guzzle 7 accepted these cookies. Applications using plain HTTP development -servers that send `Secure` cookies must use HTTPS or remove the attribute. -Cookies inserted directly through `CookieJar::setCookie()` or restored from -persistence are not rejected because they have no response origin. Existing -`Secure` records still protect against later cookies received over HTTP. - -#### Cookie Name Prefixes - -`CookieJar::extractCookies()` now recognizes the `__Secure-` and `__Host-` -prefixes case-insensitively. `__Secure-` response cookies must be `Secure`. -`__Host-` response cookies must also be host-only, include a `Path` attribute, -and use the root path. A bare `Path` without `=` remains ignored. Invalid -prefixed response cookies are ignored. - -Cookie names remain case-sensitive, so differently cased names remain distinct. -Correct the attributes or rename a legacy response cookie that used a reserved -prefix without satisfying its requirements. Cookies inserted directly through -`CookieJar::setCookie()` and restored persisted records are unchanged. - -#### Host-Only Cookies - -Cookies extracted from responses without a `Domain` attribute are now stored as -host-only cookies. They are sent only to the exact host that set them. - -Previously, Guzzle stored these cookies with the request host as a normal domain -cookie, so they could also be sent to subdomains. Applications relying on that -behavior should use an explicit `Domain` attribute. - -`SetCookie::toArray()` may include `HostOnly => true` for host-only cookies. - -#### Cookie Domain Normalization - -Cookie domains with multiple leading dots, such as `Domain=..example.com`, are -no longer normalized twice during matching. Such malformed domains are rejected -instead of matching `example.com` or its subdomains. - -#### Cookie Max-Age Expiration - -Cookies with `Max-Age=0` or a negative `Max-Age` are now treated as immediately -expired. When such a cookie is added to a `CookieJar`, it removes a matching -stored cookie instead of being retained as a normal cookie. - -#### SetCookie Constructor Field Validation - -`SetCookie` constructor arrays no longer coerce invalid field values. Cookie -names, values, domains, paths, max-age values, expiry values, and boolean flags -must use the documented types. Invalid constructor values now throw -`InvalidArgumentException`. - -```php -// Valid: -new SetCookie([ - 'Name' => 'foo', - 'Value' => 'bar', - 'Domain' => 'example.com', - 'Secure' => true, -]); - -// Invalid in 8.0: -new SetCookie([ - 'Name' => false, - 'Value' => 'bar', -]); -``` - -Cookies parsed from normal `Set-Cookie` headers continue to be normalized by -`SetCookie::fromString()`. Attributes that require a value (`Domain`, `Path`, -`Expires`, `Max-Age`) are ignored when they appear without one. - -#### SetCookie Max-Age Precedence - -`SetCookie` now follows RFC cookie precedence when both `Max-Age` and `Expires` -are present. A valid `Max-Age` value controls the effective expiration time, -including `Max-Age=0` expiring the cookie immediately, even when `Expires` is a -future date. - -#### Cookie Max-Age Parsing - -`SetCookie::fromString()` now ignores float-like or exponent `Max-Age` values -such as `0.5`, `1.5`, or `1e3`. Guzzle 7 truncated these numeric forms toward -zero. Use integer-second `Max-Age` values. - -#### Set-Cookie Parsing Whitespace - -`SetCookie::fromString()` now trims cookie names, cookie values, and attribute -segments with the RFC 6265 whitespace characters, space and horizontal tab. -Guzzle 7 also trimmed line feeds, carriage returns, null bytes, and vertical -tabs. Header values produced by Guzzle PSR-7 cannot contain those bytes, so -this only affects strings passed to `SetCookie::fromString()` directly. - -#### CookieJar::clear Null Semantics - -`CookieJar::clear()` now treats only `null` as an omitted path or name. -Previously, falsy path or name values such as `'0'` or `''` could be interpreted -as omitted and clear a broader set of cookies than intended. - -If you call `clear()` to clear all cookies, continue passing no arguments: - -```php -$jar->clear(); -``` - -If you pass a path or name, that value is now treated as provided. - -#### Cookie Name Lookup - -`CookieJar::getCookieByName()` now matches cookie names case-sensitively. If a -jar contains distinct cookies such as `SID` and `sid`, retrieve each one with the -exact stored name. - -#### Cookie Jar Persistence - -`FileCookieJar` and `SessionCookieJar` can no longer be restored with -`unserialize()`; attempting to unserialize either jar now throws a -`LogicException`. Rebuild persisted jars instead: `new FileCookieJar($path)` -reloads the persisted cookie file when it exists, and -`new SessionCookieJar($key)` reloads the cookie data stored in the session. - -`FileCookieJar` now writes its cookie file with owner-only permissions (`0600`), -so persisted cookies are not world-readable under the default umask; if another -user or process must read the file, adjust its permissions after saving. Saved -cookie files also JSON-escape tag characters without changing cookie values. - -Persisted cookie data must now be a JSON list. Each list entry must decode to an -array, and recognized `SetCookie` fields must use their documented constructor -types. Malformed JSON, an invalid stored shape, or a recognized field with the -wrong type causes a `RuntimeException`. Cookie records are constructed before -any are passed to `setCookie()`, so such failures leave the jar unchanged. -Numeric or string-keyed JSON objects must be converted to lists. - -Every cookie record must include an explicit boolean `HostOnly` marker. The -built-in jars write this marker automatically. Delete or rotate older nonempty -data without it, or annotate each record only when its original `Domain` -semantics are known. - -In Guzzle 7, malformed JSON in a cookie file and `FileCookieJar` encoding -failures threw `GuzzleHttp\Exception\InvalidArgumentException`. Now they throw -`RuntimeException`, consistently with other persistent cookie failures. Both -jars expose the native `JsonException` through `getPrevious()` when JSON -encoding or decoding fails. - -An empty cookie file remains a no-op. A missing or `null` session value still -means no stored cookie data. Any other session value must be a string containing -a JSON list; malformed JSON and an empty string are rejected. `SessionCookieJar` -does not replace the stored value when construction fails. - -#### Logging Middleware Formatter Types - -`GuzzleHttp\MessageFormatter` is now final. Applications that extended -`MessageFormatter` should implement `GuzzleHttp\MessageFormatterInterface` -instead and pass the custom formatter to `GuzzleHttp\Middleware::log()`. - -`Middleware::log()` now requires its formatter argument to implement -`MessageFormatterInterface`. Passing `new MessageFormatter()` still works -because `MessageFormatter` implements `MessageFormatterInterface`. Passing any -other value now fails with PHP's native `TypeError` instead of Guzzle's previous -`LogicException`. - -```php -use GuzzleHttp\MessageFormatterInterface; -use GuzzleHttp\Middleware; -use Psr\Http\Message\RequestInterface; -use Psr\Http\Message\ResponseInterface; - -final class RedactingFormatter implements MessageFormatterInterface -{ - public function format( - RequestInterface $request, - ?ResponseInterface $response = null, - ?\Throwable $error = null - ): string { - return $request->getMethod().' '.$request->getUri()->getPath(); - } -} - -$stack->push(Middleware::log($logger, new RedactingFormatter())); -``` - -#### Built-in Handler Inheritance - -`GuzzleHttp\Handler\CurlFactory`, `GuzzleHttp\Handler\CurlHandler`, -`GuzzleHttp\Handler\CurlMultiHandler`, `GuzzleHttp\Handler\MockHandler`, and -`GuzzleHttp\Handler\StreamHandler` are now final. - -Applications that extended `CurlFactory` should implement -`GuzzleHttp\Handler\CurlFactoryInterface` instead. Applications that extended -`CurlHandler`, `CurlMultiHandler`, `MockHandler`, or `StreamHandler` should use -composition instead: wrap a handler instance in a custom callable or provide a -custom handler rather than subclassing the built-in handler. - -#### Custom cURL Handle Factories - -Custom `GuzzleHttp\Handler\CurlFactoryInterface` implementations that create or -mutate `GuzzleHttp\Handler\EasyHandle` instances must assign values compatible -with EasyHandle's documented public property types. Several EasyHandle -bookkeeping properties now use native property types, so assigning incompatible -values to those properties raises `TypeError`. - -Custom factories must assign the request and sink state before returning an -EasyHandle to Guzzle because those properties are required typed invariants. -Reading them before assignment raises PHP's uninitialized typed-property `Error`. - -The native cURL handle properties intentionally remain untyped because PHP 7.4 -represents cURL handles as resources while PHP 8 represents them as cURL handle -objects. Custom factories must still unset `$easy->handle` when releasing an -easy handle, as required by `CurlFactoryInterface::release()`. - -#### Built-In Handler Constructor Options - -`CurlHandler`, `CurlMultiHandler`, and `StreamHandler` now reject unknown -constructor option keys with `GuzzleHttp\Exception\InvalidArgumentException`. -Remove misspelled or application-specific keys before constructing built-in -handlers. - -`CurlMultiHandler` now rejects cURL multi options that cannot be applied by the -installed runtime libcurl. Values passed through the constructor `options` key -must be an array keyed by integer `CURLMOPT_*` constants. Guzzle 7 already -fails closed when a named connection cap cannot be applied; Guzzle 8 extends -this rejection to every cURL multi option, including raw `CURLMOPT_*` entries -that Guzzle 7 only warns about. - -`CurlMultiHandler` now rejects `CURLMOPT_PIPELINING` in the constructor -`options` array, deprecated since Guzzle 7.15. Pass `Multiplexing::NONE` as the -`multiplex` client option or, when constructing the handler yourself, as the -`multiplex` constructor option to disallow multiplexing on the handler -(replacing `CURLPIPE_NOTHING` and `0`), or remove the option entirely for -multiplex-capable behavior (replacing masks containing `CURLPIPE_MULTIPLEX`); -multiplexing is on by default from libcurl 7.62, except on 7.65.0 and 7.65.1 -where a regression dropped the default, and Guzzle 8's HTTP/2 floor of libcurl -7.65.2 is the version that restored it, so removing the option preserves -multiplex-capable behavior on every supported HTTP/2 runtime. `CURLPIPE_HTTP1` -and `1` also map to `Multiplexing::NONE` on libcurl 7.62 and newer, where -HTTP/1.1 pipelining is a no-op; on older libcurl they enabled HTTP/1.1 -pipelining, which has no replacement. A handler configured with -`Multiplexing::NONE` wins over the default `WAIT` request mode: default requests -run without waiting, explicitly requested wait modes are rejected as a -configuration conflict when the transfer would actually wait, and the required -modes are always rejected. `Multiplexing::NONE` is also accepted as a request -option value exactly where its guarantee - the transfer does not share its -connection with any concurrent transfer - holds and can be verified; see the -`multiplex` request option documentation for the acceptance rules. - -`CurlMultiHandler` now rejects `CURLMOPT_MAX_HOST_CONNECTIONS` and -`CURLMOPT_MAX_TOTAL_CONNECTIONS` entries in the constructor `options` array. Use -the `max_host_connections` and `max_total_connections` client options when -Guzzle creates the default handler, or the same named `CurlMultiHandler` -constructor options when constructing the handler directly. - -Direct magic access to `CurlMultiHandler::$_mh` has been removed. This was an -undocumented internal lazy cURL multi handle. Applications that used it to set -`CURLMOPT_*` options should pass those values through the `options` key of the -`CurlMultiHandler` constructor. - -#### Progress Callback Parameter Types - -The built-in handlers now pass integer byte counts to `progress` callbacks. -Callbacks with `int` parameter types continue to work, and callbacks with -`float` parameter types can still receive integer byte counts in PHP. If a -callback used other scalar parameter types, update it to accept integers or -remove the scalar parameter declarations. - -#### CurlMultiHandler Select Timeout - -The `GUZZLE_CURL_SELECT_TIMEOUT` environment variable is no longer read. Pass -the `select_timeout` option to `CurlMultiHandler` instead. The -`select_timeout` option must be numeric, finite, and non-negative. It must be -`0` or greater than or equal to `0.001` seconds. - -#### Removed Client::__call and ClientInterface::getConfig - -`Client::__call()` has been removed. The typed HTTP verb methods (`get()`, -`head()`, `put()`, `post()`, `patch()`, `delete()`, and their `*Async()` -variants) have been real methods since Guzzle 7.0 and are unaffected. Only -verbs without a typed method lose their magic form: calls such as -`$client->options($uri)`, `$client->trace($uri)`, -`$client->optionsAsync($uri)`, or any custom verb such as -`$client->purge($uri)` now fail with a PHP undefined method error. Use -`request()` or `requestAsync()` with an explicit method instead: - -```php -// 7.x -$response = $client->options('http://example.com'); - -// 8.0 -$response = $client->request('OPTIONS', 'http://example.com'); -``` - -`ClientInterface::getConfig()` has been removed from the interface. The -concrete `Client::getConfig()` method remains available and is no longer -deprecated. Code reading configuration through a `ClientInterface`-typed -value must type against `Client` instead, and custom `ClientInterface` -implementations no longer need to provide `getConfig()`, although keeping the -method still satisfies the interface. - -#### Removed Function and JSON Helper APIs - -The deprecated `GuzzleHttp` namespace functions were removed, along with the -`functions.php` and `functions_include.php` files and the Composer `files` -autoload entry that loaded them on every request. - -Replace namespaced function calls with their native or class equivalents: - -```php -// Before: -use function GuzzleHttp\json_decode; - -$data = json_decode($json); - -// After: -$data = \json_decode($json, false, 512, \JSON_THROW_ON_ERROR); -``` - -| Original Function | Replacement | -|-------------------|-------------| -| `describe_type` | PHP's `get_debug_type` | -| `headers_from_lines` | `Utils::headersFromLines` | -| `debug_resource` | `Utils::debugResource` | -| `choose_handler` | `Utils::chooseHandler` | -| `default_user_agent` | `Utils::defaultUserAgent` | -| `default_ca_bundle` | none; use the system trust store or `verify` | -| `normalize_header_keys` | `Utils::normalizeHeaderKeys` | -| `is_host_in_noproxy` | `ProxyOptions::isHostInNoProxy` | -| `json_decode` | PHP's `json_decode` with `JSON_THROW_ON_ERROR` | -| `json_encode` | PHP's `json_encode` with `JSON_THROW_ON_ERROR` | - -The deprecated `Utils::jsonDecode()` and `Utils::jsonEncode()` methods have -also been removed. Use PHP's native JSON functions with -`JSON_THROW_ON_ERROR`. Failures throw `JsonException` directly. - -See the "Removed Proxy Helper API" section below for `is_host_in_noproxy()` -behavior differences. The deprecated `Utils::defaultCaBundle()` and the -internal `Utils::isUriInNoProxy()` helpers have also been removed; use the -`verify` option and `ProxyOptions::isUriInNoProxy()` respectively. - -#### Removed Middleware Helper APIs - -`RetryMiddleware::exponentialDelay()` has been removed. The retry middleware -continues to use the same exponential backoff calculation by default. This only -affects code that called the static helper directly; inline that calculation or -pass a custom delay callable to `Middleware::retry()`. - -`RedirectMiddleware::$defaultSettings` has been removed. Use -`RedirectMiddleware::DEFAULT_SETTINGS` instead. - -#### Removed Proxy Helper API - -`Utils::isHostInNoProxy()` has been removed. - -Use `ProxyOptions::resolve()` when implementing Guzzle-compatible proxy handling -in a custom handler. Use `ProxyOptions::isUriInNoProxy()` when checking whether -a request URI matches a no-proxy list. Use `ProxyOptions::isHostInNoProxy()` -only when checking a host string directly. The environment-variable fallback -performed by the built-in handlers is not part of `ProxyOptions::resolve()`; -custom handlers that want it must implement their own environment lookup. - -These helpers share the normalized no-proxy matching of the Guzzle 7 `Utils` -helpers: domain matching is case-insensitive and ignores a single trailing DNS -root dot, IP literals are normalized before comparison, and CIDR entries match -IP literal hosts. They differ from the Guzzle 7 helpers in three ways — they -throw `InvalidArgumentException` for non-string list entries where Guzzle 7 -skips them, a leading-dot entry such as `.example.com` also matches the bare -domain, and string no-proxy lists are split on whitespace as well as commas. - -#### Removed Type Description Helper API - -`Utils::describeType()` has been removed. Use PHP's `get_debug_type()` instead. - -#### Non-instantiable Utility Classes - -Static utility and constant classes such as `GuzzleHttp\Middleware`, -`GuzzleHttp\Utils`, `GuzzleHttp\RequestOptions`, -`GuzzleHttp\Handler\HeaderProcessor`, and `GuzzleHttp\Handler\Proxy` now have -private constructors. `GuzzleHttp\Handler\Proxy` is also declared `final`. - -These classes only expose static members. Replace any accidental instantiation -with static method calls or constant access. - -#### Removed HandlerStack String Dump - -`HandlerStack::__toString()` has been removed. - -#### Native PHP Serialization of Runtime Objects - -Runtime objects such as clients, handler stacks, middleware, handlers, pools, -mock handlers, cURL transport objects, and persistent cookie jars no longer -support native PHP `serialize()` or `unserialize()`. Persist configuration or -cookie data explicitly and rebuild runtime objects during bootstrap. - -#### Sensitive Stack Trace Arguments - -Guzzle 8 marks credential-bearing parameters with `SensitiveParameter`. On PHP -8.2 and later, selected exception-trace arguments are represented by -`SensitiveParameterValue` instead of exposing the original argument. PHP 7.4 -through 8.1 do not redact trace arguments. The attribute does not redact logs, -exception messages, HTTP traffic, properties, captured variables, return -values, custom callback frames, or the separate `$this`/`object` entry in -explicit backtraces. PHP 8.2 also does not reliably redact named values -collected by an attributed variadic; PHP 8.3+ does. - -6.0 to 7.0 ----------- - -In order to take advantage of the new features of PHP, Guzzle dropped the support -of PHP 5. The minimum supported PHP version is now PHP 7.2. Type hints and return -types for functions and methods have been added wherever possible. - -Please make sure: -- You are calling a function or a method with the correct type. -- If you extend a class of Guzzle; update all signatures on methods you override. - -#### Other Backwards Compatibility Breaking Changes - -- Class `GuzzleHttp\UriTemplate` is removed. -- Class `GuzzleHttp\Exception\SeekException` is removed. -- Classes `GuzzleHttp\Exception\BadResponseException`, `GuzzleHttp\Exception\ClientException`, - `GuzzleHttp\Exception\ServerException` can no longer be initialized with an empty - Response as argument. -- Class `GuzzleHttp\Exception\ConnectException` now extends `GuzzleHttp\Exception\TransferException` - instead of `GuzzleHttp\Exception\RequestException`. -- Function `GuzzleHttp\Exception\ConnectException::getResponse()` is removed. -- Function `GuzzleHttp\Exception\ConnectException::hasResponse()` is removed. -- Constant `GuzzleHttp\ClientInterface::VERSION` is removed. Added `GuzzleHttp\ClientInterface::MAJOR_VERSION` instead. -- Function `GuzzleHttp\Exception\RequestException::getResponseBodySummary` is removed. - Use `\GuzzleHttp\Psr7\get_message_body_summary` as an alternative. -- Function `GuzzleHttp\Cookie\CookieJar::getCookieValue` is removed. -- Request option `exceptions` is removed. Please use `http_errors`. -- Request option `save_to` is removed. Please use `sink`. -- Pool option `pool_size` is removed. Please use `concurrency`. -- We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility. -- The `get`, `head`, `put`, `post`, `patch`, `delete`, `getAsync`, `headAsync`, `putAsync`, `postAsync`, `patchAsync`, and `deleteAsync` methods are now implemented as genuine methods on `GuzzleHttp\Client`, with strong typing. The original `__call` implementation remains unchanged for now, for maximum backwards compatibility, but won't be invoked under normal operation. -- The `log` middleware will log the errors with level `error` instead of `notice` -- Support for international domain names (IDN) is now disabled by default, and enabling it requires installing ext-intl, linked against a modern version of the C library (ICU 4.6 or higher). - -#### Native Functions Calls - -All internal native functions calls of Guzzle are now prefixed with a slash. This -change makes it impossible for method overloading by other libraries or applications. -Example: - -```php -// Before: -curl_version(); - -// After: -\curl_version(); -``` - -For the full diff you can check [here](https://github.com/guzzle/guzzle/compare/6.5.4..7.0.0). - -5.0 to 6.0 ----------- - -Guzzle now uses [PSR-7](https://www.php-fig.org/psr/psr-7/) for HTTP messages. -Due to the fact that these messages are immutable, this prompted a refactoring -of Guzzle to use a middleware based system rather than an event system. Any -HTTP message interaction (e.g., `GuzzleHttp\Message\Request`) need to be -updated to work with the new immutable PSR-7 request and response objects. Any -event listeners or subscribers need to be updated to become middleware -functions that wrap handlers (or are injected into a -`GuzzleHttp\HandlerStack`). - -- Removed `GuzzleHttp\BatchResults` -- Removed `GuzzleHttp\Collection` -- Removed `GuzzleHttp\HasDataTrait` -- Removed `GuzzleHttp\ToArrayInterface` -- The `guzzlehttp/streams` dependency has been removed. Stream functionality - is now present in the `GuzzleHttp\Psr7` namespace provided by the - `guzzlehttp/psr7` package. -- Guzzle no longer uses ReactPHP promises and now uses the - `guzzlehttp/promises` library. We use a custom promise library for three - significant reasons: - 1. React promises (at the time of writing this) are recursive. Promise - chaining and promise resolution will eventually blow the stack. Guzzle - promises are not recursive as they use a sort of trampolining technique. - Note: there has been movement in the React project to modify promises to - no longer utilize recursion. - 2. Guzzle needs to have the ability to synchronously block on a promise to - wait for a result. Guzzle promises allows this functionality (and does - not require the use of recursion). - 3. Because we need to be able to wait on a result, doing so using React - promises requires wrapping react promises with RingPHP futures. This - overhead is no longer needed, reducing stack sizes, reducing complexity, - and improving performance. -- `GuzzleHttp\Mimetypes` has been moved to a function in - `GuzzleHttp\Psr7\mimetype_from_extension` and - `GuzzleHttp\Psr7\mimetype_from_filename`. -- `GuzzleHttp\Query` and `GuzzleHttp\QueryParser` have been removed. Query - strings must now be passed into request objects as strings, or provided to - the `query` request option when creating requests with clients. The `query` - option uses PHP's `http_build_query` to convert an array to a string. If you - need a different serialization technique, you will need to pass the query - string in as a string. There are a couple helper functions that will make - working with query strings easier: `GuzzleHttp\Psr7\parse_query` and - `GuzzleHttp\Psr7\build_query`. -- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware - system based on PSR-7, using RingPHP and it's middleware system as well adds - more complexity than the benefits it provides. All HTTP handlers that were - present in RingPHP have been modified to work directly with PSR-7 messages - and placed in the `GuzzleHttp\Handler` namespace. This significantly reduces - complexity in Guzzle, removes a dependency, and improves performance. RingPHP - will be maintained for Guzzle 5 support, but will no longer be a part of - Guzzle 6. -- As Guzzle now uses a middleware based systems the event system and RingPHP - integration has been removed. Note: while the event system has been removed, - it is possible to add your own type of event system that is powered by the - middleware system. - - Removed the `Event` namespace. - - Removed the `Subscriber` namespace. - - Removed `Transaction` class - - Removed `RequestFsm` - - Removed `RingBridge` - - `GuzzleHttp\Subscriber\Cookie` is now provided by - `GuzzleHttp\Middleware::cookies` - - `GuzzleHttp\Subscriber\HttpError` is now provided by - `GuzzleHttp\Middleware::httpError` - - `GuzzleHttp\Subscriber\History` is now provided by - `GuzzleHttp\Middleware::history` - - `GuzzleHttp\Subscriber\Mock` is now provided by - `GuzzleHttp\Handler\MockHandler` - - `GuzzleHttp\Subscriber\Prepare` is now provided by - `GuzzleHttp\PrepareBodyMiddleware` - - `GuzzleHttp\Subscriber\Redirect` is now provided by - `GuzzleHttp\RedirectMiddleware` -- Guzzle now uses `Psr\Http\Message\UriInterface` (implements in - `GuzzleHttp\Psr7\Uri`) for URI support. `GuzzleHttp\Url` is now gone. -- Static functions in `GuzzleHttp\Utils` have been moved to namespaced - functions under the `GuzzleHttp` namespace. This requires either a Composer - based autoloader or you to include functions.php. -- `GuzzleHttp\ClientInterface::getDefaultOption` has been renamed to - `GuzzleHttp\ClientInterface::getConfig`. -- `GuzzleHttp\ClientInterface::setDefaultOption` has been removed. -- The `json` and `xml` methods of response objects has been removed. With the - migration to strictly adhering to PSR-7 as the interface for Guzzle messages, - adding methods to message interfaces would actually require Guzzle messages - to extend from PSR-7 messages rather then work with them directly. - -## Migrating to middleware - -The change to PSR-7 unfortunately required significant refactoring to Guzzle -due to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event -system from plugins. The event system relied on mutability of HTTP messages and -side effects in order to work. With immutable messages, you have to change your -workflow to become more about either returning a value (e.g., functional -middlewares) or setting a value on an object. Guzzle v6 has chosen the -functional middleware approach. - -Instead of using the event system to listen for things like the `before` event, -you now create a stack based middleware function that intercepts a request on -the way in and the promise of the response on the way out. This is a much -simpler and more predictable approach than the event system and works nicely -with PSR-7 middleware. Due to the use of promises, the middleware system is -also asynchronous. - -v5: - -```php -use GuzzleHttp\Event\BeforeEvent; -$client = new GuzzleHttp\Client(); -// Get the emitter and listen to the before event. -$client->getEmitter()->on('before', function (BeforeEvent $e) { - // Guzzle v5 events relied on mutation - $e->getRequest()->setHeader('X-Foo', 'Bar'); -}); -``` - -v6: - -In v6, you can modify the request before it is sent using the `mapRequest` -middleware. The idiomatic way in v6 to modify the request/response lifecycle is -to setup a handler middleware stack up front and inject the handler into a -client. - -```php -use GuzzleHttp\Middleware; -// Create a handler stack that has all of the default middlewares attached -$handler = GuzzleHttp\HandlerStack::create(); -// Push the handler onto the handler stack -$handler->push(Middleware::mapRequest(function (RequestInterface $request) { - // Notice that we have to return a request object - return $request->withHeader('X-Foo', 'Bar'); -})); -// Inject the handler into the client -$client = new GuzzleHttp\Client(['handler' => $handler]); -``` - -## POST Requests - -This version added the [`form_params`](https://github.com/guzzle/guzzle/blob/6.5/docs/request-options.rst#form_params) -and `multipart` request options. `form_params` is an associative array of -strings or array of strings and is used to serialize an -`application/x-www-form-urlencoded` POST request. The -[`multipart`](https://github.com/guzzle/guzzle/blob/6.5/docs/request-options.rst#multipart) -option is now used to send a multipart/form-data POST request. - -`GuzzleHttp\Post\PostFile` has been removed. Use the `multipart` option to add -POST files to a multipart/form-data request. - -The `body` option no longer accepts an array to send POST requests. Please use -`multipart` or `form_params` instead. - -The `base_url` option has been renamed to `base_uri`. - -4.x to 5.0 ----------- - -## Rewritten Adapter Layer - -Guzzle now uses [RingPHP](https://github.com/guzzle/RingPHP) to send -HTTP requests. The `adapter` option in a `GuzzleHttp\Client` constructor -is still supported, but it has now been renamed to `handler`. Instead of -passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP -`callable` that follows the RingPHP specification. - -## Removed Fluent Interfaces - -[Fluent interfaces were removed](https://ocramius.github.io/blog/fluent-interfaces-are-evil/) -from the following classes: - -- `GuzzleHttp\Collection` -- `GuzzleHttp\Url` -- `GuzzleHttp\Query` -- `GuzzleHttp\Post\PostBody` -- `GuzzleHttp\Cookie\SetCookie` - -## Removed functions.php - -Removed "functions.php", so that Guzzle is truly PSR-4 compliant. The following -functions can be used as replacements. - -- `GuzzleHttp\json_decode` -> PHP's `json_decode` -- `GuzzleHttp\get_path` -> `GuzzleHttp\Utils::getPath` -- `GuzzleHttp\Utils::setPath` -> `GuzzleHttp\set_path` -- `GuzzleHttp\Pool::batch` -> `GuzzleHttp\batch`. This function is, however, - deprecated in favor of using `GuzzleHttp\Pool::batch()`. - -The "procedural" global client has been removed with no replacement (e.g., -`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttp\Client` -object as a replacement. - -## `throwImmediately` has been removed - -The concept of "throwImmediately" has been removed from exceptions and error -events. This control mechanism was used to stop a transfer of concurrent -requests from completing. This can now be handled by throwing the exception or -by cancelling a pool of requests or each outstanding future request -individually. - -## headers event has been removed - -Removed the "headers" event. This event was only useful for changing the -body a response once the headers of the response were known. You can implement -a similar behavior in a number of ways. One example might be to use a -FnStream that has access to the transaction being sent. For example, when the -first byte is written, you could check if the response headers match your -expectations, and if so, change the actual stream body that is being -written to. - -## Updates to HTTP Messages - -Removed the `asArray` parameter from -`GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header -value as an array, then use the newly added `getHeaderAsArray()` method of -`MessageInterface`. This change makes the Guzzle interfaces compatible with -the PSR-7 interfaces. - -3.x to 4.0 ----------- - -## Overarching changes: - -- Now requires PHP 5.4 or greater. -- No longer requires cURL to send requests. -- Guzzle no longer wraps every exception it throws. Only exceptions that are - recoverable are now wrapped by Guzzle. -- Various namespaces have been removed or renamed. -- No longer requiring the Symfony EventDispatcher. A custom event dispatcher - based on the Symfony EventDispatcher is - now utilized in `GuzzleHttp\Event\EmitterInterface` (resulting in significant - speed and functionality improvements). - -Changes per Guzzle 3.x namespace are described below. - -## Batch - -The `Guzzle\Batch` namespace has been removed. This is best left to -third-parties to implement on top of Guzzle's core HTTP library. - -## Cache - -The `Guzzle\Cache` namespace has been removed. (Todo: No suitable replacement -has been implemented yet, but hoping to utilize a PSR cache interface). - -## Common - -- Removed all of the wrapped exceptions. It's better to use the standard PHP - library for unrecoverable exceptions. -- `FromConfigInterface` has been removed. -- `Guzzle\Common\Version` has been removed. The VERSION constant can be found - at `GuzzleHttp\ClientInterface::VERSION`. - -### Collection - -- `getAll` has been removed. Use `toArray` to convert a collection to an array. -- `inject` has been removed. -- `keySearch` has been removed. -- `getPath` no longer supports wildcard expressions. Use something better like - JMESPath for this. -- `setPath` now supports appending to an existing array via the `[]` notation. - -### Events - -Guzzle no longer requires Symfony's EventDispatcher component. Guzzle now uses -`GuzzleHttp\Event\Emitter`. - -- `Symfony\Component\EventDispatcher\EventDispatcherInterface` is replaced by - `GuzzleHttp\Event\EmitterInterface`. -- `Symfony\Component\EventDispatcher\EventDispatcher` is replaced by - `GuzzleHttp\Event\Emitter`. -- `Symfony\Component\EventDispatcher\Event` is replaced by - `GuzzleHttp\Event\Event`, and Guzzle now has an EventInterface in - `GuzzleHttp\Event\EventInterface`. -- `AbstractHasDispatcher` has moved to a trait, `HasEmitterTrait`, and - `HasDispatcherInterface` has moved to `HasEmitterInterface`. Retrieving the - event emitter of a request, client, etc. now uses the `getEmitter` method - rather than the `getDispatcher` method. - -#### Emitter - -- Use the `once()` method to add a listener that automatically removes itself - the first time it is invoked. -- Use the `listeners()` method to retrieve a list of event listeners rather than - the `getListeners()` method. -- Use `emit()` instead of `dispatch()` to emit an event from an emitter. -- Use `attach()` instead of `addSubscriber()` and `detach()` instead of - `removeSubscriber()`. - -```php -$mock = new Mock(); -// 3.x -$request->getEventDispatcher()->addSubscriber($mock); -$request->getEventDispatcher()->removeSubscriber($mock); -// 4.x -$request->getEmitter()->attach($mock); -$request->getEmitter()->detach($mock); -``` - -Use the `on()` method to add a listener rather than the `addListener()` method. - -```php -// 3.x -$request->getEventDispatcher()->addListener('foo', function (Event $event) { /* ... */ } ); -// 4.x -$request->getEmitter()->on('foo', function (Event $event, $name) { /* ... */ } ); -``` - -## Http - -### General changes - -- The cacert.pem certificate has been moved to `src/cacert.pem`. -- Added the concept of adapters that are used to transfer requests over the - wire. -- Simplified the event system. -- Sending requests in parallel is still possible, but batching is no longer a - concept of the HTTP layer. Instead, you must use the `complete` and `error` - events to asynchronously manage parallel request transfers. -- `Guzzle\Http\Url` has moved to `GuzzleHttp\Url`. -- `Guzzle\Http\QueryString` has moved to `GuzzleHttp\Query`. -- QueryAggregators have been rewritten so that they are simply callable - functions. -- `GuzzleHttp\StaticClient` has been removed. Use the functions provided in - `functions.php` for an easy to use static client instance. -- Exceptions in `GuzzleHttp\Exception` have been updated to all extend from - `GuzzleHttp\Exception\TransferException`. - -### Client - -Calling methods like `get()`, `post()`, `head()`, etc. no longer create and -return a request, but rather creates a request, sends the request, and returns -the response. - -```php -// 3.0 -$request = $client->get('/'); -$response = $request->send(); - -// 4.0 -$response = $client->get('/'); - -// or, to mirror the previous behavior -$request = $client->createRequest('GET', '/'); -$response = $client->send($request); -``` - -`GuzzleHttp\ClientInterface` has changed. - -- The `send` method no longer accepts more than one request. Use `sendAll` to - send multiple requests in parallel. -- `setUserAgent()` has been removed. Use a default request option instead. You - could, for example, do something like: - `$client->setConfig('defaults/headers/User-Agent', 'Foo/Bar ' . $client::getDefaultUserAgent())`. -- `setSslVerification()` has been removed. Use default request options instead, - like `$client->setConfig('defaults/verify', true)`. - -`GuzzleHttp\Client` has changed. - -- The constructor now accepts only an associative array. You can include a - `base_url` string or array to use a URI template as the base URL of a client. - You can also specify a `defaults` key that is an associative array of default - request options. You can pass an `adapter` to use a custom adapter, - `batch_adapter` to use a custom adapter for sending requests in parallel, or - a `message_factory` to change the factory used to create HTTP requests and - responses. -- The client no longer emits a `client.create_request` event. -- Creating requests with a client no longer automatically utilize a URI - template. You must pass an array into a creational method (e.g., - `createRequest`, `get`, `put`, etc.) in order to expand a URI template. - -### Messages - -Messages no longer have references to their counterparts (i.e., a request no -longer has a reference to it's response, and a response no loger has a -reference to its request). This association is now managed through a -`GuzzleHttp\Adapter\TransactionInterface` object. You can get references to -these transaction objects using request events that are emitted over the -lifecycle of a request. - -#### Requests with a body - -- `GuzzleHttp\Message\EntityEnclosingRequest` and - `GuzzleHttp\Message\EntityEnclosingRequestInterface` have been removed. The - separation between requests that contain a body and requests that do not - contain a body has been removed, and now `GuzzleHttp\Message\RequestInterface` - handles both use cases. -- Any method that previously accepts a `GuzzleHttp\Response` object now accept a - `GuzzleHttp\Message\ResponseInterface`. -- `GuzzleHttp\Message\RequestFactoryInterface` has been renamed to - `GuzzleHttp\Message\MessageFactoryInterface`. This interface is used to create - both requests and responses and is implemented in - `GuzzleHttp\Message\MessageFactory`. -- POST field and file methods have been removed from the request object. You - must now use the methods made available to `GuzzleHttp\Post\PostBodyInterface` - to control the format of a POST body. Requests that are created using a - standard `GuzzleHttp\Message\MessageFactoryInterface` will automatically use - a `GuzzleHttp\Post\PostBody` body if the body was passed as an array or if - the method is POST and no body is provided. - -```php -$request = $client->createRequest('POST', '/'); -$request->getBody()->setField('foo', 'bar'); -$request->getBody()->addFile(new PostFile('file_key', fopen('/path/to/content', 'r'))); -``` - -#### Headers - -- `GuzzleHttp\Message\Header` has been removed. Header values are now simply - represented by an array of values or as a string. Header values are returned - as a string by default when retrieving a header value from a message. You can - pass an optional argument of `true` to retrieve a header value as an array - of strings instead of a single concatenated string. -- `GuzzleHttp\PostFile` and `GuzzleHttp\PostFileInterface` have been moved to - `GuzzleHttp\Post`. This interface has been simplified and now allows the - addition of arbitrary headers. -- Custom headers like `GuzzleHttp\Message\Header\Link` have been removed. Most - of the custom headers are now handled separately in specific - subscribers/plugins, and `GuzzleHttp\Message\HeaderValues::parseParams()` has - been updated to properly handle headers that contain parameters (like the - `Link` header). - -#### Responses - -- `GuzzleHttp\Message\Response::getInfo()` and - `GuzzleHttp\Message\Response::setInfo()` have been removed. Use the event - system to retrieve this type of information. -- `GuzzleHttp\Message\Response::getRawHeaders()` has been removed. -- `GuzzleHttp\Message\Response::getMessage()` has been removed. -- `GuzzleHttp\Message\Response::calculateAge()` and other cache specific - methods have moved to the CacheSubscriber. -- Header specific helper functions like `getContentMd5()` have been removed. - Just use `getHeader('Content-MD5')` instead. -- `GuzzleHttp\Message\Response::setRequest()` and - `GuzzleHttp\Message\Response::getRequest()` have been removed. Use the event - system to work with request and response objects as a transaction. -- `GuzzleHttp\Message\Response::getRedirectCount()` has been removed. Use the - Redirect subscriber instead. -- `GuzzleHttp\Message\Response::isSuccessful()` and other related methods have - been removed. Use `getStatusCode()` instead. - -#### Streaming responses - -Streaming requests can now be created by a client directly, returning a -`GuzzleHttp\Message\ResponseInterface` object that contains a body stream -referencing an open PHP HTTP stream. - -```php -// 3.0 -use Guzzle\Stream\PhpStreamRequestFactory; -$request = $client->get('/'); -$factory = new PhpStreamRequestFactory(); -$stream = $factory->fromRequest($request); -$data = $stream->read(1024); - -// 4.0 -$response = $client->get('/', ['stream' => true]); -// Read some data off of the stream in the response body -$data = $response->getBody()->read(1024); -``` - -#### Redirects - -The `configureRedirects()` method has been removed in favor of a -`allow_redirects` request option. - -```php -// Standard redirects with a default of a max of 5 redirects -$request = $client->createRequest('GET', '/', ['allow_redirects' => true]); - -// Strict redirects with a custom number of redirects -$request = $client->createRequest('GET', '/', [ - 'allow_redirects' => ['max' => 5, 'strict' => true] -]); -``` - -#### EntityBody - -EntityBody interfaces and classes have been removed or moved to -`GuzzleHttp\Stream`. All classes and interfaces that once required -`GuzzleHttp\EntityBodyInterface` now require -`GuzzleHttp\Stream\StreamInterface`. Creating a new body for a request no -longer uses `GuzzleHttp\EntityBody::factory` but now uses -`GuzzleHttp\Stream\Stream::factory` or even better: -`GuzzleHttp\Stream\create()`. - -- `Guzzle\Http\EntityBodyInterface` is now `GuzzleHttp\Stream\StreamInterface` -- `Guzzle\Http\EntityBody` is now `GuzzleHttp\Stream\Stream` -- `Guzzle\Http\CachingEntityBody` is now `GuzzleHttp\Stream\CachingStream` -- `Guzzle\Http\ReadLimitEntityBody` is now `GuzzleHttp\Stream\LimitStream` -- `Guzzle\Http\IoEmittyinEntityBody` has been removed. - -#### Request lifecycle events - -Requests previously submitted a large number of requests. The number of events -emitted over the lifecycle of a request has been significantly reduced to make -it easier to understand how to extend the behavior of a request. All events -emitted during the lifecycle of a request now emit a custom -`GuzzleHttp\Event\EventInterface` object that contains context providing -methods and a way in which to modify the transaction at that specific point in -time (e.g., intercept the request and set a response on the transaction). - -- `request.before_send` has been renamed to `before` and now emits a - `GuzzleHttp\Event\BeforeEvent` -- `request.complete` has been renamed to `complete` and now emits a - `GuzzleHttp\Event\CompleteEvent`. -- `request.sent` has been removed. Use `complete`. -- `request.success` has been removed. Use `complete`. -- `error` is now an event that emits a `GuzzleHttp\Event\ErrorEvent`. -- `request.exception` has been removed. Use `error`. -- `request.receive.status_line` has been removed. -- `curl.callback.progress` has been removed. Use a custom `StreamInterface` to - maintain a status update. -- `curl.callback.write` has been removed. Use a custom `StreamInterface` to - intercept writes. -- `curl.callback.read` has been removed. Use a custom `StreamInterface` to - intercept reads. - -`headers` is a new event that is emitted after the response headers of a -request have been received before the body of the response is downloaded. This -event emits a `GuzzleHttp\Event\HeadersEvent`. - -You can intercept a request and inject a response using the `intercept()` event -of a `GuzzleHttp\Event\BeforeEvent`, `GuzzleHttp\Event\CompleteEvent`, and -`GuzzleHttp\Event\ErrorEvent` event. - -## Inflection - -The `Guzzle\Inflection` namespace has been removed. This is not a core concern -of Guzzle. - -## Iterator - -The `Guzzle\Iterator` namespace has been removed. - -- `Guzzle\Iterator\AppendIterator`, `Guzzle\Iterator\ChunkedIterator`, and - `Guzzle\Iterator\MethodProxyIterator` are nice, but not a core requirement of - Guzzle itself. -- `Guzzle\Iterator\FilterIterator` is no longer needed because an equivalent - class is shipped with PHP 5.4. -- `Guzzle\Iterator\MapIterator` is not really needed when using PHP 5.5 because - it's easier to just wrap an iterator in a generator that maps values. - -For a replacement of these iterators, see https://github.com/nikic/iter - -## Log - -The LogPlugin has moved to https://github.com/guzzle/log-subscriber. The -`Guzzle\Log` namespace has been removed. Guzzle now relies on -`Psr\Log\LoggerInterface` for all logging. The MessageFormatter class has been -moved to `GuzzleHttp\Subscriber\Log\Formatter`. - -## Parser - -The `Guzzle\Parser` namespace has been removed. This was previously used to -make it possible to plug in custom parsers for cookies, messages, URI -templates, and URLs; however, this level of complexity is not needed in Guzzle -so it has been removed. - -- Cookie: Cookie parsing logic has been moved to - `GuzzleHttp\Cookie\SetCookie::fromString`. -- Message: Message parsing logic for both requests and responses has been moved - to `GuzzleHttp\Message\MessageFactory::fromMessage`. Message parsing is only - used in debugging or deserializing messages, so it doesn't make sense for - Guzzle as a library to add this level of complexity to parsing messages. -- UriTemplate: URI template parsing has been moved to - `GuzzleHttp\UriTemplate`. The Guzzle library will automatically use the PECL - URI template library if it is installed. -- Url: URL parsing is now performed in `GuzzleHttp\Url::fromString` (previously - it was `Guzzle\Http\Url::factory()`). If custom URL parsing is necessary, - then developers are free to subclass `GuzzleHttp\Url`. - -## Plugin - -The `Guzzle\Plugin` namespace has been renamed to `GuzzleHttp\Subscriber`. -Several plugins are shipping with the core Guzzle library under this namespace. - -- `GuzzleHttp\Subscriber\Cookie`: Replaces the old CookiePlugin. Cookie jar - code has moved to `GuzzleHttp\Cookie`. -- `GuzzleHttp\Subscriber\History`: Replaces the old HistoryPlugin. -- `GuzzleHttp\Subscriber\HttpError`: Throws errors when a bad HTTP response is - received. -- `GuzzleHttp\Subscriber\Mock`: Replaces the old MockPlugin. -- `GuzzleHttp\Subscriber\Prepare`: Prepares the body of a request just before - sending. This subscriber is attached to all requests by default. -- `GuzzleHttp\Subscriber\Redirect`: Replaces the RedirectPlugin. - -The following plugins have been removed (third-parties are free to re-implement -these if needed): - -- `GuzzleHttp\Plugin\Async` has been removed. -- `GuzzleHttp\Plugin\CurlAuth` has been removed. -- `GuzzleHttp\Plugin\ErrorResponse\ErrorResponsePlugin` has been removed. This - functionality should instead be implemented with event listeners that occur - after normal response parsing occurs in the guzzle/command package. - -The following plugins are not part of the core Guzzle package, but are provided -in separate repositories: - -- `Guzzle\Http\Plugin\BackoffPlugin` has been rewritten to be much simpler - to build custom retry policies using simple functions rather than various - chained classes. See: https://github.com/guzzle/retry-subscriber -- `Guzzle\Http\Plugin\Cache\CachePlugin` has moved to - https://github.com/guzzle/cache-subscriber -- `Guzzle\Http\Plugin\Log\LogPlugin` has moved to - https://github.com/guzzle/log-subscriber -- `Guzzle\Http\Plugin\Md5\Md5Plugin` has moved to - https://github.com/guzzle/message-integrity-subscriber -- `Guzzle\Http\Plugin\Mock\MockPlugin` has moved to - `GuzzleHttp\Subscriber\MockSubscriber`. -- `Guzzle\Http\Plugin\Oauth\OauthPlugin` has moved to - https://github.com/guzzle/oauth-subscriber - -## Service - -The service description layer of Guzzle has moved into two separate packages: - -- https://github.com/guzzle/command Provides a high level abstraction over web - services by representing web service operations using commands. -- https://github.com/guzzle/guzzle-services Provides an implementation of - guzzle/command that provides request serialization and response parsing using - Guzzle service descriptions. - -## Stream - -Stream have moved to a separate package available at -https://github.com/guzzle/streams. - -`Guzzle\Stream\StreamInterface` has been given a large update to cleanly take -on the responsibilities of `Guzzle\Http\EntityBody` and -`Guzzle\Http\EntityBodyInterface` now that they have been removed. The number -of methods implemented by the `StreamInterface` has been drastically reduced to -allow developers to more easily extend and decorate stream behavior. - -## Removed methods from StreamInterface - -- `getStream` and `setStream` have been removed to better encapsulate streams. -- `getMetadata` and `setMetadata` have been removed in favor of - `GuzzleHttp\Stream\MetadataStreamInterface`. -- `getWrapper`, `getWrapperData`, `getStreamType`, and `getUri` have all been - removed. This data is accessible when - using streams that implement `GuzzleHttp\Stream\MetadataStreamInterface`. -- `rewind` has been removed. Use `seek(0)` for a similar behavior. - -## Renamed methods - -- `detachStream` has been renamed to `detach`. -- `feof` has been renamed to `eof`. -- `ftell` has been renamed to `tell`. -- `readLine` has moved from an instance method to a static class method of - `GuzzleHttp\Stream\Stream`. - -## Metadata streams - -`GuzzleHttp\Stream\MetadataStreamInterface` has been added to denote streams -that contain additional metadata accessible via `getMetadata()`. -`GuzzleHttp\Stream\StreamInterface::getMetadata` and -`GuzzleHttp\Stream\StreamInterface::setMetadata` have been removed. - -## StreamRequestFactory - -The entire concept of the StreamRequestFactory has been removed. The way this -was used in Guzzle 3 broke the actual interface of sending streaming requests -(instead of getting back a Response, you got a StreamInterface). Streaming -PHP requests are now implemented through the `GuzzleHttp\Adapter\StreamAdapter`. - -3.6 to 3.7 ----------- - -### Deprecations - -- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.: - -```php -\Guzzle\Common\Version::$emitWarnings = true; -``` - -The following APIs and options have been marked as deprecated: - -- Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead. -- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. -- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. -- Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead. -- Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead. -- Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated -- Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client. -- Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8. -- Marked `Guzzle\Common\Collection::inject()` as deprecated. -- Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use - `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or - `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` - -3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational -request methods. When paired with a client's configuration settings, these options allow you to specify default settings -for various aspects of a request. Because these options make other previous configuration options redundant, several -configuration options and methods of a client and AbstractCommand have been deprecated. - -- Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`. -- Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`. -- Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')` -- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0 - - $command = $client->getCommand('foo', array( - 'command.headers' => array('Test' => '123'), - 'command.response_body' => '/path/to/file' - )); - - // Should be changed to: - - $command = $client->getCommand('foo', array( - 'command.request_options' => array( - 'headers' => array('Test' => '123'), - 'save_as' => '/path/to/file' - ) - )); - -### Interface changes - -Additions and changes (you will need to update any implementations or subclasses you may have created): - -- Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`: - createRequest, head, delete, put, patch, post, options, prepareRequest -- Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()` -- Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface` -- Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to - `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a - resource, string, or EntityBody into the $options parameter to specify the download location of the response. -- Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a - default `array()` -- Added `Guzzle\Stream\StreamInterface::isRepeatable` -- Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods. - -The following methods were removed from interfaces. All of these methods are still available in the concrete classes -that implement them, but you should update your code to use alternative methods: - -- Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use - `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or - `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or - `$client->setDefaultOption('headers/{header_name}', 'value')`. or - `$client->setDefaultOption('headers', array('header_name' => 'value'))`. -- Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`. -- Removed `Guzzle\Http\ClientInterface::expandTemplate()`. This is an implementation detail. -- Removed `Guzzle\Http\ClientInterface::setRequestFactory()`. This is an implementation detail. -- Removed `Guzzle\Http\ClientInterface::getCurlMulti()`. This is a very specific implementation detail. -- Removed `Guzzle\Http\Message\RequestInterface::canCache`. Use the CachePlugin. -- Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`. Use the HistoryPlugin. -- Removed `Guzzle\Http\Message\RequestInterface::isRedirect`. Use the HistoryPlugin. - -### Cache plugin breaking changes - -- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a - CacheStorageInterface. These two objects and interface will be removed in a future version. -- Always setting X-cache headers on cached responses -- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin -- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface - $request, Response $response);` -- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);` -- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);` -- Added `CacheStorageInterface::purge($url)` -- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin - $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache, - CanCacheStrategyInterface $canCache = null)` -- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)` - -3.5 to 3.6 ----------- - -* Mixed casing of headers are now forced to be a single consistent casing across all values for that header. -* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution -* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader(). - For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader(). - Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request. -* Specific header implementations can be created for complex headers. When a message creates a header, it uses a - HeaderFactory which can map specific headers to specific header classes. There is now a Link header and - CacheControl header implementation. -* Moved getLinks() from Response to just be used on a Link header object. - -If you previously relied on Guzzle\Http\Message\Header::raw(), then you will need to update your code to use the -HeaderInterface (e.g. toArray(), getAll(), etc.). - -### Interface changes - -* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate -* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti() -* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in - Guzzle\Http\Curl\RequestMediator -* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string. -* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface -* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders() - -### Removed deprecated functions - -* Removed Guzzle\Parser\ParserRegister::get(). Use getParser() -* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser(). - -### Deprecations - -* The ability to case-insensitively search for header values -* Guzzle\Http\Message\Header::hasExactHeader -* Guzzle\Http\Message\Header::raw. Use getAll() -* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object - instead. - -### Other changes - -* All response header helper functions return a string rather than mixing Header objects and strings inconsistently -* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle - directly via interfaces -* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist - but are a no-op until removed. -* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a - `Guzzle\Service\Command\ArrayCommandInterface`. -* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response - on a request while the request is still being transferred -* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess - -3.3 to 3.4 ----------- - -Base URLs of a client now follow the rules of https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.2 when merging URLs. - -3.2 to 3.3 ----------- - -### Response::getEtag() quote stripping removed - -`Guzzle\Http\Message\Response::getEtag()` no longer strips quotes around the ETag response header - -### Removed `Guzzle\Http\Utils` - -The `Guzzle\Http\Utils` class was removed. This class was only used for testing. - -### Stream wrapper and type - -`Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getStreamType()` are no longer converted to lowercase. - -### curl.emit_io became emit_io - -Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the -'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io' - -3.1 to 3.2 ----------- - -### CurlMulti is no longer reused globally - -Before 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added -to a single client can pollute requests dispatched from other clients. - -If you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the -ServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is -created. - -```php -$multi = new Guzzle\Http\Curl\CurlMulti(); -$builder = Guzzle\Service\Builder\ServiceBuilder::factory('/path/to/config.json'); -$builder->addListener('service_builder.create_client', function ($event) use ($multi) { - $event['client']->setCurlMulti($multi); -} -}); -``` - -### No default path - -URLs no longer have a default path value of '/' if no path was specified. - -Before: - -```php -$request = $client->get('http://www.foo.com'); -echo $request->getUrl(); -// >> http://www.foo.com/ -``` - -After: - -```php -$request = $client->get('http://www.foo.com'); -echo $request->getUrl(); -// >> http://www.foo.com -``` - -### Less verbose BadResponseException - -The exception message for `Guzzle\Http\Exception\BadResponseException` no longer contains the full HTTP request and -response information. You can, however, get access to the request and response object by calling `getRequest()` or -`getResponse()` on the exception object. - -### Query parameter aggregation - -Multi-valued query parameters are no longer aggregated using a callback function. `Guzzle\Http\Query` now has a -setAggregator() method that accepts a `Guzzle\Http\QueryAggregator\QueryAggregatorInterface` object. This object is -responsible for handling the aggregation of multi-valued query string variables into a flattened hash. - -2.8 to 3.x ----------- - -### Guzzle\Service\Inspector - -Change `\Guzzle\Service\Inspector::fromConfig` to `\Guzzle\Common\Collection::fromConfig` - -**Before** - -```php -use Guzzle\Service\Inspector; - -class YourClient extends \Guzzle\Service\Client -{ - public static function factory($config = array()) - { - $default = array(); - $required = array('base_url', 'username', 'api_key'); - $config = Inspector::fromConfig($config, $default, $required); - - $client = new self( - $config->get('base_url'), - $config->get('username'), - $config->get('api_key') - ); - $client->setConfig($config); - - $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json')); - - return $client; - } -``` - -**After** - -```php -use Guzzle\Common\Collection; - -class YourClient extends \Guzzle\Service\Client -{ - public static function factory($config = array()) - { - $default = array(); - $required = array('base_url', 'username', 'api_key'); - $config = Collection::fromConfig($config, $default, $required); - - $client = new self( - $config->get('base_url'), - $config->get('username'), - $config->get('api_key') - ); - $client->setConfig($config); - - $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json')); - - return $client; - } -``` - -### Convert XML Service Descriptions to JSON - -**Before** - -```xml - - - - - - Get a list of groups - - - Uses a search query to get a list of groups - - - - Create a group - - - - - Delete a group by ID - - - - - - - Update a group - - - - - - -``` - -**After** - -```json -{ - "name": "Zendesk REST API v2", - "apiVersion": "2012-12-31", - "description":"Provides access to Zendesk views, groups, tickets, ticket fields, and users", - "operations": { - "list_groups": { - "httpMethod":"GET", - "uri": "groups.json", - "summary": "Get a list of groups" - }, - "search_groups":{ - "httpMethod":"GET", - "uri": "search.json?query=\"{query} type:group\"", - "summary": "Uses a search query to get a list of groups", - "parameters":{ - "query":{ - "location": "uri", - "description":"Zendesk Search Query", - "type": "string", - "required": true - } - } - }, - "create_group": { - "httpMethod":"POST", - "uri": "groups.json", - "summary": "Create a group", - "parameters":{ - "data": { - "type": "array", - "location": "body", - "description":"Group JSON", - "filters": "json_encode", - "required": true - }, - "Content-Type":{ - "type": "string", - "location":"header", - "static": "application/json" - } - } - }, - "delete_group": { - "httpMethod":"DELETE", - "uri": "groups/{id}.json", - "summary": "Delete a group", - "parameters":{ - "id":{ - "location": "uri", - "description":"Group to delete by ID", - "type": "integer", - "required": true - } - } - }, - "get_group": { - "httpMethod":"GET", - "uri": "groups/{id}.json", - "summary": "Get a ticket", - "parameters":{ - "id":{ - "location": "uri", - "description":"Group to get by ID", - "type": "integer", - "required": true - } - } - }, - "update_group": { - "httpMethod":"PUT", - "uri": "groups/{id}.json", - "summary": "Update a group", - "parameters":{ - "id": { - "location": "uri", - "description":"Group to update by ID", - "type": "integer", - "required": true - }, - "data": { - "type": "array", - "location": "body", - "description":"Group JSON", - "filters": "json_encode", - "required": true - }, - "Content-Type":{ - "type": "string", - "location":"header", - "static": "application/json" - } - } - } -} -``` - -### Guzzle\Service\Description\ServiceDescription - -Commands are now called Operations - -**Before** - -```php -use Guzzle\Service\Description\ServiceDescription; - -$sd = new ServiceDescription(); -$sd->getCommands(); // @returns ApiCommandInterface[] -$sd->hasCommand($name); -$sd->getCommand($name); // @returns ApiCommandInterface|null -$sd->addCommand($command); // @param ApiCommandInterface $command -``` - -**After** - -```php -use Guzzle\Service\Description\ServiceDescription; - -$sd = new ServiceDescription(); -$sd->getOperations(); // @returns OperationInterface[] -$sd->hasOperation($name); -$sd->getOperation($name); // @returns OperationInterface|null -$sd->addOperation($operation); // @param OperationInterface $operation -``` - -### Guzzle\Common\Inflection\Inflector - -Namespace is now `Guzzle\Inflection\Inflector` - -### Guzzle\Http\Plugin - -Namespace is now `Guzzle\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below. - -### Guzzle\Http\Plugin\LogPlugin and Guzzle\Common\Log - -Now `Guzzle\Plugin\Log\LogPlugin` and `Guzzle\Log` respectively. - -**Before** - -```php -use Guzzle\Common\Log\ClosureLogAdapter; -use Guzzle\Http\Plugin\LogPlugin; - -/** @var \Guzzle\Http\Client */ -$client; - -// $verbosity is an integer indicating desired message verbosity level -$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE); -``` - -**After** - -```php -use Guzzle\Log\ClosureLogAdapter; -use Guzzle\Log\MessageFormatter; -use Guzzle\Plugin\Log\LogPlugin; - -/** @var \Guzzle\Http\Client */ -$client; - -// $format is a string indicating desired message format -- @see MessageFormatter -$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT); -``` - -### Guzzle\Http\Plugin\CurlAuthPlugin - -Now `Guzzle\Plugin\CurlAuth\CurlAuthPlugin`. - -### Guzzle\Http\Plugin\ExponentialBackoffPlugin - -Now `Guzzle\Plugin\Backoff\BackoffPlugin`, and other changes. - -**Before** - -```php -use Guzzle\Http\Plugin\ExponentialBackoffPlugin; - -$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge( - ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429) - )); - -$client->addSubscriber($backoffPlugin); -``` - -**After** - -```php -use Guzzle\Plugin\Backoff\BackoffPlugin; -use Guzzle\Plugin\Backoff\HttpBackoffStrategy; - -// Use convenient factory method instead -- see implementation for ideas of what -// you can do with chaining backoff strategies -$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge( - HttpBackoffStrategy::getDefaultFailureCodes(), array(429) - )); -$client->addSubscriber($backoffPlugin); -``` - -### Known Issues - -#### [BUG] Accept-Encoding header behavior changed unintentionally. - -(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e) - -In version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to -properly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen. -See issue #217 for a workaround, or use a version containing the fix. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/composer.json deleted file mode 100644 index f4d90848a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/composer.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "name": "guzzlehttp/guzzle", - "description": "Guzzle is a PHP HTTP client library", - "license": "MIT", - "keywords": [ - "framework", - "http", - "rest", - "web service", - "curl", - "client", - "HTTP client", - "PSR-7", - "PSR-18" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "require": { - "php": "^7.4 || ^8.0", - "ext-json": "*", - "guzzlehttp/promises": "^3.0.1", - "guzzlehttp/psr7": "^3.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php82": "^1.27" - }, - "require-dev": { - "ext-curl": "*", - "bamarni/composer-bin-plugin": "^1.8.2", - "guzzle/client-integration-tests": "4.0.1", - "guzzlehttp/test-server": "^1.0", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^9.6.34", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "repositories": [ - { - "type": "package", - "package": { - "name": "guzzle/client-integration-tests", - "version": "v4.0.1", - "require": { - "guzzlehttp/psr7": "^3.0@dev", - "php": "^7.4 || ^8.0", - "php-http/message": "^1.0 || ^2.0", - "phpunit/phpunit": "^9.6.34", - "th3n3rd/cartesian-product": "^0.3" - }, - "autoload": { - "psr-4": { - "Http\\Client\\Tests\\": "src/" - } - }, - "bin": [ - "bin/http_test_server" - ], - "dist": { - "type": "zip", - "url": "https://codeload.github.com/guzzle/client-integration-tests/zip/e54cb9d94e3aa5e125dcd7d01bec22db202444ac" - } - } - } - ], - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "GuzzleHttp\\Tests\\": "tests/" - } - }, - "config": { - "allow-plugins": { - "bamarni/composer-bin-plugin": true - }, - "preferred-install": "dist", - "sort-packages": true - }, - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Auth/DigestAuth.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Auth/DigestAuth.php deleted file mode 100644 index d3dcbf51c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Auth/DigestAuth.php +++ /dev/null @@ -1,515 +0,0 @@ - - */ - private const ALGORITHMS = [ - 'MD5' => ['hash' => 'md5', 'sess' => false, 'rank' => 10, 'header' => 'MD5'], - 'MD5-SESS' => ['hash' => 'md5', 'sess' => true, 'rank' => 11, 'header' => 'MD5-sess'], - 'SHA-256' => ['hash' => 'sha256', 'sess' => false, 'rank' => 20, 'header' => 'SHA-256'], - 'SHA-256-SESS' => ['hash' => 'sha256', 'sess' => true, 'rank' => 21, 'header' => 'SHA-256-sess'], - 'SHA-512-256' => ['hash' => 'sha512/256', 'sess' => false, 'rank' => 30, 'header' => 'SHA-512-256'], - 'SHA-512-256-SESS' => ['hash' => 'sha512/256', 'sess' => true, 'rank' => 31, 'header' => 'SHA-512-256-sess'], - ]; - - /** - * @var array - */ - private const DIGEST_CHALLENGE_PARAMETER_NAMES = [ - 'realm' => true, - 'domain' => true, - 'nonce' => true, - 'opaque' => true, - 'stale' => true, - 'algorithm' => true, - 'qop' => true, - 'charset' => true, - 'userhash' => true, - ]; - - private function __construct() - { - } - - public static function selectChallenge( - #[\SensitiveParameter] - ResponseInterface $response - ): ?DigestChallenge { - $selected = null; - - foreach ($response->getHeader('WWW-Authenticate') as $header) { - foreach (self::parseAuthenticateHeader($header) as $challenge) { - if ($challenge['scheme'] !== 'digest' || $challenge['invalid']) { - continue; - } - - $digest = self::createChallenge($challenge['params']); - if ($digest === null) { - continue; - } - - if ($selected === null || $digest->algorithm['rank'] > $selected->algorithm['rank']) { - $selected = $digest; - } - } - } - - return $selected; - } - - public static function authorizationHeader( - #[\SensitiveParameter] - RequestInterface $request, - DigestChallenge $challenge, - string $username, - #[\SensitiveParameter] - string $password, - string $cnonce, - string $nc = '00000001' - ): ?string { - if ($challenge->algorithm['sess'] && $challenge->qop === null) { - return null; - } - - $uri = $request->getRequestTarget(); - if ($uri === '') { - $uri = '/'; - } - - foreach ([$username, $challenge->realm, $challenge->nonce, $uri, $cnonce] as $value) { - if (!self::isHeaderSafe($value)) { - return null; - } - } - - if ($challenge->opaque !== null && !self::isHeaderSafe($challenge->opaque)) { - return null; - } - - if ($challenge->qop !== null && !self::isNonceCount($nc)) { - return null; - } - - $hash = $challenge->algorithm['hash']; - $ha1 = \hash($hash, $username.':'.$challenge->realm.':'.$password); - - if ($challenge->algorithm['sess']) { - $ha1 = \hash($hash, $ha1.':'.$challenge->nonce.':'.$cnonce); - } - - $ha2 = \hash($hash, $request->getMethod().':'.$uri); - $response = $challenge->qop === null - ? \hash($hash, $ha1.':'.$challenge->nonce.':'.$ha2) - : \hash($hash, $ha1.':'.$challenge->nonce.':'.$nc.':'.$cnonce.':'.$challenge->qop.':'.$ha2); - - if ($challenge->userhash) { - $headerUsername = \hash($hash, $username.':'.$challenge->realm); - if ($headerUsername === false) { - return null; - } - } else { - $headerUsername = $username; - } - - $parts = [ - 'username='.self::quote($headerUsername), - 'realm='.self::quote($challenge->realm), - 'nonce='.self::quote($challenge->nonce), - 'uri='.self::quote($uri), - 'response='.self::quote($response), - 'algorithm='.$challenge->algorithm['header'], - ]; - - if ($challenge->opaque !== null) { - $parts[] = 'opaque='.self::quote($challenge->opaque); - } - - if ($challenge->qop !== null) { - $parts[] = 'qop='.$challenge->qop; - $parts[] = 'nc='.$nc; - $parts[] = 'cnonce='.self::quote($cnonce); - } - - if ($challenge->userhash) { - $parts[] = 'userhash=true'; - } - - return 'Digest '.\implode(', ', $parts); - } - - /** - * @return list, invalid: bool}> - */ - public static function parseAuthenticateHeader(string $header): array - { - $length = \strlen($header); - $offset = 0; - $challenges = []; - - while (true) { - self::skipSeparators($header, $offset, $length); - if ($offset >= $length) { - break; - } - - $scheme = self::readToken($header, $offset, $length); - if ($scheme === null) { - break; - } - - self::skipWhitespace($header, $offset, $length); - - if (self::skipToken68Challenge($header, $offset, $length)) { - $challenges[] = [ - 'scheme' => Psr7\Utils::asciiToLower($scheme), - 'params' => [], - 'invalid' => false, - ]; - - continue; - } - - $params = []; - $invalid = false; - - while ($offset < $length) { - self::skipWhitespace($header, $offset, $length); - - if ($offset < $length && $header[$offset] === ',') { - if (self::commaStartsNextChallenge($header, $offset + 1, $length)) { - if (Psr7\Utils::caselessEquals($scheme, 'Digest') - && self::commaStartsKnownDigestParameterWithoutValue($header, $offset + 1, $length) - ) { - $invalid = true; - break; - } - - ++$offset; - break; - } - - ++$offset; - continue; - } - - $name = self::readToken($header, $offset, $length); - if ($name === null) { - if ($offset < $length) { - $invalid = true; - } - - break; - } - - self::skipWhitespace($header, $offset, $length); - if ($offset >= $length || $header[$offset] !== '=') { - $invalid = true; - break; - } - - ++$offset; - self::skipWhitespace($header, $offset, $length); - - $value = self::readValue($header, $offset, $length); - if ($value === null) { - $invalid = true; - break; - } - - $lowerName = Psr7\Utils::asciiToLower($name); - if (\array_key_exists($lowerName, $params)) { - $invalid = true; - } - - $params[$lowerName] = $value; - - self::skipWhitespace($header, $offset, $length); - if ($offset >= $length) { - break; - } - - if ($header[$offset] !== ',') { - $invalid = true; - break; - } - } - - $challenges[] = [ - 'scheme' => Psr7\Utils::asciiToLower($scheme), - 'params' => $params, - 'invalid' => $invalid, - ]; - } - - return $challenges; - } - - /** - * @param array $params - */ - private static function createChallenge(array $params): ?DigestChallenge - { - if (!isset($params['nonce']) || $params['nonce'] === '') { - return null; - } - - if (isset($params['charset']) && !Psr7\Utils::caselessEquals($params['charset'], 'UTF-8')) { - return null; - } - - $algorithm = self::algorithm($params['algorithm'] ?? null); - if ($algorithm === null) { - return null; - } - - $qop = self::selectQop($params['qop'] ?? null); - if ($qop === false) { - return null; - } - - if ($algorithm['sess'] && $qop === null) { - return null; - } - - $challenge = new DigestChallenge(); - $challenge->algorithm = $algorithm; - $challenge->realm = $params['realm'] ?? ''; - $challenge->nonce = $params['nonce']; - $challenge->opaque = $params['opaque'] ?? null; - if (isset($params['domain'])) { - $domainAreas = \preg_split('/[ \t]+/', $params['domain']); - - if ($domainAreas === false) { - throw new \RuntimeException('Unable to split the Digest domain list: '.\preg_last_error_msg()); - } - - $challenge->domain = \array_values(\array_filter($domainAreas)); - } else { - $challenge->domain = []; - } - $challenge->qop = $qop; - $challenge->stale = isset($params['stale']) && Psr7\Utils::caselessEquals($params['stale'], 'true'); - $challenge->userhash = isset($params['userhash']) && Psr7\Utils::caselessEquals($params['userhash'], 'true'); - - return $challenge; - } - - /** - * @return array{name: string, hash: string, sess: bool, rank: int, header: string}|null - */ - private static function algorithm(?string $algorithm): ?array - { - $name = Psr7\Utils::asciiToUpper($algorithm ?? 'MD5'); - - if (!isset(self::ALGORITHMS[$name])) { - return null; - } - - $mapped = self::ALGORITHMS[$name]; - if (!\in_array($mapped['hash'], \hash_algos(), true)) { - return null; - } - - return ['name' => $name] + $mapped; - } - - /** - * @return string|false|null - */ - private static function selectQop(?string $qop) - { - if ($qop === null) { - return null; - } - - $tokens = \array_map( - static function (string $token): string { - return Psr7\Utils::asciiToLower(\trim($token, " \t")); - }, - \explode(',', $qop) - ); - - return \in_array('auth', $tokens, true) ? 'auth' : false; - } - - private static function quote(string $value): string - { - return '"'.\strtr($value, [ - '\\' => '\\\\', - '"' => '\\"', - ]).'"'; - } - - private static function isHeaderSafe(string $value): bool - { - return \preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value) === 1; - } - - private static function isNonceCount(string $nc): bool - { - // Nonce counts start at one. - return $nc !== '00000000' && \preg_match('/^[0-9a-f]{8}$/D', $nc) === 1; - } - - private static function commaStartsNextChallenge(string $header, int $offset, int $length): bool - { - self::skipWhitespace($header, $offset, $length); - $nextOffset = $offset; - $token = self::readToken($header, $nextOffset, $length); - if ($token === null) { - return false; - } - - self::skipWhitespace($header, $nextOffset, $length); - - return $nextOffset >= $length || $header[$nextOffset] !== '='; - } - - private static function commaStartsKnownDigestParameterWithoutValue(string $header, int $offset, int $length): bool - { - self::skipWhitespace($header, $offset, $length); - $name = self::readToken($header, $offset, $length); - if ($name === null || !isset(self::DIGEST_CHALLENGE_PARAMETER_NAMES[Psr7\Utils::asciiToLower($name)])) { - return false; - } - - self::skipWhitespace($header, $offset, $length); - - return $offset >= $length || $header[$offset] !== '='; - } - - private static function skipToken68Challenge(string $header, int &$offset, int $length): bool - { - $cursor = $offset; - $hasValue = false; - while ($cursor < $length && self::isToken68Char($header[$cursor])) { - $hasValue = true; - ++$cursor; - } - - while ($cursor < $length && $header[$cursor] === '=') { - ++$cursor; - } - - if (!$hasValue) { - return false; - } - - $after = $cursor; - self::skipWhitespace($header, $after, $length); - - if ($after < $length && $header[$after] !== ',') { - return false; - } - - $offset = $after; - - return true; - } - - private static function skipSeparators(string $header, int &$offset, int $length): void - { - while ($offset < $length) { - $char = $header[$offset]; - if ($char !== ',' && !self::isWhitespace($char)) { - return; - } - - ++$offset; - } - } - - private static function skipWhitespace(string $header, int &$offset, int $length): void - { - while ($offset < $length && self::isWhitespace($header[$offset])) { - ++$offset; - } - } - - private static function isWhitespace(string $char): bool - { - return $char === ' ' || $char === "\t"; - } - - private static function readToken(string $header, int &$offset, int $length): ?string - { - $start = $offset; - while ($offset < $length && self::isTokenChar($header[$offset])) { - ++$offset; - } - - if ($offset === $start) { - return null; - } - - $token = \substr($header, $start, $offset - $start); - - return $token === false ? null : $token; - } - - private static function isTokenChar(string $char): bool - { - return \strspn($char, "!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") === 1; - } - - private static function isToken68Char(string $char): bool - { - return \strspn($char, '-._~+/0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') === 1; - } - - private static function readValue(string $header, int &$offset, int $length): ?string - { - if ($offset >= $length) { - return null; - } - - if ($header[$offset] === '"') { - return self::readQuotedString($header, $offset, $length); - } - - return self::readToken($header, $offset, $length); - } - - private static function readQuotedString(string $header, int &$offset, int $length): ?string - { - ++$offset; - $value = ''; - $escaped = false; - - while ($offset < $length) { - $char = $header[$offset++]; - - if ($escaped) { - $value .= $char; - $escaped = false; - continue; - } - - if ($char === '\\') { - $escaped = true; - continue; - } - - if ($char === '"') { - return $value; - } - - $value .= $char; - } - - return null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Auth/DigestChallenge.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Auth/DigestChallenge.php deleted file mode 100644 index d03020344..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Auth/DigestChallenge.php +++ /dev/null @@ -1,29 +0,0 @@ - */ - public array $domain = []; - - public ?string $qop = null; - - public bool $stale = false; - - public bool $userhash = false; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/AuthMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/AuthMiddleware.php deleted file mode 100644 index 3d1e8e13a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/AuthMiddleware.php +++ /dev/null @@ -1,843 +0,0 @@ - - */ - private const DIGEST_PROBE_PAYLOAD_HEADERS = [ - 'Transfer-Encoding', - 'Expect', - 'Trailer', - 'Content-Range', - 'Content-Encoding', - 'Content-MD5', - 'Digest', - 'Content-Digest', - 'Repr-Digest', - ]; - - /** - * @var callable(RequestInterface, array): PromiseInterface - */ - private $nextHandler; - - /** - * @var callable(): string - */ - private $cnonceGenerator; - - private bool $reuseChallenges; - - private ?string $credentialHashSecret = null; - - /** - * @var array - */ - private array $digestChallenges = []; - - /** - * @param callable(RequestInterface, array): PromiseInterface $nextHandler - * @param (callable(): string)|null $cnonceGenerator - */ - public function __construct(callable $nextHandler, ?callable $cnonceGenerator = null, bool $reuseChallenges = true) - { - $this->nextHandler = $nextHandler; - $this->cnonceGenerator = $cnonceGenerator ?? static function (): string { - return \bin2hex(\random_bytes(16)); - }; - $this->reuseChallenges = $reuseChallenges; - } - - /** - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - $auth = $options['auth'] ?? null; - if ($auth === null || $auth === false || $auth === [] || \is_string($auth)) { - return ($this->nextHandler)($request, $options); - } - - $normalizedAuth = self::normalizeAuth($auth); - if ($normalizedAuth === null) { - return ($this->nextHandler)($request, $options); - } - - [$username, $password, $type] = $normalizedAuth; - - if ($type === 'basic') { - return $this->sendBasic($request, $options, $username, $password); - } - - return $this->sendDigest($request, $options, $username, $password); - } - - /** - * @param array $auth - * - * @return array{0: string, 1: string, 2: 'basic'|'digest'}|null - */ - private static function normalizeAuth( - #[\SensitiveParameter] - array $auth - ): ?array { - $type = 'basic'; - if (\array_key_exists(2, $auth) && $auth[2] !== null) { - if (!\is_string($auth[2])) { - throw new InvalidArgumentException('auth type must be a string'); - } - - $type = Psr7\Utils::asciiToLower($auth[2]); - } - - if (!\in_array($type, ['basic', 'digest'], true)) { - return null; - } - - if (!\array_key_exists(0, $auth) || !\array_key_exists(1, $auth)) { - throw new InvalidArgumentException('auth must contain username and password strings'); - } - - if (!\is_string($auth[0]) || !\is_string($auth[1])) { - throw new InvalidArgumentException('auth must contain username and password strings'); - } - - return [$auth[0], $auth[1], $type]; - } - - /** - * @return PromiseInterface - */ - private function sendBasic( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - string $username, - #[\SensitiveParameter] - string $password - ): PromiseInterface { - if (\strpos($username, ':') !== false) { - throw new InvalidArgumentException('Basic authentication username must not contain a colon'); - } - - if (\preg_match('/[\x00-\x1F\x7F]/', $username.$password) !== 0) { - throw new InvalidArgumentException('Basic authentication credentials must not contain ASCII control characters'); - } - - unset($options['auth']); - - return ($this->nextHandler)( - $request->withHeader('Authorization', 'Basic '.\base64_encode($username.':'.$password)), - $options - ); - } - - /** - * @return PromiseInterface - */ - private function sendDigest( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - string $username, - #[\SensitiveParameter] - string $password - ): PromiseInterface { - $preemptive = $this->reuseChallenges - ? $this->preemptiveDigestRequest($request, $username, $password) - : null; - - if ($preemptive !== null) { - $preemptiveOptions = self::withTemporarySink($options); - unset($preemptiveOptions['auth']); - - return ($this->nextHandler)($preemptive, $preemptiveOptions)->then( - function ( - #[\SensitiveParameter] - ResponseInterface $response - ) use ($request, $options, $preemptiveOptions, $username, $password) { - // Clear on 4xx/5xx other than 401 so non-conformant stale-nonce - // errors cannot poison the cache indefinitely. - $status = $response->getStatusCode(); - if ($status >= 400 && $status !== 401) { - $this->clearDigestChallenge($request); - } - - return $this->handleDigestResponse($request, $options, $preemptiveOptions, $response, $username, $password, false); - }, - function ( - #[\SensitiveParameter] - $reason - ) use ($request, $preemptiveOptions) { - return $this->handleDigestRejection($request, $preemptiveOptions, $reason, true); - } - ); - } - - $probeOptions = self::withTemporarySink($options); - unset($probeOptions['auth']); - - [$probeRequest, $bodyWithheld] = self::probeRequest($request, $options); - - if ($bodyWithheld) { - // The probe has no payload, so prepare_body must not add Expect - // if a custom empty stream has unknown size. - $probeOptions[RequestOptions::EXPECT] = false; - } - - return ($this->nextHandler)($probeRequest, $probeOptions)->then( - function ( - #[\SensitiveParameter] - ResponseInterface $response - ) use ($request, $options, $probeOptions, $username, $password, $bodyWithheld) { - return $this->handleDigestResponse($request, $options, $probeOptions, $response, $username, $password, $bodyWithheld); - }, - function ( - #[\SensitiveParameter] - $reason - ) use ($request, $probeOptions) { - return $this->handleDigestRejection($request, $probeOptions, $reason, false); - } - ); - } - - private function preemptiveDigestRequest( - #[\SensitiveParameter] - RequestInterface $request, - string $username, - #[\SensitiveParameter] - string $password - ): ?RequestInterface { - try { - if ($request->getBody()->getSize() !== 0) { - return null; - } - } catch (\Exception $e) { - return null; - } - - $key = self::digestCacheKey($request); - if ($key === null) { - return null; - } - - $entry = $this->digestChallenges[$key] ?? null; - if ($entry === null - || $entry['credentials'] !== $this->digestCredentialKey($username, $password) - || !self::challengeCoversRequest($entry['challenge'], $request) - ) { - return null; - } - - $authorization = DigestAuth::authorizationHeader( - $request, - $entry['challenge'], - $username, - $password, - ($this->cnonceGenerator)(), - \sprintf('%08x', $entry['nextNc']) - ); - - if ($authorization === null) { - return null; - } - - ++$this->digestChallenges[$key]['nextNc']; - - return $request->withHeader('Authorization', $authorization); - } - - /** - * Builds the unauthenticated probe request for a Digest handshake. - * - * @return array{0: RequestInterface, 1: bool} - */ - private static function probeRequest( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): array { - $probe = $request->withoutHeader('Authorization'); - - try { - $size = $probe->getBody()->getSize(); - } catch (\Exception $e) { - $size = null; - } - - if ($size === 0) { - return [$probe, false]; - } - - $streamFactory = self::requireStreamFactory( - $options[RequestOptions::STREAM_FACTORY] ?? new HttpFactory() - ); - - $probe = $probe->withBody($streamFactory->createStream('')) - ->withHeader('Content-Length', '0'); - - foreach (self::DIGEST_PROBE_PAYLOAD_HEADERS as $header) { - $probe = $probe->withoutHeader($header); - } - - return [$probe, true]; - } - - /** - * @return ResponseInterface|PromiseInterface - */ - private function handleDigestResponse( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - array $probeOptions, - #[\SensitiveParameter] - ResponseInterface $response, - string $username, - #[\SensitiveParameter] - string $password, - bool $bodyWithheld - ) { - $status = $response->getStatusCode(); - - $previousEntry = null; - if ($this->reuseChallenges && $status === 401) { - $key = self::digestCacheKey($request); - $previousEntry = $key !== null ? ($this->digestChallenges[$key] ?? null) : null; - $this->clearDigestChallenge($request); - } - - if ($status !== 401) { - if ($this->reuseChallenges && $response->hasHeader('Authentication-Info')) { - $this->clearDigestChallenge($request); - } - - $response = self::restoreOriginalSink($request, $response, $probeOptions); - - if ($bodyWithheld && $status !== 407 && !self::isRedirectLikeResponse($response)) { - throw new ResponseException( - 'Digest authentication failed because the server did not issue a challenge; the request was probed without its body', - $request, - $response - ); - } - - return $response; - } - - $challenge = DigestAuth::selectChallenge($response); - if ($challenge === null) { - return self::restoreOriginalSink($request, $response, $probeOptions); - } - - $retries = $options['__guzzle_digest_retries'] ?? 0; - if (!\is_int($retries)) { - $retries = 0; - } - - if (($retries > 0 && !$challenge->stale) || $retries >= self::DIGEST_MAX_RETRIES) { - return self::restoreOriginalSink($request, $response, $probeOptions); - } - - try { - self::rewindBodyForRetry($request, $bodyWithheld); - } catch (\Exception $e) { - $response = self::restoreOriginalSink($request, $response, $probeOptions); - - throw new ResponseException( - 'Digest authentication failed because the request body could not be rewound', - $request, - $response, - $e - ); - } - - $nonceCounts = self::digestNonceCountsFromOptions($options); - - if ($previousEntry !== null - && $previousEntry['credentials'] === $this->digestCredentialKey($username, $password) - ) { - self::rememberDigestNonceCount($nonceCounts, $previousEntry['challenge'], $previousEntry['nextNc']); - } - - $nc = $challenge->qop === null ? 1 : ($nonceCounts[self::digestNonceCountKey($challenge)] ?? 1); - - $authorization = DigestAuth::authorizationHeader( - $request, - $challenge, - $username, - $password, - ($this->cnonceGenerator)(), - \sprintf('%08x', $nc) - ); - - if ($authorization === null) { - return self::restoreOriginalSink($request, $response, $probeOptions); - } - - $response->getBody()->close(); - - self::rememberDigestNonceCount($nonceCounts, $challenge, $nc + 1); - - $retryOptions = $options; - $retryOptions['__guzzle_digest_retries'] = $retries + 1; - $retryOptions[self::DIGEST_NONCE_COUNTS_OPTION] = $nonceCounts; - $downstreamOptions = $retryOptions; - // The nonce-count map only carries handshake state into the retry - // recursion; downstream handlers must not observe it. - unset($downstreamOptions[self::DIGEST_NONCE_COUNTS_OPTION]); - // The caller's delay applies once, before the first Digest leg, not - // before each handshake retry. - unset($downstreamOptions[RequestOptions::DELAY]); - $downstreamOptions = self::withTemporarySink($downstreamOptions); - unset($downstreamOptions['auth']); - - $retryRequest = $request->withHeader('Authorization', $authorization); - - return ($this->nextHandler)($retryRequest, $downstreamOptions)->then( - function ( - #[\SensitiveParameter] - ResponseInterface $retryResponse - ) use ($retryRequest, $retryOptions, $downstreamOptions, $username, $password, $challenge, $nc) { - if ($this->reuseChallenges && self::isCacheableDigestSuccess($retryResponse)) { - $this->storeDigestChallenge($retryRequest, $challenge, $username, $password, $nc + 1); - } - - return $this->handleDigestResponse($retryRequest, $retryOptions, $downstreamOptions, $retryResponse, $username, $password, false); - }, - function ( - #[\SensitiveParameter] - $reason - ) use ($retryRequest, $downstreamOptions) { - return $this->handleDigestRejection($retryRequest, $downstreamOptions, $reason, false); - } - ); - } - - private static function isCacheableDigestSuccess(ResponseInterface $response): bool - { - $status = $response->getStatusCode(); - - return $status >= 200 && $status < 400 && !$response->hasHeader('Authentication-Info'); - } - - private function storeDigestChallenge( - #[\SensitiveParameter] - RequestInterface $request, - DigestChallenge $challenge, - string $username, - #[\SensitiveParameter] - string $password, - int $nextNc - ): void { - $key = self::digestCacheKey($request); - if ($key === null || $challenge->qop === null) { - return; - } - - unset($this->digestChallenges[$key]); - - if (\count($this->digestChallenges) >= self::CHALLENGE_CACHE_LIMIT) { - \array_shift($this->digestChallenges); - } - - $this->digestChallenges[$key] = [ - 'challenge' => $challenge, - 'credentials' => $this->digestCredentialKey($username, $password), - 'nextNc' => $nextNc, - ]; - } - - private function clearDigestChallenge(RequestInterface $request): void - { - $key = self::digestCacheKey($request); - if ($key !== null) { - unset($this->digestChallenges[$key]); - } - } - - /** - * @param array $options - * - * @return array - */ - private static function digestNonceCountsFromOptions(array $options): array - { - $counts = $options[self::DIGEST_NONCE_COUNTS_OPTION] ?? []; - if (!\is_array($counts)) { - return []; - } - - $normalized = []; - foreach ($counts as $key => $nextNc) { - if (\is_string($key) && \is_int($nextNc) && $nextNc > 0 && $nextNc < \PHP_INT_MAX) { - $normalized[$key] = $nextNc; - } - } - - return $normalized; - } - - private static function digestNonceCountKey(DigestChallenge $challenge): string - { - return \implode("\0", [ - $challenge->realm, - $challenge->nonce, - $challenge->qop ?? '', - $challenge->algorithm['header'], - ]); - } - - /** - * @param array $counts - */ - private static function rememberDigestNonceCount(array &$counts, DigestChallenge $challenge, int $nextNc): void - { - if ($challenge->qop === null) { - return; - } - - $key = self::digestNonceCountKey($challenge); - $counts[$key] = \max($counts[$key] ?? 1, $nextNc); - } - - /** - * @param mixed $reason - * - * @return PromiseInterface - */ - private function handleDigestRejection( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - $reason, - bool $preemptive - ): PromiseInterface { - if ($this->reuseChallenges && $reason instanceof ResponseException) { - $response = $reason->getResponse(); - - if ($response->getStatusCode() === 401 - || $response->hasHeader('Authentication-Info') - || ($preemptive && $response->getStatusCode() >= 400) - ) { - $this->clearDigestChallenge($request); - } - } - - return self::restoreOriginalSinkOnRejection($options, $reason); - } - - private static function digestCacheKey(RequestInterface $request): ?string - { - $uri = $request->getUri(); - $scheme = Psr7\Utils::asciiToLower($uri->getScheme()); - $host = HostIdentity::canonicalHost($uri->getHost()); - - if (($scheme !== 'http' && $scheme !== 'https') || $host === '') { - return null; - } - - $port = $uri->getPort() ?? ($scheme === 'https' ? 443 : 80); - - return $scheme.'://'.$host.':'.$port.'|'.HostIdentity::canonicalHostHeader($request->getHeaderLine('Host')); - } - - private function digestCredentialKey( - string $username, - #[\SensitiveParameter] - string $password - ): string { - if ($this->credentialHashSecret === null) { - $this->credentialHashSecret = \random_bytes(32); - } - - return \hash_hmac('sha256', $username."\0".$password, $this->credentialHashSecret); - } - - private static function challengeCoversRequest(DigestChallenge $challenge, RequestInterface $request): bool - { - if ($challenge->domain === []) { - return true; - } - - $target = $request->getRequestTarget(); - foreach ($challenge->domain as $space) { - $prefix = self::protectionSpacePath($space, $request); - if ($prefix !== null && \str_starts_with($target, $prefix)) { - return true; - } - } - - return false; - } - - private static function protectionSpacePath(string $space, RequestInterface $request): ?string - { - if ($space === '') { - return null; - } - - if ($space[0] === '/') { - return $space; - } - - try { - $uri = new Psr7\Uri($space); - } catch (\InvalidArgumentException $e) { - return null; - } - - if (Psr7\UriComparator::isCrossOrigin($uri, self::effectiveRequestUri($request))) { - return null; - } - - $path = $uri->getPath(); - $prefix = $path === '' ? '/' : $path; - - if ($uri->getQuery() !== '') { - $prefix .= '?'.$uri->getQuery(); - } - - return $prefix; - } - - private static function effectiveRequestUri(RequestInterface $request): UriInterface - { - $uri = $request->getUri(); - $host = $request->getHeaderLine('Host'); - if ($host === '' || Psr7\Utils::caselessEquals($host, $uri->getHost())) { - return $uri; - } - - try { - $authority = new Psr7\Uri('//'.$host); - if ($authority->getHost() === '') { - return $uri; - } - - return $uri->withHost($authority->getHost())->withPort($authority->getPort()); - } catch (\InvalidArgumentException $e) { - return $uri; - } - } - - private static function isRedirectLikeResponse(ResponseInterface $response): bool - { - return $response->hasHeader('Location') - && \in_array($response->getStatusCode(), [301, 302, 303, 307, 308], true); - } - - private static function rewindBodyForRetry( - #[\SensitiveParameter] - RequestInterface $request, - bool $bodyWithheld - ): void { - $body = $request->getBody(); - - if (!$bodyWithheld) { - try { - if ($body->getSize() === 0) { - return; - } - } catch (\Exception $e) { - // Fall through to the standard rewind path. - } - - Psr7\Message::rewindBody($request); - - return; - } - - if ($body->isSeekable()) { - $body->rewind(); - } - } - - private static function withTemporarySink( - #[\SensitiveParameter] - array $options - ): array { - // The 'stream' option is deliberately not checked here: the cURL - // handlers do not support streaming and write each leg to the sink, - // so a configured sink always needs challenge-body protection. - if (!isset($options[RequestOptions::SINK])) { - return $options; - } - - $streamFactory = self::requireStreamFactory( - $options[RequestOptions::STREAM_FACTORY] ?? new HttpFactory() - ); - - $options['__guzzle_auth_original_sink'] = $options[RequestOptions::SINK]; - $options[RequestOptions::SINK] = $streamFactory->createStreamFromResource( - Psr7\Utils::tryFopen('php://temp', 'w+') - ); - - return $options; - } - - private static function restoreOriginalSink( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - ResponseInterface $response, - #[\SensitiveParameter] - array $options - ): ResponseInterface { - if (!\array_key_exists('__guzzle_auth_original_sink', $options)) { - return $response; - } - - try { - $source = $response->getBody(); - if ($source->isSeekable()) { - $source->rewind(); - } - - $target = self::streamForOriginalSink($options['__guzzle_auth_original_sink']); - - Psr7\Utils::copyToStream($source, $target); - - if ($target->isSeekable()) { - $target->rewind(); - } - - return $response->withBody($target); - } catch (\Exception $e) { - throw new ResponseException( - $e->getMessage() !== '' ? $e->getMessage() : 'Failed to write the response body', - $request, - $response, - $e - ); - } - } - - /** - * @param mixed $reason - * - * @return PromiseInterface - */ - private static function restoreOriginalSinkOnRejection( - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - $reason - ): PromiseInterface { - if (!$reason instanceof ResponseException || !\array_key_exists('__guzzle_auth_original_sink', $options)) { - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason); - } - - try { - $response = self::restoreOriginalSink($reason->getRequest(), $reason->getResponse(), $options); - - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason->withResponse($response)); - } catch (\Throwable $e) { - /** @var PromiseInterface */ - return P\Create::rejectionFor($e); - } - } - - /** - * @param mixed $sink - */ - private static function streamForOriginalSink($sink): StreamInterface - { - if (\is_string($sink)) { - return new LazyOpenStream($sink, 'w+'); - } - - if (\is_resource($sink)) { - return self::streamForResourceSink(Psr7\Utils::streamFor($sink)); - } - - if (!$sink instanceof StreamInterface) { - throw new InvalidArgumentException(\sprintf( - 'sink must be a resource, string, or %s', - StreamInterface::class - )); - } - - return Psr7\Utils::streamFor($sink); - } - - /** - * Decorates a caller-owned sink stream so that closing the response body - * detaches Guzzle's wrapper without closing the original PHP resource. - */ - private static function streamForResourceSink(StreamInterface $stream): StreamInterface - { - return Psr7\FnStream::decorate($stream, [ - 'close' => static function () use ($stream): void { - $stream->detach(); - }, - ]); - } - - /** - * @param mixed $factory - */ - private static function requireStreamFactory($factory): StreamFactoryInterface - { - if (!$factory instanceof StreamFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::STREAM_FACTORY, - StreamFactoryInterface::class - )); - } - - return $factory; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/BodySummarizer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/BodySummarizer.php deleted file mode 100644 index 8912d3384..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/BodySummarizer.php +++ /dev/null @@ -1,29 +0,0 @@ -truncateAt = $truncateAt; - } - - /** - * Returns a summarized message body. - */ - public function summarize(MessageInterface $message): ?string - { - try { - return Psr7\Message::bodySummary($message, $this->truncateAt); - } catch (\Exception $e) { - return null; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php deleted file mode 100644 index 9d23d9aad..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php +++ /dev/null @@ -1,15 +0,0 @@ - 'http://www.foo.com/1.0/', - * 'timeout' => 0, - * 'allow_redirects' => false, - * 'proxy' => '192.168.16.1:10' - * ]); - * - * Client configuration settings include the following options: - * - * - handler: (callable) Function that transfers HTTP requests over the - * wire. The function is called with a Psr7\Http\Message\RequestInterface - * and array of transfer options, and must return a - * GuzzleHttp\Promise\PromiseInterface that is fulfilled with a - * Psr7\Http\Message\ResponseInterface on success. If no handler is - * provided, a default handler will be created that enables all of the - * request options below by attaching all of the default middleware to the - * handler. - * - base_uri: (string|UriInterface) Base URI of the client that is merged - * into relative URIs. Can be a string or instance of UriInterface. - * - transport_sharing: (string|null) Transport sharing mode for the default - * handler. Accepts TransportSharing::* or null. Defaults to null. - * - max_host_connections: (int|null) Maximum concurrent connections per - * host, enforced by the default CurlMultiHandler. The default stream - * fallback receives the cap as a marker only: it rejects enabled - * response streaming ("stream" => true) and does not limit overlapping - * buffered calls. - * - max_total_connections: (int|null) Maximum concurrent connections - * overall, enforced by the default CurlMultiHandler. The default stream - * fallback receives the cap as a marker only: it rejects enabled - * response streaming ("stream" => true) and does not limit overlapping - * buffered calls. - * - multiplex: (string|null) Multiplexing::NONE to disable multiplexing on - * the default CurlMultiHandler; the value also becomes the default - * "multiplex" request option. Other Multiplexing::* values act as the - * default request option only. - * - **: any request option - * - * @param array{ - * handler?: callable(RequestInterface, array): PromiseInterface, - * base_uri?: string|UriInterface, - * transport_sharing?: string|null, - * max_host_connections?: int|null, - * max_total_connections?: int|null, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: bool|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $config Client configuration settings and default request options. - * - * @see RequestOptions for a list of available request options. - */ - public function __construct( - #[\SensitiveParameter] - array $config = [] - ) { - $handlerOptions = []; - foreach (['max_host_connections', 'max_total_connections'] as $capOption) { - if (\array_key_exists($capOption, $config)) { - if ($config[$capOption] !== null) { - $handlerOptions[$capOption] = $config[$capOption]; - } - - unset($config[$capOption]); - } - } - - // Deliberately not unset: the value also becomes the default - // "multiplex" request option, which the configured handler accepts. - $handlerMultiplex = ($config['multiplex'] ?? null) === Multiplexing::NONE; - - $transportSharing = \array_key_exists('transport_sharing', $config) ? $config['transport_sharing'] : null; - $transportSharingMode = CurlShareHandleState::normalizeMode($transportSharing, 'transport_sharing'); - unset($config['transport_sharing']); - - if (!isset($config['handler'])) { - if ($transportSharingMode !== TransportSharing::NONE) { - $handlerOptions['transport_sharing'] = $transportSharingMode; - } - - if ($handlerMultiplex) { - $handlerOptions['multiplex'] = Multiplexing::NONE; - } - - $config['handler'] = $handlerOptions === [] - ? HandlerStack::create() - : HandlerStack::create(Utils::chooseHandler($handlerOptions)); - } elseif (!\is_callable($config['handler'])) { - throw new InvalidArgumentException('handler must be a callable'); - } elseif ($handlerOptions !== []) { - throw new InvalidArgumentException('The "max_host_connections" and "max_total_connections" client options require Guzzle to create the default handler. Configure the options on the CurlMultiHandler constructor for numeric enforcement, or on the StreamHandler constructor to reject enabled response streaming, when providing a custom handler.'); - } elseif (\in_array($transportSharingMode, [TransportSharing::HANDLER_REQUIRE, TransportSharing::PERSISTENT_REQUIRE], true)) { - throw new InvalidArgumentException('The "transport_sharing" client option can only require sharing when Guzzle creates the default handler. Configure the "transport_sharing" option on CurlHandler or CurlMultiHandler when providing a custom cURL handler.'); - } - - $factory = new HttpFactory(); - - if (!isset($config[RequestOptions::REQUEST_FACTORY])) { - $config[RequestOptions::REQUEST_FACTORY] = $factory; - } - - if (!isset($config[RequestOptions::URI_FACTORY])) { - $config[RequestOptions::URI_FACTORY] = $factory; - } - - if (!isset($config[RequestOptions::STREAM_FACTORY])) { - $config[RequestOptions::STREAM_FACTORY] = $factory; - } - - if (!isset($config[RequestOptions::RESPONSE_FACTORY])) { - $config[RequestOptions::RESPONSE_FACTORY] = $factory; - } - - self::requireRequestFactory($config[RequestOptions::REQUEST_FACTORY]); - self::requireResponseFactory($config[RequestOptions::RESPONSE_FACTORY]); - self::requireStreamFactory($config[RequestOptions::STREAM_FACTORY]); - $uriFactory = self::requireUriFactory($config[RequestOptions::URI_FACTORY]); - - // Convert the base_uri to a UriInterface using the configured URI factory. - if (isset($config['base_uri'])) { - $config['base_uri'] = self::createUri($config['base_uri'], $uriFactory); - } - - $this->configureDefaults($config); - } - - /** - * Asynchronously send an HTTP request. - * - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply to the given request and to the transfer. See {@see RequestOptions}. - * - * @return PromiseInterface - */ - public function sendAsync( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - // Merge the base URI into the request URI if needed. - $options = $this->prepareDefaults($options); - - return $this->transfer( - $request->withUri($this->buildUri($request->getUri(), $options), self::shouldPreserveHost($request)), - $options - ); - } - - /** - * Send an HTTP request. - * - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply to the given request and to the transfer. See {@see RequestOptions}. - * - * @throws GuzzleException - */ - public function send( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - $options[RequestOptions::SYNCHRONOUS] = true; - - return $this->sendAsync($request, $options)->wait(); - } - - /** - * The HttpClient PSR (PSR-18) specifies this method. - * - * {@inheritDoc} - */ - public function sendRequest( - #[\SensitiveParameter] - RequestInterface $request - ): ResponseInterface { - $options[RequestOptions::SYNCHRONOUS] = true; - $options[RequestOptions::ALLOW_REDIRECTS] = false; - $options[RequestOptions::HTTP_ERRORS] = false; - - return $this->sendAsync($request, $options)->wait(); - } - - /** - * Create and send an asynchronous HTTP request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string $method HTTP method - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. See {@see RequestOptions}. - * - * @return PromiseInterface - */ - public function requestAsync( - string $method, - $uri = '', - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - $options = $this->prepareDefaults($options); - - $version = self::normalizeProtocolVersion($options['version'] ?? '1.1'); - unset($options['version']); - - if (isset($options['body']) && \is_array($options['body'])) { - throw $this->invalidBody(); - } - - $uriFactory = isset($options[RequestOptions::URI_FACTORY]) - ? self::requireUriFactory($options[RequestOptions::URI_FACTORY]) - : new HttpFactory(); - $requestFactory = isset($options[RequestOptions::REQUEST_FACTORY]) - ? self::requireRequestFactory($options[RequestOptions::REQUEST_FACTORY]) - : new HttpFactory(); - - // Merge the URI into the base URI. - $uriIsString = \is_string($uri); - $uri = self::createUri($uri, $uriFactory); - $builtUri = $this->buildUri($uri, $options); - if ($uriIsString && $builtUri !== $uri) { - $builtUri = self::createUri((string) $builtUri, $uriFactory); - } - - $uri = $builtUri; - $request = $requestFactory->createRequest($method, $uri); - $request = Psr7\Utils::modifyRequest($request, ['version' => $version]); - - return $this->transfer($request, $options); - } - - /** - * Create and send an HTTP request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string $method HTTP method. - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. See {@see RequestOptions}. - * - * @throws GuzzleException - */ - public function request( - string $method, - $uri = '', - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - $options[RequestOptions::SYNCHRONOUS] = true; - - return $this->requestAsync($method, $uri, $options)->wait(); - } - - /** - * Get a client configuration option. - * - * These options include default request options of the client, a "handler" - * (if utilized by the concrete client), and a "base_uri" if utilized by the - * concrete client. - * - * @param string|null $option The config option to retrieve. - * - * @return ($option is null ? array : mixed) - */ - public function getConfig(?string $option = null) - { - return $option === null - ? $this->config - : ($this->config[$option] ?? null); - } - - private function buildUri( - UriInterface $uri, - #[\SensitiveParameter] - array $config - ): UriInterface { - if (isset($config['base_uri'])) { - $uriFactory = self::requireUriFactory($config[RequestOptions::URI_FACTORY] ?? new HttpFactory()); - $uri = Psr7\UriResolver::resolve(self::createUri($config['base_uri'], $uriFactory), $uri); - } - - $idnOptions = Idn::normalizeConversionOption($config['idn_conversion'] ?? null); - if ($idnOptions !== null) { - $uri = Idn::convertUri($uri, $idnOptions); - } - - if ($uri->getScheme() === '' && $uri->getHost() !== '') { - $uri = $uri->withScheme('http'); - } - - return $uri; - } - - /** - * Whether to preserve an existing Host header when the URI changes. - * - * A header matching the current URI carries no explicit override and is - * regenerated after base URI resolution or IDN conversion. Other values - * are preserved as deliberate overrides, as PSR-7 requires. - */ - private static function shouldPreserveHost(RequestInterface $request): bool - { - if (!$request->hasHeader('Host')) { - return false; - } - - $uri = $request->getUri(); - $host = $uri->getHost(); - $port = $uri->getPort(); - - if ($port !== null) { - $host .= ':'.$port; - } - - return $host !== $request->getHeaderLine('Host'); - } - - /** - * @param mixed $factory - */ - private static function requireRequestFactory($factory): RequestFactoryInterface - { - if (!$factory instanceof RequestFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::REQUEST_FACTORY, - RequestFactoryInterface::class - )); - } - - return $factory; - } - - /** - * @param mixed $factory - */ - private static function requireResponseFactory($factory): ResponseFactoryInterface - { - if (!$factory instanceof ResponseFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::RESPONSE_FACTORY, - ResponseFactoryInterface::class - )); - } - - return $factory; - } - - /** - * @param mixed $factory - */ - private static function requireUriFactory($factory): UriFactoryInterface - { - if (!$factory instanceof UriFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::URI_FACTORY, - UriFactoryInterface::class - )); - } - - return $factory; - } - - /** - * @param mixed $factory - */ - private static function requireStreamFactory($factory): StreamFactoryInterface - { - if (!$factory instanceof StreamFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::STREAM_FACTORY, - StreamFactoryInterface::class - )); - } - - return $factory; - } - - /** - * @param mixed $uri - */ - private static function createUri($uri, UriFactoryInterface $uriFactory): UriInterface - { - if ($uri instanceof UriInterface) { - return $uri; - } - - if (\is_string($uri)) { - return $uriFactory->createUri($uri); - } - - throw new InvalidArgumentException(\sprintf('URI must be a string or %s', UriInterface::class)); - } - - /** - * @param mixed $body - */ - private static function createBodyStream($body, StreamFactoryInterface $streamFactory): StreamInterface - { - if ($body instanceof StreamInterface) { - return $body; - } - - if (\is_resource($body)) { - return $streamFactory->createStreamFromResource($body); - } - - if ($body === null) { - return $streamFactory->createStream(); - } - - if (\is_string($body)) { - return $streamFactory->createStream($body); - } - - if ($body instanceof \Iterator) { - return Psr7\Utils::streamFor($body); - } - - if (\is_object($body) && \method_exists($body, '__toString')) { - return $streamFactory->createStream((string) $body); - } - - if (\is_callable($body)) { - return Psr7\Utils::streamFor($body); - } - - throw new InvalidArgumentException(\sprintf( - 'Passing %s to request option "body" is invalid; expected resource|string|null|StreamInterface|callable&object|Iterator|Stringable.', - \get_debug_type($body) - )); - } - - /** - * Configures the default options for a client. - */ - private function configureDefaults( - #[\SensitiveParameter] - array $config - ): void { - $defaults = [ - 'allow_redirects' => RedirectMiddleware::DEFAULT_SETTINGS, - 'http_errors' => true, - 'decode_content' => true, - 'verify' => true, - 'cookies' => false, - 'idn_conversion' => false, - 'protocols' => ['http', 'https'], - ]; - - // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. - - // We can only trust the HTTP_PROXY environment variable in a CLI - // process due to the fact that PHP has no reliable mechanism to - // get environment variables that start with "HTTP_". - if (\PHP_SAPI === 'cli' && ($proxy = Env::get('HTTP_PROXY'))) { - $defaults['proxy']['http'] = $proxy; - } - - if ($proxy = Env::get('HTTPS_PROXY')) { - $defaults['proxy']['https'] = $proxy; - } - - $noProxy = Env::get('NO_PROXY'); - if ($noProxy !== null) { - $noProxy = ProxyOptions::normalizeNoProxy($noProxy); - if ($noProxy !== []) { - $defaults['proxy']['no'] = $noProxy; - } - } - - $this->config = $config + $defaults; - - if (!empty($config['cookies']) && $config['cookies'] === true) { - $this->config['cookies'] = new CookieJar(); - } - - // Add the default user-agent header. - if (!isset($this->config['headers'])) { - $this->config['headers'] = ['User-Agent' => Utils::defaultUserAgent()]; - } else { - self::assertHeaderOptionTypes($this->config['headers']); - - // Add the User-Agent header if one was not already set. - $hasUserAgent = false; - foreach (\array_keys($this->config['headers']) as $name) { - if (Psr7\Utils::asciiToLower((string) $name) === 'user-agent') { - $hasUserAgent = true; - break; - } - } - - if (!$hasUserAgent) { - $this->config['headers']['User-Agent'] = Utils::defaultUserAgent(); - } - } - } - - /** - * Merges default options into the array. - * - * @param array $options Options to modify by reference - */ - private function prepareDefaults( - #[\SensitiveParameter] - array $options - ): array { - if (isset($options['handler'])) { - throw new InvalidArgumentException('The "handler" request option is not supported; configure the handler when creating the client, or use a separate client instance for requests that need a different handler.'); - } - - $defaults = $this->config; - - if (!empty($defaults['headers'])) { - // Default headers are only added if they are not present. - $defaults['_conditional'] = $defaults['headers']; - unset($defaults['headers']); - } - - // Special handling for headers is required as they are added as - // conditional headers and as headers passed to a request ctor. - if (\array_key_exists('headers', $options)) { - // Allows default headers to be unset. - if ($options['headers'] === null) { - $defaults['_conditional'] = []; - unset($options['headers']); - } elseif (!\is_array($options['headers'])) { - throw new InvalidArgumentException('headers must be an array'); - } - } - - // Shallow merge defaults underneath options. - $result = $options + $defaults; - - // Remove null values. - foreach ($result as $k => $v) { - if ($v === null) { - unset($result[$k]); - } - } - - self::assertRequestOptionTypes($result); - - return $result; - } - - private static function assertRequestOptionTypes( - #[\SensitiveParameter] - array $options - ): void { - if (isset($options['allow_redirects'])) { - if (!\is_bool($options['allow_redirects']) && !\is_array($options['allow_redirects'])) { - self::invalidRequestOptionType('allow_redirects', 'bool|array', $options['allow_redirects']); - } - - if (\is_array($options['allow_redirects'])) { - self::assertAllowRedirectsOptionTypes($options['allow_redirects']); - } - } - - if ( - isset($options['auth']) - && $options['auth'] !== false - && !\is_string($options['auth']) - && !\is_array($options['auth']) - ) { - self::invalidRequestOptionType('auth', 'array{0: string, 1: string, 2?: string|null}|string|false|null', $options['auth']); - } - - if (isset($options['auth']) && \is_array($options['auth']) && $options['auth'] !== []) { - self::assertAuthOptionTypes($options['auth']); - } - - self::assertTlsFileOptionTypes($options, 'cert'); - self::assertIfPresentAndNotString($options, 'cert_type'); - self::assertIfPresentAndNotNumber($options, 'connect_timeout'); - self::assertIfPresentAndNotInt($options, 'crypto_method'); - self::assertIfPresentAndNotInt($options, 'crypto_method_max'); - self::assertIfPresentAndNotBoolOrResource($options, 'debug'); - self::assertIfPresentAndNotBoolOrString($options, 'decode_content'); - self::assertIfPresentAndNotFiniteNonNegativeNumber($options, 'delay'); - self::assertIfPresentAndNotBoolOrInt($options, 'expect'); - - if (isset($options['form_params'])) { - self::assertFormParamTypes($options['form_params']); - } - - self::assertIfPresentAndNotForceIpResolve($options); - - if (isset($options['headers'])) { - self::assertHeaderOptionTypes($options['headers']); - } - - self::assertIfPresentAndNotBool($options, 'http_errors'); - - if (isset($options['multipart'])) { - self::assertMultipartOptionTypes($options['multipart']); - } - - self::assertValidMultiplex($options); - self::assertIfPresentAndNotCallable($options, 'on_headers'); - self::assertIfPresentAndNotCallable($options, 'on_stats'); - self::assertIfPresentAndNotCallable($options, 'on_trailers'); - self::assertIfPresentAndNotCallable($options, 'progress'); - self::assertIfPresentAndNotProtocolArray($options, 'protocols'); - self::assertProxyOptionTypes($options); - self::assertIfPresentAndNotNumber($options, 'read_timeout'); - self::assertIfPresentAndNotInt($options, 'retries'); - - if (isset($options['sink']) && !\is_resource($options['sink']) && !\is_string($options['sink']) && !$options['sink'] instanceof StreamInterface) { - self::invalidRequestOptionType('sink', 'resource|string|StreamInterface', $options['sink']); - } - - self::assertTlsFileOptionTypes($options, 'ssl_key'); - self::assertIfPresentAndNotString($options, 'ssl_key_type'); - self::assertIfPresentAndNotBool($options, 'stream'); - self::assertIfPresentAndNotArray($options, 'stream_context', 'array'); - self::assertIfPresentAndNotBool($options, 'synchronous'); - self::assertIfPresentAndNotNumber($options, 'timeout'); - self::assertIfPresentAndNotBoolOrString($options, 'verify'); - self::assertIfPresentAndNotStringOrNumber($options, 'version'); - self::assertIfPresentAndNotArray($options, 'curl', 'array'); - - if (isset($options['cookies']) && $options['cookies'] !== false && !$options['cookies'] instanceof CookieJarInterface) { - self::invalidRequestOptionType('cookies', 'false|CookieJarInterface', $options['cookies']); - } - } - - private static function assertAllowRedirectsOptionTypes(array $allowRedirects): void - { - self::assertIfPresentAndNotInt($allowRedirects, 'max', 'allow_redirects.max'); - self::assertIfPresentAndNotBool($allowRedirects, 'strict', 'allow_redirects.strict'); - self::assertIfPresentAndNotBool($allowRedirects, 'referer', 'allow_redirects.referer'); - self::assertIfPresentAndNotProtocolArray($allowRedirects, 'protocols', 'allow_redirects.protocols'); - self::assertIfPresentAndNotCallable($allowRedirects, 'on_redirect', 'allow_redirects.on_redirect'); - self::assertIfPresentAndNotBool($allowRedirects, 'track_redirects', 'allow_redirects.track_redirects'); - } - - /** - * @param array $auth - */ - private static function assertAuthOptionTypes( - #[\SensitiveParameter] - array $auth - ): void { - if (!\array_key_exists(0, $auth) || !\is_string($auth[0])) { - self::invalidRequestOptionType('auth.0', 'string', $auth[0] ?? null); - } - - if (!\array_key_exists(1, $auth) || !\is_string($auth[1])) { - self::invalidRequestOptionType('auth.1', 'string', $auth[1] ?? null); - } - - if (\array_key_exists(2, $auth) && $auth[2] !== null && !\is_string($auth[2])) { - self::invalidRequestOptionType('auth.2', 'string|null', $auth[2]); - } - } - - /** - * @param mixed $value - */ - private static function assertFormParamTypes($value): void - { - if (!\is_array($value)) { - self::invalidRequestOptionType('form_params', 'array', $value); - - return; - } - - self::assertFormParamArray($value, 'form_params'); - self::assertFiniteFloats($value, 'form_params'); - } - - private static function assertFormParamArray(array $values, string $path): bool - { - foreach ($values as $key => $item) { - $itemPath = $path.'.'.(string) $key; - if (\is_array($item)) { - if (!self::assertFormParamArray($item, $itemPath)) { - return false; - } - - continue; - } - - if ($item !== null && !\is_scalar($item)) { - self::invalidRequestOptionType($itemPath, 'string|int|float|bool|null|array', $item); - - return false; - } - } - - return true; - } - - private static function assertFiniteFloats(array $values, string $option): void - { - foreach ($values as $key => $value) { - if (\is_array($value)) { - self::assertFiniteFloats($value, $option.'.'.(string) $key); - } elseif (\is_float($value) && !\is_finite($value)) { - throw new InvalidArgumentException(\sprintf( - 'Passing a non-finite float to request option "%s" is invalid; non-finite floats are not supported.', - DiagnosticValue::escape($option.'.'.(string) $key) - )); - } - } - } - - /** - * @param mixed $headers - */ - private static function assertHeaderOptionTypes( - #[\SensitiveParameter] - $headers - ): void { - if (!\is_array($headers)) { - self::invalidRequestOptionType('headers', 'array>|null', $headers); - - return; - } - - foreach ($headers as $name => $value) { - $path = 'headers.'.(string) $name; - if (\is_array($value)) { - if ($value === []) { - self::invalidRequestOptionType($path, 'string|non-empty-array', $value); - } - - foreach ($value as $index => $item) { - if (!\is_string($item)) { - self::invalidRequestOptionType($path.'.'.(string) $index, 'string', $item); - } - } - } elseif (!\is_string($value)) { - self::invalidRequestOptionType($path, 'string|non-empty-array', $value); - } - } - } - - /** - * @param mixed $multipart - */ - private static function assertMultipartOptionTypes($multipart): void - { - if (!\is_array($multipart)) { - self::invalidRequestOptionType('multipart', 'array, filename?: string}>', $multipart); - - return; - } - - foreach ($multipart as $index => $part) { - $path = 'multipart.'.(string) $index; - if (!\is_array($part)) { - self::invalidRequestOptionType($path, 'array{name: string|int, contents: mixed, headers?: array, filename?: string}', $part); - - return; - } - - if (!\array_key_exists('name', $part) || (!\is_string($part['name']) && !\is_int($part['name']))) { - self::invalidRequestOptionType($path.'.name', 'string|int', $part['name'] ?? null); - } - - if (!\array_key_exists('contents', $part)) { - self::invalidRequestOptionType($path, 'array{name: string|int, contents: mixed, headers?: array, filename?: string}', $part); - } - - if (\array_key_exists('headers', $part)) { - if (!\is_array($part['headers'])) { - self::invalidRequestOptionType($path.'.headers', 'array', $part['headers']); - - return; - } - - foreach ($part['headers'] as $name => $value) { - if (!\is_string($value)) { - self::invalidRequestOptionType($path.'.headers.'.(string) $name, 'string', $value); - } - } - } - - if (\array_key_exists('filename', $part) && !\is_string($part['filename'])) { - self::invalidRequestOptionType($path.'.filename', 'string', $part['filename']); - } - } - } - - private static function assertProxyOptionTypes( - #[\SensitiveParameter] - array $options - ): void { - if (!isset($options['proxy'])) { - return; - } - - if (!\is_string($options['proxy']) && !\is_array($options['proxy'])) { - self::invalidRequestOptionType('proxy', 'string|array{http?: string|null, https?: string|null, no?: string|array|null}', $options['proxy']); - - return; - } - - if (!\is_array($options['proxy'])) { - return; - } - - foreach (['http', 'https'] as $scheme) { - if (\array_key_exists($scheme, $options['proxy']) && $options['proxy'][$scheme] !== null && !\is_string($options['proxy'][$scheme])) { - self::invalidRequestOptionType('proxy.'.$scheme, 'string|null', $options['proxy'][$scheme]); - } - } - - if (!\array_key_exists('no', $options['proxy']) || $options['proxy']['no'] === null) { - return; - } - - if (\is_string($options['proxy']['no'])) { - return; - } - - if (!\is_array($options['proxy']['no'])) { - self::invalidRequestOptionType('proxy.no', 'string|array|null', $options['proxy']['no']); - - return; - } - - foreach ($options['proxy']['no'] as $index => $noProxy) { - if (!\is_string($noProxy)) { - self::invalidRequestOptionType('proxy.no.'.(string) $index, 'string', $noProxy); - } - } - } - - private static function assertTlsFileOptionTypes( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if (!isset($options[$option])) { - return; - } - - if (\is_string($options[$option])) { - return; - } - - if (!\is_array($options[$option])) { - self::invalidRequestOptionType($option, 'string|array{0: string, 1?: string}', $options[$option]); - - return; - } - - if (!\array_key_exists(0, $options[$option]) || !\is_string($options[$option][0])) { - self::invalidRequestOptionType($option.'.0', 'string', $options[$option][0] ?? null); - } - - if (\array_key_exists(1, $options[$option]) && $options[$option][1] !== null && !\is_string($options[$option][1])) { - self::invalidRequestOptionType($option.'.1', 'string|null', $options[$option][1]); - } - } - - private static function assertIfPresentAndNotArray( - #[\SensitiveParameter] - array $options, - string $option, - string $expected - ): void { - if (\array_key_exists($option, $options) && !\is_array($options[$option])) { - self::invalidRequestOptionType($option, $expected, $options[$option]); - } - } - - private static function assertIfPresentAndNotBool( - #[\SensitiveParameter] - array $options, - string $option, - ?string $path = null - ): void { - if (\array_key_exists($option, $options) && !\is_bool($options[$option])) { - self::invalidRequestOptionType($path ?? $option, 'bool', $options[$option]); - } - } - - private static function assertValidMultiplex( - #[\SensitiveParameter] - array $options - ): void { - if (!\array_key_exists('multiplex', $options) || $options['multiplex'] === null) { - return; - } - - if (!\in_array($options['multiplex'], [Multiplexing::NONE, Multiplexing::EAGER, Multiplexing::WAIT, Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new InvalidArgumentException(\sprintf( - 'The "multiplex" option must be null or a GuzzleHttp\\Multiplexing::* constant; received %s.', - \get_debug_type($options['multiplex']) - )); - } - } - - private static function assertIfPresentAndNotBoolOrInt( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if (\array_key_exists($option, $options) && !\is_bool($options[$option]) && !\is_int($options[$option])) { - self::invalidRequestOptionType($option, 'bool|int', $options[$option]); - } - } - - private static function assertIfPresentAndNotBoolOrResource( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if (\array_key_exists($option, $options) && !\is_bool($options[$option]) && !\is_resource($options[$option])) { - self::invalidRequestOptionType($option, 'bool|resource', $options[$option]); - } - } - - private static function assertIfPresentAndNotBoolOrString( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if (\array_key_exists($option, $options) && !\is_bool($options[$option]) && !\is_string($options[$option])) { - self::invalidRequestOptionType($option, 'bool|string', $options[$option]); - } - } - - private static function assertIfPresentAndNotCallable( - #[\SensitiveParameter] - array $options, - string $option, - ?string $path = null - ): void { - if (\array_key_exists($option, $options) && !\is_callable($options[$option])) { - self::invalidRequestOptionType($path ?? $option, 'callable', $options[$option]); - } - } - - private static function assertIfPresentAndNotInt( - #[\SensitiveParameter] - array $options, - string $option, - ?string $path = null - ): void { - if (\array_key_exists($option, $options) && !\is_int($options[$option])) { - self::invalidRequestOptionType($path ?? $option, 'int', $options[$option]); - } - } - - private static function assertIfPresentAndNotNumber( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if (\array_key_exists($option, $options) && !\is_int($options[$option]) && !\is_float($options[$option])) { - self::invalidRequestOptionType($option, 'int|float', $options[$option]); - } - } - - /** - * @param array $options - */ - private static function assertIfPresentAndNotFiniteNonNegativeNumber( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if (!\array_key_exists($option, $options)) { - return; - } - - if (!\is_int($options[$option]) && !\is_float($options[$option])) { - self::invalidRequestOptionType($option, 'finite int|float greater than or equal to 0', $options[$option]); - - return; - } - - if (!\is_finite((float) $options[$option]) || $options[$option] < 0) { - self::invalidRequestOptionType($option, 'finite int|float greater than or equal to 0', $options[$option]); - } - } - - /** - * @param array $options - */ - private static function assertIfPresentAndNotForceIpResolve( - #[\SensitiveParameter] - array $options - ): void { - if (!\array_key_exists('force_ip_resolve', $options)) { - return; - } - - if ( - !\is_string($options['force_ip_resolve']) - || ($options['force_ip_resolve'] !== 'v4' && $options['force_ip_resolve'] !== 'v6') - ) { - self::invalidRequestOptionType('force_ip_resolve', '"v4"|"v6"', $options['force_ip_resolve']); - } - } - - private static function assertIfPresentAndNotString( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if (\array_key_exists($option, $options) && !\is_string($options[$option])) { - self::invalidRequestOptionType($option, 'string', $options[$option]); - } - } - - /** - * @param array $options - */ - private static function assertIfPresentAndNotProtocolArray( - #[\SensitiveParameter] - array $options, - string $option, - ?string $path = null - ): void { - if (!\array_key_exists($option, $options)) { - return; - } - - $path = $path ?? $option; - - if (!\is_array($options[$option]) || $options[$option] === []) { - self::invalidRequestOptionType($path, 'non-empty-array', $options[$option]); - - return; - } - - foreach ($options[$option] as $index => $protocol) { - if (!\is_string($protocol)) { - self::invalidRequestOptionType($path.'.'.(string) $index, 'string', $protocol); - - continue; - } - - if ($protocol !== 'http' && $protocol !== 'https') { - self::invalidRequestOptionType($path.'.'.(string) $index, '"http"|"https"', $protocol); - } - } - } - - private static function assertIfPresentAndNotStringOrNumber( - #[\SensitiveParameter] - array $options, - string $option - ): void { - if ( - \array_key_exists($option, $options) - && !\is_string($options[$option]) - && !\is_int($options[$option]) - && !\is_float($options[$option]) - ) { - self::invalidRequestOptionType($option, 'string|int|float', $options[$option]); - } - } - - /** - * @param mixed $value - */ - private static function invalidRequestOptionType( - string $option, - string $expected, - #[\SensitiveParameter] - $value - ): void { - throw new InvalidArgumentException(\sprintf( - 'Passing %s to request option "%s" is invalid; expected %s.', - \get_debug_type($value), - DiagnosticValue::escape($option), - $expected - )); - } - - /** - * Transfers the given request and applies request options. - * - * The URI of the request is not modified and the request options are used - * as-is without merging in default options. - * - * @param array $options See {@see RequestOptions}. - * - * @return PromiseInterface - */ - private function transfer( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - $request = $this->applyOptions($request, $options); - - /** @var callable(RequestInterface, array): PromiseInterface $handler */ - $handler = $this->config['handler']; - - try { - self::assertRequestProtocolVersion($request); - - /** @var PromiseInterface */ - return P\Create::promiseFor($handler($request, $options)); - } catch (\Throwable $e) { - /** @var PromiseInterface */ - return P\Create::rejectionFor($e); - } - } - - /** - * Applies the array of request options to a request. - */ - private function applyOptions( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array &$options - ): RequestInterface { - $modify = [ - 'set_headers' => [], - ]; - - // Validate the response and stream factories up front. Every request - // yields a response, and the built-in handlers build the response body - // stream via the stream factory even when the request has no body, so - // both must be validated unconditionally. - self::requireResponseFactory($options[RequestOptions::RESPONSE_FACTORY] ?? new HttpFactory()); - $streamFactory = self::requireStreamFactory($options[RequestOptions::STREAM_FACTORY] ?? new HttpFactory()); - - if (isset($options['headers'])) { - if (array_keys($options['headers']) === range(0, count($options['headers']) - 1)) { - throw new InvalidArgumentException('The headers array must have header name as keys.'); - } - $modify['set_headers'] = $options['headers']; - unset($options['headers']); - } - - if (isset($options['form_params'])) { - if (isset($options['multipart'])) { - throw new InvalidArgumentException('You cannot use ' - .'form_params and multipart at the same time. Use the ' - .'form_params option if you want to send application/' - .'x-www-form-urlencoded requests, and the multipart ' - .'option to send multipart/form-data requests.'); - } - $options['body'] = \http_build_query($options['form_params'], '', '&'); - unset($options['form_params']); - // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); - $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded'; - } - - if (isset($options['multipart'])) { - $options['body'] = new Psr7\MultipartStream($options['multipart']); - unset($options['multipart']); - } - - if (isset($options['json'])) { - try { - $options['body'] = \json_encode($options['json'], \JSON_THROW_ON_ERROR); - } catch (\JsonException $e) { - throw new InvalidArgumentException('json_encode error: '.$e->getMessage(), 0, $e); - } - - unset($options['json']); - // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); - $options['_conditional']['Content-Type'] = 'application/json'; - } - - if (isset($options['decode_content']) && \is_string($options['decode_content'])) { - // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\Utils::caselessRemove(['Accept-Encoding'], $options['_conditional']); - $modify['set_headers']['Accept-Encoding'] = (string) $options['decode_content']; - } - - if (isset($options['body'])) { - if (\is_array($options['body'])) { - throw $this->invalidBody(); - } - $modify['body'] = self::createBodyStream($options['body'], $streamFactory); - unset($options['body']); - } - - if (isset($options['query'])) { - $value = $options['query']; - if (\is_array($value)) { - self::assertFiniteFloats($value, 'query'); - $value = \http_build_query($value, '', '&', \PHP_QUERY_RFC3986); - } - if (!\is_string($value)) { - throw new InvalidArgumentException('query must be a string or array'); - } - $modify['query'] = $value; - unset($options['query']); - } - - if (isset($options['version'])) { - $modify['version'] = self::normalizeProtocolVersion($options['version']); - } - - $request = Psr7\Utils::modifyRequest($request, $modify); - if ($request->getBody() instanceof Psr7\MultipartStream) { - // Use a multipart/form-data POST if a Content-Type is not set. - // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); - $options['_conditional']['Content-Type'] = self::getMultipartContentType($request->getBody()); - } - - // Merge in conditional headers if they are not present. - if (isset($options['_conditional'])) { - // Build up the changes so it's in a single clone of the message. - $modify = []; - foreach ($options['_conditional'] as $k => $v) { - $name = (string) $k; - if (!$request->hasHeader($name)) { - $modify['set_headers'][$name] = $v; - } - } - $request = Psr7\Utils::modifyRequest($request, $modify); - // Don't pass this internal value along to middleware/handlers. - unset($options['_conditional']); - } - - return $request; - } - - /** - * @param string|int|float $version - */ - private static function normalizeProtocolVersion($version): string - { - $version = \is_float($version) ? \number_format($version, 1, '.', '') : (string) $version; - - self::assertProtocolVersion($version); - - return $version; - } - - private static function assertProtocolVersion(string $version): void - { - if ('' === $version) { - throw new InvalidArgumentException('HTTP protocol version must not be empty.'); - } - - if (1 !== \preg_match('/^\d+(?:\.\d+)?$/D', $version)) { - throw new InvalidArgumentException('HTTP protocol version must be a valid HTTP version number.'); - } - } - - private static function assertRequestProtocolVersion( - #[\SensitiveParameter] - RequestInterface $request - ): void { - $version = $request->getProtocolVersion(); - - if ('' === $version) { - throw new RequestException('HTTP protocol version must not be empty.', $request); - } - - if (1 !== \preg_match('/^\d+(?:\.\d+)?$/D', $version)) { - throw new RequestException('HTTP protocol version must be a valid HTTP version number.', $request); - } - } - - private static function getMultipartContentType(Psr7\MultipartStream $body): string - { - $boundary = $body->getBoundary(); - - if (false !== \strpbrk($boundary, '()<>@,;:\"/[]?= ')) { - $boundary = '"'.$boundary.'"'; - } - - return 'multipart/form-data; boundary='.$boundary; - } - - /** - * Return an InvalidArgumentException with pre-set message. - */ - private function invalidBody(): InvalidArgumentException - { - return new InvalidArgumentException('Passing in the "body" request ' - .'option as an array to send a request is not supported. ' - .'Please use the "form_params" request option to send a ' - .'application/x-www-form-urlencoded request, or the "multipart" ' - .'request option to send a multipart/form-data request.'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ClientInterface.php deleted file mode 100644 index 187459b97..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ /dev/null @@ -1,370 +0,0 @@ -, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply to the given request and to the transfer. - * - * @throws GuzzleException - */ - public function send(RequestInterface $request, array $options = []): ResponseInterface; - - /** - * Asynchronously send an HTTP request. - * - * @param RequestInterface $request Request to send - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply to the given request and to the transfer. - * - * @return PromiseInterface - */ - public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface; - - /** - * Create and send an HTTP request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string $method HTTP method. - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - public function request(string $method, $uri, array $options = []): ResponseInterface; - - /** - * Create and send an asynchronous HTTP request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string $method HTTP method - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - public function requestAsync(string $method, $uri, array $options = []): PromiseInterface; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ClientTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ClientTrait.php deleted file mode 100644 index 8eed76a9b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ClientTrait.php +++ /dev/null @@ -1,1315 +0,0 @@ -, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - abstract public function request(string $method, $uri, array $options = []): ResponseInterface; - - /** - * Create and send an HTTP GET request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - public function get( - $uri, - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - return $this->request('GET', $uri, $options); - } - - /** - * Create and send an HTTP HEAD request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - public function head( - $uri, - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - return $this->request('HEAD', $uri, $options); - } - - /** - * Create and send an HTTP PUT request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - public function put( - $uri, - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - return $this->request('PUT', $uri, $options); - } - - /** - * Create and send an HTTP POST request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - public function post( - $uri, - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - return $this->request('POST', $uri, $options); - } - - /** - * Create and send an HTTP PATCH request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - public function patch( - $uri, - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - return $this->request('PATCH', $uri, $options); - } - - /** - * Create and send an HTTP DELETE request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @throws GuzzleException - */ - public function delete( - $uri, - #[\SensitiveParameter] - array $options = [] - ): ResponseInterface { - return $this->request('DELETE', $uri, $options); - } - - /** - * Create and send an asynchronous HTTP request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string $method HTTP method - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - abstract public function requestAsync(string $method, $uri, array $options = []): PromiseInterface; - - /** - * Create and send an asynchronous HTTP GET request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - public function getAsync( - $uri, - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - return $this->requestAsync('GET', $uri, $options); - } - - /** - * Create and send an asynchronous HTTP HEAD request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - public function headAsync( - $uri, - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - return $this->requestAsync('HEAD', $uri, $options); - } - - /** - * Create and send an asynchronous HTTP PUT request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - public function putAsync( - $uri, - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - return $this->requestAsync('PUT', $uri, $options); - } - - /** - * Create and send an asynchronous HTTP POST request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - public function postAsync( - $uri, - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - return $this->requestAsync('POST', $uri, $options); - } - - /** - * Create and send an asynchronous HTTP PATCH request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - public function patchAsync( - $uri, - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - return $this->requestAsync('PATCH', $uri, $options); - } - - /** - * Create and send an asynchronous HTTP DELETE request. - * - * Use an absolute path to override the base path of the client, or a - * relative path to append to the base path of the client. The URL can - * contain the query string as well. - * - * @param string|UriInterface $uri URI object or string. - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options Request options to apply. - * - * @return PromiseInterface - */ - public function deleteAsync( - $uri, - #[\SensitiveParameter] - array $options = [] - ): PromiseInterface { - return $this->requestAsync('DELETE', $uri, $options); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php deleted file mode 100644 index c6255d7a5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php +++ /dev/null @@ -1,439 +0,0 @@ -strictMode = $strictMode; - - foreach ($cookieArray as $cookie) { - if (!$cookie instanceof SetCookie) { - $cookie = new SetCookie($cookie); - } - $this->setCookie($cookie); - } - } - - /** - * Create a new Cookie jar from an associative array and domain. - * - * @param array $cookies Cookies to create the jar from - * @param string $domain Domain to set the cookies to - */ - public static function fromArray( - #[\SensitiveParameter] - array $cookies, - string $domain - ): self { - $cookieJar = new self(); - foreach ($cookies as $name => $value) { - if (!\is_scalar($value) && !(\is_object($value) && \method_exists($value, '__toString'))) { - throw new \InvalidArgumentException('Cookie value must be scalar or stringable'); - } - - $cookieJar->setCookie(new SetCookie([ - 'Domain' => $domain, - 'Name' => (string) $name, - 'Value' => (string) $value, - 'Discard' => true, - ])); - } - - return $cookieJar; - } - - /** - * Evaluate if this cookie should be persisted to storage - * that survives between requests. - * - * @param SetCookie $cookie Being evaluated. - * @param bool $allowSessionCookies If we should persist session cookies - */ - public static function shouldPersist(SetCookie $cookie, bool $allowSessionCookies = false): bool - { - if ($cookie->getExpires() || $allowSessionCookies) { - if (!$cookie->getDiscard()) { - return true; - } - } - - return false; - } - - /** - * Finds and returns the cookie based on the name - * - * @param string $name cookie name to search for - * - * @return SetCookie|null cookie that was found or null if not found - */ - public function getCookieByName(string $name): ?SetCookie - { - foreach ($this->cookies as $cookie) { - if ($cookie->getName() === $name) { - return $cookie; - } - } - - return null; - } - - public function toArray(): array - { - return \array_map(static function (SetCookie $cookie): array { - return $cookie->toArray(); - }, $this->getIterator()->getArrayCopy()); - } - - public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void - { - if ($domain === null) { - $this->cookies = []; - - return; - } elseif ($path === null) { - $this->cookies = \array_filter( - $this->cookies, - static function (SetCookie $cookie) use ($domain): bool { - return $cookie->getDomain() === null || !$cookie->matchesDomain($domain); - } - ); - } elseif ($name === null) { - $this->cookies = \array_filter( - $this->cookies, - static function (SetCookie $cookie) use ($path, $domain): bool { - return !($cookie->getDomain() !== null - && $cookie->matchesPath($path) - && $cookie->matchesDomain($domain)); - } - ); - } else { - $this->cookies = \array_filter( - $this->cookies, - static function (SetCookie $cookie) use ($path, $domain, $name): bool { - return !($cookie->getDomain() !== null - && $cookie->getName() === $name - && $cookie->matchesPath($path) - && $cookie->matchesDomain($domain)); - } - ); - } - } - - public function clearSessionCookies(): void - { - $this->cookies = \array_filter( - $this->cookies, - static function (SetCookie $cookie): bool { - return !$cookie->getDiscard() && $cookie->getExpires(); - } - ); - } - - public function setCookie( - #[\SensitiveParameter] - SetCookie $cookie - ): bool { - // If the name string is empty (but not 0), ignore the set-cookie - // string entirely. - $name = $cookie->getName(); - if (!$name && $name !== '0') { - return false; - } - - // Only allow cookies with set and valid domain, name, value - $result = $cookie->validate(); - if ($result !== true) { - if ($this->strictMode) { - throw new \RuntimeException('Invalid cookie: '.$result); - } - $this->removeCookieIfEmpty($cookie); - - return false; - } - - $maxAge = $cookie->getMaxAge(); - if ($maxAge !== null && $maxAge <= 0) { - if ($cookie->getDomain() !== null) { - $this->removeCookie($cookie); - } - - return false; - } - - // Resolve conflicts with previously set cookies - foreach ($this->cookies as $i => $c) { - // Two cookies are identical, when their path, and domain are - // identical. - if ($c->getPath() !== $cookie->getPath() - || $c->getDomain() !== $cookie->getDomain() - || $c->getHostOnly() !== $cookie->getHostOnly() - || $c->getName() !== $cookie->getName() - ) { - continue; - } - - // The previously set cookie is a discard cookie and this one is - // not so allow the new cookie to be set - if (!$cookie->getDiscard() && $c->getDiscard()) { - unset($this->cookies[$i]); - continue; - } - - // If the new cookie's expiration is further into the future, then - // replace the old cookie - if ($cookie->getExpires() > $c->getExpires()) { - unset($this->cookies[$i]); - continue; - } - - // If the value has changed, we better change it - if ($cookie->getValue() !== $c->getValue()) { - unset($this->cookies[$i]); - continue; - } - - // The cookie exists, so no need to continue - return false; - } - - $this->cookies[] = $cookie; - - return true; - } - - public function count(): int - { - return \count($this->cookies); - } - - /** - * @return \ArrayIterator - */ - public function getIterator(): \ArrayIterator - { - return new \ArrayIterator(\array_values($this->cookies)); - } - - public function extractCookies( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - ResponseInterface $response - ): void { - if ($cookieHeader = $response->getHeader('Set-Cookie')) { - $uri = $request->getUri(); - $requestHost = HostIdentity::canonicalHost($uri->getHost()); - $secure = $uri->getScheme() === 'https'; - $accepted = 0; - - foreach ($cookieHeader as $cookie) { - if (\strlen($cookie) > self::MAX_SET_COOKIE_FIELD_LENGTH) { - continue; - } - - $sc = SetCookie::fromString($cookie); - $domain = $sc->getDomain(); - if ($domain === null || $domain === '') { - $sc->setDomain($requestHost); - $sc->setHostOnly(true); - } else { - $sc->setHostOnly(false); - } - if (0 !== \strpos($sc->getPath(), '/')) { - $sc->setPath($this->getCookiePathFromRequest($request)); - } - if (!$sc->matchesDomain($requestHost)) { - continue; - } - if (!$secure && ($sc->getSecure() || $this->overlaysSecureCookie($sc))) { - continue; - } - $prefixName = Psr7\Utils::asciiToLower((string) $sc->getName()); - if (\str_starts_with($prefixName, '__secure-') && !$sc->getSecure()) { - continue; - } - if (\str_starts_with($prefixName, '__host-') && (!$sc->getSecure() || !$sc->getHostOnly() || $sc->getPath() !== '/' || !self::hasPathAttribute($cookie))) { - continue; - } - // Note: At this point `$sc->getDomain()` being a public suffix should - // be rejected, but we don't want to pull in the full PSL dependency. - if ($this->setCookie($sc) && ++$accepted === self::MAX_SET_COOKIE_FIELDS) { - break; - } - } - } - } - - private function overlaysSecureCookie(SetCookie $cookie): bool - { - foreach ($this->cookies as $stored) { - if (self::isSecureCookieOverlay($cookie, $stored)) { - return true; - } - } - - return false; - } - - private static function isSecureCookieOverlay(SetCookie $cookie, SetCookie $stored): bool - { - if ($stored->getName() !== $cookie->getName() || !$stored->getSecure() || $stored->isExpired()) { - return false; - } - - $domain = $cookie->getDomain(); - $storedDomain = $stored->getDomain(); - if ($domain === null || $storedDomain === null) { - return false; - } - - if (!HostIdentity::cookieDomainMatches($storedDomain, $domain) && !HostIdentity::cookieDomainMatches($domain, $storedDomain)) { - return false; - } - - return $stored->matchesPath($cookie->getPath()); - } - - /** - * Mirrors SetCookie::fromString()'s splitting because parsed cookies cannot - * distinguish an absent Path attribute from a defaulted path. - */ - private static function hasPathAttribute(string $header): bool - { - $parts = \explode(';', $header); - \array_shift($parts); - - foreach ($parts as $part) { - $separator = \strpos($part, '='); - if ($separator !== false && Psr7\Utils::caselessEquals(\trim(\substr($part, 0, $separator), " \t"), 'Path')) { - return true; - } - } - - return false; - } - - /** - * Computes cookie path following RFC 6265 section 5.1.4 - * - * @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4 - */ - private function getCookiePathFromRequest(RequestInterface $request): string - { - $uriPath = $request->getUri()->getPath(); - if ('' === $uriPath) { - return '/'; - } - if (0 !== \strpos($uriPath, '/')) { - return '/'; - } - if ('/' === $uriPath) { - return '/'; - } - $lastSlashPos = \strrpos($uriPath, '/'); - if (0 === $lastSlashPos || false === $lastSlashPos) { - return '/'; - } - - return \substr($uriPath, 0, $lastSlashPos); - } - - public function withCookieHeader( - #[\SensitiveParameter] - RequestInterface $request - ): RequestInterface { - $values = []; - $headerLength = 8; - $uri = $request->getUri(); - $scheme = $uri->getScheme(); - $host = HostIdentity::canonicalHost($uri->getHost()); - $path = $uri->getPath() ?: '/'; - - foreach ($this->cookies as $cookie) { - if ($cookie->getDomain() !== null - && $cookie->matchesPath($path) - && $cookie->matchesDomain($host) - && !$cookie->isExpired() - && (!$cookie->getSecure() || $scheme === 'https') - ) { - $name = (string) $cookie->getName(); - $value = (string) $cookie->getValue(); - $separatorLength = $values === [] ? 0 : 2; - $valueLength = \strlen($name) + 1 + \strlen($value); - if ($headerLength + $separatorLength + $valueLength > self::MAX_COOKIE_HEADER_LENGTH) { - break; - } - - $values[] = $name.'='.$value; - $headerLength += $separatorLength + $valueLength; - if (\count($values) === self::MAX_REQUEST_COOKIES) { - break; - } - } - } - - return $values - ? $request->withHeader('Cookie', \implode('; ', $values)) - : $request; - } - - /** - * If a cookie already exists and the server asks to set it again with a - * null value, the cookie must be deleted. - */ - private function removeCookieIfEmpty(SetCookie $cookie): void - { - $cookieValue = $cookie->getValue(); - if (($cookieValue === null || $cookieValue === '') && $cookie->getDomain() !== null) { - $this->removeCookie($cookie); - } - } - - private function removeCookie(SetCookie $cookie): void - { - $this->cookies = \array_filter( - $this->cookies, - static function (SetCookie $stored) use ($cookie): bool { - return !($stored->getName() === $cookie->getName() - && $stored->getPath() === $cookie->getPath() - && $stored->getDomain() === $cookie->getDomain() - && $stored->getHostOnly() === $cookie->getHostOnly()); - } - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php deleted file mode 100644 index b2efa3c11..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php +++ /dev/null @@ -1,82 +0,0 @@ - - */ -interface CookieJarInterface extends \Countable, \IteratorAggregate -{ - /** - * Create a request with added cookie headers. - * - * If no matching cookies are found in the cookie jar, then no Cookie - * header is added to the request and the same request is returned. - * - * @param RequestInterface $request Request object to modify. - * - * @return RequestInterface returns the modified request. - */ - public function withCookieHeader(RequestInterface $request): RequestInterface; - - /** - * Extract cookies from an HTTP response and store them in the CookieJar. - * - * @param RequestInterface $request Request that was sent - * @param ResponseInterface $response Response that was received - */ - public function extractCookies(RequestInterface $request, ResponseInterface $response): void; - - /** - * Sets a cookie in the cookie jar. - * - * @param SetCookie $cookie Cookie to set. - * - * @return bool Returns true on success or false on failure - */ - public function setCookie(SetCookie $cookie): bool; - - /** - * Remove cookies currently held in the cookie jar. - * - * Invoking this method without arguments will empty the whole cookie jar. - * If given a $domain argument only cookies belonging to that domain will - * be removed. If given a $domain and $path argument, cookies belonging to - * the specified path within that domain are removed. If given all three - * arguments, then the cookie with the specified name, path and domain is - * removed. - * - * @param string|null $domain Clears cookies matching a domain - * @param string|null $path Clears cookies matching a domain and path - * @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; - - /** - * Discard all sessions cookies. - * - * Removes cookies that don't have an expire field or a have a discard - * field set to true. To be called when the user agent shuts down according - * to RFC 2965. - */ - public function clearSessionCookies(): void; - - /** - * Converts the cookie jar to an array. - */ - public function toArray(): array; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php deleted file mode 100644 index 1ba3bc5b3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php +++ /dev/null @@ -1,168 +0,0 @@ -filename = $cookieFile; - $this->storeSessionCookies = $storeSessionCookies; - - if (\file_exists($cookieFile)) { - $this->load($cookieFile); - } - - $this->autoSave = true; - } - - /** - * Saves the file when shutting down - */ - public function __destruct() - { - if ($this->autoSave) { - $this->save($this->filename); - } - } - - /** - * Disable automatic persistence after unserialization. - */ - public function __wakeup(): void - { - $this->autoSave = false; - } - - public function __unserialize(array $data): void - { - $this->autoSave = false; - - throw new \LogicException(static::class.' should never be unserialized'); - } - - /** - * Saves the cookies to a file. - * - * @param string $filename File to save - * - * @throws \RuntimeException if the cookie data cannot be encoded or the - * file cannot be written - */ - public function save(string $filename): void - { - $json = []; - /** @var SetCookie $cookie */ - foreach ($this as $cookie) { - if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { - $data = $cookie->toArray(); - $data['HostOnly'] = $cookie->getHostOnly(); - $json[] = $data; - } - } - - try { - $jsonStr = \json_encode($json, \JSON_HEX_TAG | \JSON_THROW_ON_ERROR); - } catch (\JsonException $e) { - throw new \RuntimeException('Unable to encode cookie data', 0, $e); - } - - if (false === \file_put_contents($filename, $jsonStr, \LOCK_EX)) { - throw new \RuntimeException(\sprintf('Unable to save file %s', DiagnosticValue::escape($filename))); - } - - // Best-effort: restrict the cookie file to the owner so persisted - // cookies are not world-readable. - @\chmod($filename, 0600); - } - - /** - * Load cookies from a JSON formatted file. - * - * Old cookies are kept unless overwritten by newly loaded ones. - * Cookie records are constructed before any are passed to setCookie(). - * - * @param string $filename Cookie file to load. - * - * @throws \RuntimeException if the file cannot be loaded or is invalid - */ - public function load(string $filename): void - { - $json = \file_get_contents($filename); - if (false === $json) { - throw new \RuntimeException(\sprintf('Unable to load file %s', DiagnosticValue::escape($filename))); - } - if ($json === '') { - return; - } - - $message = \sprintf('Invalid cookie file: %s', DiagnosticValue::escape($filename)); - - try { - $data = \json_decode($json, true, 512, \JSON_THROW_ON_ERROR); - } catch (\JsonException $e) { - throw new \RuntimeException($message, 0, $e); - } - - // Associative decoding turns JSON objects into arrays, so inspect the root syntax too. - if (!\is_array($data) || \substr($json, \strspn($json, " \t\n\r"), 1) !== '[') { - throw new \RuntimeException($message); - } - - $cookies = []; - foreach ($data as $cookie) { - if (!\is_array($cookie) || !\array_key_exists('HostOnly', $cookie) || !\is_bool($cookie['HostOnly'])) { - throw new \RuntimeException($message); - } - - try { - $cookies[] = new SetCookie($cookie); - } catch (\InvalidArgumentException $e) { - throw new \RuntimeException($message, 0, $e); - } - } - - foreach ($cookies as $cookie) { - $this->setCookie($cookie); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php deleted file mode 100644 index 9e703ec0e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php +++ /dev/null @@ -1,150 +0,0 @@ -sessionKey = $sessionKey; - $this->storeSessionCookies = $storeSessionCookies; - $this->load(); - $this->autoSave = true; - } - - /** - * Saves cookies to session when shutting down - */ - public function __destruct() - { - if ($this->autoSave) { - $this->save(); - } - } - - /** - * Disable automatic persistence after unserialization. - */ - public function __wakeup(): void - { - $this->autoSave = false; - } - - public function __unserialize(array $data): void - { - $this->autoSave = false; - - throw new \LogicException(static::class.' should never be unserialized'); - } - - /** - * Save cookies to the client session. - * - * @throws \RuntimeException if the cookie data cannot be encoded - */ - public function save(): void - { - $json = []; - /** @var SetCookie $cookie */ - foreach ($this as $cookie) { - if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { - $data = $cookie->toArray(); - $data['HostOnly'] = $cookie->getHostOnly(); - $json[] = $data; - } - } - - try { - $json = \json_encode($json, \JSON_THROW_ON_ERROR); - } catch (\JsonException $e) { - throw new \RuntimeException('Unable to encode cookie data', 0, $e); - } - - $_SESSION[$this->sessionKey] = $json; - } - - /** - * Load cookies from the client session. - * - * @throws \RuntimeException if the session contains invalid cookie data - */ - protected function load(): void - { - if (!isset($_SESSION[$this->sessionKey])) { - return; - } - - $message = 'Invalid cookie data'; - $json = $_SESSION[$this->sessionKey]; - if (!\is_string($json)) { - throw new \RuntimeException($message); - } - - try { - $data = \json_decode($json, true, 512, \JSON_THROW_ON_ERROR); - } catch (\JsonException $e) { - throw new \RuntimeException($message, 0, $e); - } - - // Associative decoding turns JSON objects into arrays, so inspect the root syntax too. - if (!\is_array($data) || \substr($json, \strspn($json, " \t\n\r"), 1) !== '[') { - throw new \RuntimeException($message); - } - - $cookies = []; - foreach ($data as $cookie) { - if (!\is_array($cookie) || !\array_key_exists('HostOnly', $cookie) || !\is_bool($cookie['HostOnly'])) { - throw new \RuntimeException($message); - } - - try { - $cookies[] = new SetCookie($cookie); - } catch (\InvalidArgumentException $e) { - throw new \RuntimeException($message, 0, $e); - } - } - - foreach ($cookies as $cookie) { - $this->setCookie($cookie); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php deleted file mode 100644 index c5a6f2711..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php +++ /dev/null @@ -1,596 +0,0 @@ - null, - 'Value' => null, - 'Domain' => null, - 'Path' => '/', - 'Max-Age' => null, - 'Expires' => null, - 'Secure' => false, - 'Discard' => false, - 'HttpOnly' => false, - ]; - - /** - * @var array Cookie data - */ - private array $data; - - /** - * @var bool Whether this cookie was set without a Domain attribute. - */ - private bool $hostOnly = false; - - /** - * Create a new SetCookie object from a string. - * - * @param string $cookie Set-Cookie header string - */ - public static function fromString( - #[\SensitiveParameter] - string $cookie - ): self { - // Create the default return array - $data = self::DEFAULTS; - // Explode the cookie string using a series of semicolons - $pieces = \array_filter(\array_map(static function (string $piece): string { - return \trim($piece, " \t"); - }, \explode(';', $cookie))); - // The name of the cookie (first kvp) must exist and include an equal sign. - if (!isset($pieces[0]) || \strpos($pieces[0], '=') === false) { - return new self($data); - } - - // Add the cookie pieces into the parsed data array - foreach ($pieces as $part) { - $cookieParts = \explode('=', $part, 2); - $key = \trim($cookieParts[0], " \t"); - $value = isset($cookieParts[1]) - ? \trim($cookieParts[1], " \t") - : true; - - // Only check for non-cookies when cookies have been found - if (!isset($data['Name'])) { - $data['Name'] = $key; - $data['Value'] = $value; - } else { - foreach (\array_keys(self::DEFAULTS) as $search) { - if (Psr7\Utils::caselessEquals($search, $key)) { - if ($search === 'Max-Age') { - if (\is_string($value) && \preg_match('/^[+-]?[0-9]+$/D', $value) === 1) { - $maxAge = self::parseNumericInteger($value); - if ($maxAge !== null) { - $data[$search] = $maxAge; - } - } - } elseif ($search === 'Secure' || $search === 'Discard' || $search === 'HttpOnly') { - if ($value) { - $data[$search] = true; - } - } elseif (\is_string($value)) { - $data[$search] = $value; - } - continue 2; - } - } - if (Psr7\Utils::caselessEquals('HostOnly', $key)) { - continue; - } - $data[$key] = $value; - } - } - - return new self($data); - } - - /** - * @param array $data Array of cookie data provided by a Cookie parser - */ - public function __construct( - #[\SensitiveParameter] - array $data = [] - ) { - $this->data = self::DEFAULTS; - self::validateFieldTypes($data); - - if (\array_key_exists('HostOnly', $data)) { - $this->setHostOnly($data['HostOnly']); - unset($data['HostOnly']); - } - - if (isset($data['Name'])) { - $this->setName($data['Name']); - } - - if (isset($data['Value'])) { - $this->setValue($data['Value']); - } - - if (isset($data['Domain'])) { - $this->setDomain($data['Domain']); - } - - if (isset($data['Path'])) { - $this->setPath($data['Path']); - } - - if (isset($data['Max-Age'])) { - $this->setMaxAge($data['Max-Age']); - } - - if (isset($data['Expires'])) { - $this->setExpires($data['Expires']); - } - - if (isset($data['Secure'])) { - $this->setSecure($data['Secure']); - } - - if (isset($data['Discard'])) { - $this->setDiscard($data['Discard']); - } - - if (isset($data['HttpOnly'])) { - $this->setHttpOnly($data['HttpOnly']); - } - - // Set the remaining values that don't have extra validation logic - foreach (array_diff(array_keys($data), array_keys(self::DEFAULTS)) as $key) { - $this->data[$key] = $data[$key]; - } - - // Extract the Expires value and turn it into a UNIX timestamp if needed - $maxAge = $this->getMaxAge(); - if ($maxAge !== null) { - $this->setExpires(self::maxAgeToExpires($maxAge, \time())); - } - } - - public function __toString(): string - { - $str = $this->data['Name'].'='.($this->data['Value'] ?? '').'; '; - foreach ($this->data as $k => $v) { - if ($k === 'Domain' && $this->getHostOnly()) { - continue; - } - if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) { - if ($k === 'Expires') { - $str .= 'Expires='.\gmdate('D, d M Y H:i:s \G\M\T', $v).'; '; - } else { - $str .= ($v === true ? $k : "{$k}={$v}").'; '; - } - } - } - - return \rtrim($str, '; '); - } - - public function toArray(): array - { - $data = $this->data; - if ($this->getHostOnly()) { - $data['HostOnly'] = true; - } - - return $data; - } - - /** - * Get the cookie name. - */ - public function getName(): ?string - { - return $this->data['Name']; - } - - /** - * Set the cookie name. - * - * @param string $name Cookie name - */ - public function setName(string $name): void - { - $this->data['Name'] = $name; - } - - /** - * Get the cookie value. - */ - public function getValue(): ?string - { - return $this->data['Value']; - } - - /** - * Set the cookie value. - * - * @param string $value Cookie value - */ - public function setValue(string $value): void - { - $this->data['Value'] = $value; - } - - /** - * Get the domain. - */ - public function getDomain(): ?string - { - return $this->data['Domain']; - } - - /** - * Set the domain of the cookie. - * - * @param string|null $domain Domain of the cookie - */ - public function setDomain(?string $domain): void - { - $this->data['Domain'] = null === $domain ? null : self::normalizeDomain($domain); - } - - /** - * Get whether this cookie is scoped to the origin host only. - */ - public function getHostOnly(): bool - { - return $this->hostOnly; - } - - /** - * Set whether this cookie is scoped to the origin host only. - * - * @param bool $hostOnly Set to true for host-only cookies - */ - public function setHostOnly(bool $hostOnly): void - { - $this->hostOnly = $hostOnly; - } - - /** - * Get the path. - */ - public function getPath(): string - { - return $this->data['Path']; - } - - /** - * Set the path of the cookie. - * - * @param string $path Path of the cookie - */ - public function setPath(string $path): void - { - $this->data['Path'] = $path; - } - - /** - * Maximum lifetime of the cookie in seconds. - */ - public function getMaxAge(): ?int - { - return null === $this->data['Max-Age'] ? null : (int) $this->data['Max-Age']; - } - - /** - * Set the max-age of the cookie. - * - * @param int|null $maxAge Max age of the cookie in seconds - */ - public function setMaxAge(?int $maxAge): void - { - $this->data['Max-Age'] = $maxAge; - } - - /** - * The UNIX timestamp when the cookie Expires. - */ - public function getExpires(): ?int - { - return $this->data['Expires']; - } - - /** - * Set the unix timestamp for which the cookie will expire. - * - * @param int|string|null $timestamp Unix timestamp or any English textual datetime description. - */ - public function setExpires($timestamp): void - { - if (!is_int($timestamp) && !is_string($timestamp) && null !== $timestamp) { - // TODO: Move this to the parameter definition in 9.0. - throw new \TypeError(__METHOD__.'(): Argument #1 ($timestamp) must be of type int|string|null'); - } - - if ($timestamp === null) { - $this->data['Expires'] = null; - - return; - } - - if (\is_string($timestamp)) { - if (\is_numeric($timestamp)) { - $this->data['Expires'] = self::parseNumericInteger($timestamp); - - return; - } - } elseif (\is_int($timestamp)) { - $this->data['Expires'] = $timestamp; - - return; - } - - $expires = \strtotime($timestamp); - $this->data['Expires'] = $expires === false ? null : $expires; - } - - /** - * Get whether or not this is a secure cookie. - */ - public function getSecure(): bool - { - return $this->data['Secure']; - } - - /** - * Set whether or not the cookie is secure. - * - * @param bool $secure Set to true or false if secure - */ - public function setSecure(bool $secure): void - { - $this->data['Secure'] = $secure; - } - - /** - * Get whether or not this is a session cookie. - */ - public function getDiscard(): bool - { - return $this->data['Discard']; - } - - /** - * Set whether or not this is a session cookie. - * - * @param bool $discard Set to true or false if this is a session cookie - */ - public function setDiscard(bool $discard): void - { - $this->data['Discard'] = $discard; - } - - /** - * Get whether or not this is an HTTP only cookie. - */ - public function getHttpOnly(): bool - { - return $this->data['HttpOnly']; - } - - /** - * Set whether or not this is an HTTP only cookie. - * - * @param bool $httpOnly Set to true or false if this is HTTP only - */ - public function setHttpOnly(bool $httpOnly): void - { - $this->data['HttpOnly'] = $httpOnly; - } - - /** - * Check if the cookie matches a path value. - * - * A request-path path-matches a given cookie-path if at least one of - * the following conditions holds: - * - * - The cookie-path and the request-path are identical. - * - The cookie-path is a prefix of the request-path, and the last - * character of the cookie-path is %x2F ("/"). - * - The cookie-path is a prefix of the request-path, and the first - * character of the request-path that is not included in the cookie- - * path is a %x2F ("/") character. - * - * @param string $requestPath Path to check against - */ - public function matchesPath(string $requestPath): bool - { - $cookiePath = $this->getPath(); - - // Match on exact matches or when path is the default empty "/" - if ($cookiePath === '/' || $cookiePath === $requestPath) { - return true; - } - - // Ensure that the cookie-path is a prefix of the request path. - if (0 !== \strpos($requestPath, $cookiePath)) { - return false; - } - - // Match if the last character of the cookie-path is "/" - if (\substr($cookiePath, -1, 1) === '/') { - return true; - } - - // Match if the first character not included in cookie path is "/" - return \substr($requestPath, \strlen($cookiePath), 1) === '/'; - } - - /** - * Check if the cookie matches a domain value. - * - * @param string $domain Domain to check against - */ - public function matchesDomain(string $domain): bool - { - $cookieDomain = $this->getDomain(); - if (null === $cookieDomain || $cookieDomain === '') { - return false; - } - - if ($this->getHostOnly()) { - return HostIdentity::canonicalCookieDomain($domain) === HostIdentity::canonicalCookieDomain($cookieDomain); - } - - return HostIdentity::cookieDomainMatches($domain, $cookieDomain); - } - - /** - * Check if the cookie is expired. - */ - public function isExpired(): bool - { - return $this->getExpires() !== null && \time() > $this->getExpires(); - } - - /** - * Check if the cookie is valid according to RFC 6265. - * - * @return string|true Returns true if valid or an error message if invalid - */ - public function validate() - { - $name = $this->getName(); - if ($name === null || $name === '') { - return 'The cookie name must not be empty'; - } - - // Check if any of the invalid characters are present in the cookie name - if (\preg_match('/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/', $name) !== 0) { - return 'Cookie name must not contain invalid characters: ASCII ' - .'Control characters (0-31;127), space, tab and the ' - .'following characters: ()<>@,;:\"/?={}'; - } - - // Value must not be null. 0 and empty string are valid. Empty strings - // are technically against RFC 6265, but known to happen in the wild. - $value = $this->getValue(); - if ($value === null) { - return 'The cookie value must not be empty'; - } - - // Domains must not be empty, but may be omitted. "0" is not a valid - // internet domain, but may be used as server name in a private network. - $domain = $this->getDomain(); - if ($domain === '' || ($domain !== null && \ltrim(\trim($domain, " \n\r\t\0\x0B"), '.') === '')) { - return 'The cookie domain must not be empty'; - } - - if ($this->getHostOnly() && $domain === null) { - return 'Host-only cookies must have a domain'; - } - - return true; - } - - private static function normalizeDomain(string $domain): string - { - $domain = Psr7\Utils::asciiToLower($domain); - - // Treat trailing-dot domains as host-only, but keep pure-dot domains invalid. - if ($domain !== '' && \substr($domain, -1) === '.' && \trim($domain, '.') !== '') { - return ''; - } - - if ($domain !== '' && $domain !== '.' && $domain[0] === '.') { - $domain = \substr_replace($domain, '', 0, 1); - } - - return HostIdentity::canonicalCookieDomain($domain); - } - - private static function maxAgeToExpires(int $maxAge, int $now): int - { - if ($maxAge <= 0) { - return $now - 1; - } - - // Clamp absurd Max-Age values so addition cannot promote to float - if ($maxAge > \PHP_INT_MAX - $now) { - return \PHP_INT_MAX; - } - - return $now + $maxAge; - } - - private static function parseNumericInteger(string $value): ?int - { - if (!\is_numeric($value)) { - return null; - } - - if (\preg_match('/^[+-]?[0-9]+$/D', $value) === 1) { - $negative = $value[0] === '-'; - $digits = \ltrim($value, '+-'); - $digits = \ltrim($digits, '0'); - $digits = $digits === '' ? '0' : $digits; - $limit = $negative ? \substr((string) \PHP_INT_MIN, 1) : (string) \PHP_INT_MAX; - - if (\strlen($digits) > \strlen($limit) || (\strlen($digits) === \strlen($limit) && \strcmp($digits, $limit) > 0)) { - return null; - } - - return (int) ($negative ? '-'.$digits : $digits); - } - - $number = (float) $value; - if (!\is_finite($number) || $number < \PHP_INT_MIN || $number > \PHP_INT_MAX) { - return null; - } - - if (\PHP_INT_SIZE === 8 && ($number <= (float) \PHP_INT_MIN || $number >= (float) \PHP_INT_MAX)) { - return null; - } - - return (int) $number; - } - - /** - * @param mixed[] $data - */ - private static function validateFieldTypes( - #[\SensitiveParameter] - array $data - ): void { - foreach (['Name', 'Value', 'Domain', 'Path'] as $field) { - if (isset($data[$field]) && !\is_string($data[$field])) { - throw new \InvalidArgumentException(\sprintf('Cookie field "%s" must be a string', $field)); - } - } - - if (isset($data['Max-Age']) && !\is_int($data['Max-Age'])) { - throw new \InvalidArgumentException('Cookie field "Max-Age" must be an integer'); - } - - if (isset($data['Expires']) && !\is_int($data['Expires']) && !\is_string($data['Expires'])) { - throw new \InvalidArgumentException('Cookie field "Expires" must be an integer or string'); - } - - foreach (['Secure', 'Discard', 'HttpOnly'] as $field) { - if (isset($data[$field]) && !\is_bool($data[$field])) { - throw new \InvalidArgumentException(\sprintf('Cookie field "%s" must be a boolean', $field)); - } - } - - if (\array_key_exists('HostOnly', $data) && !\is_bool($data['HostOnly'])) { - throw new \InvalidArgumentException('Cookie field "HostOnly" must be a boolean'); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Env.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Env.php deleted file mode 100644 index aaabd9a4d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Env.php +++ /dev/null @@ -1,33 +0,0 @@ -getStatusCode() / 100); - if ($level === 4) { - $label = 'Client error'; - } elseif ($level === 5) { - $label = 'Server error'; - } else { - $label = 'Unsuccessful request'; - } - - $uri = \GuzzleHttp\Psr7\Utils::redactUserInfo($request->getUri()); - - // Client error: `GET /` resulted in a `404 Not Found` response: ... (truncated) - $message = \sprintf( - '%s: `%s %s` resulted in a `%s %s` response', - $label, - DiagnosticValue::escape($request->getMethod()), - DiagnosticValue::escape($uri->__toString()), - $response->getStatusCode(), - DiagnosticValue::escape($response->getReasonPhrase()) - ); - - $summary = ($bodySummarizer ?? new BodySummarizer())->summarize($response); - - if ($summary !== null) { - $message .= \sprintf(': %s', DiagnosticValue::escape($summary)); - } - - if ($level === 4) { - return new ClientException($message, $request, $response, $previous); - } - - if ($level === 5) { - return new ServerException($message, $request, $response, $previous); - } - - return new ResponseException($message, $request, $response, $previous); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Exception/ResponseException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Exception/ResponseException.php deleted file mode 100644 index b5cd96494..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Exception/ResponseException.php +++ /dev/null @@ -1,63 +0,0 @@ -getStatusCode(), $previous); - $this->response = $response; - } - - /** - * Return a new exception instance with an updated response. - * - * @param \Throwable|null $previous Previous exception, or the current - * previous exception when omitted. - * - * @return static - */ - public function withResponse( - #[\SensitiveParameter] - ResponseInterface $response, - #[\SensitiveParameter] - ?\Throwable $previous = null - ): self { - if ($response->getStatusCode() !== $this->response->getStatusCode()) { - throw new InvalidArgumentException('Cannot replace response with a different status code.'); - } - - return new static( - $this->getMessage(), - $this->getRequest(), - $response, - $previous ?? $this->getPrevious() - ); - } - - /** - * Get the associated response. - */ - public function getResponse(): ResponseInterface - { - return $this->response; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Exception/ResponseTimeoutException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Exception/ResponseTimeoutException.php deleted file mode 100644 index 49694415e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Exception/ResponseTimeoutException.php +++ /dev/null @@ -1,13 +0,0 @@ -request = $request; - } - - /** - * Get the request that caused the exception. - */ - public function getRequest(): RequestInterface - { - return $this->request; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Clock.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Clock.php deleted file mode 100644 index a03a8c5e2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Clock.php +++ /dev/null @@ -1,23 +0,0 @@ - true, // CURLE_COULDNT_RESOLVE_PROXY - 6 => true, // CURLE_COULDNT_RESOLVE_HOST - 7 => true, // CURLE_COULDNT_CONNECT - 35 => true, // CURLE_SSL_CONNECT_ERROR - 51 => true, // CURLE_PEER_FAILED_VERIFICATION before libcurl 7.62.0 - 60 => true, // CURLE_SSL_CACERT / modern CURLE_PEER_FAILED_VERIFICATION - 83 => true, // CURLE_SSL_ISSUER_ERROR - 90 => true, // CURLE_SSL_PINNEDPUBKEYNOTMATCH - 91 => true, // CURLE_SSL_INVALIDCERTSTATUS - 96 => true, // CURLE_QUIC_CONNECT_ERROR - 97 => true, // CURLE_PROXY - 98 => true, // CURLE_SSL_CLIENTCERT - 101 => true, // CURLE_ECH_REQUIRED - ]; - - private const CURL_NETWORK_ERRORS = [ - 16 => true, // CURLE_HTTP2 - 52 => true, // CURLE_GOT_NOTHING - 55 => true, // CURLE_SEND_ERROR - 56 => true, // CURLE_RECV_ERROR - 92 => true, // CURLE_HTTP2_STREAM - 95 => true, // CURLE_HTTP3 - ]; - - private const CURL_RESPONSE_TRANSFER_ERRORS = [ - 18 => true, // CURLE_PARTIAL_FILE - 61 => true, // CURLE_BAD_CONTENT_ENCODING - ]; - - private const CURL_CONNECT_TIMEOUT_ERRORS = [ - 'Connection timed out', - 'Connection timeout', - 'Connection time-out', - 'Resolving timed out', - 'name lookup timed out', - 'Proxy CONNECT aborted due to timeout', - 'SSL connection timeout', - ]; - - /** - * libcurl's CURL_READFUNC_ABORT value. - */ - private const CURL_READFUNC_ABORT = 0x10000000; - - /** - * libcurl's CURLE_SEND_FAIL_REWIND value. - */ - private const CURLE_SEND_FAIL_REWIND = 65; - - /** - * Guzzle's default connect timeout in milliseconds, replacing libcurl's - * 300 seconds. - */ - private const DEFAULT_CONNECT_TIMEOUT_MS = 60000; - - /** - * Milliseconds passed to libcurl to disable the connect timeout: libcurl - * treats zero as its own 300-second default, so disabling means passing - * the largest value a 32-bit libcurl long accepts. - */ - private const CONNECT_TIMEOUT_DISABLED_MS = 2147483647; - - /** - * @var resource[]|\CurlHandle[] - */ - private array $handles = []; - - /** - * @var string|null Owner signature of the proxy tunnels that pooled idle - * handles may still hold - */ - private ?string $proxyTunnelOwner = null; - - /** - * @var bool Whether an in-domain handle has been pooled since the last purge - */ - private bool $poolMayHoldTunnels = false; - - /** - * @var int Total number of idle handles to keep in cache - */ - private int $maxHandles; - - private bool $closed = false; - - /** - * @var resource|\CurlShareHandle|\CurlSharePersistentHandle|null - */ - private $shareHandle; - - private string $shareMode; - - /** - * @var bool Whether the configured share handle may own a connection - * cache populated outside this factory - */ - private bool $opaqueShareConnectionCache = false; - - /** - * @param int $maxHandles Maximum number of idle handles. - * @param resource|\CurlShareHandle|\CurlSharePersistentHandle|CurlShareHandleState|null $shareHandle - */ - public function __construct(int $maxHandles, string $shareMode = TransportSharing::NONE, $shareHandle = null) - { - $this->maxHandles = $maxHandles; - $this->shareMode = CurlShareHandleState::normalizeMode($shareMode, 'transport_sharing'); - - if ($shareHandle instanceof CurlShareHandleState) { - if ($shareHandle->mode !== $this->shareMode) { - throw new InvalidArgumentException('The cURL share handle state mode does not match the configured transport sharing mode.'); - } - - // A Guzzle-created handler-lifetime state locks only DNS and TLS - // session data, so its handle can never own a connection cache. A - // persistent state's connection cache is worker-global, so other - // producers in the worker may populate it. - $this->opaqueShareConnectionCache = $shareHandle->mode === TransportSharing::PERSISTENT_PREFER - || $shareHandle->mode === TransportSharing::PERSISTENT_REQUIRE; - $shareHandle = $shareHandle->handle; - } elseif ($shareHandle !== null) { - // An externally supplied handle's cached contents cannot be - // inspected from PHP, so it may own a connection cache populated - // outside this factory. - $this->opaqueShareConnectionCache = true; - } - - if ($this->shareMode === TransportSharing::NONE && $shareHandle !== null) { - throw new InvalidArgumentException('A cURL share handle cannot be provided when transport sharing is disabled.'); - } - - if ($this->shareMode !== TransportSharing::NONE && $shareHandle === null) { - throw new InvalidArgumentException('A cURL share handle is required when transport sharing is enabled.'); - } - - if ($shareHandle !== null && !self::isCurlShareHandle($shareHandle)) { - throw new InvalidArgumentException('A cURL share handle must be an instance of CurlShareHandle, CurlSharePersistentHandle, or a curl_share resource.'); - } - - $this->shareHandle = $shareHandle; - } - - /** - * @param mixed $value - */ - private static function isCurlShareHandle($value): bool - { - if (\PHP_VERSION_ID < 80000) { - return \is_resource($value) && \get_resource_type($value) === 'curl_share'; - } - - if ($value instanceof \CurlShareHandle) { - return true; - } - - return \class_exists('CurlSharePersistentHandle') - && $value instanceof \CurlSharePersistentHandle; - } - - public function create( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): EasyHandle { - $this->assertOpen(); - self::validateRequestUriScheme($request); - - $protocolVersion = $request->getProtocolVersion(); - - if ('' === $protocolVersion) { - throw new RequestException('HTTP protocol version must not be empty.', $request); - } - - if (1 !== \preg_match('/^\d+(?:\.\d+)?$/D', $protocolVersion)) { - throw new RequestException('HTTP protocol version must be a valid HTTP version number.', $request); - } - - CurlVersion::ensureSupported($request); - - $multiplex = self::normalizeMultiplex($options); - - if ('3' === $protocolVersion || '3.0' === $protocolVersion) { - if (!CurlVersion::supportsHttp3()) { - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new RequestException('Required multiplexing for HTTP/3 needs libcurl 8.13.0 or newer built with HTTP/3 support.', $request); - } - - throw new RequestException('HTTP/3 is supported by the cURL handler, however the installed PHP cURL extension or libcurl does not support HTTP/3.', $request); - } - } elseif ('2' === $protocolVersion || '2.0' === $protocolVersion) { - if (!CurlVersion::supportsHttp2()) { - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new RequestException('Required multiplexing needs libcurl 8.14.0 or newer built with HTTP/2 support.', $request); - } - - throw new RequestException('HTTP/2 is supported by the cURL handler, however libcurl 7.65.2 or newer built with HTTP/2 support is required.', $request); - } - } elseif ('1.0' !== $protocolVersion && '1.1' !== $protocolVersion) { - throw new RequestException(sprintf('HTTP/%s is not supported by the cURL handler.', $protocolVersion), $request); - } - - if (isset($options['curl']['body_as_string'])) { - $options['_body_as_string'] = $options['curl']['body_as_string']; - unset($options['curl']['body_as_string']); - } - - self::rejectUnsupportedRequestOptions($options); - self::assertOnStatsCallable($options); - self::assertOnTrailersCallable($options); - $this->rejectRequestLevelShareConflict($options); - $this->rejectPersistentRequireConnectionReuseConflicts($options); - self::rejectUnsupportedCurlOptions($options); - self::rejectConflictingCurlOptions($options); - - $framing = RequestFraming::analyze($request, $request->getMethod() !== 'HEAD'); - $request = $framing->request; - - $managedProxyAuthorization = self::managedProxyAuthorizationHeaderLines($request); - - $easy = new EasyHandle(); - $easy->request = $request; - $easy->options = $options; - $conf = $this->getDefaultConf($easy); - $this->applyMethod($easy, $conf, $framing); - $this->applyHandlerOptions($easy, $conf); - $this->applyHeaders($easy, $conf); - unset($conf['_headers']); - - // Add handler options from the request configuration options - if (isset($options['curl'])) { - $conf = \array_replace($conf, $options['curl']); - } - - self::normalizeStringableProxyCredentialOptions($conf); - - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - self::assertRequiredMultiplexAuthSupported($conf); - } - - self::applyProxyConnectHeaderSuppression($request, $conf); - self::normalizeCurlHeaderOptions($conf); - self::applyProxyAuthorizationHeaderHandling($request, $conf, $managedProxyAuthorization); - // Validate the managed lines appended above too: a custom - // RequestInterface can return unvalidated header values. - self::normalizeCurlHeaderOptions($conf); - - if ($this->shareHandle !== null) { - // Conservative blanket mode: a configured share handle hides the - // pooled connections' provenance, so sectioned reuse cannot reason - // about them. - $this->forceFreshConnectionForAuthenticatedProxy($request, $conf); - } else { - $signature = self::proxyTunnelSignature($request, $conf); - $easy->proxyTunnelSignature = $signature; - if ($signature !== null && $signature !== $this->proxyTunnelOwner) { - if ($this->poolMayHoldTunnels) { - // Pooled idle handles may hold a different owner's tunnel. - $this->discardIdleHandles(); - $this->poolMayHoldTunnels = false; - } - // The first in-domain owner latches without purging: the pool - // provably holds no in-domain tunnel yet. - $this->proxyTunnelOwner = $signature; - } - } - - $easy->effectiveProxy = self::getEffectiveProxy($conf); - - $conf[\CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy); - if ($this->shareHandle !== null) { - if (!\defined('CURLOPT_SHARE')) { - throw new RequestException('The configured cURL share handle requires CURLOPT_SHARE, but it is not available in the installed PHP cURL extension.', $easy->request); - } - - $conf[(int) \constant('CURLOPT_SHARE')] = $this->shareHandle; - } - - if (\defined('CURLOPT_PIPEWAIT')) { - $easy->usesPipewait = !empty($conf[(int) \constant('CURLOPT_PIPEWAIT')]); - } - - $handle = $this->handles ? \array_pop($this->handles) : \curl_init(); - if (false === $handle) { - throw new RequestException('Can not initialize cURL handle.', $request); - } - $easy->handle = $handle; - - try { - $this->applyCurlOptions($handle, $conf); - } catch (\Throwable $e) { - if (PHP_VERSION_ID < 80000 && \is_resource($handle)) { - \curl_close($handle); - } - unset($easy->handle); - - throw $e; - } - - return $easy; - } - - /** - * @param resource|\CurlHandle $handle - * @param array $conf - */ - private function applyCurlOptions( - $handle, - #[\SensitiveParameter] - array $conf - ): void { - foreach ($conf as $option => $value) { - if (!\is_int($option)) { - throw new InvalidArgumentException(\sprintf( - 'Invalid cURL option %s.', - self::formatCurlOption($option) - )); - } - - try { - $success = curl_setopt($handle, $option, $value); - } catch (\Throwable $e) { - throw new InvalidArgumentException( - \sprintf( - 'Unable to set cURL option %s: %s', - self::formatCurlOption($option), - $e->getMessage() - ), - 0, - $e - ); - } - - if (!$success) { - throw new InvalidArgumentException(\sprintf( - 'Unable to set cURL option %s.', - self::formatCurlOption($option) - )); - } - } - } - - /** - * @param array $conf - */ - private static function normalizeStringableProxyCredentialOptions( - #[\SensitiveParameter] - array &$conf - ): void { - foreach (self::STRINGABLE_PROXY_CREDENTIAL_OPTIONS as $name) { - if (!\defined($name)) { - continue; - } - - $option = (int) \constant($name); - if (!isset($conf[$option]) || !\is_object($conf[$option]) || !\method_exists($conf[$option], '__toString')) { - continue; - } - - try { - $conf[$option] = (string) $conf[$option]; - } catch (\Throwable $e) { - // Wrap the failure exactly as applyCurlOptions() does for a - // value that cannot be applied. - throw new InvalidArgumentException( - \sprintf( - 'Unable to set cURL option %s: %s', - self::formatCurlOption($option), - $e->getMessage() - ), - 0, - $e - ); - } - } - } - - private function rejectRequestLevelShareConflict( - #[\SensitiveParameter] - array $options - ): void { - if ($this->shareHandle === null) { - return; - } - - if ( - !\defined('CURLOPT_SHARE') - || !isset($options['curl']) - || !\is_array($options['curl']) - || !\array_key_exists((int) \constant('CURLOPT_SHARE'), $options['curl']) - ) { - return; - } - - throw new InvalidArgumentException('The request-level CURLOPT_SHARE cURL option cannot be combined with configured transport sharing.'); - } - - private function rejectPersistentRequireConnectionReuseConflicts( - #[\SensitiveParameter] - array $options - ): void { - if ( - $this->shareMode !== TransportSharing::PERSISTENT_REQUIRE - || !isset($options['curl']) - || !\is_array($options['curl']) - ) { - return; - } - - if (!empty($options['curl'][\CURLOPT_FRESH_CONNECT])) { - throw new InvalidArgumentException('The CURLOPT_FRESH_CONNECT cURL option cannot be used when persistent cURL sharing is required because it disables connection reuse.'); - } - - if (!empty($options['curl'][\CURLOPT_FORBID_REUSE])) { - throw new InvalidArgumentException('The CURLOPT_FORBID_REUSE cURL option cannot be used when persistent cURL sharing is required because it disables connection reuse.'); - } - } - - private static function normalizeMultiplex( - #[\SensitiveParameter] - array $options - ): string { - $multiplex = $options['multiplex'] ?? null; - - if ($multiplex === null) { - return Multiplexing::WAIT; - } - - if (!\in_array($multiplex, [Multiplexing::NONE, Multiplexing::EAGER, Multiplexing::WAIT, Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new InvalidArgumentException(\sprintf( - 'The "multiplex" option must be null or a GuzzleHttp\\Multiplexing::* constant; received %s.', - \get_debug_type($multiplex) - )); - } - - return $multiplex; - } - - private static function assertRequiredMultiplexSupported( - #[\SensitiveParameter] - EasyHandle $easy - ): void { - if (!CurlVersion::supportsRequiredHttp2Multiplex()) { - throw new RequestException('Required multiplexing needs libcurl 8.14.0 or newer built with HTTP/2 support.', $easy->request); - } - - $proxy = ProxyEnv::resolveProxySelection($easy->request->getUri(), $easy->options['proxy'] ?? null); - self::assertSelectedProxySupported($proxy->getProxy(), $easy->request); - - if ('https' !== $easy->request->getUri()->getScheme() && $proxy->hasProxy()) { - throw new RequestException('Required multiplexing cannot be guaranteed for cleartext requests sent through a proxy.', $easy->request); - } - } - - /** - * libcurl forces NTLM-authenticated transfers onto HTTP/1.1: when the - * server picks NTLM from the offered mask, the connection is closed and the - * request is retried over HTTP/1.1 whatever HTTP version was asked for, - * silently defeating the required protocol guarantee on both cleartext and - * TLS routes. The final merged mask is checked because the raw - * CURLOPT_HTTPAUTH cURL option is allow-listed, and any mask permitting - * NTLM, such as CURLAUTH_ANY, is rejected because the selection is - * server-controlled. - * - * @param array $conf - */ - private static function assertRequiredMultiplexAuthSupported( - #[\SensitiveParameter] - array $conf - ): void { - if (!\array_key_exists(\CURLOPT_HTTPAUTH, $conf)) { - return; - } - - $auth = $conf[\CURLOPT_HTTPAUTH]; - if (!\is_scalar($auth)) { - throw new InvalidArgumentException('The "multiplex" request option cannot be required when the final CURLOPT_HTTPAUTH cURL option value is not an integer.'); - } - - $ntlmBits = \CURLAUTH_NTLM; - if (\defined('CURLAUTH_NTLM_WB')) { - $ntlmBits |= (int) \constant('CURLAUTH_NTLM_WB'); - } - - if (((int) $auth & $ntlmBits) !== 0) { - throw new InvalidArgumentException('The "multiplex" request option cannot be required when the final CURLOPT_HTTPAUTH cURL option value permits NTLM; libcurl retries NTLM authentication over HTTP/1.1.'); - } - } - - private static function assertSelectedProxySupported( - #[\SensitiveParameter] - ?string $selectedProxy, - #[\SensitiveParameter] - RequestInterface $request - ): void { - if ($selectedProxy === null || $selectedProxy === '') { - return; - } - - $scheme = ProxyOptions::proxyScheme($selectedProxy); - - if (!\in_array($scheme, ['http', 'https', 'socks4', 'socks4a', 'socks5', 'socks5h'], true)) { - throw new InvalidArgumentException(\sprintf('The "%s" proxy scheme is not supported by the cURL handler.', Psr7\DiagnosticValue::escape($scheme))); - } - - if ($scheme === 'https' && !CurlVersion::supportsHttpsProxy()) { - throw new RequestException('HTTPS proxies are not supported by the installed libcurl; libcurl 7.54.0 or newer built with HTTPS-proxy support is required.', $request); - } - } - - /** - * @param int|string $option - */ - private static function formatCurlOption($option): string - { - if (!\is_int($option)) { - return \sprintf('"%s"', Psr7\DiagnosticValue::escape((string) $option)); - } - - static $names = null; - - if (null === $names) { - $names = []; - foreach (\get_defined_constants(true)['curl'] ?? [] as $name => $value) { - if (\is_int($value) && \strpos($name, 'CURLOPT_') === 0 && !isset($names[$value])) { - $names[$value] = $name; - } - } - } - - if (isset($names[$option])) { - return \sprintf('%s (%d)', $names[$option], $option); - } - - return (string) $option; - } - - private static function rejectConflictingCurlOptions( - #[\SensitiveParameter] - array $options - ): void { - if (!isset($options['curl']) || !\is_array($options['curl']) || $options['curl'] === []) { - return; - } - - $conflictingOptions = self::conflictingCurlOptions(); - - foreach ($options['curl'] as $option => $_) { - if (!\array_key_exists($option, $conflictingOptions)) { - continue; - } - - $name = self::formatCurlOption($option); - $replacement = $conflictingOptions[$option]; - if ($replacement !== null) { - throw new InvalidArgumentException(\sprintf( - 'Passing %s in the "curl" request option is not supported because it conflicts with Guzzle-managed request handling. Use %s instead.', - $name, - $replacement - )); - } - - throw new InvalidArgumentException(\sprintf( - 'Passing %s in the "curl" request option is not supported because it conflicts with Guzzle-managed cURL internals.', - $name - )); - } - } - - private static function rejectUnsupportedCurlOptions( - #[\SensitiveParameter] - array $options - ): void { - if (!isset($options['curl']) || !\is_array($options['curl']) || $options['curl'] === []) { - return; - } - - $supportedOptions = self::supportedCurlOptions(); - $conflictingOptions = self::conflictingCurlOptions(); - - foreach ($options['curl'] as $option => $_) { - if ( - !\is_int($option) - || \array_key_exists($option, $supportedOptions) - || \array_key_exists($option, $conflictingOptions) - ) { - continue; - } - - throw new InvalidArgumentException(\sprintf( - 'Passing %s in the "curl" request option is not supported because it is outside the built-in cURL handlers\' allow-list.', - self::formatCurlOption($option) - )); - } - } - - private static function rejectUnsupportedRequestOptions( - #[\SensitiveParameter] - array $options - ): void { - if (\array_key_exists('stream_context', $options)) { - throw new InvalidArgumentException('Passing the "stream_context" request option to a cURL handler is not supported because cURL handlers ignore PHP stream context options.'); - } - } - - private static function assertOnStatsCallable( - #[\SensitiveParameter] - array $options - ): void { - if (isset($options['on_stats']) && !\is_callable($options['on_stats'])) { - throw new InvalidArgumentException('on_stats must be callable'); - } - } - - private static function assertOnTrailersCallable( - #[\SensitiveParameter] - array $options - ): void { - if (isset($options['on_trailers']) && !\is_callable($options['on_trailers'])) { - throw new InvalidArgumentException('on_trailers must be callable'); - } - } - - /** - * @return array - */ - private static function conflictingCurlOptions(): array - { - static $options = null; - - if ($options !== null) { - return $options; - } - - $options = []; - - self::addConflictingCurlOption($options, 'CURLOPT_SHARE', 'the "transport_sharing" client option or cURL handler option'); - self::addConflictingCurlOption($options, 'CURLOPT_URL', 'the request URI'); - self::addConflictingCurlOption($options, 'CURLOPT_PORT', 'the request URI'); - self::addConflictingCurlOption($options, 'CURLOPT_CUSTOMREQUEST', 'the request method'); - self::addConflictingCurlOption($options, 'CURLOPT_HTTPGET', 'the request method'); - self::addConflictingCurlOption($options, 'CURLOPT_POST', 'the request method and body'); - self::addConflictingCurlOption($options, 'CURLOPT_PUT', 'the request method and body'); - self::addConflictingCurlOption($options, 'CURLOPT_NOBODY', 'the request method'); - self::addConflictingCurlOption($options, 'CURLOPT_UPLOAD', 'the request body'); - self::addConflictingCurlOption($options, 'CURLOPT_POSTFIELDS', 'the request body'); - self::addConflictingCurlOption($options, 'CURLOPT_READFUNCTION', 'the request body'); - self::addConflictingCurlOption($options, 'CURLOPT_READDATA', 'the request body'); - self::addConflictingCurlOption($options, 'CURLOPT_INFILE', 'the request body'); - self::addConflictingCurlOption($options, 'CURLOPT_INFILESIZE', 'the request body'); - self::addConflictingCurlOption($options, 'CURLOPT_INFILESIZE_LARGE', 'the request body'); - self::addConflictingCurlOption($options, 'CURLOPT_HTTPHEADER', 'the request headers'); - self::addConflictingCurlOption($options, 'CURLOPT_USERAGENT', 'the request headers'); - self::addConflictingCurlOption($options, 'CURLOPT_REFERER', 'the request headers'); - self::addConflictingCurlOption($options, 'CURLOPT_HEADERFUNCTION', 'the "on_headers" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_WRITEFUNCTION', 'the "sink" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_FILE', 'the "sink" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_TIMEOUT', 'the "timeout" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_TIMEOUT_MS', 'the "timeout" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_CONNECTTIMEOUT', 'the "connect_timeout" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_CONNECTTIMEOUT_MS', 'the "connect_timeout" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_NOSIGNAL', 'the "timeout" or "connect_timeout" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_NOPROGRESS', 'the "progress" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_PROGRESSFUNCTION', 'the "progress" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_XFERINFOFUNCTION', 'the "progress" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_VERBOSE', 'the "debug" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_STDERR', 'the "debug" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_PROXY', 'the "proxy" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_NOPROXY', 'the "proxy" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_PROXYTYPE', 'the "proxy" request option with a scheme-prefixed URL'); - self::addConflictingCurlOption($options, 'CURLOPT_FOLLOWLOCATION', 'the "allow_redirects" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_MAXREDIRS', 'the "allow_redirects" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_POSTREDIR', 'the "allow_redirects" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_REDIR_PROTOCOLS', 'the "allow_redirects" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_REDIR_PROTOCOLS_STR', 'the "allow_redirects" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_PROTOCOLS', 'the "protocols" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_PROTOCOLS_STR', 'the "protocols" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_HTTP_VERSION', 'the request protocol version'); - self::addConflictingCurlOption($options, 'CURLOPT_PIPEWAIT', 'the "multiplex" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_IPRESOLVE', 'the "force_ip_resolve" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSL_VERIFYPEER', 'the "verify" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSL_VERIFYHOST', 'the "verify" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_CAINFO', 'the "verify" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_CAPATH', 'the "verify" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSLVERSION', 'the "crypto_method" or "crypto_method_max" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSLCERT', 'the "cert" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSLCERTPASSWD', 'the "cert" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSLCERTTYPE', 'the "cert_type" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSLKEY', 'the "ssl_key" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSLKEYPASSWD', 'the "ssl_key" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_KEYPASSWD', 'the "ssl_key" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_SSLKEYTYPE', 'the "ssl_key_type" request option'); - self::addConflictingCurlOption($options, 'CURLOPT_COOKIE', 'the "Cookie" request header or Guzzle cookie middleware'); - self::addConflictingCurlOption($options, 'CURLOPT_COOKIEFILE', 'Guzzle cookie middleware'); - self::addConflictingCurlOption($options, 'CURLOPT_COOKIEJAR', 'Guzzle cookie middleware'); - self::addConflictingCurlOption($options, 'CURLOPT_COOKIELIST', 'Guzzle cookie middleware'); - self::addConflictingCurlOption($options, 'CURLOPT_COOKIESESSION', 'Guzzle cookie middleware'); - - return $options; - } - - /** - * @return array - */ - private static function supportedCurlOptions(): array - { - static $options = null; - - if ($options !== null) { - return $options; - } - - $options = []; - - self::addSupportedCurlOption($options, 'CURLOPT_ADDRESS_SCOPE'); - self::addSupportedCurlOption($options, 'CURLOPT_CERTINFO'); - self::addSupportedCurlOption($options, 'CURLOPT_CONNECT_TO'); - self::addSupportedCurlOption($options, 'CURLOPT_DNS_CACHE_TIMEOUT'); - self::addSupportedCurlOption($options, 'CURLOPT_DNS_INTERFACE'); - self::addSupportedCurlOption($options, 'CURLOPT_DNS_LOCAL_IP4'); - self::addSupportedCurlOption($options, 'CURLOPT_DNS_LOCAL_IP6'); - self::addSupportedCurlOption($options, 'CURLOPT_DNS_SERVERS'); - self::addSupportedCurlOption($options, 'CURLOPT_DNS_SHUFFLE_ADDRESSES'); - self::addSupportedCurlOption($options, 'CURLOPT_ENCODING'); - self::addSupportedCurlOption($options, 'CURLOPT_FORBID_REUSE'); - self::addSupportedCurlOption($options, 'CURLOPT_FRESH_CONNECT'); - self::addSupportedCurlOption($options, 'CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS'); - self::addSupportedCurlOption($options, 'CURLOPT_HTTPAUTH'); - self::addSupportedCurlOption($options, 'CURLOPT_INTERFACE'); - self::addSupportedCurlOption($options, 'CURLOPT_LOCALPORT'); - self::addSupportedCurlOption($options, 'CURLOPT_LOCALPORTRANGE'); - self::addSupportedCurlOption($options, 'CURLOPT_LOW_SPEED_LIMIT'); - self::addSupportedCurlOption($options, 'CURLOPT_LOW_SPEED_TIME'); - self::addSupportedCurlOption($options, 'CURLOPT_MAXAGE_CONN'); - self::addSupportedCurlOption($options, 'CURLOPT_MAXCONNECTS'); - self::addSupportedCurlOption($options, 'CURLOPT_MAXLIFETIME_CONN'); - self::addSupportedCurlOption($options, 'CURLOPT_HTTPPROXYTUNNEL'); - self::addSupportedCurlOption($options, 'CURLOPT_PREREQFUNCTION'); - self::addSupportedCurlOption($options, 'CURLOPT_PROXYHEADER'); - self::addSupportedCurlOption($options, 'CURLOPT_PROXYUSERPWD'); - self::addSupportedCurlOption($options, 'CURLOPT_RESOLVE'); - self::addSupportedCurlOption($options, 'CURLOPT_SSL_CIPHER_LIST'); - self::addSupportedCurlOption($options, 'CURLOPT_SSL_EC_CURVES'); - self::addSupportedCurlOption($options, 'CURLOPT_TCP_FASTOPEN'); - self::addSupportedCurlOption($options, 'CURLOPT_TCP_KEEPALIVE'); - self::addSupportedCurlOption($options, 'CURLOPT_TCP_KEEPIDLE'); - self::addSupportedCurlOption($options, 'CURLOPT_TCP_KEEPINTVL'); - self::addSupportedCurlOption($options, 'CURLOPT_TCP_KEEPCNT'); - self::addSupportedCurlOption($options, 'CURLOPT_TCP_NODELAY'); - self::addSupportedCurlOption($options, 'CURLOPT_TLS13_CIPHERS'); - self::addSupportedCurlOption($options, 'CURLOPT_UNIX_SOCKET_PATH'); - self::addSupportedCurlOption($options, 'CURLOPT_USERPWD'); - - return $options; - } - - /** - * @param array $options - */ - private static function addSupportedCurlOption(array &$options, string $constant): void - { - if (!\defined($constant)) { - return; - } - - $value = \constant($constant); - if (\is_int($value)) { - $options[$value] = true; - } - } - - /** - * @param array $options - */ - private static function addConflictingCurlOption(array &$options, string $constant, ?string $replacement): void - { - if (!\defined($constant)) { - return; - } - - $value = \constant($constant); - if (\is_int($value)) { - $options[$value] = $replacement; - } - } - - private static function validateRequestUriScheme( - #[\SensitiveParameter] - RequestInterface $request - ): void { - $scheme = $request->getUri()->getScheme(); - if ($scheme === '') { - throw new RequestException('URI must include a scheme and host. Use an absolute URI, a network-path reference starting with //, or configure a base_uri.', $request); - } - - if (!\in_array($scheme, ['http', 'https'], true)) { - throw new RequestException(\sprintf("The scheme '%s' is not supported.", Psr7\DiagnosticValue::escape($scheme)), $request); - } - } - - public function release( - #[\SensitiveParameter] - EasyHandle $easy - ): void { - $this->assertOpen(); - - $resource = $easy->handle; - unset($easy->handle); - - if ( - \count($this->handles) >= $this->maxHandles - || ($easy->proxyTunnelSignature !== null && $easy->proxyTunnelSignature !== $this->proxyTunnelOwner) - ) { - // Pool is full, or this handle belongs to a superseded tunnel - // owner (an async create/release overlap can hand a stale-owner - // handle back after a purge) - drop it instead of pooling it. - $this->discardHandle($resource); - - return; - } - - if ($easy->proxyTunnelSignature !== null) { - // A pooled handle now carries the current owner's tunnel. - $this->poolMayHoldTunnels = true; - } - - // Remove all callback functions as they can hold onto references and - // are not cleaned up by curl_reset. Using curl_setopt_array does not - // work for some reason, so removing each one individually. - $this->clearEasyHandleCallbacks($resource); - \curl_reset($resource); - $this->handles[] = $resource; - } - - /** - * Closes idle cURL handles owned by this factory. - * - * After closing, the factory is terminal and must not be reused. - */ - public function close(): void - { - $this->doClose(true); - } - - private function assertOpen(): void - { - if ($this->closed) { - // Programmer misuse (reusing a closed factory), not a transfer failure; - // intentionally a LogicException outside the GuzzleException hierarchy. - throw new \BadMethodCallException('Cannot use the cURL factory after it has been closed.'); - } - } - - private function doClose(bool $explicit): void - { - if ($this->closed) { - return; - } - - $this->closed = true; - $failure = null; - - try { - foreach ($this->handles as $id => $handle) { - try { - $this->discardHandle($handle); - } catch (\Throwable $e) { - if ($failure === null) { - $failure = $e; - } - } finally { - unset($this->handles[$id]); - } - } - } finally { - $this->shareMode = TransportSharing::NONE; - $this->shareHandle = null; - } - - if ($explicit && $failure !== null) { - throw $failure; - } - } - - /** - * @param resource|\CurlHandle $handle - */ - private function discardHandle($handle): void - { - $failure = null; - - try { - $this->clearEasyHandleCallbacks($handle); - } catch (\Throwable $e) { - $failure = $e; - } - - try { - if (PHP_VERSION_ID < 80000 && \is_resource($handle)) { - \curl_close($handle); - } - } catch (\Throwable $e) { - if ($failure === null) { - $failure = $e; - } - } - - if ($failure !== null) { - throw $failure; - } - } - - /** - * @param resource|\CurlHandle $handle - */ - private function clearEasyHandleCallbacks($handle): void - { - curl_setopt($handle, \CURLOPT_HEADERFUNCTION, null); - curl_setopt($handle, \CURLOPT_READFUNCTION, null); - curl_setopt($handle, \CURLOPT_WRITEFUNCTION, null); - curl_setopt($handle, \CURLOPT_PROGRESSFUNCTION, null); - - if (\defined('CURLOPT_PREREQFUNCTION')) { - curl_setopt($handle, (int) \constant('CURLOPT_PREREQFUNCTION'), null); - } - - if (\defined('CURLOPT_XFERINFOFUNCTION')) { - curl_setopt($handle, (int) \constant('CURLOPT_XFERINFOFUNCTION'), null); - } - } - - /** - * Completes a cURL transaction, either returning a response promise or a - * rejected promise. - * - * @param callable(RequestInterface, array): PromiseInterface $handler - * @param CurlFactoryInterface $factory Dictates how the handle is released - * - * @return PromiseInterface - */ - public static function finish( - callable $handler, - #[\SensitiveParameter] - EasyHandle $easy, - CurlFactoryInterface $factory - ): PromiseInterface { - /** @var (callable(TransferStats): mixed)|null $onStats */ - $onStats = $easy->options['on_stats'] ?? null; - $stats = $onStats !== null ? self::createStats($easy) : null; - - if (self::shouldFinishWithError($easy)) { - return self::finishError($handler, $easy, $factory, $stats, $onStats); - } - - /** @var ResponseInterface $response */ - $response = $easy->response; - - // Return the response if it is present and there is no error. - $factory->release($easy); - - // Rewind the body of the response if possible. Failures here are local - // response finalization errors, not response-transfer failures. - $body = $response->getBody(); - try { - if ($body->isSeekable()) { - $body->rewind(); - } - } catch (\Exception $e) { - $reason = new ResponseException( - $e->getMessage() !== '' ? $e->getMessage() : 'Failed to rewind the response body', - $easy->request, - $response, - $e - ); - - if ($onStats !== null && $stats !== null) { - // Report the ResponseException rather than errno 0 to match the - // stream handler's response finalization stats. - $onStats(new TransferStats( - $easy->request, - $response, - $stats->getTransferTime(), - $reason, - $stats->getHandlerStats() - )); - } - - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason); - } - - if (isset($easy->options['on_trailers'])) { - /** @var callable(array>, ResponseInterface, RequestInterface): mixed $onTrailers */ - $onTrailers = $easy->options['on_trailers']; - - try { - $onTrailers(self::headersFromTrailerLines($easy->trailers), $response, $easy->request); - } catch (\Throwable $e) { - $reason = new ResponseException( - 'An error was encountered during the on_trailers event', - $easy->request, - $response, - $e - ); - - if ($onStats !== null && $stats !== null) { - // Report the ResponseException rather than errno 0 to match - // the response finalization stats above. - $onStats(new TransferStats( - $easy->request, - $response, - $stats->getTransferTime(), - $reason, - $stats->getHandlerStats() - )); - } - - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason); - } - } - - if ($onStats !== null && $stats !== null) { - $onStats($stats); - } - - /** @var PromiseInterface */ - return P\Create::promiseFor($response); - } - - private static function createStats( - #[\SensitiveParameter] - EasyHandle $easy - ): TransferStats { - $curlStats = \curl_getinfo($easy->handle); - $curlStats['appconnect_time'] = \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME); - - if ($easy->createResponseException) { - $curlStats = [ - 'total_time' => $curlStats['total_time'], - 'appconnect_time' => $curlStats['appconnect_time'], - ]; - } - - $handlerErrorData = $easy->responseHeaderException ?? $easy->responseBodySizeException ?? $easy->errno; - - return new TransferStats( - $easy->request, - $easy->response, - $curlStats['total_time'], - $handlerErrorData, - $curlStats - ); - } - - /** - * @param callable(RequestInterface, array): PromiseInterface $handler - * @param (callable(TransferStats): mixed)|null $onStats - * - * @return PromiseInterface - */ - private static function finishError( - callable $handler, - #[\SensitiveParameter] - EasyHandle $easy, - CurlFactoryInterface $factory, - ?TransferStats $stats, - ?callable $onStats - ): PromiseInterface { - // Get error information and release the handle to the factory. - $ctx = self::createErrorContext($easy); - $factory->release($easy); - - if ($onStats !== null && $stats !== null) { - $onStats($stats); - } - - if (self::shouldRetryFailedRewind($easy)) { - return self::retryFailedRewind($handler, $easy, $ctx); - } - - if (self::isChallengeRewindFailure($easy)) { - $ctx['error'] = 'The server issued an authentication challenge ' - .'after the request body had already been sent, and the body ' - .'could not be rewound to resend it. The request was not ' - .'retried because a retry replays the same challenge. See ' - .'https://bugs.php.net/bug.php?id=47204 for more information.'; - } - - return self::createRejection($easy, $ctx); - } - - private static function shouldFinishWithError(EasyHandle $easy): bool - { - return !$easy->response - || $easy->errno !== 0 - || self::hasLocalFailure($easy); - } - - private static function hasLocalFailure(EasyHandle $easy): bool - { - return $easy->bodyReadTimeoutException !== null - || $easy->bodyReadException !== null - || $easy->responseHeaderException !== null - || $easy->sinkWriteTimeoutException !== null - || $easy->sinkWriteException !== null - || $easy->sinkWriteIncomplete - || $easy->responseBodySizeException !== null; - } - - private static function shouldRetryFailedRewind(EasyHandle $easy): bool - { - if (self::hasLocalFailure($easy)) { - return false; - } - - if (self::isChallengeRewindFailure($easy)) { - // Re-issuing the identical request replays the same challenge and - // the same in-transfer rewind, so retrying is futile and the - // challenge response is surfaced instead. - return false; - } - - // Two transfer outcomes warrant rewinding the body and retrying: - // - // - errno === CURLE_SEND_FAIL_REWIND (65): libcurl needed to rewind an - // already-partially-sent upload to resend it on a reused connection - // that died before any response arrived, but could not, because PHP - // registers no seek callback for a streamed request body. See - // https://bugs.php.net/bug.php?id=47204. - // - // - errno === 0: libcurl reported success yet no usable response - // reached us. This is the legacy curl_multi silent-failure variant of - // the same rewind problem. libcurl 7.61.1 fixed it to surface as - // CURLE_SEND_FAIL_REWIND instead (curl/curl@d6cf930), so this arm is - // only load-bearing for libcurl < 7.61.1 and may be removed once the - // minimum supported libcurl is >= 7.61.1. - return $easy->errno === 0 || $easy->errno === self::CURLE_SEND_FAIL_REWIND; - } - - /** - * Whether the transfer failed because libcurl could not rewind the - * request body to resend it in reply to a challenge response, such as a - * 401 or 407 during multi-pass authentication. libcurl's only other - * rewind triggers are followed redirects, which the built-in handlers - * never enable, and reused connections that died, which cannot have - * produced a response. - */ - private static function isChallengeRewindFailure(EasyHandle $easy): bool - { - return $easy->errno === self::CURLE_SEND_FAIL_REWIND - && $easy->response !== null - && !self::hasLocalFailure($easy); - } - - private static function createErrorContext(EasyHandle $easy): array - { - return [ - 'errno' => $easy->errno, - 'error' => \curl_error($easy->handle), - ]; - } - - /** - * @return PromiseInterface - */ - private static function createRejection( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array $ctx, - #[\SensitiveParameter] - ?\Throwable $previous = null - ): PromiseInterface { - if ($easy->createResponseException) { - /** @var PromiseInterface */ - return P\Create::rejectionFor( - new RequestException( - 'An error was encountered while creating the response', - $easy->request, - 0, - $easy->createResponseException - ) - ); - } - - if ($easy->responseHeaderException) { - /** @var PromiseInterface */ - return P\Create::rejectionFor($easy->responseHeaderException); - } - - // If an exception was encountered during the onHeaders event, then - // return a rejected promise that wraps that exception. - if ($easy->onHeadersException) { - return self::createRequestOrResponseRejection( - $easy, - 'An error was encountered during the on_headers event', - $easy->onHeadersException - ); - } - - if ($easy->progressException) { - return self::createRequestOrResponseRejection( - $easy, - 'An error was encountered during the progress event', - $easy->progressException - ); - } - - if ($easy->bodyReadTimeoutException) { - // Reading the request body stalled, which is a caller-stream failure. - return self::createRequestOrResponseRejection( - $easy, - 'Timed out while reading the request body', - $easy->bodyReadTimeoutException - ); - } - - if ($easy->bodyReadException) { - $message = $easy->bodyReadException->getMessage() !== '' - ? $easy->bodyReadException->getMessage() - : 'Failed to read the request body'; - - return self::createRequestOrResponseRejection($easy, $message, $easy->bodyReadException); - } - - if ($easy->sinkWriteTimeoutException) { - // Writing the response body to the caller's sink stalled, which is a - // caller-stream failure. - return self::createRequestOrResponseRejection( - $easy, - 'Timed out while writing the response body', - $easy->sinkWriteTimeoutException - ); - } - - if ($easy->sinkWriteException) { - $message = $easy->sinkWriteException->getMessage() !== '' - ? $easy->sinkWriteException->getMessage() - : 'Failed to write the response body'; - - return self::createRequestOrResponseRejection($easy, $message, $easy->sinkWriteException); - } - - if ($easy->sinkWriteIncomplete) { - return self::createRequestOrResponseRejection($easy, 'Unable to write to stream'); - } - - if ($easy->responseBodySizeException) { - return self::createRequestOrResponseRejection( - $easy, - $easy->responseBodySizeException->getMessage(), - $easy->responseBodySizeException - ); - } - - if ($easy->progressAborted && $easy->errno === \CURLE_ABORTED_BY_CALLBACK) { - return self::createRequestOrResponseRejection( - $easy, - 'The transfer was aborted by the progress callback' - ); - } - - $uri = $easy->request->getUri(); - - $sanitizedError = self::sanitizeCurlError($ctx['error'] ?? '', $uri, $easy->effectiveProxy); - - $message = \sprintf( - 'cURL error %s: %s (%s)', - $ctx['errno'], - $sanitizedError, - 'see https://curl.se/libcurl/c/libcurl-errors.html' - ); - - if ('' !== $sanitizedError) { - $redactedUriString = Psr7\DiagnosticValue::escape(Psr7\Utils::redactUserInfo($uri)->__toString()); - if ($redactedUriString !== '' && false === \strpos($sanitizedError, $redactedUriString)) { - $message .= \sprintf(' for %s', $redactedUriString); - } - } - - if ($easy->errno === \CURLE_OPERATION_TIMEOUTED) { - if ($easy->response !== null) { - $error = new ResponseTimeoutException($message, $easy->request, $easy->response, $previous); - } elseif (self::isConnectTimeoutError($ctx['error'] ?? '')) { - $error = new ConnectTimeoutException($message, $easy->request, $previous); - } else { - $error = new NetworkTimeoutException($message, $easy->request, $previous); - } - } elseif ($easy->response) { - $error = self::isResponseTransferError($easy->errno) - ? new ResponseTransferException($message, $easy->request, $easy->response, $previous) - : new ResponseException($message, $easy->request, $easy->response, $previous); - } elseif (self::isConnectionError($easy->errno)) { - $error = new ConnectException($message, $easy->request, $previous); - } elseif (self::isNetworkError($easy->errno)) { - $error = new NetworkException($message, $easy->request, $previous); - } else { - $error = new RequestException($message, $easy->request, 0, $previous); - } - - /** @var PromiseInterface */ - return P\Create::rejectionFor($error); - } - - /** - * @return PromiseInterface - */ - private static function createRequestOrResponseRejection( - #[\SensitiveParameter] - EasyHandle $easy, - string $message, - #[\SensitiveParameter] - ?\Throwable $previous = null - ): PromiseInterface { - if ($easy->response !== null) { - /** @var PromiseInterface */ - return P\Create::rejectionFor( - new ResponseException($message, $easy->request, $easy->response, $previous) - ); - } - - /** @var PromiseInterface */ - return P\Create::rejectionFor( - new RequestException($message, $easy->request, 0, $previous) - ); - } - - private static function isConnectionError(int $errno): bool - { - return isset(self::CURL_CONNECTION_ERRORS[$errno]); - } - - private static function isNetworkError(int $errno): bool - { - return isset(self::CURL_NETWORK_ERRORS[$errno]); - } - - private static function isResponseTransferError(int $errno): bool - { - return self::isConnectionError($errno) - || self::isNetworkError($errno) - || isset(self::CURL_RESPONSE_TRANSFER_ERRORS[$errno]); - } - - private static function isConnectTimeoutError(string $error): bool - { - if ('' === $error) { - return false; - } - - foreach (self::CURL_CONNECT_TIMEOUT_ERRORS as $connectTimeoutError) { - if (Psr7\Utils::caselessContains($error, $connectTimeoutError)) { - return true; - } - } - - return Psr7\Utils::caselessContains($error, 'Failed to resolve') - && Psr7\Utils::caselessContains($error, 'timeout'); - } - - private static function sanitizeCurlError( - #[\SensitiveParameter] - string $error, - #[\SensitiveParameter] - UriInterface $uri, - #[\SensitiveParameter] - ?string $proxy = null - ): string { - if ('' === $error) { - return $error; - } - - $error = self::redactProxyUserInfo($error, $proxy); - - $baseUri = $uri->withQuery('')->withFragment(''); - $baseUriString = $baseUri->__toString(); - - if ('' !== $baseUriString) { - $redactedUriString = Psr7\Utils::redactUserInfo($baseUri)->__toString(); - $error = str_replace($baseUriString, $redactedUriString, $error); - } - - return Psr7\DiagnosticValue::escape($error); - } - - private static function redactProxyUserInfo( - #[\SensitiveParameter] - string $error, - #[\SensitiveParameter] - ?string $proxy - ): string { - if ($proxy === null || $proxy === '') { - return $error; - } - - return Psr7\Utils::redactUserInfoInString($error, $proxy); - } - - /** - * @param array $conf - */ - private function forceFreshConnectionForAuthenticatedProxy( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array &$conf - ): void { - $proxy = self::getEffectiveProxy($conf); - - if ( - $proxy === null - || (!self::requiresFreshConnectionForAuthenticatedProxy($request, $proxy, $conf) - && !$this->isOpaqueShareAnonymousProxyTunnel($request, $proxy, $conf)) - ) { - return; - } - - if ($this->shareMode === TransportSharing::PERSISTENT_REQUIRE) { - throw new InvalidArgumentException(self::PERSISTENT_REQUIRE_FRESH_PROXY_TUNNEL_MESSAGE); - } - - $conf[\CURLOPT_FRESH_CONNECT] = true; - $conf[\CURLOPT_FORBID_REUSE] = true; - } - - /** - * @param array $conf - */ - private function isOpaqueShareAnonymousProxyTunnel(RequestInterface $request, string $proxy, array $conf): bool - { - if (!$this->opaqueShareConnectionCache || !CurlVersion::supportsShareConnectionCaches()) { - return false; - } - - if (!self::usesProxyTunnel($request, $conf) || !self::isHttpProxyForConnectionReuse($proxy, $conf)) { - return false; - } - - if ( - self::hasCurlProxyAuthorizationHeader($conf) - || self::hasCurlProxyTlsCredentials($conf) - || self::hasCurlProxyCredentials($conf) - ) { - return false; - } - - $proxyForParsing = \strpos($proxy, '://') === false ? 'http://'.$proxy : $proxy; - $proxyParts = \parse_url($proxyForParsing); - if ( - \is_array($proxyParts) - && (\array_key_exists('user', $proxyParts) || \array_key_exists('pass', $proxyParts)) - ) { - return false; - } - - // From libcurl 7.57.0 an opaque share handle can own a connection - // cache, and a tunnel seeded there with a literal Proxy-Authorization - // header is never keyed on credentials, so an anonymous request could - // inherit it on every later libcurl version. Requests carrying - // recognized credential state keep the version-gated channel - // safeguards in requiresFreshConnectionForAuthenticatedProxy(). - return true; - } - - /** - * @param array $conf - */ - private static function getEffectiveProxy(array $conf): ?string - { - if (!\array_key_exists(\CURLOPT_PROXY, $conf)) { - return null; - } - - $proxy = $conf[\CURLOPT_PROXY]; - - return \is_string($proxy) && $proxy !== '' ? $proxy : null; - } - - /** - * @param array $conf - */ - private static function normalizeCurlHeaderOptions( - #[\SensitiveParameter] - array &$conf - ): void { - $options = [\CURLOPT_HTTPHEADER => 'CURLOPT_HTTPHEADER']; - if (\defined('CURLOPT_PROXYHEADER')) { - $options[(int) \constant('CURLOPT_PROXYHEADER')] = 'CURLOPT_PROXYHEADER'; - } - - foreach ($options as $option => $label) { - if (!\array_key_exists($option, $conf) || !\is_array($conf[$option])) { - continue; - } - - $normalized = []; - foreach ($conf[$option] as $key => $entry) { - if (\is_object($entry) && \method_exists($entry, '__toString')) { - $entry = (string) $entry; - } elseif (!\is_string($entry)) { - throw new InvalidArgumentException(\sprintf('%s entries must be strings or stringable objects.', $label)); - } - - if (\strpbrk($entry, "\r\n") !== false) { - throw new InvalidArgumentException(\sprintf('%s entries must not contain a carriage return or line feed.', $label)); - } - - $normalized[$key] = $entry; - } - - $conf[$option] = $normalized; - } - } - - /** - * @param array $conf - */ - private static function requiresFreshConnectionForAuthenticatedProxy(RequestInterface $request, string $proxy, array $conf): bool - { - // SOCKS authentication binds an identity to the connection itself, and - // below 7.69.0 an opaque configured share may already contain a SOCKS - // connection whose credential state Guzzle cannot inspect. Isolate - // authenticated and anonymous requests so neither can inherit it. - if (self::isSocksProxy($proxy, $conf)) { - return !CurlVersion::supportsSocksProxyCredentialAwareConnectionReuse(); - } - - if (!self::usesProxyTunnel($request, $conf) || !self::isHttpProxyForConnectionReuse($proxy, $conf)) { - return false; - } - - $proxyForParsing = \strpos($proxy, '://') === false ? 'http://'.$proxy : $proxy; - $proxyParts = \parse_url($proxyForParsing); - if (!\is_array($proxyParts)) { - return false; - } - - if (self::hasCurlProxyAuthorizationHeader($conf)) { - return true; - } - - // A proxy client certificate or TLS-SRP authenticates the client to the - // HTTPS proxy at the TLS layer; libcurl ignored TLS-SRP before 7.83.1 - // (CVE-2022-27782), so an old build can reuse a tunnel across those - // identities. Force a fresh one, as the non-share signature path does. - // See docs/contributing/curl-connection-reuse.md. - if ( - !CurlVersion::supportsProxyTlsCredentialAwareConnectionReuse() - && self::hasCurlProxyTlsCredentials($conf) - ) { - return true; - } - - if (CurlVersion::supportsProxyCredentialAwareConnectionReuse()) { - return false; - } - - return \array_key_exists('user', $proxyParts) - || \array_key_exists('pass', $proxyParts) - || self::hasCurlProxyCredentials($conf); - } - - /** - * @param array $conf - */ - private static function applyProxyConnectHeaderSuppression( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array &$conf - ): void { - $proxy = $conf[\CURLOPT_PROXY] ?? null; - - if (!\is_string($proxy) - || $proxy === '' - || self::isSocksProxy($proxy, $conf) - || !self::usesProxyTunnel($request, $conf) - ) { - return; - } - - if (!CurlVersion::supportsProxyTunneling()) { - throw new RequestException('Tunneling requests through an HTTP proxy is not supported by the installed libcurl; libcurl 7.54.0 or newer is required.', $request); - } - - // Keep the proxy CONNECT reply out of the header callback so a - // tunnelled transfer failure is not misclassified as a response - // failure carrying the proxy's interim 200. - $conf[(int) \constant('CURLOPT_SUPPRESS_CONNECT_HEADERS')] = true; - } - - /** - * @param array $conf - */ - private static function usesProxyTunnel(RequestInterface $request, array $conf): bool - { - $scheme = $request->getUri()->getScheme(); - - if ('https' === $scheme) { - return true; - } - - // An HTTP proxy auto-switches to a CONNECT tunnel when CONNECT_TO - // redirects the origin, so an http:// target with it set tunnels too. - if ('http' === $scheme && self::hasCurlConnectTo($conf)) { - return true; - } - - return \defined('CURLOPT_HTTPPROXYTUNNEL') - && \array_key_exists((int) \constant('CURLOPT_HTTPPROXYTUNNEL'), $conf) - && (bool) $conf[(int) \constant('CURLOPT_HTTPPROXYTUNNEL')]; - } - - /** - * @param array $conf - */ - private static function hasCurlConnectTo(array $conf): bool - { - if (!\defined('CURLOPT_CONNECT_TO')) { - return false; - } - - $option = (int) \constant('CURLOPT_CONNECT_TO'); - if (!\array_key_exists($option, $conf)) { - return false; - } - - $value = $conf[$option]; - - return \is_array($value) - ? $value !== [] - : $value !== null && $value !== false && $value !== ''; - } - - /** - * @param array $conf - */ - private static function isHttpProxyForConnectionReuse(string $proxy, array $conf): bool - { - if (\strpos($proxy, '://') !== false) { - $proxyParts = \parse_url($proxy); - if (!\is_array($proxyParts) || !isset($proxyParts['scheme'])) { - return false; - } - - $proxyScheme = Psr7\Utils::asciiToLower($proxyParts['scheme']); - - return $proxyScheme === 'http' || $proxyScheme === 'https'; - } - - return !self::isSocksProxyType($conf[\CURLOPT_PROXYTYPE] ?? null); - } - - private static function proxyScheme(string $proxy): ?string - { - $position = \strpos($proxy, '://'); - - return $position === false ? null : Psr7\Utils::asciiToLower(\substr($proxy, 0, $position)); - } - - /** - * @param array $conf - */ - private static function isSocksProxy(string $proxy, array $conf): bool - { - $scheme = self::proxyScheme($proxy); - if ($scheme !== null) { - if (\in_array($scheme, ['socks', 'socks4', 'socks4a', 'socks5', 'socks5h'], true)) { - return true; - } - - // libcurl preserves a raw SOCKS CURLOPT_PROXYTYPE behind an http - // scheme, while every other scheme overrides the proxy type. - if ($scheme !== 'http') { - return false; - } - } - - return self::isSocksProxyType($conf[\CURLOPT_PROXYTYPE] ?? null); - } - - /** - * Computes the connection-reuse section signature for a SOCKS proxy. - * libcurl compares SOCKS credentials on connection reuse from 7.69.0 (curl - * #4835), so no sectioning is needed there. Older libcurl matches a SOCKS - * proxy by type, host, and port only, so every SOCKS request is sectioned - * by its credential state; hashing the credential-less state too keeps an - * unauthenticated request from inheriting an authenticated connection. See - * docs/contributing/curl-connection-reuse.md. - * - * @param array $conf - */ - private static function socksProxySignature( - #[\SensitiveParameter] - string $proxy, - #[\SensitiveParameter] - array $conf - ): ?string { - if (CurlVersion::supportsSocksProxyCredentialAwareConnectionReuse()) { - return null; - } - - $credentialState = []; - foreach (['CURLOPT_PROXYUSERPWD', 'CURLOPT_PROXYUSERNAME', 'CURLOPT_PROXYPASSWORD', 'CURLOPT_PROXYTYPE'] as $name) { - $credentialState[$name] = \defined($name) - ? ($conf[(int) \constant($name)] ?? null) - : null; - } - - return \hash('sha256', \serialize(['socks', $proxy, $credentialState])); - } - - /** - * @param mixed $proxyType - */ - private static function isSocksProxyType($proxyType): bool - { - if (!\is_int($proxyType)) { - return false; - } - - foreach ([ - 'CURLPROXY_SOCKS4' => 4, - 'CURLPROXY_SOCKS5' => 5, - 'CURLPROXY_SOCKS4A' => 6, - 'CURLPROXY_SOCKS5_HOSTNAME' => 7, - ] as $name => $fallback) { - $value = \defined($name) ? (int) \constant($name) : $fallback; - if ($proxyType === $value) { - return true; - } - } - - return false; - } - - /** - * @param array $conf - */ - private static function hasCurlProxyCredentials(array $conf): bool - { - foreach (['CURLOPT_PROXYUSERPWD', 'CURLOPT_PROXYUSERNAME', 'CURLOPT_PROXYPASSWORD'] as $option) { - if (\defined($option) && \array_key_exists((int) \constant($option), $conf)) { - return true; - } - } - - return false; - } - - /** - * @param array $conf - */ - private static function hasCurlProxyTlsCredentials(array $conf): bool - { - foreach ([ - 'CURLOPT_PROXY_SSLCERT', - 'CURLOPT_PROXY_SSLCERT_BLOB', - 'CURLOPT_PROXY_TLSAUTH_USERNAME', - 'CURLOPT_PROXY_TLSAUTH_PASSWORD', - ] as $option) { - if (\defined($option) && \array_key_exists((int) \constant($option), $conf)) { - return true; - } - } - - return false; - } - - /** - * @param array $conf - */ - private static function hasCurlProxyAuthorizationHeader(array $conf): bool - { - return self::curlProxyAuthorizationHeaderValues($conf) !== []; - } - - /** - * Collects the first-class Proxy-Authorization request header lines that - * Guzzle configures in cURL's proxy-only header channel. Empty values use - * cURL's semicolon form so they suppress an automatically generated proxy - * authorization field without carrying a credential. getHeaderLine() is - * deliberately not used: comma-joining multiple credentials would change - * their wire representation and connection signature. - * - * @return list - */ - private static function managedProxyAuthorizationHeaderLines( - #[\SensitiveParameter] - RequestInterface $request - ): array { - $headers = []; - - foreach ($request->getHeader('Proxy-Authorization') as $value) { - $headers[] = $value === '' - ? 'Proxy-Authorization;' - : 'Proxy-Authorization: '.$value; - } - - return $headers; - } - - /** - * Routes the managed Proxy-Authorization lines and any caller-provided - * proxy headers through cURL's proxy-only header channel without - * consulting Guzzle's route prediction, so no proxy-classification - * discrepancy can disclose them to an origin server. libcurl uses the - * proxy-only list only for HTTP requests it actually sends to a proxy, so - * direct, no-proxy-bypassed, and SOCKS transfers never deliver it. - * - * @param array $conf - * @param list $managedHeaders - */ - private static function applyProxyAuthorizationHeaderHandling( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array &$conf, - #[\SensitiveParameter] - array $managedHeaders - ): void { - if ($managedHeaders !== [] || self::hasCurlProxyHeaderOption($conf)) { - if (!CurlVersion::supportsProxyHeaderSeparation()) { - throw new RequestException('Proxy headers require libcurl 7.37.0 or newer built with proxy header separation support.', $request); - } - - if ($managedHeaders !== []) { - self::appendCurlProxyHeaders($conf, $managedHeaders); - } - - $conf[(int) \constant('CURLOPT_HEADEROPT')] = (int) \constant('CURLHEADER_SEPARATE'); - } - - // Keep the conservative CONNECT header-list separation for effective - // HTTP(S) proxy tunnels without a proxy header: on libcurl - // 7.37.0-7.42.0 the default is CURLHEADER_UNIFIED. This broad route - // approximation never decides managed credential routing. - $proxy = self::getEffectiveProxy($conf); - if ( - CurlVersion::supportsProxyHeaderSeparation() - && $proxy !== null - && self::isHttpProxyForConnectionReuse($proxy, $conf) - && self::usesProxyTunnel($request, $conf) - ) { - $conf[(int) \constant('CURLOPT_HEADEROPT')] = (int) \constant('CURLHEADER_SEPARATE'); - } - } - - /** - * @param array $conf - * @param list $headers - */ - private static function appendCurlProxyHeaders( - #[\SensitiveParameter] - array &$conf, - #[\SensitiveParameter] - array $headers - ): void { - $option = (int) \constant('CURLOPT_PROXYHEADER'); - - if (\array_key_exists($option, $conf)) { - if (!\is_array($conf[$option])) { - throw new InvalidArgumentException('CURLOPT_PROXYHEADER must be an array when a Proxy-Authorization request header is routed to the proxy header channel.'); - } - - $headers = \array_merge($conf[$option], $headers); - } - - $conf[$option] = $headers; - } - - /** - * @param array $conf - */ - private static function hasCurlProxyHeaderOption(array $conf): bool - { - return \defined('CURLOPT_PROXYHEADER') - && \array_key_exists((int) \constant('CURLOPT_PROXYHEADER'), $conf); - } - - /** - * @param mixed[] $headers - * - * @return list - */ - private static function proxyAuthorizationHeaderValuesFromList(array $headers): array - { - $values = []; - - foreach ($headers as $header) { - if (!\is_string($header)) { - continue; - } - - $position = \strpos($header, ':'); - if ($position === false) { - continue; - } - - if (!Psr7\Utils::caselessEquals(\trim(\substr($header, 0, $position), " \n\r\t\0\x0B"), 'Proxy-Authorization')) { - continue; - } - - $value = \trim(\substr($header, $position + 1), " \n\r\t\0\x0B"); - if ($value !== '') { - $values[] = $value; - } - } - - return $values; - } - - /** - * Computes the connection-reuse section signature for a proxy tunnel or - * SOCKS proxy, or null when the request does not require sectioning. - * - * @param array $conf - */ - private static function proxyTunnelSignature( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $conf - ): ?string { - $proxy = self::getEffectiveProxy($conf); - if ($proxy === null) { - return null; - } - - // SOCKS authentication binds an identity to the connection itself, for - // plain http:// requests as much as https://, so it sections ahead of - // the CONNECT tunnel domain checks. - if (self::isSocksProxy($proxy, $conf)) { - return self::socksProxySignature($proxy, $conf); - } - - if ( - !self::usesProxyTunnel($request, $conf) - || !self::isHttpProxyForConnectionReuse($proxy, $conf) - ) { - return null; - } - - $headerAuth = self::curlProxyAuthorizationHeaderValues($conf); - if ($headerAuth === [] && CurlVersion::supportsProxyCredentialAwareConnectionReuse()) { - // libcurl keys reuse on parsed proxy credentials only from 8.19.0, - // trusted from 8.20.0 (PROXY_CREDENTIAL_REUSE_VERSION); a literal - // Proxy-Authorization header is never keyed and always sections. - // See docs/contributing/curl-connection-reuse.md. - return self::DELEGATED_PROXY_TUNNEL_OWNER; - } - - // Hash every proxy channel an old libcurl might not key reuse on. A - // changed signature only forces a fresh connection, never relaxes - // reuse, so over-covering is always safe; under-covering leaks. Proxy - // credentials are the channel CVE-2026-3784 missed; the proxy-TLS - // options are load-bearing on builds before the proxy-TLS reuse fixes - // (the proxy client cert is keyed from 7.52.0, libcurl's first - // HTTPS-proxy release; CVE-2016-5420 (7.50.1) is only the origin-cert - // precedent; TLS-SRP from 7.83.1, CVE-2022-27782) and harmless after. - // The private-key file and passphrase are hashed on this non-delegated - // path too, as fallback hardening: libcurl's mTLS private-key matching - // on reuse was incomplete before 8.21.0 (CVE-2026-8932). This does not - // cover the delegated path (the early return above) or configured share - // handles, so it is not a complete pre-8.21.0 mitigation. The key blob - // and cert/key type encodings (PROXY_SSLKEY_BLOB, PROXY_SSLKEYTYPE, - // PROXY_SSLCERTTYPE) are not hashed and are an accepted residual. See - // docs/contributing/curl-connection-reuse.md. - $credentialState = []; - foreach ([ - 'CURLOPT_PROXYUSERPWD', 'CURLOPT_PROXYUSERNAME', 'CURLOPT_PROXYPASSWORD', - 'CURLOPT_PROXYTYPE', - 'CURLOPT_PROXY_SSLCERT', 'CURLOPT_PROXY_SSLCERT_BLOB', 'CURLOPT_PROXY_SSLKEY', - 'CURLOPT_PROXY_KEYPASSWD', 'CURLOPT_PROXY_TLSAUTH_USERNAME', - 'CURLOPT_PROXY_TLSAUTH_PASSWORD', 'CURLOPT_PROXY_SSLVERSION', - ] as $name) { - $credentialState[$name] = \defined($name) - ? ($conf[(int) \constant($name)] ?? null) - : null; - } - - return \hash('sha256', \serialize([$proxy, $credentialState, $headerAuth])); - } - - /** - * @param array $conf - * - * @return list - */ - private static function curlProxyAuthorizationHeaderValues(array $conf): array - { - if (!\defined('CURLOPT_PROXYHEADER')) { - return []; - } - - $option = (int) \constant('CURLOPT_PROXYHEADER'); - if (!\array_key_exists($option, $conf)) { - return []; - } - - $headers = $conf[$option]; - if (!\is_array($headers)) { - return []; - } - - return self::proxyAuthorizationHeaderValuesFromList($headers); - } - - private function discardIdleHandles(): void - { - foreach ($this->handles as $id => $handle) { - try { - // Best effort: a cleanup hiccup on a superseded idle handle - // must not abort the unrelated request that triggered the purge. - $this->discardHandle($handle); - } catch (\Throwable $e) { - // Ignored. - } finally { - unset($this->handles[$id]); - } - } - } - - /** - * @return array - */ - private function getDefaultConf( - #[\SensitiveParameter] - EasyHandle $easy - ): array { - $uri = $easy->request->getUri(); - $protocols = Utils::normalizeProtocols($easy->options['protocols'] ?? ['http', 'https']); - $scheme = $uri->getScheme(); - if (!\in_array($scheme, $protocols, true)) { - throw new RequestException(\sprintf('The scheme "%s" is not allowed by the protocols request option.', Psr7\DiagnosticValue::escape($scheme)), $easy->request); - } - - if ($uri->getHost() === '') { - throw new RequestException('URI must include a scheme and host. Use an absolute URI, a network-path reference starting with //, or configure a base_uri.', $easy->request); - } - - $conf = [ - '_headers' => $easy->request->getHeaders(), - \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), - \CURLOPT_URL => (string) $uri->withFragment(''), - \CURLOPT_RETURNTRANSFER => false, - \CURLOPT_HEADER => false, - \CURLOPT_CONNECTTIMEOUT_MS => self::DEFAULT_CONNECT_TIMEOUT_MS, - ]; - - if (CurlVersion::supportsProtocolsStr()) { - $conf[(int) \constant('CURLOPT_PROTOCOLS_STR')] = \implode(',', $protocols); - } else { - $conf[\CURLOPT_PROTOCOLS] = self::curlProtocolMask($protocols); - } - - $version = $easy->request->getProtocolVersion(); - $multiplex = self::normalizeMultiplex($easy->options); - - if ('3' === $version || '3.0' === $version) { - if (!\defined('CURL_HTTP_VERSION_3')) { - throw new RequestException('HTTP/3 is not supported by this cURL installation.', $easy->request); - } - - $proxy = ProxyEnv::resolveProxySelection($easy->request->getUri(), $easy->options['proxy'] ?? null); - - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - self::assertSelectedProxySupported($proxy->getProxy(), $easy->request); - - if ($proxy->hasProxy()) { - throw new RequestException('Required multiplexing cannot be guaranteed for HTTP/3 requests sent through a proxy.', $easy->request); - } - if (!CurlVersion::supportsRequiredHttp3Multiplex()) { - throw new RequestException('Required multiplexing for HTTP/3 needs libcurl 8.13.0 or newer built with HTTP/3 support.', $easy->request); - } - // HTTP/3 or fail: required multiplexing never downgrades, not - // even to HTTP/2. - $conf[\CURLOPT_HTTP_VERSION] = (int) \constant('CURL_HTTP_VERSION_3ONLY'); - } else { - $conf[\CURLOPT_HTTP_VERSION] = $proxy->hasProxy() - ? (CurlVersion::supportsHttp2() ? \CURL_HTTP_VERSION_2_0 : \CURL_HTTP_VERSION_1_1) - : (int) \constant('CURL_HTTP_VERSION_3'); - } - } elseif ('2' === $version || '2.0' === $version) { - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - self::assertRequiredMultiplexSupported($easy); - // New HTTP/2 connections cannot negotiate HTTP/1.x here, and - // the 8.14.0 floor's version-aware reuse matching keeps - // reused connections on HTTP/2 as well. - $conf[\CURLOPT_HTTP_VERSION] = (int) \constant('CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE'); - } else { - $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2_0; - } - } elseif ('1.1' === $version) { - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new RequestException(\sprintf('The "multiplex" request option cannot be required for HTTP/%s requests; use protocol version 2 or 3.', $version), $easy->request); - } - $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_1; - } else { - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new RequestException(\sprintf('The "multiplex" request option cannot be required for HTTP/%s requests; use protocol version 2 or 3.', $version), $easy->request); - } - $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_0; - } - - $resolvedVersion = $conf[\CURLOPT_HTTP_VERSION]; - if (\in_array($multiplex, [Multiplexing::WAIT, Multiplexing::REQUIRE_WAIT], true) - && CurlVersion::supportsMultiplex() - && ($resolvedVersion === \CURL_HTTP_VERSION_2_0 - || (\defined('CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE') && $resolvedVersion === (int) \constant('CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE')) - || (\defined('CURL_HTTP_VERSION_3') && $resolvedVersion === (int) \constant('CURL_HTTP_VERSION_3')) - || (\defined('CURL_HTTP_VERSION_3ONLY') && $resolvedVersion === (int) \constant('CURL_HTTP_VERSION_3ONLY'))) - ) { - // Wait for an in-progress connection to the same origin to reveal - // whether it can be multiplexed instead of opening another one. - $conf[(int) \constant('CURLOPT_PIPEWAIT')] = true; - } - - return $conf; - } - - /** - * @param string[] $protocols - */ - private static function curlProtocolMask(array $protocols): int - { - $mask = 0; - - if (\in_array('http', $protocols, true)) { - $mask |= \CURLPROTO_HTTP; - } - - if (\in_array('https', $protocols, true)) { - $mask |= \CURLPROTO_HTTPS; - } - - return $mask; - } - - /** - * @param mixed $type - */ - private static function normalizeTlsFileType(string $option, $type): string - { - if (!\is_string($type) || $type === '') { - throw new InvalidArgumentException(\sprintf('%s must be a non-empty string', $option)); - } - - return Psr7\Utils::asciiToUpper($type); - } - - private static function shouldValidateSslKeyFile(?string $type): bool - { - return $type !== 'ENG' && $type !== 'PROV'; - } - - private function applyMethod( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array &$conf, - RequestFraming $framing - ): void { - if ($easy->request->getMethod() === 'HEAD') { - // libcurl stops at HEAD response headers only when CURLOPT_NOBODY - // is set; CURLOPT_CUSTOMREQUEST changes only the method string. - // NOBODY also suppresses request upload, so strip non-zero body - // length, transfer coding, and a 100-continue expectation. - $conf[\CURLOPT_CUSTOMREQUEST] = null; - $conf[\CURLOPT_NOBODY] = true; - unset( - $conf[\CURLOPT_WRITEFUNCTION], - $conf[\CURLOPT_READFUNCTION], - $conf[\CURLOPT_FILE], - $conf[\CURLOPT_INFILE] - ); - if (\trim($easy->request->getHeaderLine('Content-Length'), " \n\r\t\0\x0B") !== '0') { - $this->removeHeader('Content-Length', $conf); - } - $this->removeHeader('Transfer-Encoding', $conf); - if (Psr7\Utils::caselessEquals(\trim($easy->request->getHeaderLine('Expect'), " \n\r\t\0\x0B"), '100-continue')) { - $this->removeHeader('Expect', $conf); - } - - return; - } - - if ($framing->bodySize !== 0 && $framing->contentLength !== 0) { - $this->applyBody($easy, $conf, $framing); - } - } - - private function applyBody( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array &$conf, - RequestFraming $framing - ): void { - $request = $easy->request; - $options = $easy->options; - $contentLength = $framing->contentLength; - - // Send the body as a string if the size is less than 1MB OR if the - // [curl][body_as_string] request value is set. - if (($framing->bodySize !== null && $framing->bodySize < 1000000) || !empty($options['_body_as_string'])) { - $conf[\CURLOPT_POSTFIELDS] = $framing->materialize(); - // Don't duplicate the Content-Length header - $this->removeHeader('Content-Length', $conf); - $this->removeHeader('Transfer-Encoding', $conf); - } else { - $conf[\CURLOPT_UPLOAD] = true; - - if ($contentLength !== null) { - // Never let cURL emit our header; it sizes the upload via a cURL input-size option. - $this->removeHeader('Content-Length', $conf); - $conf[self::curlInputSizeOption($request, $contentLength)] = $contentLength; - } - - $body = $request->getBody(); - try { - if ($body->isSeekable()) { - $body->rewind(); - } - } catch (\Exception $e) { - $message = $e instanceof TimeoutException - ? 'Timed out while rewinding the request body' - : ($e->getMessage() !== '' ? $e->getMessage() : 'Failed to rewind the request body'); - - throw new RequestException($message, $request, 0, $e); - } - /** - * @return int|string - */ - $remaining = $contentLength; - $conf[\CURLOPT_READFUNCTION] = static function ($ch, $fd, int $length) use ($easy, $body, &$remaining) { - if ($remaining === 0) { - return ''; - } - - $limit = $remaining === null ? $length : \min($length, $remaining); - - try { - $data = $body->read($limit); - } catch (TimeoutException $e) { - $easy->bodyReadTimeoutException = $e; - - return self::CURL_READFUNC_ABORT; - } catch (\Throwable $e) { - $easy->bodyReadException = $e; - - return self::CURL_READFUNC_ABORT; - } - - $dataLength = \strlen($data); - if ($dataLength > $limit) { - $easy->bodyReadException = new \RuntimeException('Request body stream returned more bytes than requested'); - - return self::CURL_READFUNC_ABORT; - } - - if ($remaining !== null) { - if ($data === '') { - $easy->bodyReadException = new \RuntimeException('Request body ended before the declared Content-Length was reached'); - - return self::CURL_READFUNC_ABORT; - } - - $remaining -= $dataLength; - } - - return $data; - }; - } - - // If the Expect header is not present, prevent curl from adding it - if (!$request->hasHeader('Expect')) { - $conf[\CURLOPT_HTTPHEADER][] = 'Expect:'; - } - - // cURL sometimes adds a content-type by default. Prevent this. - if (!$request->hasHeader('Content-Type')) { - $conf[\CURLOPT_HTTPHEADER][] = 'Content-Type:'; - } - } - - private static function curlInputSizeOption( - #[\SensitiveParameter] - RequestInterface $request, - int $contentLength - ): int { - $option = \defined('CURLOPT_INFILESIZE_LARGE') - ? (int) \constant('CURLOPT_INFILESIZE_LARGE') - : \CURLOPT_INFILESIZE; - - // cURL's long remains 32-bit on 64-bit Windows. - if (\PHP_OS_FAMILY === 'Windows' && $option === \CURLOPT_INFILESIZE && $contentLength > 2147483647) { - throw new RequestException('Content-Length exceeds the maximum cURL upload size supported by this PHP build', $request); - } - - return $option; - } - - private function applyHeaders( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array &$conf - ): void { - foreach ($conf['_headers'] as $name => $values) { - // The managed Proxy-Authorization field never enters the origin - // header list; applyProxyAuthorizationHeaderHandling() routes the - // values through cURL's proxy-only header channel. - if (Psr7\Utils::caselessEquals((string) $name, 'Proxy-Authorization')) { - continue; - } - - foreach ($values as $value) { - $value = (string) $value; - if ($value === '') { - // cURL requires a special format for empty headers. - // See https://github.com/guzzle/guzzle/issues/1882 for more details. - $conf[\CURLOPT_HTTPHEADER][] = "$name;"; - } else { - $conf[\CURLOPT_HTTPHEADER][] = "$name: $value"; - } - } - } - - // Remove the Accept header if one was not set - if (!$easy->request->hasHeader('Accept')) { - $conf[\CURLOPT_HTTPHEADER][] = 'Accept:'; - } - } - - /** - * Remove a header from the options array. - * - * @param string $name Case-insensitive header to remove - * @param array $options Array of options to modify - */ - private function removeHeader(string $name, array &$options): void - { - foreach (\array_keys($options['_headers']) as $key) { - if (Psr7\Utils::caselessEquals((string) $key, $name)) { - unset($options['_headers'][$key]); - - return; - } - } - } - - /** - * Decorates a caller-owned sink stream so that closing the response body - * detaches Guzzle's wrapper without closing the original PHP resource. - */ - private static function streamForResourceSink(StreamInterface $stream): StreamInterface - { - return FnStream::decorate($stream, [ - 'close' => static function () use ($stream): void { - $stream->detach(); - }, - ]); - } - - /** - * @param mixed $factory - */ - private static function requireStreamFactory($factory): StreamFactoryInterface - { - if (!$factory instanceof StreamFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::STREAM_FACTORY, - StreamFactoryInterface::class - )); - } - - return $factory; - } - - private function applyHandlerOptions( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array &$conf - ): void { - $options = $easy->options; - if (isset($options['verify'])) { - if ($options['verify'] === false) { - unset($conf[\CURLOPT_CAINFO]); - $conf[\CURLOPT_SSL_VERIFYHOST] = 0; - $conf[\CURLOPT_SSL_VERIFYPEER] = false; - } else { - $conf[\CURLOPT_SSL_VERIFYHOST] = 2; - $conf[\CURLOPT_SSL_VERIFYPEER] = true; - if (\is_string($options['verify'])) { - // Throw an error if the file/folder/link path is not valid or doesn't exist. - if (!\file_exists($options['verify'])) { - throw new InvalidArgumentException(\sprintf('SSL CA bundle not found: %s', Psr7\DiagnosticValue::escape($options['verify']))); - } - // If it's a directory or a link to a directory use CURLOPT_CAPATH. - // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO. - if ( - \is_dir($options['verify']) - || ( - \is_link($options['verify']) === true - && ($verifyLink = \readlink($options['verify'])) !== false - && \is_dir($verifyLink) - ) - ) { - $conf[\CURLOPT_CAPATH] = $options['verify']; - } else { - $conf[\CURLOPT_CAINFO] = $options['verify']; - } - } - } - } - - if (!isset($options['curl'][\CURLOPT_ENCODING]) && isset($options['decode_content']) && $options['decode_content'] !== false) { - $accept = $easy->request->getHeaderLine('Accept-Encoding'); - if ($accept !== '') { - $conf[\CURLOPT_ENCODING] = $accept; - } else { - // The empty string enables all available decoders and implicitly - // sets a matching 'Accept-Encoding' header. - $conf[\CURLOPT_ENCODING] = ''; - // 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:'; - } - } - - $streamFactory = self::requireStreamFactory($options[RequestOptions::STREAM_FACTORY] ?? new HttpFactory()); - $hasSink = isset($options['sink']); - if (!$hasSink) { - // Use a default temp stream if no sink was set. - $options['sink'] = Psr7\Utils::tryFopen('php://temp', 'w+'); - } - $sink = $options['sink']; - if ($hasSink && \is_resource($sink)) { - $sink = self::streamForResourceSink(Psr7\Utils::streamFor($sink)); - } elseif (\is_resource($sink)) { - $sink = $streamFactory->createStreamFromResource($sink); - } elseif (!\is_string($sink)) { - $sink = Psr7\Utils::streamFor($sink); - } elseif (!\is_dir(\dirname($sink))) { - // Ensure that the directory exists before failing in curl. - throw new RequestException(\sprintf('Directory %s does not exist for sink value of %s', Psr7\DiagnosticValue::escape(\dirname($sink)), Psr7\DiagnosticValue::escape($sink)), $easy->request); - } else { - $sink = new LazyOpenStream($sink, 'w+'); - } - $easy->sink = $sink; - $conf[\CURLOPT_WRITEFUNCTION] = static function ($ch, string $write) use ($easy, $sink): int { - $length = \strlen($write); - - try { - $newResponseBodyBytes = TransferByteCounter::add( - $easy->responseBodyBytes, - $length, - 'Response body exceeds the maximum integer size supported on this platform' - ); - } catch (\OverflowException $e) { - $easy->responseBodySizeException = $e; - - return 0; - } - - try { - $written = $sink->write($write); - } catch (TimeoutException $e) { - $easy->sinkWriteTimeoutException = $e; - - return 0; - } catch (\Throwable $e) { - $easy->sinkWriteException = $e; - - return 0; - } - - if ($written !== $length) { - $easy->sinkWriteIncomplete = true; - - return 0; - } - - $easy->responseBodyBytes = $newResponseBodyBytes; - - return $written; - }; - - $timeoutRequiresNoSignal = false; - if (isset($options['timeout'])) { - $timeout = Timeout::toMilliseconds($options['timeout'], 'timeout'); - $timeoutRequiresNoSignal |= $timeout > 0 && $timeout < 1000; - $conf[\CURLOPT_TIMEOUT_MS] = $timeout; - } - - // CURL default value is CURL_IPRESOLVE_WHATEVER - if (isset($options['force_ip_resolve'])) { - if ('v4' === $options['force_ip_resolve']) { - $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V4; - } elseif ('v6' === $options['force_ip_resolve']) { - $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V6; - } - } - - if (isset($options['connect_timeout'])) { - $connectTimeout = Timeout::toMilliseconds($options['connect_timeout'], 'connect_timeout'); - if ($connectTimeout > 0) { - $timeoutRequiresNoSignal |= $connectTimeout < 1000; - $conf[\CURLOPT_CONNECTTIMEOUT_MS] = $connectTimeout; - } else { - $conf[\CURLOPT_CONNECTTIMEOUT_MS] = self::CONNECT_TIMEOUT_DISABLED_MS; - } - } - - if ($timeoutRequiresNoSignal && \PHP_OS_FAMILY !== 'Windows') { - $conf[\CURLOPT_NOSIGNAL] = true; - } - - // Always pin CURLOPT_PROXY and CURLOPT_NOPROXY so that libcurl never - // falls back to reading proxy environment variables itself. - $proxy = ProxyEnv::resolveProxySelection($easy->request->getUri(), $options['proxy'] ?? null); - $selectedProxy = $proxy->getProxy(); - if ($selectedProxy !== null) { - // Validate the whole proxy URL up front (ProxyOptions leans on - // Psr7\Uri), so a malformed proxy fails the same way on every - // handler, then check the scheme against what libcurl can use. - self::assertSelectedProxySupported($selectedProxy, $easy->request); - - $conf[\CURLOPT_PROXY] = $selectedProxy; - $conf[\CURLOPT_NOPROXY] = ''; - } else { - $conf[\CURLOPT_PROXY] = ''; - $conf[\CURLOPT_NOPROXY] = $proxy->isBypassed() ? '*' : ''; - } - - $this->applyTlsVersionRange($easy, $conf); - - $certType = null; - if (isset($options['cert_type'])) { - $certType = self::normalizeTlsFileType('cert_type', $options['cert_type']); - $conf[\CURLOPT_SSLCERTTYPE] = $certType; - } - - if (isset($options['cert'])) { - $cert = $options['cert']; - if (\is_array($cert)) { - if (!isset($cert[0]) || !\is_string($cert[0])) { - throw new InvalidArgumentException('Invalid cert request option'); - } - if (isset($cert[1])) { - if (!\is_string($cert[1])) { - throw new InvalidArgumentException('Invalid cert request option'); - } - $conf[\CURLOPT_SSLCERTPASSWD] = $cert[1]; - } - $cert = $cert[0]; - } - if (!\is_string($cert)) { - throw new InvalidArgumentException('Invalid cert request option'); - } - if (!\file_exists($cert)) { - throw new InvalidArgumentException(\sprintf('SSL certificate not found: %s', Psr7\DiagnosticValue::escape($cert))); - } - // OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files. - // see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html - $ext = pathinfo($cert, \PATHINFO_EXTENSION); - if ($certType === null && preg_match('#^(der|p12)$#iD', $ext)) { - $conf[\CURLOPT_SSLCERTTYPE] = Psr7\Utils::asciiToUpper($ext); - } - $conf[\CURLOPT_SSLCERT] = $cert; - } - - $sslKeyType = null; - if (isset($options['ssl_key_type'])) { - $sslKeyType = self::normalizeTlsFileType('ssl_key_type', $options['ssl_key_type']); - $conf[\CURLOPT_SSLKEYTYPE] = $sslKeyType; - } - - if (isset($options['ssl_key'])) { - if (\is_array($options['ssl_key'])) { - if (!isset($options['ssl_key'][0]) || !\is_string($options['ssl_key'][0])) { - throw new InvalidArgumentException('Invalid ssl_key request option'); - } - if (isset($options['ssl_key'][1])) { - if (!\is_string($options['ssl_key'][1])) { - throw new InvalidArgumentException('Invalid ssl_key request option'); - } - $conf[\CURLOPT_SSLKEYPASSWD] = $options['ssl_key'][1]; - } - $sslKey = $options['ssl_key'][0]; - } - - $sslKey = $sslKey ?? $options['ssl_key']; - - if (!\is_string($sslKey)) { - throw new InvalidArgumentException('Invalid ssl_key request option'); - } - - if (self::shouldValidateSslKeyFile($sslKeyType) && !\file_exists($sslKey)) { - throw new InvalidArgumentException(\sprintf('SSL private key not found: %s', Psr7\DiagnosticValue::escape($sslKey))); - } - $conf[\CURLOPT_SSLKEY] = $sslKey; - } - - $progress = $options['progress'] ?? null; - if ($progress !== null && !\is_callable($progress)) { - throw new InvalidArgumentException('progress client option must be callable'); - } - - // The streaming read callback (set by applyBody) aborts the upload on a - // body read failure by returning CURL_READFUNC_ABORT, but PHP ignores - // that integer return before 8.1.17/8.2.4. Install a progress callback - // so older PHP still has a cross-version abort path; the failure is - // classified from the stored request-body exception regardless of errno - // (a truncated request may reach the server first on those versions). - $abortsOnBodyReadFailure = isset($conf[\CURLOPT_READFUNCTION]); - - if ($progress !== null || $abortsOnBodyReadFailure) { - /** @var (callable(int, int, int, int): mixed)|null $progress */ - $conf[\CURLOPT_NOPROGRESS] = false; - $progressCallback = static function ($resource, $downloadSize, $downloaded, $uploadSize, $uploaded) use ($easy, $progress): int { - // Abort the transfer when the request body read failed (the - // cross-version abort path, since older PHP ignores the read - // callback's return). progressAborted is left unset so the - // failure is classified from the stored request-body exception. - if ($easy->bodyReadTimeoutException !== null || $easy->bodyReadException !== null) { - return 1; - } - - if ($progress === null) { - return 0; - } - - try { - if ($progress( - TransferByteCounter::progressValueToInt($downloadSize), - TransferByteCounter::progressValueToInt($downloaded), - TransferByteCounter::progressValueToInt($uploadSize), - TransferByteCounter::progressValueToInt($uploaded) - )) { - $easy->progressAborted = true; - - return 1; - } - - return 0; - } catch (\Throwable $e) { - $easy->progressException = $e; - - return 1; - } - }; - - if (\defined('CURLOPT_XFERINFOFUNCTION')) { - $conf[(int) \constant('CURLOPT_XFERINFOFUNCTION')] = $progressCallback; - } else { - $conf[\CURLOPT_PROGRESSFUNCTION] = $progressCallback; - } - } - - if (!empty($options['debug'])) { - $conf[\CURLOPT_STDERR] = Utils::debugResource($options['debug']); - $conf[\CURLOPT_VERBOSE] = true; - } - } - - private function applyTlsVersionRange( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array &$conf - ): void { - $options = $easy->options; - $cryptoMethod = $options['crypto_method'] ?? null; - $cryptoMethodMax = $options['crypto_method_max'] ?? null; - - if ($cryptoMethod === null && 'https' === $easy->request->getUri()->getScheme()) { - $cryptoMethod = \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; - } - - if ($cryptoMethod === null && $cryptoMethodMax === null) { - return; - } - - $protocolVersion = $easy->request->getProtocolVersion(); - $isHttp3 = '3' === $protocolVersion || '3.0' === $protocolVersion; - $isHttp2 = '2' === $protocolVersion || '2.0' === $protocolVersion; - - if (($isHttp2 || $isHttp3) && $cryptoMethodMax !== null && TlsVersion::ordinal('crypto_method_max', $cryptoMethodMax) < 12) { - throw new InvalidArgumentException( - 'Invalid crypto_method_max request option: HTTP/2 and HTTP/3 require TLS 1.2 or higher' - ); - } - - if (($isHttp2 || $isHttp3) && $cryptoMethod !== null && TlsVersion::ordinal('crypto_method', $cryptoMethod) < 12) { - $cryptoMethod = \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; - } - - TlsVersion::assertRange($cryptoMethod, $cryptoMethodMax); - - $sslVersion = $cryptoMethod === null - ? \CURL_SSLVERSION_DEFAULT - : self::curlMinSslVersion($easy, $cryptoMethod); - - if ($cryptoMethodMax !== null) { - $sslVersion |= self::curlMaxSslVersion($easy, $cryptoMethodMax); - } - - $conf[\CURLOPT_SSLVERSION] = $sslVersion; - } - - private static function curlMinSslVersion( - #[\SensitiveParameter] - EasyHandle $easy, - int $value - ): int { - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT) { - return \CURL_SSLVERSION_TLSv1_0; - } - - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT) { - return \CURL_SSLVERSION_TLSv1_1; - } - - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT) { - return \CURL_SSLVERSION_TLSv1_2; - } - - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT) { - if (!CurlVersion::supportsTls13()) { - throw new RequestException( - 'Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL', - $easy->request - ); - } - - return \CURL_SSLVERSION_TLSv1_3; - } - - throw new InvalidArgumentException('Invalid crypto_method request option: unknown version provided'); - } - - private static function curlMaxSslVersion( - #[\SensitiveParameter] - EasyHandle $easy, - int $value - ): int { - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT) { - return self::requireCurlMaxSslVersion($easy, 'CURL_SSLVERSION_MAX_TLSv1_0'); - } - - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT) { - return self::requireCurlMaxSslVersion($easy, 'CURL_SSLVERSION_MAX_TLSv1_1'); - } - - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT) { - return self::requireCurlMaxSslVersion($easy, 'CURL_SSLVERSION_MAX_TLSv1_2'); - } - - if ($value === \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT) { - return self::requireCurlMaxSslVersion($easy, 'CURL_SSLVERSION_MAX_TLSv1_3'); - } - - throw new InvalidArgumentException('Invalid crypto_method_max request option: unknown version provided'); - } - - private static function requireCurlMaxSslVersion( - #[\SensitiveParameter] - EasyHandle $easy, - string $constant - ): int { - if (\defined($constant)) { - /** @var int */ - return \constant($constant); - } - - throw new RequestException( - 'Invalid crypto_method_max request option: maximum TLS version control is not supported by your version of cURL', - $easy->request - ); - } - - /** - * This function ensures that a response was set on a transaction. If one - * was not set, then the request is retried if possible. This error - * typically means you are sending a payload, curl encountered a - * "Connection died, retrying a fresh connect" error, tried to rewind the - * stream, and then encountered a "necessary data rewind wasn't possible" - * error, causing the request to be sent through curl_multi_info_read() - * without an error status. - * - * @param callable(RequestInterface, array): PromiseInterface $handler - * - * @return PromiseInterface - */ - private static function retryFailedRewind( - callable $handler, - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array $ctx - ): PromiseInterface { - try { - // Only rewind if the body has been read from. - $body = $easy->request->getBody(); - if ($body->tell() > 0) { - $body->rewind(); - } - } catch (\Exception $e) { - $ctx['error'] = 'The connection unexpectedly failed without providing an error. The request would have been retried, but attempting to rewind the request body failed.'; - - return self::createRejection($easy, $ctx, $e); - } - - // Retry no more than 3 times before giving up. - if (!isset($easy->options['_curl_retries'])) { - $easy->options['_curl_retries'] = 1; - } elseif ($easy->options['_curl_retries'] == 2) { - $ctx['error'] = 'The cURL request was retried 3 times ' - .'and did not succeed. The most likely reason for the failure ' - .'is that cURL was unable to rewind the body of the request ' - .'and subsequent retries resulted in the same error. Turn on ' - .'the debug option to see what went wrong. See ' - .'https://bugs.php.net/bug.php?id=47204 for more information.'; - - return self::createRejection($easy, $ctx); - } else { - ++$easy->options['_curl_retries']; - } - - return $handler($easy->request, $easy->options); - } - - /** - * Parses validated trailer field lines into an associative array keyed by - * lowercased field name, preserving first-occurrence key order and wire - * value order. - * - * @param list $lines - * - * @return array> - */ - private static function headersFromTrailerLines(array $lines): array - { - $headers = []; - - foreach ($lines as $line) { - [$name, $value] = \explode(':', $line, 2); - $name = Psr7\Utils::asciiToLower(\trim($name, " \n\r\t\0\x0B")); - $headers[$name][] = \trim($value, " \n\r\t\0\x0B"); - } - - return $headers; - } - - private function createHeaderFn( - #[\SensitiveParameter] - EasyHandle $easy - ): callable { - if (isset($easy->options['on_headers'])) { - $onHeaders = $easy->options['on_headers']; - - if (!\is_callable($onHeaders)) { - throw new InvalidArgumentException('on_headers must be callable'); - } - } else { - $onHeaders = null; - } - - $startingResponse = false; - $collectingTrailers = false; - $retainTrailers = isset($easy->options['on_trailers']); - - return static function ($ch, string $h) use ( - $onHeaders, - $easy, - &$startingResponse, - &$collectingTrailers, - $retainTrailers - ): int { - $value = \trim($h, " \n\r\t\0\x0B"); - if ($h === "\r\n" || $h === "\n" || $h === "\r" || $h === '') { - if ($collectingTrailers) { - // A blank line ends the trailer section; the response has - // already been created. - return \strlen($h); - } - - $startingResponse = true; - - try { - $easy->createResponse(); - } catch (\Throwable $e) { - $easy->response = null; - $easy->createResponseException = $e; - - return -1; - } - - if ($easy->responseHeaderException !== null) { - return -1; - } - - if ($onHeaders !== null && $easy->response !== null) { - try { - $onHeaders($easy->response, $easy->request); - } catch (\Throwable $e) { - // Associate the exception with the handle and trigger - // a curl header write error by returning 0. - $easy->onHeadersException = $e; - - return -1; - } - } - } elseif ($startingResponse || $collectingTrailers) { - if ($easy->response !== null && !HeaderProcessor::isStatusLineCandidate($h)) { - // Trailer fields arrive through the header callback after - // the body; a new header block always begins with a status - // line. - $collectingTrailers = true; - - if ($retainTrailers && HeaderProcessor::isValidHeaderFieldLine($h)) { - $easy->trailers[] = $value; - } - } else { - $collectingTrailers = false; - $easy->trailers = []; - $easy->headers = [$value]; - } - - $startingResponse = false; - } else { - $easy->headers[] = $value; - } - - return \strlen($h); - }; - } - - public function __destruct() - { - try { - $this->doClose(false); - } catch (\Throwable $e) { - // Destructors must not throw. - } - } - - public function __unserialize(array $data): void - { - $this->closed = true; - $this->handles = []; - $this->shareHandle = null; - - throw new \LogicException(static::class.' should never be unserialized'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php deleted file mode 100644 index ddafa3dc7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php +++ /dev/null @@ -1,31 +0,0 @@ - true, - 'transport_sharing' => true, - ]; - - private CurlFactoryInterface $factory; - - private bool $ownsFactory; - - private bool $closed = false; - - private ?CurlShareHandleState $shareHandleState; - - /** - * Accepts an associative array of options: - * - * - handle_factory: Optional curl factory used to create cURL handles. - * - transport_sharing: Optional transport sharing mode. - * - * @param array{handle_factory?: ?CurlFactoryInterface, transport_sharing?: mixed} $options Array of options to use with the handler - */ - public function __construct(array $options = []) - { - foreach ($options as $name => $_) { - if (!isset(self::KNOWN_CONSTRUCTOR_OPTIONS[$name])) { - throw new InvalidArgumentException(\sprintf('Invalid CurlHandler constructor option "%s".', DiagnosticValue::escape((string) $name))); - } - } - - CurlShareHandleState::assertNoRequiredSharingCustomFactoryConflict($options, 'CurlHandler'); - $transportSharing = $options['transport_sharing'] ?? null; - $sharingMode = CurlShareHandleState::normalizeMode($transportSharing, 'transport_sharing'); - - if (\array_key_exists('handle_factory', $options) && $options['handle_factory'] !== null) { - $this->shareHandleState = null; - $this->factory = $options['handle_factory']; - $this->ownsFactory = false; - - return; - } - - $this->shareHandleState = $sharingMode !== TransportSharing::NONE - ? CurlShareHandleState::fromOption($transportSharing) - : null; - - $this->factory = $this->shareHandleState !== null - ? new CurlFactory(3, $this->shareHandleState->mode, $this->shareHandleState) - : new CurlFactory(3); - - $this->ownsFactory = true; - } - - /** - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - $this->assertOpen(); - HostValidator::assertRequestHost($request); - - if (isset($options['delay'])) { - \usleep((int) ($options['delay'] * 1000)); - } - - // A Multiplexing::NONE request option holds unconditionally here: - // the transfer runs alone during the blocking curl_exec(), and even - // under persistent transport sharing an in-use connection cannot be - // joined from another multi handle, so it never shares its - // connection with a concurrent transfer. - $easy = $this->factory->create($request, $options); - - \curl_exec($easy->handle); - $easy->errno = \curl_errno($easy->handle); - - return CurlFactory::finish($this, $easy, $this->factory); - } - - /** - * Closes native cURL resources owned by this handler. - * - * After closing, the handler is terminal and must not be reused. - */ - public function close(): void - { - $this->doClose(true); - } - - public function __destruct() - { - try { - $this->doClose(false); - } catch (\Throwable $e) { - // Destructors must not throw. - } - } - - public function __unserialize(array $data): void - { - $this->closed = true; - - throw new \LogicException(static::class.' should never be unserialized'); - } - - private function assertOpen(): void - { - if ($this->closed) { - // Programmer misuse (reusing a closed handler), not a transfer failure; - // intentionally a LogicException outside the GuzzleException hierarchy. - throw new \BadMethodCallException('Cannot use the cURL handler after it has been closed.'); - } - } - - private function doClose(bool $explicit): void - { - if ($this->closed) { - return; - } - - $this->closed = true; - - try { - if ($this->ownsFactory && $this->factory instanceof CurlFactory) { - $this->factory->close(); - } - } catch (\Throwable $e) { - if ($explicit) { - throw $e; - } - } finally { - $this->shareHandleState = null; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php deleted file mode 100644 index eafc553aa..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ /dev/null @@ -1,1632 +0,0 @@ - true, - 'max_host_connections' => true, - 'max_total_connections' => true, - 'multiplex' => true, - 'options' => true, - 'select_timeout' => true, - 'transport_sharing' => true, - ]; - - private const CONNECTION_CAP_OPTIONS = [ - 'max_host_connections' => 'CURLMOPT_MAX_HOST_CONNECTIONS', - 'max_total_connections' => 'CURLMOPT_MAX_TOTAL_CONNECTIONS', - ]; - - /** - * cURL options that isolate a transfer from foreign proxy tunnel - * connections. Failing to apply either one would fall open into - * credential-bearing connection reuse. - */ - private const PROXY_TUNNEL_ISOLATION_OPTIONS = [ - 'CURLOPT_FRESH_CONNECT', - 'CURLOPT_FORBID_REUSE', - ]; - - private CurlFactoryInterface $factory; - - private bool $ownsFactory; - - private ?CurlShareHandleState $shareHandleState; - - private float $selectTimeout; - - /** - * @var int Will be higher than 0 when `curl_multi_exec` is still running. - */ - private int $active = 0; - - /** - * @var array Request entry handles, indexed by handle id in `addRequest`. - * - * @see CurlMultiHandler::addRequest - */ - private array $handles = []; - - /** - * @var array An array of delay times, indexed by handle id in `addRequest`. - * - * @see CurlMultiHandler::addRequest - */ - private array $delays = []; - - /** - * @var array An associative array of CURLMOPT_* options and corresponding values for curl_multi_setopt() - */ - private array $options = []; - - /** - * @var bool Whether the "multiplex" constructor option disabled - * multiplexing on this handler's multi handle - */ - private bool $multiplexDisabled = false; - - /** - * @var resource|\CurlMultiHandle|null - */ - private $multiHandle; - - private bool $closed = false; - - private bool $closing = false; - - /** - * @var int Depth of nested guarded native operations (execution and - * handle removal, both of which can run user callbacks). A - * callback can re-enter tick(), and the nested frame must not - * clear the outer frame's guard; deferred work stays parked - * until the outermost frame unwinds. - */ - private int $multiExecDepth = 0; - - /** - * @var bool Guards finishDeferredWork() against re-entry from the - * guarded native removals it performs while flushing. - */ - private bool $finishingDeferredWork = false; - - /** - * @var array - */ - private array $deferredCancels = []; - - /** - * @var array Wait tokens of requests created from inside - * a cURL callback, keyed by handle id; native - * attachment is deferred until the outermost - * native execution unwinds. - */ - private array $deferredAdds = []; - - private bool $deferredClose = false; - - private bool $deferredCloseExplicit = false; - - /** - * @var string|null Owner signature of the proxy tunnels the multi handle's - * connection cache may hold - */ - private ?string $proxyTunnelOwner = null; - - /** @var array Count of attached transfers per proxy tunnel signature. */ - private array $activeProxyTunnelSignatures = []; - - /** @var array Maps an attached handle id to its proxy tunnel signature. */ - private array $activeProxyTunnelHandles = []; - - /** - * @var int Depth of nested processMessages() calls. Guards against - * multi-handle recreation re-entrancy from processMessages (a - * retried transfer re-invokes the handler) and keeps deferred - * work parked until the outermost message loop unwinds. - */ - private int $messageProcessingDepth = 0; - - /** - * This handler accepts the following options: - * - * - handle_factory: An optional factory used to create curl handles - * - transport_sharing: Optional transport sharing mode. - * - select_timeout: Optional timeout (in seconds) to block before timing - * out while selecting curl handles. Defaults to 1 second. - * - max_host_connections: Optional maximum concurrent connections per host. - * - max_total_connections: Optional maximum concurrent connections overall. - * - multiplex: Optional Multiplexing::NONE to disallow multiplexing on - * this handler's multi handle. The eager, wait, and required modes are - * request options, not handler options; Multiplexing::NONE is also - * conditionally accepted as a request option value. - * - options: An associative array of CURLMOPT_* options and - * corresponding values for curl_multi_setopt() - */ - public function __construct(array $options = []) - { - foreach ($options as $name => $_) { - if (!isset(self::KNOWN_CONSTRUCTOR_OPTIONS[$name])) { - throw new InvalidArgumentException(\sprintf('Invalid CurlMultiHandler constructor option "%s".', Psr7\DiagnosticValue::escape((string) $name))); - } - } - - $handlerMultiplex = $options['multiplex'] ?? null; - if (null !== $handlerMultiplex && Multiplexing::NONE !== $handlerMultiplex) { - if (\in_array($handlerMultiplex, [Multiplexing::EAGER, Multiplexing::WAIT, Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new InvalidArgumentException('The "multiplex" CurlMultiHandler option only accepts Multiplexing::NONE; the eager, wait, and required modes are request options.'); - } - - throw new InvalidArgumentException(\sprintf('The "multiplex" CurlMultiHandler option must be null or Multiplexing::NONE; received %s.', \get_debug_type($handlerMultiplex))); - } - $this->multiplexDisabled = null !== $handlerMultiplex; - - if ($this->multiplexDisabled && !\defined('CURLMOPT_PIPELINING')) { - // ext-curl only defines the constant when built against libcurl - // 7.16 or newer headers, and such builds compile out the matching - // curl_multi_setopt() case, so the guarantee cannot be applied. - throw new InvalidArgumentException('The "multiplex" CurlMultiHandler option requires CURLMOPT_PIPELINING, but it is not available in the installed PHP cURL extension.'); - } - - CurlShareHandleState::assertNoRequiredSharingCustomFactoryConflict($options, 'CurlMultiHandler'); - $transportSharing = $options['transport_sharing'] ?? null; - $sharingMode = CurlShareHandleState::normalizeMode($transportSharing, 'transport_sharing'); - - $selectTimeout = $options['select_timeout'] ?? 1.0; - Timeout::toMilliseconds($selectTimeout, 'select_timeout'); - $this->selectTimeout = (float) $selectTimeout; - - $multiOptions = $options['options'] ?? []; - if (!\is_array($multiOptions)) { - throw new InvalidArgumentException('options must be an array of cURL multi options'); - } - - $this->options = $multiOptions; - self::rejectConflictingCurlMultiOptions($this->options); - $this->addConnectionCapOptions($options); - - if ($this->multiplexDisabled) { - // CURLPIPE_NOTHING; the constant itself needs libcurl 7.43 - // headers, newer than the oldest supported runtimes. - $this->options[\CURLMOPT_PIPELINING] = 0; - } - - $connectionCapOption = self::firstConnectionCapOption($options); - if ($connectionCapOption !== null) { - $persistentShareState = $transportSharing instanceof CurlShareHandleState - && \in_array($sharingMode, [TransportSharing::PERSISTENT_PREFER, TransportSharing::PERSISTENT_REQUIRE], true); - - if ($persistentShareState || $sharingMode === TransportSharing::PERSISTENT_REQUIRE) { - throw new InvalidArgumentException(\sprintf('%s cannot be combined with persistent transport sharing because libcurl does not reliably apply connection caps to shared connection pools.', $connectionCapOption)); - } - - if ($sharingMode === TransportSharing::PERSISTENT_PREFER) { - // libcurl does not apply cURL multi connection caps to - // transfers using a shared connection pool, so the best - // honorable offer for preferred persistent sharing is a - // handler-lifetime share. - $transportSharing = TransportSharing::HANDLER_PREFER; - $sharingMode = TransportSharing::HANDLER_PREFER; - } - } - - if (\array_key_exists('handle_factory', $options) && $options['handle_factory'] !== null) { - $this->shareHandleState = null; - $this->factory = $options['handle_factory']; - $this->ownsFactory = false; - } else { - $this->shareHandleState = $sharingMode !== TransportSharing::NONE - ? CurlShareHandleState::fromOption($transportSharing) - : null; - - $this->factory = $this->shareHandleState !== null - ? new CurlFactory(50, $this->shareHandleState->mode, $this->shareHandleState) - : new CurlFactory(50); - - $this->ownsFactory = true; - } - } - - public function __destruct() - { - try { - $this->doClose(false); - } catch (\Throwable $e) { - // Destructors must not throw. - } - } - - public function __unserialize(array $data): void - { - $this->closed = true; - - throw new \LogicException(static::class.' should never be unserialized'); - } - - /** - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - $this->assertOpen(); - HostValidator::assertRequestHost($request); - - $easy = $this->factory->create($request, $options); - - try { - $this->rejectDisabledMultiplexConflict($easy, $options); - $this->applyMultiplexNone($easy, $options); - $this->applyProxyTunnelOwnership($easy); - } catch (\Throwable $e) { - try { - $this->factory->release($easy); - } catch (\Throwable $releaseFailure) { - // Preserve the original failure. - } - - throw $e; - } - - $id = (int) $easy->handle; - - $waitToken = new \stdClass(); - - $promise = null; - /** @var Promise $promise */ - $promise = new Promise( - function () use ($id, $waitToken, $easy, &$promise): void { - // Waiting cannot drive native cURL while a callback has the - // multi handle busy; fail the wait promptly instead of - // self-deadlocking. - $stalled = $this->multiExecDepth > 0 - ? $this->failNestedWait($id, $waitToken) - : $this->executeUntil($id, $waitToken); - - // Settling can be queued, and guzzlehttp/promises drains the - // queue before deciding a wait function achieved nothing. - P\Utils::queue()->run(); - - // Never null: assigned below before any wait can invoke this. - /** @var Promise $promise */ - if (!P\Is::pending($promise)) { - return; - } - - // Neither path guarantees the transfer settled, and returning - // while pending makes guzzlehttp/promises reject with a bare - // string naming nothing. - $message = \sprintf('Waiting on cURL multi handler transfer %d cannot make progress (%s).', $id, $stalled); - - // The entry is gone, so the easy handle is the only route to - // a response that already arrived. - $response = $easy->response; - $failure = $response !== null - ? new ResponseException($message, $easy->request, $response) - : new RequestException($message, $easy->request); - - $promise->reject($failure); - }, - function () use ($id, $waitToken): void { - $this->cancel($id, $waitToken); - } - ); - - $entry = ['easy' => $easy, 'deferred' => $promise, 'wait_token' => $waitToken]; - try { - $this->addRequest($entry); - } catch (\Throwable $e) { - throw $this->discardPendingRequest($id, $entry, $e); - } - - return $promise; - } - - /** - * The "multiplex" request option sets CURLOPT_PIPEWAIT, which libcurl - * ignores entirely when the multi handle disallows multiplexing, so an - * explicit request for multiplexing on a handler configured with - * Multiplexing::NONE is a configuration error. The required family - * conflicts marker-independently: a required guarantee on such a handler - * is contradictory even when the transfer would not wait. The default - * WAIT mode adapts instead of conflicting: the handler option wins and - * nothing waits. - */ - private function rejectDisabledMultiplexConflict( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array $options - ): void { - if (!$this->multiplexDisabled) { - return; - } - - $multiplex = $options['multiplex'] ?? null; - - if (Multiplexing::WAIT === $multiplex && !$easy->usesPipewait) { - // Explicit wait only conflicts when the transfer would actually - // wait; an HTTP/1.1 wait request never sets the marker. - return; - } - - if (!\in_array($multiplex, [Multiplexing::WAIT, Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - return; - } - - throw new InvalidArgumentException('The "multiplex" request option cannot be combined with a CurlMultiHandler whose "multiplex" option is Multiplexing::NONE; remove the handler option or set the request option to "eager".'); - } - - /** - * A Multiplexing::NONE request option is a sole-use guarantee: the - * transfer must not share its connection with any concurrent transfer. - * It holds structurally on a handler whose "multiplex" option is - * Multiplexing::NONE, and for HTTP/1.x transfers, which never join a - * multiplexed connection and open connections nothing can join. An - * HTTP/2 or HTTP/3 request on a handler that multiplexes is rejected, - * as is any configuration under which the guarantee cannot be verified - * (custom handle factories control the native handle), cannot be - * hardened (challenge-response authentication retries and Expect - * 417 retries re-enter connection selection as internal follows, which - * disarm CURLOPT_FRESH_CONNECT), or must not be hardened (required - * persistent sharing forbids fresh connections). On runtimes whose - * matcher can hand an HTTP/1.x transfer an idle multiplexed connection - * (below libcurl 7.77.0, and 8.11.0-8.12.1), accepted transfers force a - * fresh connection. - */ - private function applyMultiplexNone( - #[\SensitiveParameter] - EasyHandle $easy, - #[\SensitiveParameter] - array $options - ): void { - if (Multiplexing::NONE !== ($options['multiplex'] ?? null) || $this->multiplexDisabled) { - return; - } - - if (!$this->ownsFactory) { - throw new InvalidArgumentException('The "multiplex" request option can only be Multiplexing::NONE on a CurlMultiHandler with a custom "handle_factory" when the handler\'s own "multiplex" option is Multiplexing::NONE, because the guarantee is enforced against the native easy handle the factory controls.'); - } - - $version = $easy->request->getProtocolVersion(); - if ('1.0' !== $version && '1.1' !== $version) { - throw new InvalidArgumentException('The "multiplex" request option can only be Multiplexing::NONE for an HTTP/1.x request on a CurlMultiHandler that permits multiplexing; set the "multiplex" client or CurlMultiHandler constructor option to Multiplexing::NONE to disable multiplexing for every transfer, or send the request with its "version" option set to "1.1".'); - } - - if (null !== $this->shareHandleState && TransportSharing::PERSISTENT_REQUIRE === $this->shareHandleState->mode) { - // The matcher-window hardening below may force a fresh - // connection, which required persistent sharing forbids because - // it disables connection reuse (CurlFactory applies the same - // rule to the raw option); rejected on every runtime so - // acceptance stays version-independent. - throw new InvalidArgumentException('The "multiplex" request option cannot be Multiplexing::NONE on a CurlMultiHandler that permits multiplexing and requires persistent transport sharing; set the "multiplex" client or CurlMultiHandler constructor option to Multiplexing::NONE, or use TransportSharing::PERSISTENT_PREFER.'); - } - - if (\defined('CURLOPT_HTTPAUTH') - && isset($options['curl']) - && \is_array($options['curl']) - && \array_key_exists((int) \constant('CURLOPT_HTTPAUTH'), $options['curl']) - ) { - // Key presence alone conflicts: challenge-response retries are - // libcurl-internal follows, which disarm CURLOPT_FRESH_CONNECT - // (reuse_fresh && !this_is_a_follow), so the hardening below - // cannot cover them. - throw new InvalidArgumentException('The "multiplex" request option cannot be Multiplexing::NONE combined with the raw CURLOPT_HTTPAUTH cURL option on a CurlMultiHandler that permits multiplexing; remove the raw option, or set the "multiplex" client or CurlMultiHandler constructor option to Multiplexing::NONE.'); - } - - if (Psr7\Utils::caselessContains($easy->request->getHeaderLine('Expect'), '100-continue')) { - // libcurl arms its Expect handling by a caseless substring scan - // of the header value (Curl_compareheader), so any value - // containing 100-continue can make a 417 response retry as an - // internal follow, which disarms CURLOPT_FRESH_CONNECT; requests - // without the header are safe because the factory suppresses - // libcurl's automatic Expect. - throw new InvalidArgumentException('The "multiplex" request option cannot be Multiplexing::NONE for a request carrying an "Expect: 100-continue" header on a CurlMultiHandler that permits multiplexing; remove the explicitly supplied "Expect" header, set the "expect" request option to false to prevent it being added automatically, or set the "multiplex" client or CurlMultiHandler constructor option to Multiplexing::NONE.'); - } - - if (CurlVersion::supportsHttpVersionReuseMatching()) { - return; - } - - // Unqualified curl_setopt so the test bootstrap shadow records it. - if (true !== curl_setopt($easy->handle, \CURLOPT_FRESH_CONNECT, true)) { - // The hardening is the guarantee on these runtimes; failing to - // apply it must fail closed, mirroring applyCurlOptions(). - throw new InvalidArgumentException('Unable to set cURL option CURLOPT_FRESH_CONNECT.'); - } - } - - /** - * @param array $options - */ - private static function rejectConflictingCurlMultiOptions(array $options): void - { - if ($options === []) { - return; - } - - $conflictingOptions = self::conflictingCurlMultiOptions(); - foreach ($options as $option => $_) { - if (\array_key_exists($option, $conflictingOptions)) { - throw new InvalidArgumentException(\sprintf('Passing %s in the cURL multi handler "options" is not supported. Use %s instead.', self::formatCurlMultiOption($option), $conflictingOptions[$option])); - } - } - } - - /** - * @param array $options - */ - private static function firstConnectionCapOption(array $options): ?string - { - foreach (self::CONNECTION_CAP_OPTIONS as $name => $_) { - if (($options[$name] ?? null) !== null) { - return $name; - } - } - - return null; - } - - /** - * @param array $options - */ - private function addConnectionCapOptions(array $options): void - { - foreach (self::CONNECTION_CAP_OPTIONS as $name => $constant) { - $value = $options[$name] ?? null; - if ($value === null) { - continue; - } - - if (!\is_int($value) || $value < 1) { - throw new InvalidArgumentException(\sprintf('%s must be a positive integer.', $name)); - } - - if (!\defined($constant)) { - throw new InvalidArgumentException(\sprintf('%s requires %s, but it is not available in the installed PHP cURL extension.', $name, $constant)); - } - - $option = \constant($constant); - if (\array_key_exists($option, $this->options)) { - throw new InvalidArgumentException(\sprintf('%s conflicts with a %s entry in the "options" array.', $name, $constant)); - } - - $this->options[$option] = $value; - } - } - - /** - * @param int|string $option - */ - private static function formatCurlMultiOption($option): string - { - if (!\is_int($option)) { - return \sprintf('"%s"', Psr7\DiagnosticValue::escape((string) $option)); - } - - static $names = null; - - if (null === $names) { - $names = []; - foreach (\get_defined_constants(true)['curl'] ?? [] as $name => $value) { - if (\is_int($value) && \strpos($name, 'CURLMOPT_') === 0 && !isset($names[$value])) { - $names[$value] = $name; - } - } - } - - if (isset($names[$option])) { - return \sprintf('%s (%d)', $names[$option], $option); - } - - return (string) $option; - } - - /** - * @return array - */ - private static function conflictingCurlMultiOptions(): array - { - static $options = null; - - if ($options !== null) { - return $options; - } - - $options = []; - - self::addConflictingCurlMultiOption($options, 'CURLMOPT_MAX_HOST_CONNECTIONS', 'the "max_host_connections" client option or cURL multi handler option'); - self::addConflictingCurlMultiOption($options, 'CURLMOPT_MAX_TOTAL_CONNECTIONS', 'the "max_total_connections" client option or cURL multi handler option'); - self::addConflictingCurlMultiOption($options, 'CURLMOPT_PIPELINING', 'Multiplexing::NONE via the "multiplex" cURL multi handler or client option to disable multiplexing, or remove the raw option for the runtime default (multiplexing defaults on from libcurl 7.62, except 7.65.0 and 7.65.1)'); - - return $options; - } - - /** - * @param array $options - */ - private static function addConflictingCurlMultiOption(array &$options, string $constant, string $replacement): void - { - if (!\defined($constant)) { - return; - } - - $value = \constant($constant); - if (\is_int($value)) { - $options[$value] = $replacement; - } - } - - /** - * Isolates the connection cache when the request's proxy tunnel section - * differs from the one the multi handle's cache may already hold. - */ - private function applyProxyTunnelOwnership( - #[\SensitiveParameter] - EasyHandle $easy - ): void { - $signature = $easy->proxyTunnelSignature; - if ($signature === null || $signature === $this->proxyTunnelOwner) { - return; - } - - if ($this->proxyTunnelOwner === null) { - // No in-domain transfer has ever run on this multi handle: latch - // the owner without destroying pooled direct connections. - $this->proxyTunnelOwner = $signature; - - return; - } - - if ( - $this->handles === [] - && 0 === $this->multiExecDepth - && 0 === $this->messageProcessingDepth - && $this->deferredCancels === [] - && !$this->deferredClose - ) { - // Idle: hand the connection cache over by recreating the multi - // handle. getMultiHandle() lazily re-initializes it (re-applying - // the CURLMOPT_* options) on the next access. - if ($this->multiHandle !== null) { - \curl_multi_close($this->multiHandle); - $this->multiHandle = null; - } - $this->proxyTunnelOwner = $signature; - - return; - } - - // Busy: isolate this transfer from the owner's pooled tunnels. - $this->isolateProxyTunnelTransfer($easy); - } - - private function addHandleToMulti( - int $id, - #[\SensitiveParameter] - EasyHandle $easy - ): void { - $this->isolateFromForeignActiveProxyTunnel($easy); - - $multiHandle = $this->getMultiHandle(); - - // Unqualified curl_multi_add_handle so the test bootstrap shadow can - // override the result. - $result = curl_multi_add_handle($multiHandle, $easy->handle); - - if (\CURLM_OK !== $result) { - if (\PHP_VERSION_ID < 80226 || (\PHP_VERSION_ID >= 80300 && \PHP_VERSION_ID < 80314)) { - // Before PHP 8.2.26 and 8.3.14, ext-curl kept the easy handle - // in its multi bookkeeping even when the native add failed - // (https://github.com/php/php-src/pull/16302); remove it so - // the handle can be disposed safely. - \curl_multi_remove_handle($multiHandle, $easy->handle); - } - - throw new RequestException(\sprintf('Unable to add the cURL handle to the cURL multi handler: %s (%d).', (string) \curl_multi_strerror($result), $result), $easy->request); - } - - $this->markProxyTunnelActive($id, $easy); - - if (isset($this->handles[$id])) { - $this->handles[$id]['attached'] = true; - } - } - - private function isolateFromForeignActiveProxyTunnel( - #[\SensitiveParameter] - EasyHandle $easy - ): void { - $signature = $easy->proxyTunnelSignature; - - if ($signature === null || $this->activeProxyTunnelSignatures === []) { - return; - } - - if (\count($this->activeProxyTunnelSignatures) === 1 && isset($this->activeProxyTunnelSignatures[$signature])) { - return; - } - - $this->isolateProxyTunnelTransfer($easy); - } - - private function isolateProxyTunnelTransfer( - #[\SensitiveParameter] - EasyHandle $easy - ): void { - foreach (self::PROXY_TUNNEL_ISOLATION_OPTIONS as $name) { - try { - // Unqualified curl_setopt so the test bootstrap shadow records it. - $applied = curl_setopt($easy->handle, (int) \constant($name), true); - } catch (\Throwable $e) { - throw new RequestException(self::proxyTunnelIsolationFailureMessage($name), $easy->request, 0, $e); - } - - if (true !== $applied) { - throw new RequestException(self::proxyTunnelIsolationFailureMessage($name), $easy->request); - } - } - } - - private static function proxyTunnelIsolationFailureMessage(string $name): string - { - return \sprintf('Unable to apply the %s cURL option required to isolate the transfer from foreign proxy tunnel connections.', $name); - } - - private function markProxyTunnelActive(int $id, EasyHandle $easy): void - { - $signature = $easy->proxyTunnelSignature; - if ($signature === null) { - return; - } - - if (isset($this->activeProxyTunnelHandles[$id])) { - if ($this->activeProxyTunnelHandles[$id] === $signature) { - return; - } - - $this->unmarkProxyTunnelActiveById($id); - } - - $this->activeProxyTunnelHandles[$id] = $signature; - $this->activeProxyTunnelSignatures[$signature] = ($this->activeProxyTunnelSignatures[$signature] ?? 0) + 1; - } - - private function unmarkProxyTunnelActiveById(int $id): void - { - if (!isset($this->activeProxyTunnelHandles[$id])) { - return; - } - - $signature = $this->activeProxyTunnelHandles[$id]; - unset($this->activeProxyTunnelHandles[$id]); - - if (!isset($this->activeProxyTunnelSignatures[$signature])) { - return; - } - - --$this->activeProxyTunnelSignatures[$signature]; - - if ($this->activeProxyTunnelSignatures[$signature] <= 0) { - unset($this->activeProxyTunnelSignatures[$signature]); - } - } - - /** - * Ticks the curl event loop. - */ - public function tick(): void - { - $this->tickFor(null, null); - } - - /** - * Ticks the curl event loop, returning before the blocking select if the - * targeted transfer has settled, been canceled, or been replaced by a - * request that reused its native handle ID. - */ - private function tickFor(?int $targetId, ?object $waitToken): void - { - $this->assertOpen(); - - // Add any delayed handles if needed. Attachment is skipped while a - // callback has native execution busy; the outer frame attaches due - // transfers once it unwinds. - if ($this->delays && 0 === $this->multiExecDepth) { - $currentTime = Clock::now(); - foreach ($this->delays as $id => $delay) { - if ($currentTime >= $delay) { - $entry = $this->handles[$id]; - unset($this->delays[$id]); - - try { - $this->addHandleToMulti($id, $entry['easy']); - } catch (\Throwable $e) { - $rejection = $this->discardPendingRequest($id, $entry, $e); - if (P\Is::pending($entry['deferred'])) { - $entry['deferred']->reject($rejection); - } - } - } - } - } - - // Run curl_multi_exec in the queue to enable other async tasks to - // run, surface completions, and drain any work they queued so a - // ready cancellation or new transfer is not held behind the select. - do { - P\Utils::queue()->add(Closure::fromCallable([$this, 'tickInQueue'])); - - // Step through the task queue which may add additional requests. - P\Utils::queue()->run(); - - if ($this->multiExecDepth > 0) { - // A cURL callback re-entered the handler while native - // execution is running; the outer frame drives native cURL - // once it unwinds. - return; - } - - if ($this->closed || $this->closing || !$this->hasMultiHandle()) { - return; - } - - $this->processMessages(); - - if ($this->closed || $this->closing || !$this->hasMultiHandle()) { - return; - } - } while (!P\Utils::queue()->isEmpty()); - - if ($targetId !== null && !$this->hasRequest($targetId, $waitToken)) { - return; - } - - if ($this->active && \curl_multi_select($this->getMultiHandle(), $this->effectiveSelectTimeout()) === -1) { - // Perform a usleep if a select returns -1. - // See: https://bugs.php.net/bug.php?id=61141 - \usleep(250); - } - - do { - $exec = $this->executeMulti(); - - if ($this->closed || $this->closing || !$this->hasMultiHandle()) { - return; - } - - // Prevent busy looping for slow HTTP requests. - if ($exec === \CURLM_CALL_MULTI_PERFORM) { - \curl_multi_select($this->getMultiHandle(), $this->effectiveSelectTimeout()); - } - } while ($exec === \CURLM_CALL_MULTI_PERFORM); - - $this->processMessages(); - } - - /** - * Runs \curl_multi_exec() inside the event loop, to prevent busy looping - */ - private function tickInQueue(): void - { - if ($this->multiExecDepth > 0) { - // A cURL callback re-entered the handler while native execution - // is running; the outer frame drives native cURL once it unwinds. - return; - } - - if ($this->closed || $this->closing || !$this->hasMultiHandle()) { - return; - } - - $exec = $this->executeMulti(); - - if ($this->closed || $this->closing || !$this->hasMultiHandle()) { - return; - } - - if ($exec === \CURLM_CALL_MULTI_PERFORM) { - \curl_multi_select($this->getMultiHandle(), 0); - P\Utils::queue()->add(Closure::fromCallable([$this, 'tickInQueue'])); - } - } - - /** - * Runs until all outstanding connections have completed. - */ - public function execute(): void - { - $this->assertOpen(); - - if ($this->multiExecDepth > 0) { - // Native cURL cannot be driven while a callback has it busy, so - // the loop would spin without ever progressing. - throw new \LogicException('Cannot run the cURL multi event loop from inside a cURL callback; the callback must return before transfers can progress.'); - } - - $queue = P\Utils::queue(); - - while (!$this->closed && !$this->closing && ($this->handles || !$queue->isEmpty())) { - // If there are no transfers, then sleep for the next delay, - // unless ready queue work could change what is pending. - if (!$this->active && $this->delays && $queue->isEmpty()) { - \usleep($this->timeToNext()); - } - $this->tick(); - } - } - - /** - * Runs the event loop until the given transfer has finished, so waiting - * on a promise does not wait for every other transfer on the handler - * like execute() does. - * - * The native cURL handle ID can be reused by a request created from a - * completion callback, so the wait token guards against waiting on an - * unrelated transfer that inherited the ID. - * - * @return string Why waiting stopped, for the caller to report when the - * transfer did not settle - */ - private function executeUntil(int $id, object $waitToken): string - { - $this->assertOpen(); - - $queue = P\Utils::queue(); - - while ( - !$this->closed - && !$this->closing - && $this->hasRequest($id, $waitToken) - ) { - // If the transfer is delayed, then sleep until it is due, unless - // ready queue work could cancel or replace it first. - if (!$this->active && isset($this->delays[$id]) && $queue->isEmpty()) { - \usleep($this->timeToNext()); - } - $this->tickFor($id, $waitToken); - } - - // Sample before the drain below, which can add or remove an entry - // under this ID and so rewrite the answer. - $stalled = $this->describeStalledWait($id, $waitToken); - - if (!$this->closed && !$this->closing && !$queue->isEmpty()) { - $queue->run(); - } - - return $stalled; - } - - /** - * Describes the state that stopped a wait, for the fallback rejection in - * __invoke(). Only meaningful when the transfer did not settle. - */ - private function describeStalledWait(int $id, object $waitToken): string - { - if ($this->hasRequest($id, $waitToken)) { - // Reached when waiting stopped for another reason, such as the - // handler being closed underneath it. - return 'the handler stopped driving it while it was still tracked'; - } - - return isset($this->handles[$id]) - ? 'its native cURL handle ID was reused by another request' - : 'its entry was removed without settling'; - } - - /** - * Checks that the request with the given handle ID is still pending and, - * when a wait token is given, has not been replaced by a request that - * reused the ID. - */ - private function hasRequest(int $id, ?object $waitToken = null): bool - { - if (!isset($this->handles[$id])) { - return false; - } - - return $waitToken === null || ($this->handles[$id]['wait_token'] ?? null) === $waitToken; - } - - /** - * Closes native cURL resources owned by this handler. - * - * Pending transfers are rejected with HandlerClosedException. After - * closing, the handler is terminal and must not be reused. - */ - public function close(): void - { - $this->doClose(true); - } - - private function assertOpen(): void - { - if ($this->closed || $this->closing) { - // Programmer misuse (reusing a closed handler), not a transfer failure; - // intentionally a LogicException outside the GuzzleException hierarchy. - throw new \BadMethodCallException('Cannot use the cURL multi handler after it has been closed.'); - } - } - - private function doClose(bool $explicit): void - { - if ($this->closed || $this->closing) { - return; - } - - $this->closing = true; - $failure = null; - - if ($this->multiExecDepth > 0 || $this->messageProcessingDepth > 0) { - $this->deferClose($explicit, $failure); - - if ($explicit && $failure !== null) { - throw $failure; - } - - return; - } - - try { - $this->cleanupPendingTransfers($explicit, $failure); - $this->closeMultiHandle($failure); - $this->closeOwnedFactory($failure); - } finally { - $this->finishClose(); - } - - if ($explicit && $failure !== null) { - throw $failure; - } - } - - private function deferClose(bool $explicit, ?\Throwable &$failure): void - { - $this->deferredClose = true; - $this->deferredCloseExplicit = $this->deferredCloseExplicit || $explicit; - - $entries = $this->handles; - - $this->handles = []; - $this->delays = []; - $this->deferredAdds = []; - - foreach ($entries as $id => $entry) { - $this->deferredCancels[$id] = [ - 'easy' => $entry['easy'], - 'attached' => !empty($entry['attached']), - ]; - - if ($explicit && P\Is::pending($entry['deferred'])) { - $this->captureFailure($failure, function () use ($entry): void { - $entry['deferred']->reject(new HandlerClosedException('The cURL multi handler was closed before the transfer completed.', $entry['easy']->request)); - }); - } - } - } - - private function finishClose(): void - { - $this->handles = []; - $this->delays = []; - $this->deferredCancels = []; - $this->deferredAdds = []; - $this->activeProxyTunnelSignatures = []; - $this->activeProxyTunnelHandles = []; - $this->active = 0; - $this->shareHandleState = null; - $this->deferredClose = false; - $this->deferredCloseExplicit = false; - $this->closed = true; - $this->closing = false; - } - - private function captureFailure(?\Throwable &$failure, callable $callback): void - { - try { - $callback(); - } catch (\Throwable $e) { - if ($failure === null) { - $failure = $e; - } - } - } - - /** - * @param array{easy: EasyHandle, deferred: Promise, wait_token: object} $entry - */ - private function discardPendingRequest(int $id, array $entry, \Throwable $failure): \Throwable - { - unset($this->handles[$id], $this->delays[$id], $this->deferredAdds[$id]); - - try { - $this->disposeEasyHandle($entry['easy']); - } catch (\Throwable $e) { - // Preserve the original attach failure. - } - - return $failure; - } - - private function cleanupPendingTransfers(bool $reject, ?\Throwable &$failure): void - { - $entries = $this->handles; - - $this->handles = []; - $this->delays = []; - $this->deferredAdds = []; - - foreach ($entries as $id => $entry) { - $easy = $entry['easy']; - $attached = !empty($entry['attached']); - - if ($attached && $this->hasMultiHandle() && self::hasEasyHandle($easy)) { - $this->captureFailure($failure, function () use ($id, $easy): void { - $this->removeHandleFromMulti($id, $easy->handle); - }); - } - - if ($reject && P\Is::pending($entry['deferred'])) { - $this->captureFailure($failure, function () use ($entry): void { - $entry['deferred']->reject(new HandlerClosedException('The cURL multi handler was closed before the transfer completed.', $entry['easy']->request)); - }); - } - - $this->captureFailure($failure, function () use ($easy): void { - $this->disposeEasyHandle($easy); - }); - } - } - - private function closeMultiHandle(?\Throwable &$failure): void - { - if ($this->multiHandle === null) { - return; - } - - $multiHandle = $this->multiHandle; - - $this->captureFailure($failure, function () use ($multiHandle): void { - try { - \curl_multi_close($multiHandle); - } finally { - $this->multiHandle = null; - } - }); - } - - private function closeOwnedFactory(?\Throwable &$failure): void - { - $factory = $this->factory; - if (!$this->ownsFactory || !$factory instanceof CurlFactory) { - return; - } - - $this->captureFailure($failure, static function () use ($factory): void { - $factory->close(); - }); - } - - /** - * @phpstan-impure - */ - private function executeMulti(): int - { - ++$this->multiExecDepth; - - try { - return \curl_multi_exec($this->getMultiHandle(), $this->active); - } finally { - --$this->multiExecDepth; - $this->finishDeferredWork(); - } - } - - /** - * Flushes attachments deferred while the multi handle was busy executing - * transfers or removing a handle, and cancels and a close deferred while - * it was executing transfers or processing completion messages. - */ - private function finishDeferredWork(): void - { - if ($this->multiExecDepth > 0 || $this->finishingDeferredWork) { - // A nested frame (a completion callback re-entered the handler) - // must not flush while an outer frame is still using the multi - // handle; the outermost frame flushes once it unwinds. - return; - } - - $this->finishingDeferredWork = true; - - try { - if (!$this->closed && !$this->closing) { - // Deferred adds only need native execution to be idle; a - // completion callback may drive and wait on them while the - // outermost message loop is still active. - $this->flushDeferredAdds(); - } - - if ($this->messageProcessingDepth > 0) { - // Cancels and a deferred close must wait for the outermost - // message loop to unwind. - return; - } - - $failure = null; - - // Removing a cancelled transfer runs its final progress update, - // whose callback can cancel other transfers, create requests, or - // close the handler; drain until no deferred work remains. - do { - $this->cleanupDeferredCancels($failure); - - if (!$this->closed && !$this->closing) { - $this->flushDeferredAdds(); - } - } while ($this->deferredCancels !== [] || (!$this->closed && !$this->closing && $this->deferredAdds !== [])); - - if ($this->deferredClose) { - $explicit = $this->deferredCloseExplicit; - - try { - $this->closeMultiHandle($failure); - $this->closeOwnedFactory($failure); - } finally { - $this->finishClose(); - } - - if ($explicit && $failure !== null) { - throw $failure; - } - - return; - } - - if ($failure !== null) { - throw $failure; - } - } finally { - $this->finishingDeferredWork = false; - } - } - - /** - * Attaches requests whose native attachment was deferred because they - * were created from inside a cURL callback. - */ - private function flushDeferredAdds(): void - { - if ($this->deferredAdds === []) { - return; - } - - $adds = $this->deferredAdds; - $this->deferredAdds = []; - - foreach ($adds as $id => $token) { - if (!$this->hasRequest($id, $token)) { - // Cancelled or replaced while the attachment was deferred. - continue; - } - - $entry = $this->handles[$id]; - - try { - $this->addHandleToMulti($id, $entry['easy']); - } catch (\Throwable $e) { - // The promise has already escaped, so reject it rather than - // throw. User code may have settled it directly; a settled - // promise must not abort the rest of the snapshot. - $rejection = $this->discardPendingRequest($id, $entry, $e); - if (P\Is::pending($entry['deferred'])) { - $entry['deferred']->reject($rejection); - } - } - } - } - - /** - * Fails a synchronous wait attempted from inside a cURL callback, where - * native execution cannot progress until the callback returns. - * - * @return string Why waiting stopped, for the caller to report when this - * method left the transfer unsettled - */ - private function failNestedWait(int $id, object $token): string - { - $stalled = $this->describeStalledWait($id, $token); - - if (!$this->hasRequest($id, $token)) { - return $stalled; - } - - $entry = $this->handles[$id]; - $message = 'Cannot synchronously wait for a transfer from inside a cURL callback on the same cURL multi handler; the callback must return before the transfer can progress.'; - $response = $entry['easy']->response; - $failure = $response !== null - ? new ResponseException($message, $entry['easy']->request, $response) - : new RequestException($message, $entry['easy']->request); - - if (!empty($entry['attached'])) { - // Native removal must wait until the outermost execution unwinds. - unset($this->handles[$id], $this->delays[$id], $this->deferredAdds[$id]); - $this->deferredCancels[$id] = ['easy' => $entry['easy'], 'attached' => true]; - } else { - $this->discardPendingRequest($id, $entry, $failure); - } - - $entry['deferred']->reject($failure); - - return $stalled; - } - - private function disposeEasyHandle( - #[\SensitiveParameter] - EasyHandle $easy - ): void { - if (!self::hasEasyHandle($easy)) { - return; - } - - $handle = $easy->handle; - unset($easy->handle); - - $failure = null; - - try { - $this->clearEasyHandleCallbacks($handle); - } catch (\Throwable $e) { - $failure = $e; - } - - try { - if (PHP_VERSION_ID < 80000 && \is_resource($handle)) { - \curl_close($handle); - } - } catch (\Throwable $e) { - if ($failure === null) { - $failure = $e; - } - } - - if ($failure !== null) { - throw $failure; - } - } - - /** - * @param resource|\CurlHandle $handle - */ - private function clearEasyHandleCallbacks($handle): void - { - curl_setopt($handle, \CURLOPT_HEADERFUNCTION, null); - curl_setopt($handle, \CURLOPT_READFUNCTION, null); - curl_setopt($handle, \CURLOPT_WRITEFUNCTION, null); - curl_setopt($handle, \CURLOPT_PROGRESSFUNCTION, null); - - if (\defined('CURLOPT_PREREQFUNCTION')) { - curl_setopt($handle, (int) \constant('CURLOPT_PREREQFUNCTION'), null); - } - - if (\defined('CURLOPT_XFERINFOFUNCTION')) { - curl_setopt($handle, (int) \constant('CURLOPT_XFERINFOFUNCTION'), null); - } - } - - /** - * @param resource|\CurlHandle $handle - */ - private function removeHandleFromMulti(int $id, $handle): void - { - // Removing a still-running transfer performs a final progress update - // that can run a user progress callback, so removal is guarded like - // native execution. - ++$this->multiExecDepth; - - try { - \curl_multi_remove_handle($this->getMultiHandle(), $handle); - } finally { - --$this->multiExecDepth; - $this->unmarkProxyTunnelActiveById($id); - $this->finishDeferredWork(); - } - } - - private function hasMultiHandle(): bool - { - return $this->multiHandle !== null; - } - - private static function hasEasyHandle(EasyHandle $easy): bool - { - return \array_key_exists('handle', \get_object_vars($easy)); - } - - private function addRequest( - #[\SensitiveParameter] - array $entry - ): void { - $easy = $entry['easy']; - $id = (int) $easy->handle; - $entry['attached'] = false; - - $displaced = $this->handles[$id] ?? null; - if ($displaced !== null) { - // Never silently discard a tracked entry; settle it first. - unset($this->handles[$id], $this->delays[$id], $this->deferredAdds[$id]); - if (P\Is::pending($displaced['deferred'])) { - $message = \sprintf('cURL multi handler transfer %d was displaced by another request that reused its native cURL handle ID.', $id); - $response = $displaced['easy']->response; - $failure = $response !== null - ? new ResponseException($message, $displaced['easy']->request, $response) - : new RequestException($message, $displaced['easy']->request); - $displaced['deferred']->reject($failure); - } - } - - $this->handles[$id] = $entry; - - if (!empty($easy->options['delay'])) { - $this->delays[$id] = Clock::now() + ($easy->options['delay'] / 1000); - } elseif ($this->multiExecDepth > 0) { - // A request created from inside a cURL callback cannot be added - // natively while curl_multi_exec() is running; libcurl 7.59+ - // rejects the recursive call. Attach it once the outermost - // native execution unwinds. - $this->deferredAdds[$id] = $entry['wait_token'] ?? null; - } else { - $this->addHandleToMulti($id, $easy); - } - } - - /** - * Cancels a handle from sending and removes references to it. - * - * @param int $id Handle ID to cancel and remove. - * @param object|null $waitToken Identity token that must still match the - * entry when given. - * - * @return bool True on success, false on failure. - */ - private function cancel(int $id, ?object $waitToken = null): bool - { - // Cannot cancel if it has been processed or replaced by a request - // that reused the native handle ID. - if (!$this->hasRequest($id, $waitToken)) { - return false; - } - - $entry = $this->handles[$id]; - $easy = $entry['easy']; - $attached = !empty($entry['attached']); - unset($this->delays[$id], $this->deferredAdds[$id], $this->handles[$id]); - - if ($this->multiExecDepth > 0) { - $this->deferredCancels[$id] = ['easy' => $easy, 'attached' => $attached]; - - return true; - } - - $failure = null; - - if ($attached && $this->hasMultiHandle() && self::hasEasyHandle($easy)) { - $this->captureFailure($failure, function () use ($id, $easy): void { - $this->removeHandleFromMulti($id, $easy->handle); - }); - } - - $this->captureFailure($failure, function () use ($easy): void { - $this->disposeEasyHandle($easy); - }); - - if ($failure !== null) { - throw $failure; - } - - return true; - } - - private function cleanupDeferredCancels(?\Throwable &$failure): void - { - if ($this->deferredCancels === []) { - return; - } - - $entries = $this->deferredCancels; - $this->deferredCancels = []; - - foreach ($entries as $id => $entry) { - $easy = $entry['easy']; - - if ($entry['attached'] && $this->hasMultiHandle() && self::hasEasyHandle($easy)) { - $this->captureFailure($failure, function () use ($id, $easy): void { - $this->removeHandleFromMulti($id, $easy->handle); - }); - } - - $this->captureFailure($failure, function () use ($easy): void { - $this->disposeEasyHandle($easy); - }); - } - } - - private function processMessages(): void - { - // CurlFactory::finish can retry a transfer by re-invoking this handler - // from inside this loop; the guard keeps that re-entry from recreating - // the multi handle mid-iteration (see applyProxyTunnelOwnership). A - // depth is tracked because a completion callback can re-enter tick(), - // and the nested frame must not clear the outer loop's guard. - ++$this->messageProcessingDepth; - - try { - // A completion callback may close the handler mid-loop; the close - // is deferred (closing is set first), and the loop must stop - // before touching the multi handle again. Remaining in-flight - // transfers were moved to the deferred cancels by deferClose(). - while (!$this->closed && !$this->closing) { - $done = \curl_multi_info_read($this->getMultiHandle()); - if (false === $done) { - break; - } - - if ($done['msg'] !== \CURLMSG_DONE) { - // If it is not done, removing the handle would be premature. - // See https://github.com/guzzle/guzzle/pull/2892#issuecomment-945150216. - continue; - } - if (!isset($done['handle'])) { - // Work around a PHP issue where cancelled transfers may omit the handle. - // Remove this once we no longer support PHP versions before the fix in - // https://github.com/php/php-src/pull/16302. - continue; - } - $id = (int) $done['handle']; - $this->removeHandleFromMulti($id, $done['handle']); - - if (!isset($this->handles[$id])) { - // Probably was cancelled. - continue; - } - - $entry = $this->handles[$id]; - unset($this->handles[$id], $this->delays[$id]); - $entry['easy']->errno = $done['result']; - - // finish() can run completion callbacks that cancel this - // promise; a settled promise must not be settled again. - try { - $result = CurlFactory::finish($this, $entry['easy'], $this->factory); - } catch (\Throwable $e) { - if (P\Is::pending($entry['deferred'])) { - $entry['deferred']->reject($e); - } - - continue; - } - - if (P\Is::pending($entry['deferred'])) { - $entry['deferred']->resolve($result); - } - } - } finally { - --$this->messageProcessingDepth; - $this->finishDeferredWork(); - } - } - - /** - * Bounds a blocking select by the earliest pending request delay so a - * delayed transfer becoming due does not wait out an unrelated - * transfer's full select timeout. - */ - private function effectiveSelectTimeout(): float - { - if ($this->delays === []) { - return $this->selectTimeout; - } - - return \min($this->selectTimeout, $this->secondsToNext()); - } - - /** - * @return float Seconds until the earliest pending delay is due - */ - private function secondsToNext(): float - { - $currentTime = Clock::now(); - $nextTime = \PHP_FLOAT_MAX; - foreach ($this->delays as $time) { - if ($time < $nextTime) { - $nextTime = $time; - } - } - - return \max(0.0, $nextTime - $currentTime); - } - - private function timeToNext(): int - { - // PHP_INT_MAX first: min() then returns the int operand whenever the - // microseconds exceed it, so the cast never sees an oversized float. - return (int) \min(\PHP_INT_MAX, $this->secondsToNext() * 1000000); - } - - /** - * @return resource|\CurlMultiHandle - */ - private function getMultiHandle() - { - if ($this->multiHandle !== null) { - return $this->multiHandle; - } - - $this->assertOpen(); - - $multiHandle = \curl_multi_init(); - if (false === $multiHandle) { - throw new \RuntimeException('Can not initialize curl multi handle.'); - } - - try { - foreach ($this->options as $option => $value) { - if (!\is_int($option)) { - throw new InvalidArgumentException(\sprintf('Invalid cURL multi option "%s".', Psr7\DiagnosticValue::escape((string) $option))); - } - - try { - $applied = @curl_multi_setopt($multiHandle, $option, $value); - } catch (\Throwable $e) { - throw new InvalidArgumentException( - \sprintf('Unable to apply the cURL multi option %s; it was rejected by the runtime libcurl.', self::formatCurlMultiOption($option)), - 0, - $e - ); - } - - if (true !== $applied) { - throw new InvalidArgumentException(\sprintf('Unable to apply the cURL multi option %s; it was rejected by the runtime libcurl.', self::formatCurlMultiOption($option))); - } - } - } catch (\Throwable $e) { - \curl_multi_close($multiHandle); - - throw $e; - } - - $this->multiHandle = $multiHandle; - - return $this->multiHandle; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlShareHandleState.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlShareHandleState.php deleted file mode 100644 index 920858899..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlShareHandleState.php +++ /dev/null @@ -1,258 +0,0 @@ -mode = $mode; - $this->handle = $handle; - } - - /** - * @param mixed $sharing - */ - public static function fromOption($sharing): ?self - { - if ($sharing instanceof self) { - return $sharing; - } - - $mode = self::normalizeMode($sharing, 'transport_sharing'); - if ($mode === TransportSharing::NONE) { - return null; - } - - if ($mode === TransportSharing::HANDLER_PREFER) { - return self::createHandlerShareOrNull($mode); - } - - if ($mode === TransportSharing::HANDLER_REQUIRE) { - return self::createHandlerShare($mode); - } - - if ($mode === TransportSharing::PERSISTENT_PREFER) { - return self::createPersistentShareOrFallback(); - } - - return self::createPersistentShare($mode); - } - - /** - * @param mixed $sharing - */ - public static function normalizeMode($sharing, string $option): string - { - if ($sharing instanceof self) { - return $sharing->mode; - } - - if ($sharing === null || $sharing === TransportSharing::NONE) { - return TransportSharing::NONE; - } - - if ( - $sharing === TransportSharing::HANDLER_PREFER - || $sharing === TransportSharing::HANDLER_REQUIRE - || $sharing === TransportSharing::PERSISTENT_PREFER - || $sharing === TransportSharing::PERSISTENT_REQUIRE - ) { - return $sharing; - } - - throw new InvalidArgumentException(\sprintf( - 'The "%s" option must be null or a GuzzleHttp\\TransportSharing::* constant; received %s.', - $option, - \get_debug_type($sharing) - )); - } - - public static function assertNoRequiredSharingCustomFactoryConflict(array $options, string $handlerName): void - { - if (!\array_key_exists('handle_factory', $options) || $options['handle_factory'] === null) { - return; - } - - $mode = self::normalizeMode($options['transport_sharing'] ?? null, 'transport_sharing'); - if (!\in_array($mode, [TransportSharing::HANDLER_REQUIRE, TransportSharing::PERSISTENT_REQUIRE], true)) { - return; - } - - throw new InvalidArgumentException(\sprintf( - 'The "transport_sharing" %s option cannot require sharing with a custom "handle_factory" because Guzzle cannot ensure that the custom factory applies CURLOPT_SHARE.', - $handlerName - )); - } - - private static function createHandlerShareOrNull(string $mode): ?self - { - try { - return self::createHandlerShare($mode); - } catch (\Throwable $e) { - return null; - } - } - - private static function createHandlerShare(string $mode): self - { - if (!\function_exists('curl_share_init') || !\function_exists('curl_share_setopt')) { - throw new InvalidArgumentException('The "transport_sharing" option requires cURL share support.'); - } - - self::requireCurlConstant('CURLOPT_SHARE'); - $shareOption = self::requireCurlConstant('CURLSHOPT_SHARE'); - $locks = self::handlerLocks($mode); - $handle = curl_share_init(); - - try { - foreach ($locks as $lock) { - try { - $success = curl_share_setopt($handle, $shareOption, $lock); - } catch (\Throwable $e) { - throw new InvalidArgumentException('Unable to configure cURL share handle: '.$e->getMessage(), 0, $e); - } - - if (!$success) { - throw new InvalidArgumentException(\sprintf('Unable to configure cURL share handle with lock data %d.', $lock)); - } - } - } catch (\Throwable $e) { - self::closeHandlerShareHandleOnPhp7($handle); - - throw $e; - } - - return new self($mode, $handle); - } - - private static function createPersistentShareOrFallback(): ?self - { - if (self::supportsPersistentShare()) { - try { - return self::createPersistentShare(TransportSharing::PERSISTENT_PREFER); - } catch (\Throwable $e) { - // Fall back to handler-lifetime best effort below. - } - } - - return self::createHandlerShareOrNull(TransportSharing::HANDLER_PREFER); - } - - private static function createPersistentShare(string $mode): self - { - CurlVersion::ensureConnectionSharingSupported(); - CurlVersion::ensureSslSessionSharingSupported(); - - if (!self::supportsPersistentShare()) { - throw new InvalidArgumentException('The "transport_sharing" option requires persistent cURL share handle support.'); - } - - self::requireCurlConstant('CURLOPT_SHARE'); - - try { - $handle = curl_share_init_persistent(self::persistentLocks()); - } catch (\Throwable $e) { - throw new InvalidArgumentException( - 'Unable to create persistent cURL share handle: '.$e->getMessage(), - 0, - $e - ); - } - - return new self($mode, $handle); - } - - private static function supportsPersistentShare(): bool - { - return CurlVersion::supportsConnectionSharing() - && CurlVersion::supportsSslSessionSharing() - && \function_exists('curl_share_init_persistent') - && \class_exists('CurlSharePersistentHandle') - && \defined('CURL_LOCK_DATA_DNS') - && \defined('CURL_LOCK_DATA_CONNECT') - && \defined('CURL_LOCK_DATA_SSL_SESSION'); - } - - /** - * @return int[] - */ - private static function handlerLocks(string $mode): array - { - CurlVersion::ensureHandlerSharingSupported(); - - if ($mode === TransportSharing::HANDLER_REQUIRE) { - CurlVersion::ensureSslSessionSharingSupported(); - } - - $locks = [ - self::requireCurlConstant('CURL_LOCK_DATA_DNS'), - ]; - - if (CurlVersion::supportsSslSessionSharing()) { - $locks[] = self::requireCurlConstant('CURL_LOCK_DATA_SSL_SESSION'); - } - - return $locks; - } - - /** - * @return int[] - */ - private static function persistentLocks(): array - { - return [ - self::requireCurlConstant('CURL_LOCK_DATA_DNS'), - self::requireCurlConstant('CURL_LOCK_DATA_CONNECT'), - self::requireCurlConstant('CURL_LOCK_DATA_SSL_SESSION'), - ]; - } - - private static function requireCurlConstant(string $constant): int - { - if (!\defined($constant)) { - throw new InvalidArgumentException(\sprintf( - 'The "transport_sharing" option requires %s, but it is not available in the installed PHP cURL extension.', - $constant - )); - } - - $value = \constant($constant); - if (!\is_int($value)) { - throw new InvalidArgumentException(\sprintf('The cURL constant %s must resolve to an integer.', $constant)); - } - - return $value; - } - - /** - * @param resource|\CurlShareHandle $handle - */ - private static function closeHandlerShareHandleOnPhp7($handle): void - { - if (\PHP_VERSION_ID < 80000 && \is_resource($handle)) { - curl_share_close($handle); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlVersion.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlVersion.php deleted file mode 100644 index fb871c40b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/CurlVersion.php +++ /dev/null @@ -1,392 +0,0 @@ -=') - && 0 !== (\CURL_VERSION_SSL & $versionInfo['features']); - } - - public static function supportsTls13(): bool - { - $version = self::get(); - - return \defined('CURL_SSLVERSION_TLSv1_3') - && null !== $version - && version_compare($version, self::TLS_13_VERSION, '>='); - } - - public static function supportsMultiplex(): bool - { - $version = self::get(); - - return \defined('CURLOPT_PIPEWAIT') - && null !== $version - && version_compare($version, self::MULTIPLEX_VERSION, '>='); - } - - public static function supportsHttpVersionReuseMatching(): bool - { - $version = self::get(); - - if (null === $version || version_compare($version, self::HTTP_VERSION_REUSE_MATCH_VERSION, '<')) { - return false; - } - - return version_compare($version, self::HTTP_VERSION_REUSE_MATCH_REGRESSION, '<') - || version_compare($version, self::HTTP_VERSION_REUSE_MATCH_RESTORED, '>='); - } - - public static function supportsRequiredHttp2Multiplex(): bool - { - $version = self::get(); - - return \defined('CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE') - && null !== $version - && self::supportsHttp2() - && version_compare($version, self::REQUIRED_HTTP2_MULTIPLEX_VERSION, '>='); - } - - public static function supportsHttp2(): bool - { - $versionInfo = self::getVersionInfo(); - - // Requiring dependable CURLOPT_PIPEWAIT support keeps waiting from - // ever being silently unavailable where HTTP/2 works. - return \defined('CURL_VERSION_HTTP2') - && null !== $versionInfo - && self::supportsMultiplex() - && 0 !== (\CURL_VERSION_HTTP2 & $versionInfo['features']); - } - - public static function supportsHttp3(): bool - { - if (!\defined('CURL_VERSION_HTTP3') || !\defined('CURL_HTTP_VERSION_3') || !\defined('CURL_HTTP_VERSION_3ONLY')) { - return false; - } - - $versionInfo = self::getVersionInfo(); - if (null === $versionInfo || version_compare($versionInfo['version'], self::HTTP_3_VERSION, '<')) { - return false; - } - - return 0 !== ((int) \constant('CURL_VERSION_HTTP3') & $versionInfo['features']); - } - - public static function supportsRequiredHttp3Multiplex(): bool - { - $version = self::get(); - - return self::supportsHttp3() - && null !== $version - && version_compare($version, self::REQUIRED_HTTP3_MULTIPLEX_VERSION, '>='); - } - - public static function supportsHttpsProxy(): bool - { - $versionInfo = self::getVersionInfo(); - - return \defined('CURL_VERSION_HTTPS_PROXY') - && null !== $versionInfo - && version_compare($versionInfo['version'], self::HTTPS_PROXY_VERSION, '>=') - && 0 !== (\CURL_VERSION_HTTPS_PROXY & $versionInfo['features']); - } - - public static function supportsHandlerSharing(): bool - { - $version = self::get(); - - return null !== $version - && version_compare($version, self::HANDLER_SHARING_VERSION, '>='); - } - - public static function ensureHandlerSharingSupported(): void - { - if (!self::supportsHandlerSharing()) { - throw new InvalidArgumentException(\sprintf( - 'The "transport_sharing" option requires libcurl %s or higher for cURL share handles.', - self::HANDLER_SHARING_VERSION - )); - } - } - - public static function supportsSslSessionSharing(): bool - { - $versionInfo = self::getVersionInfo(); - - return \defined('CURL_VERSION_SSL') - && null !== $versionInfo - && version_compare($versionInfo['version'], self::SSL_SESSION_SHARING_VERSION, '>=') - && 0 !== (\CURL_VERSION_SSL & $versionInfo['features']); - } - - public static function ensureSslSessionSharingSupported(): void - { - if (!self::supportsSslSessionSharing()) { - throw new InvalidArgumentException(\sprintf( - 'The "transport_sharing" option requires libcurl %s or higher with SSL support for SSL session sharing.', - self::SSL_SESSION_SHARING_VERSION - )); - } - } - - public static function supportsConnectionSharing(): bool - { - $version = self::get(); - - return null !== $version - && version_compare($version, self::CONNECTION_SHARING_VERSION, '>='); - } - - public static function ensureConnectionSharingSupported(): void - { - if (!self::supportsConnectionSharing()) { - throw new InvalidArgumentException(\sprintf( - 'The "transport_sharing" option requires libcurl %s or higher for persistent connection sharing.', - self::CONNECTION_SHARING_VERSION - )); - } - } - - public static function supportsShareConnectionCaches(): bool - { - $version = self::get(); - - // An undetectable libcurl version is treated as capable so the - // opaque share safeguards fail closed. - return null === $version - || version_compare($version, self::SHARE_CONNECTION_CACHE_VERSION, '>='); - } - - public static function supportsProxyTlsCredentialAwareConnectionReuse(): bool - { - $version = self::get(); - - return null !== $version - && version_compare($version, self::PROXY_TLS_CREDENTIAL_REUSE_VERSION, '>='); - } - - public static function supportsProxyCredentialAwareConnectionReuse(): bool - { - $version = self::get(); - - return null !== $version - && version_compare($version, self::PROXY_CREDENTIAL_REUSE_VERSION, '>='); - } - - public static function supportsSocksProxyCredentialAwareConnectionReuse(): bool - { - $version = self::get(); - - return null !== $version - && version_compare($version, self::SOCKS_PROXY_CREDENTIAL_REUSE_VERSION, '>='); - } - - public static function supportsProxyHeaderSeparation(): bool - { - $version = self::get(); - - return null !== $version - && version_compare($version, self::PROXY_HEADER_SEPARATION_VERSION, '>=') - && \defined('CURLOPT_PROXYHEADER') - && \defined('CURLOPT_HEADEROPT') - && \defined('CURLHEADER_SEPARATE'); - } - - public static function supportsProtocolsStr(): bool - { - $version = self::get(); - - return \defined('CURLOPT_PROTOCOLS_STR') - && null !== $version - && version_compare($version, self::PROTOCOLS_STR_VERSION, '>='); - } - - public static function supportsProxyTunneling(): bool - { - $version = self::get(); - - return \defined('CURLOPT_SUPPRESS_CONNECT_HEADERS') - && null !== $version - && version_compare($version, self::PROXY_TUNNEL_VERSION, '>='); - } - - public static function ensureSupported( - #[\SensitiveParameter] - RequestInterface $request - ): void { - if (self::supportsCurlHandler()) { - return; - } - - $version = self::get(); - - if (null === $version || version_compare($version, self::MIN_VERSION, '<')) { - throw new ConnectException(\sprintf( - 'cURL %s or higher is required by the cURL handler; %s is installed.', - self::MIN_VERSION, - $version ?? 'an unknown version' - ), $request); - } - - if (!\defined('CURL_SSLVERSION_TLSv1_2')) { - throw new ConnectException(\sprintf( - 'The PHP cURL extension must be built against cURL %s or higher to use the cURL handler.', - self::MIN_VERSION - ), $request); - } - - if (!\defined('CURLMOPT_MAX_HOST_CONNECTIONS') || !\defined('CURLMOPT_MAX_TOTAL_CONNECTIONS')) { - throw new ConnectException('The PHP cURL extension must expose CURLMOPT_MAX_HOST_CONNECTIONS and CURLMOPT_MAX_TOTAL_CONNECTIONS to use the cURL handler.', $request); - } - - throw new ConnectException('The cURL handler requires libcurl SSL support.', $request); - } - - private static function get(): ?string - { - $versionInfo = self::getVersionInfo(); - - return null === $versionInfo ? null : $versionInfo['version']; - } - - /** - * @return array{version: string, features: int}|null - */ - private static function getVersionInfo(): ?array - { - if (null === self::$versionInfo) { - if (!\function_exists('curl_version')) { - self::$versionInfo = false; - } else { - $versionInfo = \curl_version(); - self::$versionInfo = \is_array($versionInfo) - && isset($versionInfo['version'], $versionInfo['features']) - && \is_string($versionInfo['version']) - && \is_int($versionInfo['features']) - ? [ - 'version' => $versionInfo['version'], - 'features' => $versionInfo['features'], - ] - : false; - } - } - - return false === self::$versionInfo ? null : self::$versionInfo; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/DeadlineSourceStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/DeadlineSourceStream.php deleted file mode 100644 index 0c8ccff36..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/DeadlineSourceStream.php +++ /dev/null @@ -1,114 +0,0 @@ -stream = $stream; - $this->deadline = $deadline; - $this->readTimeout = $readTimeout; - } - - public function read(int $length): string - { - $idleStart = null; - - while (true) { - $remaining = $this->deadline - Clock::now(); - if ($remaining <= 0) { - $this->timedOut = true; - - throw new TimeoutException('Unable to read from stream: timed out'); - } - - $data = $this->stream->read($length); - if ($data !== '') { - return $data; - } - if ($this->stream->eof()) { - return ''; - } - - $now = Clock::now(); - if ($idleStart === null) { - $idleStart = $now; - } - if ($this->readTimeout !== null && $now - $idleStart >= $this->readTimeout) { - $this->timedOut = true; - - throw new TimeoutException('Unable to read from stream: timed out'); - } - - $wait = \min($remaining, self::POLL_INTERVAL); - if ($this->readTimeout !== null) { - $wait = \min($wait, $this->readTimeout - ($now - $idleStart)); - } - \usleep((int) \ceil($wait * 1e6)); - } - } - - /** - * Reports the deadline timeout through the timed_out metadata: reads on - * a decoding layer above this stream surface as a generic read failure, - * and its timeout recovery consults this stream's metadata to classify - * the failure. The transport itself never reports timed_out while in - * non-blocking mode. - * - * @return mixed - */ - public function getMetadata(?string $key = null) - { - if ($key === 'timed_out') { - return $this->timedOut || $this->stream->getMetadata($key) === true; - } - - $metadata = $this->stream->getMetadata($key); - if ($key === null && \is_array($metadata) && $this->timedOut) { - $metadata['timed_out'] = true; - } - - return $metadata; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php deleted file mode 100644 index 415dc56ac..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php +++ /dev/null @@ -1,245 +0,0 @@ - Received HTTP headers so far - */ - public array $headers = []; - - /** - * @var list Valid trailer lines, retained only when an - * on_trailers callback is configured - */ - public array $trailers = []; - - /** - * @var bool Whether this handle was configured with CURLOPT_PIPEWAIT - */ - public bool $usesPipewait = false; - - /** - * @var ResponseInterface|null Received response (if any) - */ - public ?ResponseInterface $response = null; - - /** - * @var array Request options - */ - public array $options = []; - - /** - * @var int cURL error number (if any) - */ - public int $errno = 0; - - /** - * @var string|null Effective CURLOPT_PROXY value the handle was created with (if any) - */ - public ?string $effectiveProxy = null; - - /** - * Proxy tunnel or SOCKS proxy section signature for connection-reuse - * isolation, or null when the request does not require sectioning. - */ - public ?string $proxyTunnelSignature = null; - - /** - * @var \Throwable|null Exception during on_headers (if any) - */ - public ?\Throwable $onHeadersException = null; - - /** - * @var \Throwable|null Exception during progress callback (if any) - */ - public ?\Throwable $progressException = null; - - /** - * @var bool Whether the progress callback requested abort - */ - public bool $progressAborted = false; - - /** - * @var \Throwable|null Exception during createResponse (if any) - */ - public ?\Throwable $createResponseException = null; - - /** - * @var ResponseException|null Response header failure, if any. - */ - public ?ResponseException $responseHeaderException = null; - - /** - * @var TimeoutException|null Exception during request body read timeout. - */ - public ?TimeoutException $bodyReadTimeoutException = null; - - /** - * @var \Throwable|null Exception during request body read. - */ - public ?\Throwable $bodyReadException = null; - - /** - * @var TimeoutException|null Exception during response sink write timeout. - */ - public ?TimeoutException $sinkWriteTimeoutException = null; - - /** - * @var \Throwable|null Exception during response sink write. - */ - public ?\Throwable $sinkWriteException = null; - - /** - * @var bool Whether the response sink accepted a different byte count. - */ - public bool $sinkWriteIncomplete = false; - - /** - * @var int Number of response body bytes accepted by the sink. - */ - public int $responseBodyBytes = 0; - - /** - * @var \OverflowException|null Unrepresentable response body size or byte count. - */ - public ?\OverflowException $responseBodySizeException = null; - - /** - * Attach a response to the easy handle based on the received headers. - * - * @throws \RuntimeException if no headers have been received or the first - * header line is invalid. - */ - public function createResponse(): void - { - $this->response = null; - $this->responseBodyBytes = 0; - $this->responseBodySizeException = null; - $this->responseHeaderException = null; - - [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($this->headers); - - // Non-101 informational responses precede the final response. Do not - // expose them as the response for a transfer that ends before the final - // response arrives. 101 switches protocol and is kept as terminal. - if ($status < 200 && $status !== 101) { - return; - } - - $framingFailure = null; - try { - $declaredLength = HeaderProcessor::validateResponseFraming($this->request->getMethod(), $status, $headers); - HeaderProcessor::assertContentLengthWithinPlatformLimit($declaredLength); - } catch (\RuntimeException $e) { - $framingFailure = $e; - } - - $normalizedKeys = Utils::normalizeHeaderKeys($headers); - $decodeContent = $this->options['decode_content'] ?? false; - if ($framingFailure === null && $decodeContent !== false && isset($normalizedKeys['content-encoding'])) { - $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']]; - unset($headers[$normalizedKeys['content-encoding']]); - $encodedContentLength = HeaderProcessor::removeHeader('Content-Length', $headers); - if ($encodedContentLength !== []) { - $headers['x-encoded-content-length'] = $encodedContentLength; - - try { - $bodyLength = $this->sink->getSize(); - } catch (\Exception $e) { - $bodyLength = null; - } - if ($bodyLength) { - $headers['Content-Length'] = [(string) $bodyLength]; - } - } - } - - // Attach a response to the easy handle with the parsed headers. Any - // exception propagates to the caller (CurlFactory), which records it as - // the createResponseException — do not catch it here. - $responseFactory = self::requireResponseFactory($this->options[RequestOptions::RESPONSE_FACTORY] ?? new HttpFactory()); - $response = $responseFactory->createResponse($status, $reason ?? '')->withProtocolVersion($ver); - foreach ($headers as $name => $value) { - $response = $response->withAddedHeader((string) $name, $value); - } - $this->response = $response->withBody($this->sink); - - if ($framingFailure instanceof \OverflowException) { - $this->responseHeaderException = new ResponseException( - $framingFailure->getMessage(), - $this->request, - $this->response, - $framingFailure - ); - } elseif ($framingFailure !== null) { - $this->responseHeaderException = new ResponseTransferException( - $framingFailure->getMessage(), - $this->request, - $this->response, - $framingFailure - ); - } - } - - /** - * @param mixed $factory - */ - private static function requireResponseFactory($factory): ResponseFactoryInterface - { - if (!$factory instanceof ResponseFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::RESPONSE_FACTORY, - ResponseFactoryInterface::class - )); - } - - return $factory; - } - - /** - * @throws \BadMethodCallException - */ - public function __get(string $name): void - { - $msg = $name === 'handle' - ? 'The EasyHandle has been released' - : \sprintf('Invalid property: %s', DiagnosticValue::escape($name)); - - throw new \BadMethodCallException($msg); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/EncodedBodyStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/EncodedBodyStream.php deleted file mode 100644 index ad648e64d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/EncodedBodyStream.php +++ /dev/null @@ -1,83 +0,0 @@ -stream = $stream; - - $limit = HeaderProcessor::contentLengthToInt($declaredLength); - $this->limit = $limit !== null && $limit > 0 ? $limit : null; - } - - public function eof(): bool - { - return ($this->limit !== null && $this->bytesRead >= $this->limit) - || $this->stream->eof(); - } - - public function isSeekable(): bool - { - return false; - } - - public function seek(int $offset, int $whence = \SEEK_SET): void - { - throw new \RuntimeException('Cannot seek a stream while tracking encoded response bytes'); - } - - public function read(int $length): string - { - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - if ($this->limit !== null) { - $remaining = $this->limit - $this->bytesRead; - if ($remaining === 0) { - return ''; - } - - $length = \min($length, $remaining); - } - - $data = $this->stream->read($length); - $this->bytesRead = TransferByteCounter::add( - $this->bytesRead, - \strlen($data), - 'Response body exceeds the maximum integer size supported on this platform' - ); - - return $data; - } - - public function getBytesRead(): int - { - return $this->bytesRead; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php deleted file mode 100644 index ca470e6ae..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php +++ /dev/null @@ -1,248 +0,0 @@ - \strlen($max) - || (\strlen($length) === \strlen($max) && \strcmp($length, $max) > 0) - ) { - return null; - } - - return (int) $length; - } - - public static function assertContentLengthWithinPlatformLimit(?string $length): void - { - if ($length === null || self::contentLengthToInt($length) !== null) { - return; - } - - throw new \OverflowException('Content-Length exceeds the maximum integer size supported on this platform'); - } - - /** - * Validates response framing and returns its normalized Content-Length. - * Returns null when absent or when ordinary body framing does not apply. - * - * @param array $headers - * - * @throws \RuntimeException when Content-Length is malformed, conflicting, - * or combined with Transfer-Encoding - */ - public static function validateResponseFraming( - string $method, - int $status, - array $headers - ): ?string { - if (!self::responseCanHaveBody($method, $status)) { - return null; - } - - $normalizedKeys = Utils::normalizeHeaderKeys($headers); - $contentLength = self::removeHeader('Content-Length', $headers); - - try { - $length = self::parseContentLength($contentLength); - } catch (\RuntimeException $e) { - throw new \RuntimeException('Invalid Content-Length response header: '.$e->getMessage(), 0, $e); - } - - if ($length !== null && isset($normalizedKeys['transfer-encoding'])) { - throw new \RuntimeException('A response must not contain both Content-Length and Transfer-Encoding'); - } - - return $length; - } - - /** - * Removes every case-insensitive occurrence of a header and returns all - * removed values in their original field order. - * - * @param array $headers - * - * @return string[] Removed values across all header-name casings - */ - public static function removeHeader(string $name, array &$headers): array - { - $values = []; - - foreach ($headers as $key => $headerValues) { - if (Psr7\Utils::caselessEquals((string) $key, $name)) { - \array_push($values, ...$headerValues); - unset($headers[$key]); - } - } - - return $values; - } - - /** - * Whether a response uses ordinary body framing. A response to HEAD, a - * response with a 1xx, 204, or 304 status code, or a 2xx response to - * CONNECT never has a body, whatever its framing headers claim. A 205 - * remains subject to framing even though its semantics require no content. - */ - public static function responseCanHaveBody(string $method, int $status): bool - { - return $method !== 'HEAD' - && !($method === 'CONNECT' && $status >= 200 && $status < 300) - && $status >= 200 - && $status !== 204 - && $status !== 304; - } - - /** - * @param non-empty-list $headers - * - * @return list - */ - private static function getLastHeaderBlock(array $headers): array - { - $lastStatusLine = 0; - - foreach ($headers as $index => $line) { - if (self::isStatusLineCandidate($line)) { - $lastStatusLine = $index; - } - } - - return \array_slice($headers, $lastStatusLine); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/HostValidator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/HostValidator.php deleted file mode 100644 index 1e74caf5d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/HostValidator.php +++ /dev/null @@ -1,162 +0,0 @@ -getUri()->getHost(), $request); - - foreach ($request->getHeader('Host') as $value) { - self::assertPrintableAscii((string) $value, 'The request Host header "%s" must contain only printable ASCII characters, because an intermediary or an origin server can otherwise read it as an authority that differs from the one the request names. An internationalized host name has an A-label form that this rule accepts.', $request); - } - } - - /** - * Only the URI host is reparsed for the connection. A Host header is sent - * verbatim and may carry a port, brackets, and an RFC 6874 zone identifier. - * - * @throws RequestException - */ - private static function assertUriHost( - string $host, - #[\SensitiveParameter] - RequestInterface $request - ): void { - self::assertPrintableAscii($host, 'The request URI host "%s" must contain only printable ASCII characters, because a handler can otherwise connect to a host that differs from the one the request names. An internationalized host name has an A-label form that this rule accepts.', $request); - - if (\strpos($host, '%') !== false) { - throw new RequestException(\sprintf('The request URI host "%s" must not contain a percent escape, because a handler decodes it and can then connect to a host that differs from the one the request names.', self::escape($host)), $request); - } - - // GuzzleHttp\Psr7\Uri already enforces this predicate, so it only - // rejects invalid third-party UriInterface values. - if (!Psr7\Rfc3986::isValidHost($host)) { - throw new RequestException(\sprintf('The request URI host "%s" must be a valid RFC 3986 host, because a handler reparses the URI and can then connect to a host that differs from the one the request names.', self::escape($host)), $request); - } - - // libcurl 8.21.0 drops a trailing dot from inet_aton-style numeric - // hosts before connecting, while other readers treat the input as a - // name. Test the shape rather than the range so malformed numeric - // values fail closed. rtrim() also covers multiple trailing dots if - // libcurl later relaxes its current guard. Plain shorthand stays - // accepted. HostIdentity uses a broader grammar for cookie matching. - // - // @see \GuzzleHttp\HostIdentity::canonicalHost() - if (\str_ends_with($host, '.') && self::isNumericIpv4Host(\rtrim($host, '.'))) { - throw new RequestException(\sprintf('The request URI host "%s" must not be written as one to four decimal, octal or hexadecimal parts followed by one or more trailing dots, because a handler can read that spelling as an IPv4 address and connect to that address while the rest of the process reads a name.', self::escape($host)), $request); - } - } - - /** - * Reports whether a host has libcurl's inet_aton-style shape: one to four - * decimal, 0-prefixed octal, or 0x-prefixed hexadecimal parts. - * - * Range and 32-bit overflow checks are deliberately omitted. This may - * reject a trailing-dot spelling the transport reads as a name, but avoids - * missing one it resolves as an address. - */ - public static function isNumericIpv4Host(string $host): bool - { - if ($host === '') { - return false; - } - - $parts = \explode('.', $host); - - if (\count($parts) > 4) { - return false; - } - - foreach ($parts as $part) { - if (!self::isNumericIpv4Part($part)) { - return false; - } - } - - return true; - } - - private static function isNumericIpv4Part(string $part): bool - { - if ($part === '') { - return false; - } - - if ($part[0] === '0' && isset($part[1]) && ($part[1] === 'x' || $part[1] === 'X')) { - return \strlen($part) > 2 && \strspn($part, '0123456789abcdefABCDEF', 2) === \strlen($part) - 2; - } - - $digits = $part[0] === '0' ? '01234567' : '0123456789'; - - return \strspn($part, $digits) === \strlen($part); - } - - /** - * @throws RequestException - */ - private static function assertPrintableAscii( - string $value, - string $message, - #[\SensitiveParameter] - RequestInterface $request - ): void { - // Match positively so a PCRE failure rejects. - if (\preg_match('/\A[\x21-\x7E]*\z/D', $value) !== 1) { - throw new RequestException(\sprintf($message, self::escape($value)), $request); - } - } - - /** - * Escapes non-printable bytes as uppercase \xNN for safe diagnostics. - * - * Psr7\DiagnosticValue is not used because it preserves valid non-ASCII - * UTF-8, including invisible characters rejected here. - */ - private static function escape(string $value): string - { - $escaped = ''; - - for ($offset = 0, $length = \strlen($value); $offset < $length; ++$offset) { - $byte = \ord($value[$offset]); - if ($byte >= 0x20 && $byte <= 0x7E) { - $escaped .= $value[$offset]; - - continue; - } - - $escaped .= \sprintf('\\x%02X', $byte); - } - - return $escaped; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php deleted file mode 100644 index 90d34e228..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php +++ /dev/null @@ -1,276 +0,0 @@ -|callable(RequestInterface, array): (ResponseInterface|\Throwable|PromiseInterface)> - */ - private array $queue = []; - - private ?RequestInterface $lastRequest = null; - - /** - * @var array - */ - private array $lastOptions = []; - - /** - * @var (callable(ResponseInterface|null): mixed)|null - */ - private $onFulfilled; - - /** - * @var (callable(mixed): mixed)|null - */ - private $onRejected; - - /** - * Creates a new MockHandler that uses the default handler stack list of - * middlewares. - * - * @param array|callable(RequestInterface, array): (ResponseInterface|\Throwable|PromiseInterface)>|null $queue Array of responses, promises, callables, or throwables. - * @param (callable(ResponseInterface|null): mixed)|null $onFulfilled Callback to invoke when the return value is fulfilled. - * @param (callable(mixed): mixed)|null $onRejected Callback to invoke when the return value is rejected. - * - * @return HandlerStack): PromiseInterface> - */ - public static function createWithMiddleware( - #[\SensitiveParameter] - ?array $queue = null, - ?callable $onFulfilled = null, - ?callable $onRejected = null - ): HandlerStack { - return HandlerStack::create(new self($queue, $onFulfilled, $onRejected)); - } - - /** - * The passed in value must be an array of - * {@see ResponseInterface} objects, throwables, callables, or promises. - * - * @param array|callable(RequestInterface, array): (ResponseInterface|\Throwable|PromiseInterface)>|null $queue The parameters to be passed to the append function, as an indexed array. - * @param (callable(ResponseInterface|null): mixed)|null $onFulfilled Callback to invoke when the return value is fulfilled. - * @param (callable(mixed): mixed)|null $onRejected Callback to invoke when the return value is rejected. - */ - public function __construct( - #[\SensitiveParameter] - ?array $queue = null, - ?callable $onFulfilled = null, - ?callable $onRejected = null - ) { - $this->onFulfilled = $onFulfilled; - $this->onRejected = $onRejected; - - if ($queue) { - // array_values included for BC - $this->append(...array_values($queue)); - } - } - - /** - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - if (!$this->queue) { - // Test-setup error (more requests made than responses queued); - // intentionally a bare SPL exception, not a GuzzleException. - throw new \OutOfBoundsException('Mock queue is empty'); - } - - if (isset($options['delay']) && \is_numeric($options['delay'])) { - \usleep((int) ($options['delay'] * 1000)); - } - - if (isset($options['on_stats']) && !\is_callable($options['on_stats'])) { - throw new InvalidArgumentException('on_stats must be callable'); - } - - $this->lastRequest = $request; - $this->lastOptions = $options; - $response = \array_shift($this->queue); - $onHeaders = null; - $onHeadersResponse = null; - - if (isset($options['on_headers'])) { - if (!\is_callable($options['on_headers'])) { - throw new InvalidArgumentException('on_headers must be callable'); - } - - $onHeaders = $options['on_headers']; - } - - if (\is_callable($response)) { - $response = $response($request, $options); - } - - $response = $response instanceof \Throwable - ? P\Create::rejectionFor($response) - : P\Create::promiseFor($response); - - if (\is_callable($onHeaders)) { - $response = $response->then( - static function ( - #[\SensitiveParameter] - $value - ) use ($onHeaders, $request, &$onHeadersResponse) { - if (!$value instanceof ResponseInterface) { - return $value; - } - - try { - $onHeaders($value, $request); - } catch (\Throwable $e) { - $msg = 'An error was encountered during the on_headers event'; - $onHeadersResponse = $value; - - throw new ResponseException($msg, $request, $value, $e); - } - - return $value; - } - ); - } - - $promise = $response->then( - function ( - #[\SensitiveParameter] - $value - ) use ($request, $options): ?ResponseInterface { - /** @var ResponseInterface|null $value */ - $this->invokeStats($request, $options, $value); - if ($this->onFulfilled) { - ($this->onFulfilled)($value); - } - - if ($value !== null && isset($options['sink'])) { - $contents = (string) $value->getBody(); - $sink = $options['sink']; - - if (\is_resource($sink)) { - \fwrite($sink, $contents); - } elseif (\is_string($sink)) { - \file_put_contents($sink, $contents); - } elseif ($sink instanceof StreamInterface) { - $sink->write($contents); - } - } - - return $value; - }, - function ( - #[\SensitiveParameter] - $reason - ) use ($request, $options, &$onHeadersResponse): PromiseInterface { - $this->invokeStats($request, $options, $onHeadersResponse, $reason); - if ($this->onRejected) { - ($this->onRejected)($reason); - } - - return P\Create::rejectionFor($reason); - } - ); - - /** @var PromiseInterface $promise */ - return $promise; - } - - /** - * Adds one or more variadic requests, exceptions, callables, or promises - * to the queue. - * - * @param mixed ...$values Responses, promises, throwables, or request-aware callables. - */ - public function append( - #[\SensitiveParameter] - ...$values - ): void { - foreach ($values as $value) { - if ($value instanceof ResponseInterface - || $value instanceof \Throwable - || $value instanceof PromiseInterface - || \is_callable($value) - ) { - $this->queue[] = $value; - } else { - throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found '.\get_debug_type($value)); - } - } - } - - /** - * Get the last received request. - */ - public function getLastRequest(): ?RequestInterface - { - return $this->lastRequest; - } - - /** - * Get the last received request options. - */ - public function getLastOptions(): array - { - return $this->lastOptions; - } - - /** - * Returns the number of remaining items in the queue. - */ - public function count(): int - { - return \count($this->queue); - } - - public function reset(): void - { - $this->queue = []; - } - - /** - * @param mixed $reason Promise or reason. - */ - private function invokeStats( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - ?ResponseInterface $response = null, - #[\SensitiveParameter] - $reason = null - ): void { - if (isset($options['on_stats'])) { - $transferTime = $options['transfer_time'] ?? 0.0; - if (!\is_int($transferTime) && !\is_float($transferTime) && (!\is_string($transferTime) || !\is_numeric($transferTime))) { - throw new InvalidArgumentException('transfer_time must be a number of seconds'); - } - - $stats = new TransferStats($request, $response, (float) $transferTime, $reason); - ($options['on_stats'])($stats); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php deleted file mode 100644 index 324351d78..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php +++ /dev/null @@ -1,66 +0,0 @@ -): PromiseInterface $default Handler used for normal responses - * @param callable(RequestInterface, array): PromiseInterface $sync Handler used for synchronous responses. - * - * @return callable(RequestInterface, array): PromiseInterface Returns the composed handler. - */ - public static function wrapSync(callable $default, callable $sync): callable - { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($default, $sync): PromiseInterface { - return empty($options[RequestOptions::SYNCHRONOUS]) ? $default($request, $options) : $sync($request, $options); - }; - } - - /** - * Sends streaming requests to a streaming compatible handler while sending - * all other requests to a default handler. - * - * This, for example, could be useful for taking advantage of the - * performance benefits of curl while still supporting true streaming - * through the StreamHandler. - * - * @param callable(RequestInterface, array): PromiseInterface $default Handler used for non-streaming responses - * @param callable(RequestInterface, array): PromiseInterface $streaming Handler used for streaming responses - * - * @return callable(RequestInterface, array): PromiseInterface Returns the composed handler. - */ - public static function wrapStreaming(callable $default, callable $streaming): callable - { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($default, $streaming): PromiseInterface { - return empty($options['stream']) ? $default($request, $options) : $streaming($request, $options); - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/ProxyEnv.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/ProxyEnv.php deleted file mode 100644 index f0147ea0e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/ProxyEnv.php +++ /dev/null @@ -1,159 +0,0 @@ -hasProxy() || $selection->shouldDisableProxy()) { - return $selection; - } - - $envProxy = self::getProxyForScheme($uri->getScheme()); - if ($envProxy === null) { - return $selection; - } - - $noProxy = self::getNoProxy(); - if ($noProxy !== null && ProxyOptions::isUriInNoProxy($uri, self::splitNoProxy($noProxy))) { - return ProxySelection::bypassed(); - } - - // $envProxy is never '' (empty env values are treated as unset). - return ProxySelection::proxy($envProxy); - } - - /** - * Resolves the proxy to use for the given request scheme. - * - * The lookup mirrors libcurl for the http and https schemes the handlers - * accept: the lowercase scheme-specific variable first, its uppercase - * variant next (except for "http", where uppercase HTTP_PROXY is never - * read), then all_proxy/ALL_PROXY. - * - * @return string|null The proxy to use; null when the environment - * configures none. - */ - public static function getProxyForScheme(string $scheme): ?string - { - $scheme = Psr7\Utils::asciiToLower($scheme); - $candidates = [$scheme.'_proxy']; - if ($scheme !== 'http') { - // Uppercase HTTP_PROXY is deliberately never consulted: a CGI - // request header "Proxy:" becomes HTTP_PROXY in the environment. - // See https://httpoxy.org for more information. - $candidates[] = Psr7\Utils::asciiToUpper($scheme).'_PROXY'; - } - $candidates[] = 'all_proxy'; - $candidates[] = 'ALL_PROXY'; - - foreach ($candidates as $name) { - $value = self::getenv($name); - if ($value !== null) { - return $value; - } - } - - return null; - } - - /** - * @return string|null The no-proxy list; null when nothing is set. - */ - public static function getNoProxy(): ?string - { - foreach (['no_proxy', 'NO_PROXY'] as $name) { - $value = self::getenv($name); - if ($value !== null) { - return $value; - } - } - - return null; - } - - /** - * Splits a no_proxy environment value into matchable entries. - * - * Entries may be separated by commas or blanks, the way libcurl tokenizes - * the value. - * - * @return string[] - */ - public static function splitNoProxy(string $noProxy): array - { - $entries = []; - - $split = \preg_split('/[\s,]+/', $noProxy); - - if ($split === false) { - throw new \RuntimeException('Unable to split the no_proxy value: '.\preg_last_error_msg()); - } - - foreach ($split as $entry) { - if ($entry !== '') { - $entries[] = $entry; - } - } - - return $entries; - } - - private static function getenv(string $name): ?string - { - // Windows environment variables are case-insensitive, so the - // lowercase-only httpoxy defence does not hold there. Outside the - // CLI SAPI on Windows, environment proxies are not resolved at all - // (a safe-side divergence from libcurl). - if (\PHP_OS_FAMILY === 'Windows' && \PHP_SAPI !== 'cli') { - return null; - } - - // local_only: the OS environment and putenv() only - the same - // environ(7) libcurl reads. SAPI request environments such as - // fastcgi_param or SetEnv are deliberately excluded. - $value = \getenv($name, true); - - // libcurl's GetEnv (lib/getenv.c) treats variables set to an empty - // string as unset on every version, so the lookup falls through to - // the next candidate. - return $value === false || $value === '' ? null : $value; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/RequestFraming.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/RequestFraming.php deleted file mode 100644 index c9772dc37..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/RequestFraming.php +++ /dev/null @@ -1,256 +0,0 @@ -request = $request; - $this->bodySize = $bodySize; - $this->contentLength = $contentLength; - } - - /** - * Finalizes request framing for a handler dispatch. - * - * When $sendBody is false, body-dependent validation and size probing are - * skipped. Content-Length is still canonicalized and Transfer-Encoding is - * removed. - * - * @throws RequestException when framing or body metadata is unsafe - */ - public static function analyze( - #[\SensitiveParameter] - RequestInterface $request, - bool $sendBody = true - ): self { - try { - $length = HeaderProcessor::parseContentLength($request->getHeader('Content-Length')); - } catch (\RuntimeException $e) { - throw new RequestException('Invalid Content-Length request header: '.$e->getMessage(), $request, 0, $e); - } - - try { - HeaderProcessor::assertContentLengthWithinPlatformLimit($length); - } catch (\OverflowException $e) { - throw new RequestException($e->getMessage(), $request, 0, $e); - } - - $contentLength = HeaderProcessor::contentLengthToInt($length); - if ($length !== null) { - $request = $request->withHeader('Content-Length', $length); - } - - if (!$sendBody) { - return new self($request->withoutHeader('Transfer-Encoding'), null, $contentLength); - } - - $transferEncoding = $request->getHeader('Transfer-Encoding'); - if ($length !== null && $transferEncoding !== []) { - throw new RequestException( - 'A request must not contain both Content-Length and Transfer-Encoding', - $request - ); - } - - if ($transferEncoding !== []) { - $tokens = []; - foreach ($transferEncoding as $value) { - foreach (\explode(',', $value) as $part) { - $tokens[] = \trim($part, " \t"); - } - } - - if (\count($tokens) !== 1 || !Psr7\Utils::caselessEquals($tokens[0], 'chunked') || $request->getProtocolVersion() !== '1.1') { - throw new RequestException('Unsupported Transfer-Encoding request header', $request); - } - } - - $bodySize = self::bodySize($request); - if ($bodySize !== null && $contentLength !== null && $bodySize !== $contentLength) { - throw new RequestException('Content-Length does not match the request body size', $request); - } - - if ($bodySize === null && $contentLength === null && $request->getProtocolVersion() === '1.0') { - throw new RequestException('An unknown-size HTTP/1.0 request body requires Content-Length', $request); - } - - if ($length === null && $bodySize !== null && ($bodySize > 0 || \in_array($request->getMethod(), ['PUT', 'POST'], true))) { - $contentLength = $bodySize; - $request = $request->withHeader('Content-Length', (string) $bodySize); - } - - return new self($request->withoutHeader('Transfer-Encoding'), $bodySize, $contentLength); - } - - /** - * Returns the number of bytes available for dispatch, or null when unknown. - * - * Seekable bodies use their total size because handlers rewind them. - * Positioned non-seekable bodies use the total size minus their current - * position. - * - * @throws RequestException when body metadata cannot be read safely - */ - public static function bodySize( - #[\SensitiveParameter] - RequestInterface $request - ): ?int { - $body = $request->getBody(); - - try { - $size = $body->getSize(); - if ($size === null) { - return null; - } - - if ($size < 0) { - throw new \RuntimeException('Request body size must not be negative'); - } - - $seekable = $body->isSeekable(); - } catch (\Exception $e) { - throw self::bodyException( - $request, - $e, - 'Timed out while determining the request body size', - 'Failed to determine the request body size' - ); - } - - if ($seekable) { - return $size; - } - - try { - $position = $body->tell(); - } catch (\RuntimeException $e) { - return null; - } - - if ($position < 0 || $position > $size) { - throw new RequestException('The request body position is outside the stream size', $request); - } - - return $size - $position; - } - - /** - * Materializes the body, stopping at the selected Content-Length when - * present. - * - * @throws RequestException when the body cannot be fully rewound or read - */ - public function materialize(): string - { - $body = $this->request->getBody(); - - if ($this->contentLength === null) { - try { - return (string) $body; - } catch (\Exception $e) { - throw self::bodyException( - $this->request, - $e, - 'Timed out while reading the request body', - 'Failed to read the request body' - ); - } - } - - if ($this->contentLength === 0) { - return ''; - } - - try { - if ($body->isSeekable()) { - $body->rewind(); - } - } catch (\Exception $e) { - throw self::bodyException( - $this->request, - $e, - 'Timed out while rewinding the request body', - 'Failed to rewind the request body' - ); - } - - $contents = ''; - $remaining = $this->contentLength; - while ($remaining > 0) { - $limit = \min(8192, $remaining); - - try { - $chunk = $body->read($limit); - } catch (\Exception $e) { - throw self::bodyException( - $this->request, - $e, - 'Timed out while reading the request body', - 'Failed to read the request body' - ); - } - - if ($chunk === '') { - throw new RequestException( - 'Request body ended before the declared Content-Length was reached', - $this->request - ); - } - - if (\strlen($chunk) > $limit) { - throw new RequestException('Request body stream returned more bytes than requested', $this->request); - } - - $contents .= $chunk; - $remaining -= \strlen($chunk); - } - - return $contents; - } - - private static function bodyException( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - \Exception $exception, - string $timeoutMessage, - string $fallbackMessage - ): RequestException { - $message = $exception instanceof TimeoutException - ? $timeoutMessage - : ($exception->getMessage() !== '' ? $exception->getMessage() : $fallbackMessage); - - return new RequestException($message, $request, 0, $exception); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php deleted file mode 100644 index adb0984d3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php +++ /dev/null @@ -1,1770 +0,0 @@ - true, - 'max_total_connections' => true, - 'transport_sharing' => true, - ]; - - private const CONNECTION_ERRORS = [ - 'php_network_getaddresses:', - 'getaddrinfo', - 'gethostbyname failed', - 'Unable to connect to', - 'Connection refused', - 'No connection could be made because the target machine actively refused it', - 'connection attempt failed', - 'connect() failed', - 'Network is unreachable', - 'No route to host', - 'Host is unreachable', - 'Host is down', - 'Cannot connect to HTTPS server through proxy', - 'Failed to enable crypto', - ]; - - private const CONNECT_TIMEOUT_ERRORS = [ - 'Connection timed out', - 'Operation timed out', - 'SSL: Handshake timed out', - 'did not properly respond after a period of time', - ]; - - private const NETWORK_ERRORS = [ - 'SSL: Connection reset by peer', - 'SSL: Broken pipe', - 'unexpected eof while reading', - ]; - - /** - * Default idle timeout in milliseconds when the "read_timeout" option is - * not set. Matches PHP's default_socket_timeout default, which the - * handler never consults. - */ - private const DEFAULT_IDLE_TIMEOUT_MS = 60000; - - private array $lastHeaders = []; - - private ?float $lastDeadline = null; - - private ?\Throwable $onStatsException = null; - - private string $transportSharingMode; - - private bool $connectionCapsConfigured = false; - - /** - * Accepts an associative array of options: - * - * - max_host_connections: Optional positive integer or null. A non-null - * value marks the handler as incompatible with enabled response - * streaming; the number is not used for stream-handler admission. - * - max_total_connections: Optional positive integer or null. A non-null - * value marks the handler as incompatible with enabled response - * streaming; the number is not used for stream-handler admission. - * - transport_sharing: Optional transport sharing mode. - * - * The stream handler cannot cap streamed connections, so a configured cap - * marker rejects enabled response streaming ("stream" => true). Accepted - * transfers are buffered and hold at most one connection per in-flight - * call, but overlapping buffered calls are not collectively limited. - * - * @param array{max_host_connections?: mixed, max_total_connections?: mixed, transport_sharing?: mixed} $options Array of options to use with the handler - */ - public function __construct(array $options = []) - { - foreach ($options as $name => $_) { - if (!isset(self::KNOWN_CONSTRUCTOR_OPTIONS[$name])) { - throw new InvalidArgumentException(\sprintf('Invalid StreamHandler constructor option "%s".', Psr7\DiagnosticValue::escape((string) $name))); - } - } - - $this->transportSharingMode = CurlShareHandleState::normalizeMode( - $options['transport_sharing'] ?? null, - 'transport_sharing' - ); - - foreach (['max_host_connections', 'max_total_connections'] as $capOption) { - $value = $options[$capOption] ?? null; - if ($value === null) { - continue; - } - - if (!\is_int($value) || $value < 1) { - throw new InvalidArgumentException(\sprintf('%s must be a positive integer.', $capOption)); - } - - $this->connectionCapsConfigured = true; - } - } - - /** - * Sends an HTTP request. - * - * @param RequestInterface $request Request to send. - * @param array $options Request transfer options. - * - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - $this->onStatsException = null; - - // Sleep if there is a delay specified. - if (isset($options['delay'])) { - \usleep((int) ($options['delay'] * 1000)); - } - - $multiplex = $options['multiplex'] ?? null; - - // Multiplexing::NONE is trivially satisfied: the stream handler sends - // one HTTP/1.x request per connection and never multiplexes. - if (null !== $multiplex && !\in_array($multiplex, [Multiplexing::NONE, Multiplexing::EAGER, Multiplexing::WAIT, Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new InvalidArgumentException(\sprintf( - 'The "multiplex" option must be null or a GuzzleHttp\\Multiplexing::* constant; received %s.', - \get_debug_type($multiplex) - )); - } - - if (\in_array($multiplex, [Multiplexing::REQUIRE_EAGER, Multiplexing::REQUIRE_WAIT], true)) { - throw new RequestException('The stream handler cannot guarantee a multiplexed protocol; required multiplexing needs a cURL handler.', $request); - } - - $protocolVersion = $request->getProtocolVersion(); - - if ('' === $protocolVersion) { - throw new RequestException('HTTP protocol version must not be empty.', $request); - } - - if (1 !== \preg_match('/^\d+(?:\.\d+)?$/D', $protocolVersion)) { - throw new RequestException('HTTP protocol version must be a valid HTTP version number.', $request); - } - - if ('1.0' !== $protocolVersion && '1.1' !== $protocolVersion) { - throw new RequestException(sprintf('HTTP/%s is not supported by the stream handler.', $protocolVersion), $request); - } - - if (isset($options['on_stats']) && !\is_callable($options['on_stats'])) { - throw new InvalidArgumentException('on_stats must be callable'); - } - - $startTime = isset($options['on_stats']) ? Clock::now() : null; - - self::rejectUnsupportedRequestOptions($request, $options); - $this->rejectStreamingWithConnectionCaps($options); - $this->assertTransportSharingSupported(); - - // The stream wrapper sends HEAD request bodies, unlike cURL's NOBODY - // path, so validate their framing normally. - $framing = RequestFraming::analyze($request->withoutHeader('Expect')); - $request = $framing->request; - - try { - self::assertRequestUriSupported($request, $options); - $body = $framing->materialize(); - if ($framing->contentLength === null && ($body !== '' || \in_array($request->getMethod(), ['PUT', 'POST'], true))) { - $request = $request->withHeader('Content-Length', (string) \strlen($body)); - } - - return $this->createResponse( - $request, - $options, - $this->createStream($request, $options, $body), - $startTime - ); - } catch (\InvalidArgumentException $e) { - throw $e; - } catch (\Exception $e) { - if ($this->isOnStatsException($e)) { - throw $e; - } - - if (!$e instanceof TransferException) { - $message = $e->getMessage(); - if (self::isSendError($message)) { - $e = self::isConnectTimeoutError($message) - ? new NetworkTimeoutException($message, $request, $e) - : new NetworkException($message, $request, $e); - } elseif (self::isConnectTimeoutError($message)) { - $e = new ConnectTimeoutException($message, $request, $e); - } elseif (self::isConnectionError($message)) { - $e = new ConnectException($message, $request, $e); - } elseif (self::isNetworkError($message)) { - $e = new NetworkException($message, $request, $e); - } else { - $e = new RequestException($message, $request, 0, $e); - } - } - $this->invokeStats($options, $request, $startTime, null, $e); - - /** @var PromiseInterface */ - return P\Create::rejectionFor($e); - } - } - - private function isOnStatsException(\Throwable $e): bool - { - if ($this->onStatsException !== $e) { - return false; - } - - $this->onStatsException = null; - - return true; - } - - private static function isConnectTimeoutError(string $message): bool - { - foreach (self::CONNECT_TIMEOUT_ERRORS as $timeoutError) { - if (Psr7\Utils::caselessContains($message, $timeoutError)) { - return true; - } - } - - return false; - } - - private static function isConnectionError(string $message): bool - { - foreach (self::CONNECTION_ERRORS as $connectionError) { - if (Psr7\Utils::caselessContains($message, $connectionError)) { - return true; - } - } - - return false; - } - - private static function isSendError(string $message): bool - { - // A failed write ("Send of N bytes failed ...") implies an established connection. - return Psr7\Utils::caselessContains($message, 'bytes failed with errno='); - } - - private static function isNetworkError(string $message): bool - { - foreach (self::NETWORK_ERRORS as $networkError) { - if (Psr7\Utils::caselessContains($message, $networkError)) { - return true; - } - } - - return false; - } - - private function invokeStats( - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - RequestInterface $request, - ?float $startTime, - #[\SensitiveParameter] - ?ResponseInterface $response = null, - #[\SensitiveParameter] - ?\Throwable $error = null - ): void { - if (isset($options['on_stats'])) { - $stats = new TransferStats($request, $response, Clock::now() - $startTime, $error, []); - try { - ($options['on_stats'])($stats); - } catch (\Throwable $e) { - $this->onStatsException = $e; - - throw $e; - } - } - } - - /** - * @param resource $stream - * - * @return PromiseInterface - */ - private function createResponse( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - $stream, - ?float $startTime - ): PromiseInterface { - $hdrs = $this->lastHeaders; - $this->lastHeaders = []; - $deadline = $this->lastDeadline; - $this->lastDeadline = null; - - try { - [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($hdrs); - } catch (\Throwable $e) { - return $this->rejectResponseCreation($options, $request, $startTime, $e); - } - - $canHaveBody = HeaderProcessor::responseCanHaveBody($request->getMethod(), $status); - $framingFailure = null; - $declaredLength = null; - try { - $declaredLength = HeaderProcessor::validateResponseFraming($request->getMethod(), $status, $headers); - if (empty($options['stream'])) { - HeaderProcessor::assertContentLengthWithinPlatformLimit($declaredLength); - } - } catch (\RuntimeException $e) { - $framingFailure = $e; - } - - if ($framingFailure === null) { - try { - $headers = $this->decodeChunkedResponse($headers, $stream, $canHaveBody); - } catch (\RuntimeException $e) { - $framingFailure = $e; - } - } - - $streamFactory = self::requireStreamFactory($options[RequestOptions::STREAM_FACTORY] ?? new Psr7\HttpFactory()); - $responseFactory = self::requireResponseFactory($options[RequestOptions::RESPONSE_FACTORY] ?? new Psr7\HttpFactory()); - - // Wrap the transport resource with the configured stream factory, and - // decorate buffered transfers with the deadline source before optional - // content decoding layers an InflateStream on top, so every read that - // pulls from the transport observes the deadline. - $resource = $stream; - $stream = $streamFactory->createStreamFromResource($stream); - if ($framingFailure === null && $deadline !== null && empty($options['stream'])) { - $stream = self::createDeadlineSource($stream, $resource, $deadline, $options); - } - - $encodedBody = null; - if ($framingFailure === null) { - [$stream, $headers, $encodedBody] = self::checkDecode($options, $headers, $stream, $declaredLength); - } - - $sink = $framingFailure !== null || !$canHaveBody - ? $streamFactory->createStream('') - : $this->createSink($stream, $options); - - try { - $response = $responseFactory->createResponse($status, $reason ?? '')->withProtocolVersion($ver); - foreach ($headers as $name => $value) { - $response = $response->withAddedHeader((string) $name, $value); - } - $response = $response->withBody($sink); - } catch (\Throwable $e) { - return $this->rejectResponseCreation($options, $request, $startTime, $e); - } - - if ($framingFailure !== null) { - try { - $stream->close(); - } catch (\Exception $e) { - // Best-effort release; a failing transport close must not - // mask the framing rejection. - } - - $reason = $framingFailure instanceof \OverflowException - ? new ResponseException($framingFailure->getMessage(), $request, $response, $framingFailure) - : new ResponseTransferException($framingFailure->getMessage(), $request, $response, $framingFailure); - $this->invokeStats($options, $request, $startTime, $response, $reason); - - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason); - } - - // The header phase inside fopen() can only bound the time between - // packets, so a header block that trickled in past the deadline is - // rejected here, once it is complete. The transport is closed so a - // streamed response cannot hold the connection open through the - // rejection. - if ($deadline !== null && Clock::now() >= $deadline) { - try { - $stream->close(); - } catch (\Exception $e) { - // Best-effort release; a failing transport close must not - // mask the timeout rejection. - } - - $reason = new ResponseTimeoutException('Timed out while receiving the response headers', $request, $response); - $this->invokeStats($options, $request, $startTime, $response, $reason); - - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason); - } - - if (isset($options['on_headers'])) { - try { - $options['on_headers']($response, $request); - } catch (\Throwable $e) { - $reason = new ResponseException('An error was encountered during the on_headers event', $request, $response, $e); - $this->invokeStats($options, $request, $startTime, $response, $reason); - - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason); - } - } - - if (!$canHaveBody) { - // RFC 9110 / RFC 9112 section 6.3: octets after the header section - // of a HEAD, 1xx, 204, 304, or CONNECT-2xx response are not part - // of this response's body. Never read them, and release the - // transport as soon as the headers are complete. - try { - $stream->close(); - } catch (\Exception $e) { - // Best-effort release; a failing transport close must not fail - // a fully received no-content response. - } - } elseif ($sink !== $stream) { - try { - $this->drain($request, $response, $stream, $sink, $declaredLength, $encodedBody); - } catch (ResponseException $e) { - $this->invokeStats($options, $request, $startTime, $response, $e); - - /** @var PromiseInterface */ - return P\Create::rejectionFor($e); - } - } - - $this->invokeStats($options, $request, $startTime, $response, null); - - /** @var PromiseInterface */ - return P\Create::promiseFor($response); - } - - /** - * @return PromiseInterface - */ - private function rejectResponseCreation( - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - RequestInterface $request, - ?float $startTime, - #[\SensitiveParameter] - \Throwable $previous - ): PromiseInterface { - $reason = new RequestException( - 'An error was encountered while creating the response', - $request, - 0, - $previous - ); - - $this->invokeStats($options, $request, $startTime, null, $reason); - - /** @var PromiseInterface */ - return P\Create::rejectionFor($reason); - } - - private function createSink( - StreamInterface $stream, - #[\SensitiveParameter] - array $options - ): StreamInterface { - if (!empty($options['stream'])) { - return $stream; - } - - $streamFactory = self::requireStreamFactory($options[RequestOptions::STREAM_FACTORY] ?? new Psr7\HttpFactory()); - $hasSink = isset($options['sink']); - $sink = $hasSink ? $options['sink'] : Psr7\Utils::tryFopen('php://temp', 'r+'); - - if ($hasSink && \is_resource($sink)) { - return self::streamForResourceSink(Psr7\Utils::streamFor($sink)); - } - - if (\is_string($sink)) { - return new Psr7\LazyOpenStream($sink, 'w+'); - } - - if (!\is_resource($sink)) { - return Psr7\Utils::streamFor($sink); - } - - return $streamFactory->createStreamFromResource($sink); - } - - /** - * Decorates a caller-owned sink stream so that closing the response body - * detaches Guzzle's wrapper without closing the original PHP resource. - */ - private static function streamForResourceSink(StreamInterface $stream): StreamInterface - { - return Psr7\FnStream::decorate($stream, [ - 'close' => static function () use ($stream): void { - $stream->detach(); - }, - ]); - } - - /** - * @param mixed $factory - */ - private static function requireStreamFactory($factory): StreamFactoryInterface - { - if (!$factory instanceof StreamFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::STREAM_FACTORY, - StreamFactoryInterface::class - )); - } - - return $factory; - } - - /** - * @param mixed $factory - */ - private static function requireResponseFactory($factory): ResponseFactoryInterface - { - if (!$factory instanceof ResponseFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::RESPONSE_FACTORY, - ResponseFactoryInterface::class - )); - } - - return $factory; - } - - /** - * Applies the HTTP wrapper's normal chunked-response handling. - * - * @param array $headers - * @param resource $stream - * @param bool $decodeBody Whether to attach the dechunk filter - * - * @return array - * - * @throws \RuntimeException when the dechunk filter cannot be attached - */ - private function decodeChunkedResponse(array $headers, $stream, bool $decodeBody): array - { - $decodedHeaders = $headers; - $decode = false; - - foreach ($headers as $name => $values) { - if (!Psr7\Utils::caselessEquals((string) $name, 'Transfer-Encoding')) { - continue; - } - - $remaining = []; - foreach ($values as $value) { - // Match PHP's legacy auto_decode prefix check so moving the - // filter does not change which responses are dechunked. - if (Psr7\Utils::caselessEquals(\substr($value, 0, 7), 'chunked')) { - $decode = true; - } else { - $remaining[] = $value; - } - } - - if ($remaining === []) { - unset($decodedHeaders[$name]); - } else { - $decodedHeaders[$name] = $remaining; - } - } - - if (!$decode) { - return $headers; - } - - if ($decodeBody) { - $this->createResource(static function () use ($stream) { - return \stream_filter_append($stream, 'dechunk', \STREAM_FILTER_READ); - }); - } - - return $decodedHeaders; - } - - /** - * @return array{0: StreamInterface, 1: array, 2: ?EncodedBodyStream} - */ - private static function checkDecode( - #[\SensitiveParameter] - array $options, - array $headers, - StreamInterface $stream, - ?string $declaredLength - ): array { - $encodedBody = null; - - // Automatically decode responses when instructed. - if (isset($options['decode_content']) && $options['decode_content'] !== false) { - $normalizedKeys = Utils::normalizeHeaderKeys($headers); - if (isset($normalizedKeys['content-encoding'])) { - $encoding = $headers[$normalizedKeys['content-encoding']]; - if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') { - if (empty($options['stream']) && $declaredLength !== null && $declaredLength !== '0') { - $encodedBody = new EncodedBodyStream($stream, $declaredLength); - $stream = $encodedBody; - } - - $stream = new Psr7\InflateStream($stream); - $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']]; - - // Remove content-encoding header - unset($headers[$normalizedKeys['content-encoding']]); - - // The decoded length cannot be known without inflating the - // stream, so keep the original length for inspection and - // drop the now-unknown Content-Length header. - $encodedContentLength = HeaderProcessor::removeHeader('Content-Length', $headers); - if ($encodedContentLength !== []) { - $headers['x-encoded-content-length'] = $encodedContentLength; - } - } - } - } - - return [$stream, $headers, $encodedBody]; - } - - /** - * Drains the source stream into the "sink" client option. - * - * @throws \RuntimeException when the sink option is invalid. - */ - private function drain( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - ResponseInterface $response, - StreamInterface $source, - StreamInterface $sink, - ?string $declaredResponseBodyLength, - ?EncodedBodyStream $encodedBody = null - ): StreamInterface { - try { - // Buffered paths reject unrepresentable lengths before draining. - $declaredLength = HeaderProcessor::contentLengthToInt($declaredResponseBodyLength); - $declaredLength = $declaredLength !== null && $declaredLength > 0 ? $declaredLength : null; - $copyLimit = $encodedBody === null ? $declaredLength ?? -1 : -1; - - try { - $target = $this->createResponseSink($request, $response, $sink); - // If a content-length header is provided, then stop reading once - // that number of bytes has been read. This can prevent infinitely - // reading from a stream when dealing with servers that do not - // honor Connection: Close headers. - $copied = Psr7\Utils::copyToStream($source, $target, $copyLimit); - } catch (ResponseException $e) { - throw $e; - } catch (TimeoutException $e) { - throw new ResponseTimeoutException( - 'Timed out while transferring the response body', - $request, - $response, - $e - ); - } catch (\OverflowException $e) { - throw new ResponseException($e->getMessage(), $request, $response, $e); - } catch (\Exception $e) { - // Any other response-body transfer failure surfaces as a - // ResponseTransferException carrying the response. - throw new ResponseTransferException( - $e->getMessage() !== '' ? $e->getMessage() : 'Failed while transferring the response body', - $request, - $response, - $e - ); - } - - $receivedLength = $encodedBody !== null ? $encodedBody->getBytesRead() : $copied; - if ($declaredLength !== null && $receivedLength < $declaredLength) { - throw new ResponseTransferException( - 'Response body ended before the declared Content-Length was reached', - $request, - $response - ); - } - - try { - if ($sink->isSeekable()) { - $sink->rewind(); - } - } catch (\Exception $e) { - throw new ResponseException( - $e->getMessage() !== '' ? $e->getMessage() : 'Failed to rewind the response body', - $request, - $response, - $e - ); - } - - return $sink; - } finally { - try { - $source->close(); - } catch (\Exception $e) { - // Best-effort cleanup after the response body has been received. - } - } - } - - private function createResponseSink( - RequestInterface $request, - ResponseInterface $response, - StreamInterface $sink - ): StreamInterface { - return Psr7\FnStream::decorate($sink, [ - 'close' => static function (): void { - }, - 'write' => static function (string $data) use ($request, $response, $sink): int { - try { - $written = $sink->write($data); - } catch (TimeoutException $e) { - throw new ResponseException( - 'Timed out while writing the response body', - $request, - $response, - $e - ); - } catch (\Exception $e) { - throw new ResponseException( - $e->getMessage() !== '' ? $e->getMessage() : 'Failed to write the response body', - $request, - $response, - $e - ); - } - - if ($written <= 0) { - throw new ResponseException('Unable to write to stream', $request, $response); - } - - return $written; - }, - 'getMetadata' => static function (?string $key = null) use ($sink) { - // Force timed_out to false so Utils::writeAll() can't reclassify a sink-write - // failure as a transport timeout. Sink write failures are ResponseException; - // source-read timeouts are ResponseTimeoutException. - if ($key === 'timed_out') { - return false; - } - - return $sink->getMetadata($key); - }, - ]); - } - - /** - * Decorates the transport stream so each buffered-body read observes the - * remaining wall-clock budget of the "timeout" request option, bounded - * by the "read_timeout" idle timeout when that is shorter. The transport - * is switched to non-blocking mode because filtered reads (chunked and - * compressed responses) otherwise block until a full buffer arrives, - * which would keep the deadline from being enforced between small pieces - * of data. - * - * @param resource $resource - */ - private static function createDeadlineSource( - StreamInterface $stream, - $resource, - float $deadline, - #[\SensitiveParameter] - array $options - ): StreamInterface { - $idleTimeout = isset($options['read_timeout']) - ? Timeout::toMilliseconds($options['read_timeout'], 'read_timeout') - : self::DEFAULT_IDLE_TIMEOUT_MS; - - \stream_set_blocking($resource, false); - - return new DeadlineSourceStream($stream, $deadline, $idleTimeout > 0 ? $idleTimeout / 1000 : null); - } - - /** - * Create a resource and check to ensure it was created successfully - * - * @param callable(): (resource|false) $callback Callable that returns a stream resource, or false when resource creation fails. - * - * @return resource - * - * @throws \RuntimeException when the callback returns false or resource creation emits an error. - */ - private function createResource(callable $callback) - { - $errors = []; - \set_error_handler(static function (int $_, string $msg, string $file, int $line) use (&$errors): bool { - $errors[] = [ - 'message' => $msg, - 'file' => $file, - 'line' => $line, - ]; - - return true; - }); - - try { - $resource = $callback(); - } finally { - \restore_error_handler(); - } - - if (!$resource) { - $details = []; - foreach ($errors as $err) { - foreach ($err as $key => $value) { - $details[] = \sprintf('[%s] %s', $key, Psr7\DiagnosticValue::escape((string) $value)); - } - } - - $message = 'Error creating resource'; - if ($details !== []) { - $message .= ': '.\implode('; ', $details); - } - - throw new \RuntimeException($message); - } - - return $resource; - } - - /** - * @return resource - */ - private function createStream( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - string $body - ) { - // HTTP/1.1 streams using the PHP stream wrapper require a - // Connection: close header - if ($request->getProtocolVersion() === '1.1' - && !$request->hasHeader('Connection') - ) { - $request = $request->withHeader('Connection', 'close'); - } - - // Ensure SSL is verified by default - if (!isset($options['verify'])) { - $options['verify'] = true; - } - - $params = []; - $context = $this->getDefaultContext($request, $body); - - if (isset($options['on_headers']) && !\is_callable($options['on_headers'])) { - throw new InvalidArgumentException('on_headers must be callable'); - } - - $idleTimeout = isset($options['read_timeout']) - ? Timeout::toMilliseconds($options['read_timeout'], 'read_timeout') - : self::DEFAULT_IDLE_TIMEOUT_MS; - - $timeout = isset($options['timeout']) - ? Timeout::toMilliseconds($options['timeout'], 'timeout') - : 0; - - self::assertTlsVersionRangeForOptions($request, $options); - - $this->applyHandlerOptions($request, $context, $options, $params); - - // Resolve the proxy unconditionally (option first, then environment), - // so an env-configured proxy applies even when no proxy option is set. - $this->applyProxy($request, $context, $options['proxy'] ?? null); - - if (isset($options['stream_context'])) { - $streamContext = $options['stream_context']; - if (!\is_array($streamContext)) { - throw new InvalidArgumentException('stream_context must be an array'); - } - self::rejectConflictingStreamContextOptions($streamContext); - self::rejectUnsupportedStreamContextOptions($streamContext); - $context = \array_replace_recursive($context, $streamContext); - } - - $this->addDefaultTlsMinimum($request, $context); - - // The context timeout governs connecting and the header-phase packet - // gaps: the idle timeout, tightened to the deadline when that is - // lower; -1 disables it so default_socket_timeout is never consulted. - if ($timeout > 0 && ($idleTimeout <= 0 || $timeout < $idleTimeout)) { - $context['http']['timeout'] = $timeout / 1000; - } elseif ($idleTimeout > 0) { - $context['http']['timeout'] = $idleTimeout / 1000; - } else { - $context['http']['timeout'] = -1; - } - - $uri = $this->resolveHost($request, $options); - - $contextResource = $this->createResource( - static function () use ($context, $params) { - return \stream_context_create($context, $params); - } - ); - - return $this->createResource( - function () use ($uri, $contextResource, $idleTimeout, $timeout) { - $this->lastDeadline = $timeout > 0 ? Clock::now() + $timeout / 1000 : null; - - // Blank the from ini setting for the transfer so ambient - // configuration cannot leak into a From header; the wrapper - // cannot omit the header, so a configured ini sends it empty. - $iniFrom = \function_exists('ini_set') ? \ini_set('from', '') : false; - try { - $resource = @\fopen((string) $uri, 'r', false, $contextResource); - } finally { - if ($iniFrom !== false) { - \ini_set('from', $iniFrom); - } - } - - // PHP 8.5 deprecates the local $http_response_header variable. - if (function_exists('http_get_last_response_headers')) { - $http_response_header = \http_get_last_response_headers(); - } - - $this->lastHeaders = $http_response_header ?? []; - - if (false === $resource) { - return false; - } - - // Arm reads with the idle timeout, replacing the context - // value the deadline may have tightened; -1 disables it. - if ($idleTimeout > 0) { - $sec = \intdiv($idleTimeout, 1000); - $usec = ($idleTimeout % 1000) * 1000; - \stream_set_timeout($resource, $sec, $usec); - } else { - \stream_set_timeout($resource, -1); - } - - return $resource; - } - ); - } - - private static function assertRequestUriSupported( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): void { - $uri = $request->getUri(); - $scheme = $uri->getScheme(); - if ($scheme === '') { - throw new RequestException( - 'URI must include a scheme and host. Use an absolute URI, a network-path reference starting with //, or configure a base_uri.', - $request - ); - } - - if (!\in_array($scheme, ['http', 'https'], true)) { - throw new RequestException(\sprintf("The scheme '%s' is not supported.", Psr7\DiagnosticValue::escape($scheme)), $request); - } - - $protocols = Utils::normalizeProtocols($options['protocols'] ?? ['http', 'https']); - if (!\in_array($scheme, $protocols, true)) { - throw new RequestException(\sprintf('The scheme "%s" is not allowed by the protocols request option.', Psr7\DiagnosticValue::escape($scheme)), $request); - } - - if ($uri->getHost() === '') { - throw new RequestException( - 'URI must include a scheme and host. Use an absolute URI, a network-path reference starting with //, or configure a base_uri.', - $request - ); - } - - HostValidator::assertRequestHost($request); - } - - private function applyHandlerOptions( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array &$context, - #[\SensitiveParameter] - array $options, - array &$params - ): void { - foreach ($options as $key => $value) { - if ($key === 'crypto_method') { - $this->applyCryptoMethodOption($context, $value); - } elseif ($key === 'crypto_method_max') { - $this->applyCryptoMethodMaxOption($context, $value); - } elseif ($key === 'verify') { - $this->applyVerifyOption($context, $value); - } elseif ($key === 'cert') { - $this->applyCertOption($context, $value); - } elseif ($key === 'cert_type') { - $this->applyCertTypeOption($value); - } elseif ($key === 'ssl_key') { - $this->applySslKeyOption($context, $value); - } elseif ($key === 'ssl_key_type') { - $this->applySslKeyTypeOption($value); - } elseif ($key === 'progress') { - $this->applyProgressOption($value, $params); - } elseif ($key === 'debug') { - $this->applyDebugOption($request, $value, $params); - } - } - } - - private function resolveHost( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): UriInterface { - $uri = $request->getUri(); - - $host = $uri->getHost(); - - // Fold a numeric IPv4 spelling to the dotted quad libcurl connects - // to, rather than leaving it to the platform resolver: macOS reads - // the zero-padded 0177 as decimal 177 where glibc, musl and FreeBSD - // read octal 127. The Host header is serialized from the request and - // stays as written; the TLS peer name follows the same fold. - $canonicalHost = self::canonicalConnectionHost($host); - if ($canonicalHost !== $host) { - $uri = $uri->withHost($canonicalHost); - $host = $canonicalHost; - } - - $hostForIpCheck = \str_starts_with($host, '[') && \str_ends_with($host, ']') - ? \substr($host, 1, -1) - : $host; - if (isset($options['force_ip_resolve']) && !\filter_var($hostForIpCheck, \FILTER_VALIDATE_IP)) { - if ('v4' === $options['force_ip_resolve']) { - $records = \dns_get_record($uri->getHost(), \DNS_A); - if (false === $records || !isset($records[0]['ip'])) { - throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", Psr7\DiagnosticValue::escape($uri->getHost())), $request); - } - - return $uri->withHost($records[0]['ip']); - } - if ('v6' === $options['force_ip_resolve']) { - $records = \dns_get_record($uri->getHost(), \DNS_AAAA); - if (false === $records || !isset($records[0]['ipv6'])) { - throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", Psr7\DiagnosticValue::escape($uri->getHost())), $request); - } - - return $uri->withHost('['.$records[0]['ipv6'].']'); - } - } - - return $uri; - } - - /** - * Returns a numeric IPv4 spelling folded to the dotted quad libcurl's - * ipv4_normalize() produces, and every other host unchanged. - */ - private static function canonicalConnectionHost(string $host): string - { - $binary = HostIdentity::numericIpv4ToBinary($host); - if ($binary === null) { - return $host; - } - - return (string) \inet_ntop($binary); - } - - private function addDefaultTlsMinimum(RequestInterface $request, array &$context): void - { - if ('https' !== $request->getUri()->getScheme() || !isset($context['ssl']) || !\is_array($context['ssl'])) { - return; - } - - if ( - \array_key_exists('crypto_method', $context['ssl']) - || \array_key_exists('min_proto_version', $context['ssl']) - ) { - return; - } - - $context['ssl']['min_proto_version'] = \STREAM_CRYPTO_PROTO_TLSv1_2; - } - - private function getDefaultContext( - #[\SensitiveParameter] - RequestInterface $request, - string $body - ): array { - $headers = ''; - foreach ($request->getHeaders() as $name => $value) { - // The first-class Proxy-Authorization field never enters the - // stream context header block: PHP streams have no proxy-only - // header channel, so applyProxy() rejects the field when a proxy - // is selected and it is omitted on direct and bypassed routes. - if (Psr7\Utils::caselessEquals((string) $name, 'Proxy-Authorization')) { - continue; - } - - foreach ($value as $val) { - $headers .= "$name: $val\r\n"; - } - } - - $context = [ - 'http' => [ - 'auto_decode' => false, - 'method' => $request->getMethod(), - 'header' => $headers, - 'protocol_version' => $request->getProtocolVersion(), - 'ignore_errors' => true, - 'follow_location' => 0, - ], - 'ssl' => [ - 'peer_name' => self::canonicalConnectionHost($request->getUri()->getHost()), - ], - ]; - - // An empty context user_agent stops the HTTP stream wrapper from - // appending a User-Agent header from the user_agent ini setting, so a - // request without the header sends none, like the cURL handlers. - if (!$request->hasHeader('User-Agent')) { - $context['http']['user_agent'] = ''; - } - - if ('' !== $body) { - $context['http']['content'] = $body; - // Prevent the HTTP handler from adding a Content-Type header. - if (!$request->hasHeader('Content-Type')) { - $context['http']['header'] .= "Content-Type:\r\n"; - } - } - - $context['http']['header'] = \rtrim($context['http']['header'], "\r\n"); - - return $context; - } - - private static function rejectUnsupportedRequestOptions( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): void { - if ( - \array_key_exists('curl', $options) - && $options['curl'] !== null - && $options['curl'] !== [] - ) { - throw new InvalidArgumentException('Passing the "curl" request option to the stream handler is not supported because the stream handler ignores cURL options.'); - } - - if (\array_key_exists('expect', $options) && $options['expect'] !== false && $request->hasHeader('Expect')) { - throw new InvalidArgumentException('Passing the "expect" request option to the stream handler is not supported when it adds an Expect header because the stream handler does not support Expect: 100-Continue.'); - } - - if (isset($options['on_trailers'])) { - throw new InvalidArgumentException('Passing the "on_trailers" request option to the stream handler is not supported because the stream handler cannot observe trailers.'); - } - } - - private function rejectStreamingWithConnectionCaps( - #[\SensitiveParameter] - array $options - ): void { - if ($this->connectionCapsConfigured && !empty($options['stream'])) { - throw new InvalidArgumentException('Enabling the "stream" request option on a stream handler configured with the "max_host_connections" or "max_total_connections" option is not supported because streamed connections cannot be capped.'); - } - } - - private static function rejectConflictingStreamContextOptions( - #[\SensitiveParameter] - array $streamContext - ): void { - $conflictingOptions = self::conflictingStreamContextOptions(); - - foreach ($streamContext as $wrapper => $contextOptions) { - if (!\is_string($wrapper) || !isset($conflictingOptions[$wrapper]) || !\is_array($contextOptions)) { - continue; - } - - foreach ($contextOptions as $option => $_) { - if (!\is_string($option) || !\array_key_exists($option, $conflictingOptions[$wrapper])) { - continue; - } - - $replacement = $conflictingOptions[$wrapper][$option]; - throw new InvalidArgumentException(\sprintf( - 'Passing stream_context.%s.%s in the "stream_context" request option is not supported because it conflicts with Guzzle-managed request handling. Use %s instead.', - Psr7\DiagnosticValue::escape($wrapper), - Psr7\DiagnosticValue::escape($option), - $replacement - )); - } - } - } - - private static function rejectUnsupportedStreamContextOptions( - #[\SensitiveParameter] - array $streamContext - ): void { - $unsupportedOptions = self::unsupportedStreamContextOptions($streamContext); - if ($unsupportedOptions === []) { - return; - } - - throw new InvalidArgumentException(\sprintf( - 'Passing PHP stream context options outside the built-in stream handler allow-list to the "stream_context" request option is not supported. Unsupported option%s: %s.', - \count($unsupportedOptions) === 1 ? '' : 's', - \implode(', ', $unsupportedOptions) - )); - } - - /** - * @return string[] - */ - private static function unsupportedStreamContextOptions(array $streamContext): array - { - $supportedOptions = self::supportedStreamContextOptions(); - $conflictingOptions = self::conflictingStreamContextOptions(); - $unsupportedOptions = []; - - foreach ($streamContext as $wrapper => $contextOptions) { - if (!\is_string($wrapper) || !isset($supportedOptions[$wrapper])) { - if (\is_array($contextOptions)) { - foreach ($contextOptions as $option => $_) { - if (\is_string($wrapper) && \is_string($option) && isset($conflictingOptions[$wrapper]) && \array_key_exists($option, $conflictingOptions[$wrapper])) { - continue; - } - - $unsupportedOptions[] = \sprintf('stream_context.%s.%s', Psr7\DiagnosticValue::escape((string) $wrapper), Psr7\DiagnosticValue::escape((string) $option)); - } - } else { - $unsupportedOptions[] = \sprintf('stream_context.%s', Psr7\DiagnosticValue::escape((string) $wrapper)); - } - - continue; - } - - if (!\is_array($contextOptions)) { - $unsupportedOptions[] = \sprintf('stream_context.%s', Psr7\DiagnosticValue::escape($wrapper)); - - continue; - } - - foreach ($contextOptions as $option => $_) { - if (\is_string($option) && isset($conflictingOptions[$wrapper]) && \array_key_exists($option, $conflictingOptions[$wrapper])) { - continue; - } - - if (!\is_string($option) || !\array_key_exists($option, $supportedOptions[$wrapper])) { - $unsupportedOptions[] = \sprintf('stream_context.%s.%s', Psr7\DiagnosticValue::escape($wrapper), Psr7\DiagnosticValue::escape((string) $option)); - } - } - } - - return $unsupportedOptions; - } - - /** - * @return array> - */ - private static function supportedStreamContextOptions(): array - { - return [ - 'http' => [ - 'request_fulluri' => true, - ], - 'socket' => [ - 'bindto' => true, - 'tcp_nodelay' => true, - ], - 'ssl' => [ - 'SNI_enabled' => true, - 'capture_peer_cert' => true, - 'capture_peer_cert_chain' => true, - 'ciphers' => true, - 'disable_compression' => true, - 'no_ticket' => true, - 'peer_fingerprint' => true, - 'security_level' => true, - 'verify_depth' => true, - ], - ]; - } - - /** - * @return array> - */ - private static function conflictingStreamContextOptions(): array - { - return [ - 'http' => [ - 'auto_decode' => 'Guzzle response framing and decoding', - 'content' => 'the request body', - 'follow_location' => 'the "allow_redirects" request option', - 'header' => 'the request headers', - 'max_redirects' => 'the "allow_redirects" request option', - 'method' => 'the request method', - 'protocol_version' => 'the request protocol version', - 'proxy' => 'the "proxy" request option', - 'timeout' => 'the "timeout" and "read_timeout" request options', - ], - 'ssl' => [ - 'allow_self_signed' => 'the "verify" request option', - 'cafile' => 'the "verify" request option', - 'capath' => 'the "verify" request option', - 'crypto_method' => 'the "crypto_method" request option', - 'local_cert' => 'the "cert" request option', - 'local_pk' => 'the "ssl_key" request option', - 'max_proto_version' => 'the "crypto_method_max" request option', - 'min_proto_version' => 'the "crypto_method" request option', - 'passphrase' => 'the "cert" or "ssl_key" request option', - 'peer_name' => 'the request URI', - 'verify_peer' => 'the "verify" request option', - 'verify_peer_name' => 'the "verify" request option', - ], - ]; - } - - private function assertTransportSharingSupported(): void - { - if ($this->transportSharingMode === TransportSharing::PERSISTENT_REQUIRE) { - throw new InvalidArgumentException('The "transport_sharing" option requires persistent transport sharing, which is only available through cURL share handles.'); - } - - if ($this->transportSharingMode === TransportSharing::HANDLER_REQUIRE) { - throw new InvalidArgumentException('The "transport_sharing" option requires transport sharing, but the stream handler does not support it.'); - } - } - - /** - * @param mixed $value as passed via Request transfer options. - * - * @return array{0: string, 1: string|null} - */ - private static function normalizeTlsFileOption( - string $option, - #[\SensitiveParameter] - $value - ): array { - $passphrase = null; - - if (\is_array($value)) { - if (!isset($value[0]) || !\is_string($value[0])) { - throw new InvalidArgumentException(\sprintf('Invalid %s request option', $option)); - } - if (isset($value[1])) { - if (!\is_string($value[1])) { - throw new InvalidArgumentException(\sprintf('Invalid %s request option', $option)); - } - $passphrase = $value[1]; - } - $value = $value[0]; - } - - if (!\is_string($value)) { - throw new InvalidArgumentException(\sprintf('Invalid %s request option', $option)); - } - - return [$value, $passphrase]; - } - - private static function setTlsPassphrase( - #[\SensitiveParameter] - array &$options, - #[\SensitiveParameter] - ?string $passphrase, - string $option - ): void { - if ($passphrase === null) { - return; - } - - if (isset($options['ssl']['passphrase']) && $options['ssl']['passphrase'] !== $passphrase) { - throw new InvalidArgumentException(\sprintf('Cannot use different passphrases for cert and ssl_key with the stream handler; %s conflicts with an existing TLS passphrase.', $option)); - } - - $options['ssl']['passphrase'] = $passphrase; - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private static function assertStreamTlsType(string $option, $value): void - { - if (!\is_string($value) || $value === '') { - throw new InvalidArgumentException(\sprintf('%s must be a non-empty string', $option)); - } - - if (Psr7\Utils::asciiToUpper($value) !== 'PEM') { - throw new InvalidArgumentException(\sprintf('The stream handler only supports "PEM" for the %s request option.', $option)); - } - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyProxy( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array &$context, - #[\SensitiveParameter] - $value - ): void { - $proxy = ProxyEnv::resolveProxySelection($request->getUri(), $value); - $proxyUri = $proxy->getProxy(); - if ($proxyUri === null) { - return; - } - - // Validate the whole proxy authority up front (ProxyOptions leans on - // Psr7\Rfc3986), so a malformed proxy fails the same way on every - // handler. PHP's HTTP stream wrapper can only carry HTTP over a - // TCP-family socket, so reject any scheme it can never execute instead - // of letting PHP fail with a misleading "unable to find the socket - // transport" error. The supported set is a scheme-less value, http, or - // a TCP-family transport (tcp://, ssl://, tls://, tlsv1.*) the build has. - $scheme = ProxyOptions::proxyScheme($proxyUri); - - if ($scheme === 'https') { - throw new InvalidArgumentException('HTTPS proxies are not supported by the stream handler.'); - } - - if (\in_array($scheme, ['socks4', 'socks4a', 'socks5', 'socks5h'], true)) { - throw new InvalidArgumentException('SOCKS proxies are not supported by the stream handler.'); - } - - // Only http or a TCP-family raw transport (tcp, ssl, tls, tlsv1.*) can - // carry HTTP through the stream wrapper; udp/unix/udg/ftp/ws and typos - // cannot on any build, so reject them as a caller error rather than - // install an unusable proxy. - if ($scheme !== 'http' && !self::isRawTransportName($scheme)) { - throw new InvalidArgumentException(\sprintf('The "%s" proxy scheme is not supported by the stream handler.', Psr7\DiagnosticValue::escape($scheme))); - } - - // A recognized SSL/TLS transport may still be absent from this build - // (tls:// without OpenSSL, tlsv1.3:// on OpenSSL < 1.1.1); that is - // build-specific, so it is a RequestException, distinct from the caller - // error above. http maps to tcp and tcp is always registered, so only - // the SSL/TLS family reaches the stream_get_transports() lookup. - if (!\in_array($scheme, ['http', 'tcp'], true) && !\in_array($scheme, \stream_get_transports(), true)) { - throw new RequestException(\sprintf('The "%s" proxy transport is not available in this PHP build.', Psr7\DiagnosticValue::escape($scheme)), $request); - } - - $parsed = $this->parseProxy($proxyUri, $scheme); - - // PHP streams do not expose separate proxy and origin header lists; - // the wrapper's CONNECT handling copies one textual match out of a - // generic user-header buffer and forwards the rest to the tunneled - // origin, so arbitrary first-class Proxy-Authorization values cannot - // be routed safely. Fail closed before any stream is created. - if ($request->hasHeader('Proxy-Authorization')) { - throw new InvalidArgumentException('Proxy-Authorization request headers are not supported through the stream handler; configure credentials in the proxy URI or use a cURL handler.'); - } - - $context['http']['proxy'] = $parsed['proxy']; - - if ($parsed['auth']) { - if (!isset($context['http']['header'])) { - $context['http']['header'] = ''; - } - $context['http']['header'] .= "\r\nProxy-Authorization: {$parsed['auth']}"; - } - } - - /** - * Whether the scheme is a TCP-family transport name that can carry HTTP - * for a proxy (tcp, ssl, tls, tlsv1.*), regardless of build support. - */ - private static function isRawTransportName(string $scheme): bool - { - return \in_array($scheme, ['tcp', 'ssl', 'tls'], true) - || \preg_match('/^tlsv\d+(?:\.\d+)?$/D', $scheme) === 1; - } - - /** - * Parses the given proxy URL to make it compatible with the format PHP's - * stream context expects. - */ - private function parseProxy(string $url, string $scheme): array - { - // applyProxy() has already validated the scheme, so only an http - // proxy needs translating to the tcp:// form the wrapper expects; a - // port-less proxy defaults to 1080 to match libcurl's HTTP default. - if ($scheme !== 'http') { - return [ - 'proxy' => $url, - 'auth' => null, - ]; - } - - $parsed = \parse_url(\strpos($url, '://') === false ? 'http://'.$url : $url); - if (\is_array($parsed) && isset($parsed['host'])) { - $port = $parsed['port'] ?? 1080; - $user = $parsed['user'] ?? ''; - $pass = $parsed['pass'] ?? ''; - $auth = ($user !== '' || $pass !== '') ? 'Basic '.\base64_encode("{$user}:{$pass}") : null; - - return [ - 'proxy' => "tcp://{$parsed['host']}:{$port}", - 'auth' => $auth, - ]; - } - - return [ - 'proxy' => $url, - 'auth' => null, - ]; - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyCryptoMethodOption( - #[\SensitiveParameter] - array &$context, - $value - ): void { - $context['ssl']['min_proto_version'] = TlsVersion::streamProtocolVersion('crypto_method', $value); - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyCryptoMethodMaxOption( - #[\SensitiveParameter] - array &$context, - $value - ): void { - $context['ssl']['max_proto_version'] = TlsVersion::streamProtocolVersion('crypto_method_max', $value); - } - - private static function assertTlsVersionRangeForOptions( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): void { - if (!isset($options['crypto_method_max'])) { - return; - } - - $cryptoMethod = $options['crypto_method'] ?? null; - if ($cryptoMethod === null && 'https' === $request->getUri()->getScheme()) { - $cryptoMethod = \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; - } - - TlsVersion::assertRange($cryptoMethod, $options['crypto_method_max']); - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyVerifyOption( - #[\SensitiveParameter] - array &$context, - $value - ): void { - if ($value === false) { - $context['ssl']['verify_peer'] = false; - $context['ssl']['verify_peer_name'] = false; - - return; - } - - if (\is_string($value)) { - $context['ssl']['cafile'] = $value; - if (!\file_exists($value)) { - throw new \RuntimeException(\sprintf('SSL CA bundle not found: %s', Psr7\DiagnosticValue::escape($value))); - } - } elseif ($value !== true) { - throw new InvalidArgumentException('Invalid verify request option'); - } - - $context['ssl']['verify_peer'] = true; - $context['ssl']['verify_peer_name'] = true; - $context['ssl']['allow_self_signed'] = false; - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyCertOption( - #[\SensitiveParameter] - array &$context, - #[\SensitiveParameter] - $value - ): void { - [$value, $passphrase] = self::normalizeTlsFileOption('cert', $value); - - if (!\file_exists($value)) { - throw new \RuntimeException(\sprintf('SSL certificate not found: %s', Psr7\DiagnosticValue::escape($value))); - } - - self::setTlsPassphrase($context, $passphrase, 'cert'); - $context['ssl']['local_cert'] = $value; - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyCertTypeOption($value): void - { - self::assertStreamTlsType('cert_type', $value); - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applySslKeyOption( - #[\SensitiveParameter] - array &$context, - #[\SensitiveParameter] - $value - ): void { - [$value, $passphrase] = self::normalizeTlsFileOption('ssl_key', $value); - - if (!\file_exists($value)) { - throw new \RuntimeException(\sprintf('SSL private key not found: %s', Psr7\DiagnosticValue::escape($value))); - } - - self::setTlsPassphrase($context, $passphrase, 'ssl_key'); - $context['ssl']['local_pk'] = $value; - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applySslKeyTypeOption($value): void - { - self::assertStreamTlsType('ssl_key_type', $value); - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyProgressOption($value, array &$params): void - { - if (!\is_callable($value)) { - throw new InvalidArgumentException('progress client option must be callable'); - } - - self::addNotification( - $params, - static function ($code, $a, $b, $c, $transferred, $total) use ($value): void { - if ($code == \STREAM_NOTIFY_PROGRESS) { - // The upload progress cannot be determined. Use 0 for cURL compatibility: - // https://curl.se/libcurl/c/CURLOPT_PROGRESSFUNCTION.html - $value( - TransferByteCounter::progressValueToInt($total), - TransferByteCounter::progressValueToInt($transferred), - 0, - 0 - ); - } - } - ); - } - - /** - * @param mixed $value as passed via Request transfer options. - */ - private function applyDebugOption( - #[\SensitiveParameter] - RequestInterface $request, - $value, - array &$params - ): void { - if ($value === false) { - return; - } - - static $map = [ - \STREAM_NOTIFY_CONNECT => 'CONNECT', - \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', - \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', - \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', - \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', - \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', - \STREAM_NOTIFY_PROGRESS => 'PROGRESS', - \STREAM_NOTIFY_FAILURE => 'FAILURE', - \STREAM_NOTIFY_COMPLETED => 'COMPLETED', - \STREAM_NOTIFY_RESOLVE => 'RESOLVE', - ]; - static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max']; - - $value = Utils::debugResource($value); - $ident = $request->getMethod().' '.$request->getUri()->withFragment(''); - self::addNotification( - $params, - static function (int $code, ...$passed) use ($ident, $value, $map, $args): void { - \fprintf($value, '<%s> [%s] ', $ident, $map[$code]); - foreach (\array_filter($passed) as $i => $v) { - \fwrite($value, $args[$i].': "'.$v.'" '); - } - \fwrite($value, "\n"); - } - ); - } - - private static function addNotification(array &$params, callable $notify): void - { - // Wrap the existing function if needed. - if (!isset($params['notification'])) { - $params['notification'] = $notify; - } else { - $params['notification'] = self::callArray([ - $params['notification'], - $notify, - ]); - } - } - - private static function callArray(array $functions): callable - { - return static function (...$args) use ($functions): void { - foreach ($functions as $fn) { - $fn(...$args); - } - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Timeout.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Timeout.php deleted file mode 100644 index 0c9da6cd9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/Timeout.php +++ /dev/null @@ -1,41 +0,0 @@ - 0 && $milliseconds === 0) { - throw new InvalidArgumentException($option.' must be 0 or greater than or equal to 0.001 seconds'); - } - - return $milliseconds; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/TlsVersion.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/TlsVersion.php deleted file mode 100644 index 90cf7c8f5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Handler/TlsVersion.php +++ /dev/null @@ -1,70 +0,0 @@ - \PHP_INT_MAX - || (\PHP_INT_SIZE === 8 && $value >= (float) \PHP_INT_MAX) - ) { - throw new \OverflowException('Progress byte count exceeds the maximum integer size supported on this platform'); - } - - $intValue = (int) $value; - if ($intValue < 0) { - throw new \OverflowException('Progress byte count exceeds the maximum integer size supported on this platform'); - } - - return $intValue; - } - - public static function add(int $current, int $delta, string $message): int - { - if ($current < 0 || $delta < 0) { - throw new \OverflowException($message); - } - - if ($delta > \PHP_INT_MAX - $current) { - throw new \OverflowException($message); - } - - return $current + $delta; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/HandlerStack.php deleted file mode 100644 index ed49d7e4e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/HandlerStack.php +++ /dev/null @@ -1,274 +0,0 @@ - - */ - private array $stack = []; - - /** - * @var (callable&THandler)|null - */ - private $cached; - - /** - * Creates a default handler stack that can be used by clients. - * - * The returned handler will wrap the provided handler or use the most - * appropriate default handler for your system. The returned HandlerStack - * has support for authentication, cookies, redirects, HTTP error - * exceptions, and preparing a body before sending. - * - * The returned handler stack can be passed to a client in the "handler" - * option. - * - * @param (callable(RequestInterface, array): PromiseInterface)|null $handler HTTP handler function to use with the stack. If no - * handler is provided, the best handler for your - * system will be utilized. - * - * @return self): PromiseInterface> - */ - public static function create(?callable $handler = null): self - { - $stack = new self($handler ?: Utils::chooseHandler()); - $stack->push(Middleware::httpErrors(), 'http_errors'); - $stack->push(Middleware::redirect(), 'allow_redirects'); - $stack->push(Middleware::auth(), 'auth'); - $stack->push(Middleware::cookies(), 'cookies'); - $stack->push(Middleware::prepareBody(), 'prepare_body'); - - return $stack; - } - - /** - * @param (callable&THandler)|null $handler Underlying handler. - */ - public function __construct(?callable $handler = null) - { - $this->handler = $handler; - } - - /** - * Invokes the handler stack as a composed handler - * - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) { - $handler = $this->resolve(); - - return $handler($request, $options); - } - - /** - * Set the HTTP handler that actually returns a promise. - * - * @param callable&THandler $handler Accepts a request and array of options and returns a value expected by the stack. - */ - public function setHandler(callable $handler): void - { - $this->handler = $handler; - $this->cached = null; - } - - /** - * Returns true if the builder has a handler. - */ - public function hasHandler(): bool - { - return $this->handler !== null; - } - - /** - * Unshift a middleware to the bottom of the stack. - * - * @param callable(callable&THandler): (callable&THandler) $middleware Middleware function - * @param string $name Name to register for this middleware. - */ - public function unshift(callable $middleware, ?string $name = null): void - { - \array_unshift($this->stack, [$middleware, $name]); - $this->cached = null; - } - - /** - * Push a middleware to the top of the stack. - * - * @param callable(callable&THandler): (callable&THandler) $middleware Middleware function - * @param string $name Name to register for this middleware. - */ - public function push(callable $middleware, string $name = ''): void - { - $this->stack[] = [$middleware, $name]; - $this->cached = null; - } - - /** - * Add a middleware before another middleware by name. - * - * @param string $findName Middleware to find - * @param callable(callable&THandler): (callable&THandler) $middleware Middleware function - * @param string $withName Name to register for this middleware. - */ - public function before(string $findName, callable $middleware, string $withName = ''): void - { - $this->splice($findName, $withName, $middleware, true); - } - - /** - * Add a middleware after another middleware by name. - * - * @param string $findName Middleware to find - * @param callable(callable&THandler): (callable&THandler) $middleware Middleware function - * @param string $withName Name to register for this middleware. - */ - public function after(string $findName, callable $middleware, string $withName = ''): void - { - $this->splice($findName, $withName, $middleware, false); - } - - /** - * Remove a middleware by instance or name from the stack. - * - * @param (callable(callable&THandler): (callable&THandler))|string $remove Middleware to remove by instance or name. - */ - public function remove($remove): void - { - if (!\is_string($remove) && !\is_callable($remove)) { - // TODO: Move this to the parameter definition in 9.0. - throw new \TypeError(__METHOD__.'(): Argument #1 ($remove) must be of type callable|string'); - } - - $this->cached = null; - - if (\is_string($remove)) { - $count = \count($this->stack); - $this->stack = \array_values(\array_filter( - $this->stack, - static function (array $tuple) use ($remove): bool { - return $tuple[1] !== $remove; - } - )); - - if ($count !== \count($this->stack) || !\is_callable($remove)) { - return; - } - } - - $this->stack = \array_values(\array_filter( - $this->stack, - static function (array $tuple) use ($remove): bool { - return $tuple[0] !== $remove; - } - )); - } - - /** - * Compose the middleware and handler into a single callable function. - * - * @return callable&THandler - */ - public function resolve(): callable - { - if ($this->cached === null) { - if (($prev = $this->handler) === null) { - throw new \LogicException('No handler has been specified'); - } - - if (!\is_callable($prev)) { - throw new \LogicException('Handler must be callable'); - } - - foreach (\array_reverse($this->stack) as $fn) { - if (!\is_array($fn) || !\array_key_exists(0, $fn) || !\is_callable($fn[0])) { - throw new \LogicException('Middleware must be callable'); - } - - $prev = $fn[0]($prev); - - if (!\is_callable($prev)) { - throw new \LogicException('Middleware must return a callable'); - } - } - - $this->cached = $prev; - } - - return $this->cached; - } - - public function __unserialize(array $data): void - { - $this->handler = null; - $this->stack = []; - $this->cached = null; - - throw new \LogicException(static::class.' should never be unserialized'); - } - - private function findByName(string $name): int - { - foreach ($this->stack as $k => $v) { - if ($v[1] === $name) { - return $k; - } - } - - throw new \InvalidArgumentException(\sprintf('Middleware not found: %s', DiagnosticValue::escape($name))); - } - - /** - * Splices a function into the middleware list at a specific position. - * - * @param callable(callable&THandler): (callable&THandler) $middleware - */ - private function splice(string $findName, string $withName, callable $middleware, bool $before): void - { - $this->cached = null; - $idx = $this->findByName($findName); - $tuple = [$middleware, $withName]; - - if ($before) { - if ($idx === 0) { - \array_unshift($this->stack, $tuple); - } else { - $replacement = [$tuple, $this->stack[$idx]]; - \array_splice($this->stack, $idx, 1, $replacement); - } - } elseif ($idx === \count($this->stack) - 1) { - $this->stack[] = $tuple; - } else { - $replacement = [$this->stack[$idx], $tuple]; - \array_splice($this->stack, $idx, 1, $replacement); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/HostIdentity.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/HostIdentity.php deleted file mode 100644 index a7145454e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/HostIdentity.php +++ /dev/null @@ -1,220 +0,0 @@ - 2 && \ctype_xdigit(\substr($last, 2)); - } - - /** - * Returns the four-byte binary form of a host that a transport reads as a - * numeric IPv4 address, or null when it reads it as a name. - * - * The shape test is Handler\HostValidator::isNumericIpv4Host(); this - * method adds the range checks that predicate omits: every part but the - * last must fit one octet, and the last must fit the octets the earlier - * parts left. A trailing root dot is not swallowed, unlike libcurl 8.21.0 - * and later, because assertRequestHost() rejects that spelling first. - */ - public static function numericIpv4ToBinary(string $host): ?string - { - if (!Handler\HostValidator::isNumericIpv4Host($host)) { - return null; - } - - $values = []; - foreach (\explode('.', $host) as $part) { - $values[] = self::numericIpv4PartValue($part); - } - - // Every accepted value is a whole number no larger than 0xFFFFFFFF, - // which a float holds exactly, so the arithmetic below is correct on a - // 32-bit build too, where the widest part overflows an integer. - $address = (float) \array_pop($values); - - $packed = ''; - foreach ($values as $value) { - if ($value > 255.0) { - return null; - } - - $packed .= \chr((int) $value); - } - - $width = 4 - \count($values); - if ($address >= 256.0 ** $width) { - return null; - } - - for ($shift = $width - 1; $shift >= 0; --$shift) { - $packed .= \chr((int) \fmod(\floor($address / 256.0 ** $shift), 256.0)); - } - - return $packed; - } - - /** - * Returns the value of one accepted part as a float, so a part filling - * all four octets such as 2130706433 stays exact on every integer width. - */ - private static function numericIpv4PartValue(string $part): float - { - if ($part[0] === '0' && isset($part[1]) && ($part[1] === 'x' || $part[1] === 'X')) { - return (float) \hexdec((string) \substr($part, 2)); - } - - if ($part[0] === '0') { - return (float) \octdec($part); - } - - return (float) $part; - } - - private function __construct() - { - // cannot be instantiated - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Idn.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Idn.php deleted file mode 100644 index cf2edb5f7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Idn.php +++ /dev/null @@ -1,87 +0,0 @@ -getHost()) { - $asciiHost = self::idnToAsci($uri->getHost(), $options, $info); - if ($asciiHost === false) { - $errorBitSet = $info['errors'] ?? 0; - - $errorConstants = array_filter(array_keys(get_defined_constants()), static function (string $name): bool { - return substr($name, 0, 11) === 'IDNA_ERROR_'; - }); - - $errors = []; - foreach ($errorConstants as $errorConstant) { - if ($errorBitSet & constant($errorConstant)) { - $errors[] = $errorConstant; - } - } - - $errorMessage = 'IDN conversion failed'; - if ($errors) { - $errorMessage .= ' (errors: '.implode(', ', $errors).')'; - } - - throw new InvalidArgumentException($errorMessage); - } - if ($uri->getHost() !== $asciiHost) { - // Replace URI only if the ASCII version is different - $uri = $uri->withHost($asciiHost); - } - } - - return $uri; - } - - /** - * @return string|false - */ - private static function idnToAsci(string $domain, int $options, ?array &$info = []) - { - if (\function_exists('idn_to_ascii') && \defined('INTL_IDNA_VARIANT_UTS46')) { - return \idn_to_ascii($domain, $options, \INTL_IDNA_VARIANT_UTS46, $info); - } - - throw new \Error('ext-idn or symfony/polyfill-intl-idn not loaded or too old'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/MessageFormatter.php deleted file mode 100644 index e76352276..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/MessageFormatter.php +++ /dev/null @@ -1,207 +0,0 @@ ->>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; - public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; - - /** - * @var string Template used to format log messages - */ - private string $template; - - /** - * @param string $template Log message template - */ - public function __construct(?string $template = self::CLF) - { - $this->template = $template ?: self::CLF; - } - - /** - * Returns a formatted message string. - * - * @param RequestInterface $request Request that was sent - * @param ResponseInterface|null $response Response that was received - * @param \Throwable|null $error Exception that was received - */ - public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string - { - $cache = []; - - $result = \preg_replace_callback( - '/{\s*([A-Za-z_\-\.0-9]+)\s*}/', - function (array $matches) use ($request, $response, $error, &$cache): string { - if (isset($cache[$matches[1]])) { - return $cache[$matches[1]]; - } - - $result = ''; - switch ($matches[1]) { - case 'request': - $result = Psr7\Message::toString($request); - break; - case 'response': - $result = $response ? Psr7\Message::toString($response) : ''; - break; - case 'req_headers': - $result = \trim($request->getMethod() - .' '.$request->getRequestTarget(), " \n\r\t\0\x0B") - .' HTTP/'.$request->getProtocolVersion()."\r\n" - .$this->headers($request); - break; - case 'res_headers': - $result = $response ? - \sprintf( - 'HTTP/%s %d %s', - $response->getProtocolVersion(), - $response->getStatusCode(), - $response->getReasonPhrase() - )."\r\n".$this->headers($response) - : 'NULL'; - break; - case 'req_body': - $result = $request->getBody()->__toString(); - break; - case 'res_body': - if (!$response instanceof ResponseInterface) { - $result = 'NULL'; - break; - } - - $body = $response->getBody(); - - if (!$body->isSeekable()) { - $result = 'RESPONSE_NOT_LOGGEABLE'; - break; - } - - $result = $response->getBody()->__toString(); - break; - case 'ts': - case 'date_iso_8601': - $result = \gmdate('c'); - break; - case 'date_common_log': - $result = \date('d/M/Y:H:i:s O'); - break; - case 'method': - $result = $request->getMethod(); - break; - case 'version': - $result = $request->getProtocolVersion(); - break; - case 'uri': - case 'url': - $result = $request->getUri()->__toString(); - break; - case 'target': - $result = $request->getRequestTarget(); - break; - case 'req_version': - $result = $request->getProtocolVersion(); - break; - case 'res_version': - $result = $response - ? $response->getProtocolVersion() - : 'NULL'; - break; - case 'host': - $result = $request->getHeaderLine('Host'); - break; - case 'hostname': - $result = \gethostname(); - break; - case 'code': - $result = $response ? $response->getStatusCode() : 'NULL'; - break; - case 'phrase': - $result = $response ? $response->getReasonPhrase() : 'NULL'; - break; - case 'error': - $result = $error ? $error->getMessage() : 'NULL'; - break; - default: - // handle prefixed dynamic headers - if (\strpos($matches[1], 'req_header_') === 0) { - $result = $request->getHeaderLine(\substr($matches[1], 11)); - } elseif (\strpos($matches[1], 'res_header_') === 0) { - $result = $response - ? $response->getHeaderLine(\substr($matches[1], 11)) - : 'NULL'; - } - } - - $result = (string) $result; - $cache[$matches[1]] = $result; - - return $result; - }, - $this->template - ); - - if ($result === null) { - throw new \RuntimeException('Unable to format message: '.\preg_last_error_msg()); - } - - return $result; - } - - /** - * Get headers from message as string - */ - private function headers(MessageInterface $message): string - { - $result = ''; - foreach ($message->getHeaders() as $name => $values) { - $result .= $name.': '.\implode(', ', $values)."\r\n"; - } - - return \trim($result, " \n\r\t\0\x0B"); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php deleted file mode 100644 index b72e24c00..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function auth(bool $reuseChallenges = true): callable - { - return static function (callable $handler) use ($reuseChallenges): AuthMiddleware { - return new AuthMiddleware($handler, null, $reuseChallenges); - }; - } - - /** - * Middleware that adds cookies to requests. - * - * The options array must be set to a CookieJarInterface in order to use - * cookies. This is typically handled for you by a client. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function cookies(): callable - { - return static function (callable $handler): callable { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($handler): PromiseInterface { - if (empty($options['cookies'])) { - return $handler($request, $options); - } elseif (!$options['cookies'] instanceof CookieJarInterface) { - throw new \InvalidArgumentException('cookies must be an instance of GuzzleHttp\Cookie\CookieJarInterface'); - } - $cookieJar = $options['cookies']; - $request = $cookieJar->withCookieHeader($request); - - return $handler($request, $options) - ->then( - static function ( - #[\SensitiveParameter] - ResponseInterface $response - ) use ($cookieJar, $request): ResponseInterface { - $cookieJar->extractCookies($request, $response); - - return $response; - } - ); - }; - }; - } - - /** - * Middleware that throws exceptions for 4xx or 5xx responses when the - * "http_errors" request option is set to true. - * - * @param BodySummarizerInterface|null $bodySummarizer The body summarizer to use in exception messages. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function httpErrors(?BodySummarizerInterface $bodySummarizer = null): callable - { - return static function (callable $handler) use ($bodySummarizer): callable { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($handler, $bodySummarizer): PromiseInterface { - if (empty($options['http_errors'])) { - return $handler($request, $options); - } - - return $handler($request, $options)->then( - static function ( - #[\SensitiveParameter] - ResponseInterface $response - ) use ($request, $bodySummarizer): ResponseInterface { - $code = $response->getStatusCode(); - if ($code < 400) { - return $response; - } - throw RequestException::create($request, $response, null, $bodySummarizer); - } - ); - }; - }; - } - - /** - * Middleware that pushes history data to an ArrayAccess container. - * - * @param array}>|\ArrayAccess}> $container Container to hold the history (by reference). - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - * - * @throws \InvalidArgumentException if container is not an array or ArrayAccess. - */ - public static function history(&$container): callable - { - if (!\is_array($container) && !$container instanceof \ArrayAccess) { - throw new \InvalidArgumentException('history container must be an array or object implementing ArrayAccess'); - } - - return static function (callable $handler) use (&$container): callable { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($handler, &$container): PromiseInterface { - return $handler($request, $options)->then( - static function ( - #[\SensitiveParameter] - ResponseInterface $value - ) use ($request, &$container, $options): ResponseInterface { - $container[] = [ - 'request' => $request, - 'response' => $value, - 'error' => null, - 'options' => $options, - ]; - - return $value; - }, - static function ( - #[\SensitiveParameter] - $reason - ) use ($request, &$container, $options): PromiseInterface { - $container[] = [ - 'request' => $request, - 'response' => null, - 'error' => $reason, - 'options' => $options, - ]; - - return P\Create::rejectionFor($reason); - } - ); - }; - }; - } - - /** - * Middleware that observes requests and responses as they flow through the - * stack without modifying them. This is useful for metrics, tracing, and - * debugging. - * - * The provided listener cannot modify or alter the response. It simply - * "taps" into the chain to be notified before returning the promise. The - * before listener accepts a request and options array, and the after - * listener accepts a request, options array, and response promise. - * - * @param (callable(RequestInterface, array): mixed)|null $before Function to invoke before forwarding the request. - * @param (callable(RequestInterface, array, PromiseInterface): mixed)|null $after Function invoked after forwarding. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function tap(?callable $before = null, ?callable $after = null): callable - { - return static function (callable $handler) use ($before, $after): callable { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($handler, $before, $after): PromiseInterface { - if ($before) { - $before($request, $options); - } - $response = $handler($request, $options); - if ($after) { - $after($request, $options, $response); - } - - return $response; - }; - }; - } - - /** - * Middleware that handles request redirects. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function redirect(): callable - { - return static function (callable $handler): RedirectMiddleware { - return new RedirectMiddleware($handler); - }; - } - - /** - * Middleware that retries requests based on the boolean result of - * invoking the provided "decider" function. - * - * If no delay function is provided, a simple implementation of exponential - * backoff will be utilized. - * - * @param callable(int, RequestInterface, ResponseInterface|null, mixed): bool $decider Function that accepts the number of retries, - * a request, [response], and [rejection reason] - * and returns true if the request is to be retried. - * @param (callable(int, ResponseInterface|null, RequestInterface): int)|null $delay Function that accepts the number of retries, - * [response], and request, and returns the - * number of milliseconds to delay. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function retry(callable $decider, ?callable $delay = null): callable - { - return static function (callable $handler) use ($decider, $delay): RetryMiddleware { - return new RetryMiddleware($decider, $handler, $delay); - }; - } - - /** - * Middleware that logs requests, responses, and errors using a message - * formatter. - * - * @param LoggerInterface $logger Logs messages. - * @param MessageFormatterInterface $formatter Formatter used to create message strings. - * @param string $logLevel Level at which to log requests. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function log(LoggerInterface $logger, MessageFormatterInterface $formatter, string $logLevel = 'info'): callable - { - return static function (callable $handler) use ($logger, $formatter, $logLevel): callable { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options = [] - ) use ($handler, $logger, $formatter, $logLevel): PromiseInterface { - return $handler($request, $options)->then( - static function ( - #[\SensitiveParameter] - ResponseInterface $response - ) use ($logger, $request, $formatter, $logLevel): ResponseInterface { - $message = $formatter->format($request, $response); - $logger->log($logLevel, $message); - - return $response; - }, - /** - * @return PromiseInterface - */ - static function ( - #[\SensitiveParameter] - $reason - ) use ($logger, $request, $formatter): PromiseInterface { - $response = $reason instanceof ResponseException ? $reason->getResponse() : null; - $message = $formatter->format($request, $response, P\Create::exceptionFor($reason)); - $logger->error($message); - - return P\Create::rejectionFor($reason); - } - ); - }; - }; - } - - /** - * This middleware adds a default content-type if possible, a default - * content-length or transfer-encoding header, and the expect header. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function prepareBody(): callable - { - return static function (callable $handler): PrepareBodyMiddleware { - return new PrepareBodyMiddleware($handler); - }; - } - - /** - * Middleware that applies a map function to the request before passing to - * the next handler. - * - * @param callable(RequestInterface): RequestInterface $fn Function that accepts a RequestInterface and returns - * a RequestInterface. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function mapRequest(callable $fn): callable - { - return static function (callable $handler) use ($fn): callable { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($handler, $fn): PromiseInterface { - return $handler($fn($request), $options); - }; - }; - } - - /** - * Middleware that applies a map function to the resolved promise's - * response. - * - * @param callable(ResponseInterface): ResponseInterface $fn Function that accepts a ResponseInterface and - * returns a ResponseInterface. - * - * @return callable((callable(RequestInterface, array): PromiseInterface)): (callable(RequestInterface, array): PromiseInterface) - */ - public static function mapResponse(callable $fn): callable - { - return static function (callable $handler) use ($fn): callable { - return static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ) use ($handler, $fn): PromiseInterface { - return $handler($request, $options)->then($fn); - }; - }; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Multiplexing.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Multiplexing.php deleted file mode 100644 index 90501bac1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/Multiplexing.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ -class Pool implements PromisorInterface -{ - use NonSerializableTrait; - - /** - * @var EachPromise - */ - private EachPromise $each; - - /** - * @param ClientInterface $client Client used to send the requests. - * @param iterable): (ResponseInterface|PromiseInterface)> $requests Requests or functions that return responses or response promises. - * @param array{ - * concurrency?: int|(callable(int): int), - * options?: array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface, int|string): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface, int|string): mixed, - * on_stats?: callable(TransferStats, int|string): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface, int|string): mixed, - * progress?: callable(int, int, int, int, int|string): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * }, - * fulfilled?: callable(ResponseInterface, int|string, PromiseInterface): mixed, - * rejected?: callable(mixed, int|string, PromiseInterface): mixed - * } $config Pool configuration. - */ - public function __construct( - ClientInterface $client, - iterable $requests, - #[\SensitiveParameter] - array $config = [] - ) { - if (!isset($config['concurrency'])) { - $config['concurrency'] = 25; - } - - if (isset($config['options'])) { - $opts = $config['options']; - unset($config['options']); - } else { - $opts = []; - } - - $requestGenerator = static function () use ($requests, $client, $opts): \Generator { - foreach ($requests as $key => $rfn) { - $keyedOpts = self::keyedRequestOptions($opts, $key); - - if ($rfn instanceof RequestInterface) { - yield $key => $client->sendAsync($rfn, $keyedOpts); - } elseif (\is_callable($rfn)) { - yield $key => $rfn($keyedOpts); - } else { - throw new \InvalidArgumentException('Each value yielded by the iterator must be a Psr\Http\Message\RequestInterface or a callable that returns a promise that fulfills with a Psr\Http\Message\ResponseInterface object.'); - } - } - }; - - $this->each = new EachPromise($requestGenerator(), $config); - } - - /** - * Get promise - * - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - return $this->each->promise(); - } - - /** - * Sends multiple requests concurrently and returns an array of responses - * and exceptions that uses the same ordering as the provided requests. - * - * IMPORTANT: This method keeps every request and response in memory, and - * as such, is NOT recommended when sending a large number or an - * indeterminate number of requests concurrently. - * - * @param ClientInterface $client Client used to send the requests - * @param iterable): (ResponseInterface|PromiseInterface)> $requests Requests or functions that return responses or response promises. - * @param array{ - * concurrency?: int|(callable(int): int), - * options?: array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface, int|string): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface, int|string): mixed, - * on_stats?: callable(TransferStats, int|string): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface, int|string): mixed, - * progress?: callable(int, int, int, int, int|string): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * }, - * fulfilled?: callable(ResponseInterface, int|string): mixed, - * rejected?: callable(mixed, int|string): mixed - * } $options Passes through the options available in {@see Pool::__construct}. - * - * @return array Returns an array containing the response or rejection reason in the same order that the requests were sent. - * - * @throws \InvalidArgumentException if the event format is incorrect. - */ - public static function batch( - ClientInterface $client, - iterable $requests, - #[\SensitiveParameter] - array $options = [] - ): array { - $res = []; - self::cmpCallback($options, 'fulfilled', $res); - self::cmpCallback($options, 'rejected', $res); - $pool = new static($client, $requests, $options); - $pool->promise()->wait(); - \ksort($res); - - return $res; - } - - /** - * Execute callback(s) - */ - private static function cmpCallback(array &$options, string $name, array &$results): void - { - if (!isset($options[$name])) { - $options[$name] = static function ( - #[\SensitiveParameter] - $v, - $k - ) use (&$results): void { - $results[$k] = $v; - }; - } else { - $currentFn = $options[$name]; - $options[$name] = static function ( - #[\SensitiveParameter] - $v, - $k - ) use (&$results, $currentFn): void { - $currentFn($v, $k); - $results[$k] = $v; - }; - } - } - - /** - * Returns the request options with any observer callbacks wrapped so that - * they also receive the request's iterable key as a trailing argument. - * - * @param array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface, int|string): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface, int|string): mixed, - * on_stats?: callable(TransferStats, int|string): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface, int|string): mixed, - * progress?: callable(int, int, int, int, int|string): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } $options - * @param int|string $key - * - * @return array{ - * base_uri?: string|UriInterface, - * allow_redirects?: bool|array{ - * max?: int, - * strict?: bool, - * referer?: bool, - * protocols?: non-empty-array, - * on_redirect?: callable(RequestInterface, ResponseInterface, UriInterface): mixed, - * track_redirects?: bool - * }, - * auth?: array{ - * 0: string, - * 1: string, - * 2?: string|null - * }|string|false|null, - * body?: resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable, - * cert?: string|array{ - * 0: string, - * 1?: string|null - * }, - * cert_type?: string, - * connect_timeout?: int|float, - * cookies?: false|CookieJarInterface, - * crypto_method?: int, - * crypto_method_max?: int, - * debug?: bool|resource, - * decode_content?: bool|string, - * delay?: int|float, - * expect?: bool|int, - * form_params?: array, - * force_ip_resolve?: string, - * headers?: array>|null, - * http_errors?: bool, - * idn_conversion?: bool|int|null, - * json?: mixed, - * multipart?: array, - * filename?: string - * }>, - * multiplex?: string, - * on_headers?: callable(ResponseInterface, RequestInterface): mixed, - * on_stats?: callable(TransferStats): mixed, - * on_trailers?: callable(array>, ResponseInterface, RequestInterface): mixed, - * progress?: callable(int, int, int, int): mixed, - * protocols?: non-empty-array, - * proxy?: string|array{ - * http?: string|null, - * https?: string|null, - * no?: string|array|null - * }, - * query?: array|string, - * read_timeout?: int|float, - * retries?: int, - * request_factory?: RequestFactoryInterface, - * response_factory?: ResponseFactoryInterface, - * sink?: resource|string|StreamInterface, - * ssl_key?: string|array{ - * 0: string, - * 1?: string|null - * }, - * ssl_key_type?: string, - * stream?: bool, - * stream_factory?: StreamFactoryInterface, - * stream_context?: array, - * synchronous?: bool, - * timeout?: int|float, - * uri_factory?: UriFactoryInterface, - * verify?: bool|string, - * version?: string|int|float, - * curl?: array, - * ... - * } - */ - private static function keyedRequestOptions(array $options, $key): array - { - if (\is_array($options['allow_redirects'] ?? null) - && \is_callable($options['allow_redirects']['on_redirect'] ?? null) - ) { - $onRedirect = $options['allow_redirects']['on_redirect']; - $options['allow_redirects']['on_redirect'] = static function ( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - ResponseInterface $response, - #[\SensitiveParameter] - UriInterface $uri - ) use ($onRedirect, $key): void { - $onRedirect($request, $response, $uri, $key); - }; - } - - if (\is_callable($options['on_headers'] ?? null)) { - $onHeaders = $options['on_headers']; - $options['on_headers'] = static function ( - #[\SensitiveParameter] - ResponseInterface $response, - #[\SensitiveParameter] - RequestInterface $request - ) use ($onHeaders, $key): void { - $onHeaders($response, $request, $key); - }; - } - - if (\is_callable($options['on_stats'] ?? null)) { - $onStats = $options['on_stats']; - $options['on_stats'] = static function (TransferStats $stats) use ($onStats, $key): void { - $onStats($stats, $key); - }; - } - - if (\is_callable($options['on_trailers'] ?? null)) { - $onTrailers = $options['on_trailers']; - $options['on_trailers'] = static function ( - array $trailers, - #[\SensitiveParameter] - ResponseInterface $response, - #[\SensitiveParameter] - RequestInterface $request - ) use ($onTrailers, $key): void { - $onTrailers($trailers, $response, $request, $key); - }; - } - - if (\is_callable($options['progress'] ?? null)) { - $progress = $options['progress']; - $options['progress'] = static function (int $downloadTotal, int $downloadedBytes, int $uploadTotal, int $uploadedBytes) use ($progress, $key) { - return $progress($downloadTotal, $downloadedBytes, $uploadTotal, $uploadedBytes, $key); - }; - } - - return $options; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php deleted file mode 100644 index d13e722ad..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php +++ /dev/null @@ -1,123 +0,0 @@ -): PromiseInterface - */ - private $nextHandler; - - /** - * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke. - */ - public function __construct(callable $nextHandler) - { - $this->nextHandler = $nextHandler; - } - - /** - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - $fn = $this->nextHandler; - $bodySize = RequestFraming::bodySize($request); - - // Don't do anything if the request has no body. - if ($bodySize === 0) { - return $fn($request, $options); - } - - $modify = []; - - // Add a default content-type if possible. - if (!$request->hasHeader('Content-Type')) { - if ($uri = $request->getBody()->getMetadata('uri')) { - if (is_string($uri) && $type = Psr7\MimeType::fromFilename($uri)) { - $modify['set_headers']['Content-Type'] = $type; - } - } - } - - // Add a default content-length or transfer-encoding header. - if (!$request->hasHeader('Content-Length') - && !$request->hasHeader('Transfer-Encoding') - ) { - if ($bodySize !== null) { - $modify['set_headers']['Content-Length'] = (string) $bodySize; - } elseif ($request->getProtocolVersion() === '1.1') { - $modify['set_headers']['Transfer-Encoding'] = 'chunked'; - } - } - - // Add the expect header if needed. - $this->addExpectHeader($request, $options, $modify, $bodySize); - - return $fn(Psr7\Utils::modifyRequest($request, $modify), $options); - } - - /** - * Add expect header - */ - private function addExpectHeader( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - array &$modify, - ?int $bodySize - ): void { - // Determine if the Expect header should be used - if ($request->hasHeader('Expect')) { - return; - } - - $expect = $options['expect'] ?? null; - - // Return if disabled or not using HTTP/1.1. - if ($expect === false || '1.1' !== $request->getProtocolVersion()) { - return; - } - - // The expect header is unconditionally enabled - if ($expect === true) { - $modify['set_headers']['Expect'] = '100-Continue'; - - return; - } - - // By default, send the expect header when the payload is > 1mb - if ($expect === null) { - $expect = 1048576; - } - - // Always add if the body cannot be rewound, the size cannot be - // determined, or the size is greater than the cutoff threshold - $body = $request->getBody(); - - if ($bodySize === null || $bodySize >= (int) $expect || !$body->isSeekable()) { - $modify['set_headers']['Expect'] = '100-Continue'; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ProxyOptions.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ProxyOptions.php deleted file mode 100644 index dbf4aed2e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ProxyOptions.php +++ /dev/null @@ -1,603 +0,0 @@ -getScheme()] ?? null; - if ($schemeProxy !== null && !\is_string($schemeProxy)) { - throw new InvalidArgumentException('proxy values must be strings'); - } - - // A matching "no" entry is always a final decision, even when the - // array selects no proxy for the request scheme. Without this, an - // option-level bypass could fall through to handler-level environment - // fallback and route through a proxy the user excluded. - $noProxy = isset($proxy['no']) ? self::normalizeNoProxy($proxy['no']) : []; - if ($noProxy !== [] && self::isUriInNoProxy($uri, $noProxy)) { - return ProxySelection::bypassed(); - } - - if ($schemeProxy === null) { - return ProxySelection::none(); - } - - return ProxySelection::proxy($schemeProxy); - } - - /** - * Validate a proxy URL and return its lowercased scheme. - * - * A proxy is an authority ([userinfo@]host[:port]) with an optional scheme; - * a scheme-less value is an HTTP proxy. The scheme is matched anchored at - * the start, so leading junk before it is rejected as malformed, and the - * host and port grammar is delegated to Psr7\Rfc3986. The whole string is - * validated up front so a malformed proxy fails the same way on every - * handler, but the original value is what callers pin, so no normalization - * reaches the wire. The error message never includes the proxy, which may - * carry credentials. - * - * @throws InvalidArgumentException on a malformed proxy URL - */ - public static function proxyScheme( - #[\SensitiveParameter] - string $proxy - ): string { - $parts = \explode('://', $proxy, 2); - if (\count($parts) === 1) { - $scheme = 'http'; - $authority = $proxy; - } else { - [$scheme, $authority] = $parts; - $scheme = Psr7\Utils::asciiToLower($scheme); - if ($scheme === '' || !Rfc3986::isValidScheme($scheme)) { - throw new InvalidArgumentException('Invalid proxy URL.'); - } - } - - if (!self::isValidProxyAuthority($authority)) { - throw new InvalidArgumentException('Invalid proxy URL.'); - } - - return $scheme; - } - - /** - * Whether the string is a valid proxy authority: [userinfo@]host[:port]. - * - * A single trailing slash is tolerated; anything else after the authority - * (a path, query, or fragment) is rejected. Userinfo is not policed here - * (the proxy handles its own credentials); host and port grammar are - * delegated to Psr7\Rfc3986, where a zero port is accepted and left for the - * transport to handle as it did before. - */ - private static function isValidProxyAuthority(string $authority): bool - { - // A single trailing slash is tolerated; once removed, a proxy authority - // ([userinfo@]host[:port]) cannot contain a path, query, or fragment - // delimiter anywhere — including one before a later '@'. - if (\str_ends_with($authority, '/')) { - $authority = \substr($authority, 0, \strlen($authority) - 1); - } - - if ($authority === '' || \strpbrk($authority, '/?#') !== false) { - return false; - } - - // The host cannot contain '@', so userinfo is everything before the - // last one. It is not validated here. A value that is only userinfo, - // with nothing after the last '@', has no host and is rejected. - $segments = \explode('@', $authority); - $authority = $segments[\count($segments) - 1]; - if ($authority === '') { - return false; - } - - $port = null; - if (\str_starts_with($authority, '[')) { - $parts = \explode(']', $authority, 2); - if (\count($parts) !== 2) { - return false; - } - - $host = $parts[0].']'; - $remainder = $parts[1]; - if ($remainder !== '') { - if (!\str_starts_with($remainder, ':')) { - return false; - } - - [, $port] = \explode(':', $remainder, 2); - } - } elseif (\strpos($authority, ':') !== false) { - [$host, $port] = \explode(':', $authority, 2); - } else { - $host = $authority; - } - - // A dangling "host:" carries no port, matching the previous behavior. - if ($port === '') { - $port = null; - } - - if ($host === '' || !Rfc3986::isValidHost($host)) { - return false; - } - - return $port === null || Rfc3986::isValidPort($port); - } - - /** - * Normalize a no-proxy list from request options or NO_PROXY. - * - * @param mixed $noProxy No-proxy value as passed via request transfer options. - * - * @return string[] - * - * @throws InvalidArgumentException - */ - public static function normalizeNoProxy($noProxy): array - { - if ($noProxy === null) { - return []; - } - - if (\is_string($noProxy)) { - // Entries may be separated by whitespace as well as commas, - // matching the no_proxy environment variable conventions. - $noProxy = \preg_split('/[\s,]+/', $noProxy); - - if ($noProxy === false) { - throw new \RuntimeException('Unable to split the proxy no list: '.\preg_last_error_msg()); - } - } elseif (!\is_array($noProxy)) { - throw new InvalidArgumentException('proxy no list must be null, a string, or an array of strings'); - } - - $result = []; - foreach ($noProxy as $area) { - if (!\is_string($area)) { - throw new InvalidArgumentException('proxy no list must be null, a string, or an array of strings'); - } - - $area = \trim($area, " \n\r\t\0\x0B"); - if ($area !== '') { - $result[] = $area; - } - } - - return $result; - } - - /** - * Returns true if the provided URI matches any of the no-proxy areas. - * - * @param string[] $noProxy An array of host, host-and-port, or CIDR patterns. - * - * @throws InvalidArgumentException - */ - public static function isUriInNoProxy(UriInterface $uri, array $noProxy): bool - { - self::assertNoProxyList($noProxy); - - $target = self::parseNoProxyTarget($uri); - if ($target === null) { - return false; - } - - foreach ($noProxy as $area) { - $area = \trim($area, " \n\r\t\0\x0B"); - - if ($area === '*') { - return true; - } - - $rule = self::parseNoProxyRule($area); - if ($rule !== null && self::noProxyRuleMatches($target, $rule)) { - return true; - } - } - - return false; - } - - /** - * Returns true if the provided host matches any of the no-proxy areas. - * - * This method will strip a port from the host if it is present. Domain - * patterns are matched case-insensitively. Exact IP literal patterns are - * matched by their normalized binary address. - * - * Areas are matched in the following cases: - * 1. "*" (without quotes) always matches any hosts. - * 2. An exact domain or IP literal match. - * 3. A bare domain or a leading-dot domain matches itself and its - * subdomains. e.g. 'mit.edu' and '.mit.edu' both match 'mit.edu' - * and 'foo.mit.edu'. - * 4. IP CIDR entries match IP literal hosts. e.g. '192.168.0.0/16' will - * match '192.168.1.10' and 'fd00::/8' will match '[fd00::1]'. - * - * @param string $host Host to check against the patterns. - * @param string[] $noProxy An array of host or CIDR patterns. - * - * @throws InvalidArgumentException - */ - public static function isHostInNoProxy(string $host, array $noProxy): bool - { - if ($host === '') { - throw new InvalidArgumentException('Empty host provided'); - } - - self::assertNoProxyList($noProxy); - - $target = self::parseNoProxyHostString($host); - if ($target === null) { - return false; - } - - foreach ($noProxy as $area) { - $area = \trim($area, " \n\r\t\0\x0B"); - - if ($area === '*') { - return true; - } - - $rule = self::parseNoProxyRule($area); - if ($rule !== null && self::noProxyRuleMatches($target, $rule)) { - return true; - } - } - - return false; - } - - /** - * @param array $noProxy - * - * @throws InvalidArgumentException - */ - private static function assertNoProxyList(array $noProxy): void - { - foreach ($noProxy as $area) { - if (!\is_string($area)) { - throw new InvalidArgumentException('proxy no list must be null, a string, or an array of strings'); - } - } - } - - /** - * @return array{type: string, value: string, port: int|null}|null - */ - private static function parseNoProxyTarget(UriInterface $uri): ?array - { - $host = $uri->getHost(); - if ($host === '') { - return null; - } - - return self::parseNoProxyHost($host, $uri->getPort() ?? self::getDefaultPort($uri->getScheme())); - } - - /** - * @return array{type: string, value: string, port: int|null}|null - */ - private static function parseNoProxyHostString(string $host): ?array - { - $hostAndPort = self::splitNoProxyHostAndPort($host); - if ($hostAndPort === null) { - return null; - } - - [$host] = $hostAndPort; - - return self::parseNoProxyHost($host, null); - } - - /** - * @return array{type: string, value: string, port: int|null}|array{type: string, value: string, prefix: int}|null - */ - private static function parseNoProxyRule(string $area): ?array - { - $area = \trim($area, " \n\r\t\0\x0B"); - if ($area === '' || $area === '*') { - return null; - } - - // A single leading dot is ignored: ".example.com" matches - // example.com and its subdomains exactly like a bare domain, - // consistent with every libcurl era. The strip runs before the - // CIDR check so ".10.0.0.0/8" is a live rule on every path. - if ($area[0] === '.') { - $area = \substr($area, 1); - if ($area === '') { - return null; - } - } - - if (\strpos($area, '/') !== false) { - return self::parseNoProxyCidrRule($area); - } - - $hostAndPort = self::splitNoProxyHostAndPort($area); - if ($hostAndPort === null) { - return null; - } - - [$host, $port] = $hostAndPort; - - if ($host === '*') { - return [ - 'type' => 'wildcard', - 'value' => '*', - 'port' => $port, - ]; - } - - return self::parseNoProxyHost($host, $port); - } - - /** - * @return array{type: string, value: string, port: int|null}|null - */ - private static function parseNoProxyHost(string $host, ?int $port): ?array - { - if ($host !== '' && $host[0] === '[') { - if (\substr($host, -1) !== ']') { - return null; - } - - $address = \substr($host, 1, -1); - if (!\filter_var($address, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) { - return null; - } - - $host = $address; - } - - $packedIp = self::packIpAddress($host); - if ($packedIp !== false) { - return [ - 'type' => 'ip', - 'value' => $packedIp, - 'port' => $port, - ]; - } - - if ($host === '' || \strpos($host, ':') !== false) { - return null; - } - - // Normalize a single DNS root dot for no-proxy domain matching. - if (\substr($host, -1) === '.') { - $host = \substr($host, 0, -1); - if ($host === '') { - return null; - } - } - - return [ - 'type' => 'domain', - 'value' => Psr7\Utils::asciiToLower($host), - 'port' => $port, - ]; - } - - /** - * @return array{0: string, 1: int|null}|null - */ - private static function splitNoProxyHostAndPort(string $area): ?array - { - if ($area !== '' && $area[0] === '[') { - $closingBracket = \strpos($area, ']'); - if ($closingBracket === false) { - return null; - } - - $host = \substr($area, 0, $closingBracket + 1); - $tail = \substr($area, $closingBracket + 1); - if ($tail === '') { - return [$host, null]; - } - - if ($tail[0] !== ':') { - return null; - } - - $port = self::parseNoProxyPort(\substr($tail, 1)); - - return $port === null ? null : [$host, $port]; - } - - if (self::packIpAddress($area) !== false) { - return [$area, null]; - } - - $colon = \strrpos($area, ':'); - if ($colon === false) { - return [$area, null]; - } - - $port = self::parseNoProxyPort(\substr($area, $colon + 1)); - if ($port === null) { - return null; - } - - return [\substr($area, 0, $colon), $port]; - } - - private static function parseNoProxyPort(string $port): ?int - { - return self::parseBoundedUnsignedInteger($port, 65535); - } - - private static function getDefaultPort(string $scheme): ?int - { - if ($scheme === 'http') { - return 80; - } - - if ($scheme === 'https') { - return 443; - } - - return null; - } - - /** - * @return array{type: string, value: string, prefix: int}|null - */ - private static function parseNoProxyCidrRule(string $area): ?array - { - $slash = \strpos($area, '/'); - if ($slash === false) { - return null; - } - - $prefix = \substr($area, $slash + 1); - - $network = \substr($area, 0, $slash); - if ($network !== '' && $network[0] === '[' && \substr($network, -1) === ']') { - $network = \substr($network, 1, -1); - } - - $network = self::packIpAddress($network); - if ($network === false) { - return null; - } - - $prefix = self::parseBoundedUnsignedInteger($prefix, \strlen($network) * 8); - if ($prefix === null) { - return null; - } - - return [ - 'type' => 'cidr', - 'value' => $network, - 'prefix' => $prefix, - ]; - } - - private static function parseBoundedUnsignedInteger(string $value, int $max): ?int - { - if ($value === '' || !\ctype_digit($value)) { - return null; - } - - $normalized = \ltrim($value, '0'); - $normalized = $normalized === '' ? '0' : $normalized; - $limit = (string) $max; - - if (\strlen($normalized) > \strlen($limit) || (\strlen($normalized) === \strlen($limit) && \strcmp($normalized, $limit) > 0)) { - return null; - } - - return (int) $normalized; - } - - /** - * @param array{type: string, value: string, port: int|null} $target - * @param array{type: string, value: string, port?: int|null, prefix?: int|null} $rule - */ - private static function noProxyRuleMatches(array $target, array $rule): bool - { - if ($rule['type'] === 'wildcard') { - return ($rule['port'] ?? null) === null || $rule['port'] === $target['port']; - } - - if ($rule['type'] === 'cidr') { - if ($target['type'] !== 'ip' || !isset($rule['prefix'])) { - return false; - } - - if (\strlen($target['value']) !== \strlen($rule['value'])) { - return false; - } - - return self::ipMatchesPrefix($target['value'], $rule['value'], $rule['prefix']); - } - - if (($rule['port'] ?? null) !== null && $rule['port'] !== $target['port']) { - return false; - } - - if ($rule['type'] !== $target['type']) { - return false; - } - - if ($rule['type'] === 'ip') { - return $rule['value'] === $target['value']; - } - - if ($target['value'] === $rule['value']) { - return true; - } - - $suffix = '.'.$rule['value']; - - return \substr($target['value'], -\strlen($suffix)) === $suffix; - } - - /** - * @return string|false - */ - private static function packIpAddress(string $ip) - { - if (!\filter_var($ip, \FILTER_VALIDATE_IP)) { - return false; - } - - return \inet_pton($ip); - } - - private static function ipMatchesPrefix(string $address, string $network, int $prefix): bool - { - $fullBytes = \intdiv($prefix, 8); - $remainingBits = $prefix % 8; - - if ($fullBytes > 0 && \substr($address, 0, $fullBytes) !== \substr($network, 0, $fullBytes)) { - return false; - } - - if ($remainingBits === 0) { - return true; - } - - $mask = (0xFF << (8 - $remainingBits)) & 0xFF; - - return (\ord($address[$fullBytes]) & $mask) === (\ord($network[$fullBytes]) & $mask); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ProxySelection.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ProxySelection.php deleted file mode 100644 index 4c40f3eda..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/ProxySelection.php +++ /dev/null @@ -1,66 +0,0 @@ -proxy = $proxy; - $this->bypassed = $bypassed; - $this->disabled = $disabled; - } - - public static function none(): self - { - return new self(null, false, false); - } - - public static function proxy(string $proxy): self - { - return $proxy === '' ? self::disabled() : new self($proxy, false, false); - } - - public static function bypassed(): self - { - return new self(null, true, false); - } - - public static function disabled(): self - { - return new self(null, false, true); - } - - public function getProxy(): ?string - { - return $this->proxy; - } - - public function hasProxy(): bool - { - return $this->proxy !== null; - } - - public function isBypassed(): bool - { - return $this->bypassed; - } - - public function isDisabled(): bool - { - return $this->disabled; - } - - public function shouldDisableProxy(): bool - { - return $this->bypassed || $this->disabled; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php deleted file mode 100644 index df7d4dd3c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php +++ /dev/null @@ -1,364 +0,0 @@ - 5, - 'protocols' => ['http', 'https'], - 'strict' => false, - 'referer' => false, - 'track_redirects' => false, - ]; - - /** - * @var callable(RequestInterface, array): PromiseInterface - */ - private $nextHandler; - - /** - * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke. - */ - public function __construct(callable $nextHandler) - { - $this->nextHandler = $nextHandler; - } - - /** - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - $fn = $this->nextHandler; - - if (empty($options['allow_redirects'])) { - return $fn($request, $options); - } - - if ($options['allow_redirects'] === true) { - $options['allow_redirects'] = self::DEFAULT_SETTINGS; - } elseif (!\is_array($options['allow_redirects'])) { - throw new InvalidArgumentException('allow_redirects must be true, false, or array'); - } else { - // Merge the default settings with the provided settings - $options['allow_redirects'] += self::DEFAULT_SETTINGS; - } - - if (empty($options['allow_redirects']['max'])) { - return $fn($request, $options); - } - - return $fn($request, $options) - ->then(function ( - #[\SensitiveParameter] - ResponseInterface $response - ) use ($request, $options) { - return $this->checkRedirect($request, $options, $response); - }); - } - - /** - * @return ResponseInterface|PromiseInterface - */ - public function checkRedirect( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - ResponseInterface $response - ) { - if (!self::isRedirectStatusCode($response->getStatusCode()) - || !$response->hasHeader('Location') - ) { - return $response; - } - - $this->guardMax($request, $response, $options); - $nextRequest = $this->modifyRequest($request, $options, $response); - - // Remove HTTP origin credentials if URI is cross-origin. - if (Psr7\UriComparator::isCrossOrigin($request->getUri(), $nextRequest->getUri())) { - unset($options['auth'], $options['__guzzle_digest_retries']); - - if (defined('\CURLOPT_HTTPAUTH') && defined('\CURLOPT_USERPWD')) { - unset( - $options['curl'][\CURLOPT_HTTPAUTH], - $options['curl'][\CURLOPT_USERPWD] - ); - } - } - - if (isset($options['allow_redirects']['on_redirect'])) { - ($options['allow_redirects']['on_redirect'])( - $request, - $response, - $nextRequest->getUri() - ); - } - - // The caller's delay applies once, before the initial request, not - // before each followed redirect. - unset($options['delay']); - - $promise = $this($nextRequest, $options); - - // Add headers to be able to track history of redirects. - if (!empty($options['allow_redirects']['track_redirects'])) { - return $this->withTracking( - $promise, - (string) $nextRequest->getUri(), - $response->getStatusCode() - ); - } - - return $promise; - } - - /** - * Enable tracking on promise. - * - * @param PromiseInterface $promise - * - * @return PromiseInterface - */ - private function withTracking( - PromiseInterface $promise, - #[\SensitiveParameter] - string $uri, - int $statusCode - ): PromiseInterface { - return $promise->then( - static function ( - #[\SensitiveParameter] - ResponseInterface $response - ) use ($uri, $statusCode): ResponseInterface { - // Note that we are pushing to the front of the list as this - // would be an earlier response than what is currently present - // in the history header. - $historyHeader = $response->getHeader(self::HISTORY_HEADER); - $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER); - \array_unshift($historyHeader, $uri); - \array_unshift($statusHeader, (string) $statusCode); - - return $response->withHeader(self::HISTORY_HEADER, $historyHeader) - ->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader); - } - ); - } - - /** - * Check for too many redirects. - * - * @throws TooManyRedirectsException Too many redirects. - */ - private function guardMax( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - ResponseInterface $response, - #[\SensitiveParameter] - array &$options - ): void { - $current = $options['__redirect_count'] - ?? 0; - $options['__redirect_count'] = $current + 1; - $max = $options['allow_redirects']['max']; - - if ($options['__redirect_count'] > $max) { - throw new TooManyRedirectsException("Will not follow more than {$max} redirects", $request, $response); - } - } - - public function modifyRequest( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - ResponseInterface $response - ): RequestInterface { - $modify = self::getRedirectRequestModifiers($request, $options, $response); - $protocols = $options['allow_redirects']['protocols']; - - $uriFactory = $options[RequestOptions::URI_FACTORY] ?? new HttpFactory(); - if (!$uriFactory instanceof UriFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::URI_FACTORY, - UriFactoryInterface::class - )); - } - - $uri = self::redirectUri($uriFactory, $request, $response, $protocols); - $idnOptions = Idn::normalizeConversionOption($options['idn_conversion'] ?? null); - if ($idnOptions !== null) { - $uri = Idn::convertUri($uri, $idnOptions); - } - - $modify['uri'] = $uri; - - // The body only needs to be rewound when the next request reuses it. - if (!isset($modify['body'])) { - try { - Psr7\Message::rewindBody($request); - } catch (\Exception $e) { - throw new ResponseException( - 'Redirect failed because the request body could not be rewound', - $request, - $response, - $e - ); - } - } - - $crossOrigin = Psr7\UriComparator::isCrossOrigin($request->getUri(), $modify['uri']); - - // Add a Referer only when the scheme is unchanged, and reduce it to the - // origin on cross-origin redirects so a secret-bearing path or query is - // not leaked (strict-origin-when-cross-origin, like modern browsers). - if ($options['allow_redirects']['referer'] - && $modify['uri']->getScheme() === $request->getUri()->getScheme() - ) { - $referer = $request->getUri()->withUserInfo('')->withFragment(''); - if ($crossOrigin) { - $referer = $referer->withPath('/')->withQuery(''); - } - $modify['set_headers']['Referer'] = (string) $referer; - } else { - $modify['remove_headers'][] = 'Referer'; - } - - // Remove Authorization and Cookie headers if URI is cross-origin. - if ($crossOrigin) { - $modify['remove_headers'][] = 'Authorization'; - $modify['remove_headers'][] = 'Cookie'; - } - - return Psr7\Utils::modifyRequest($request, $modify); - } - - private static function isRedirectStatusCode(int $statusCode): bool - { - return \in_array($statusCode, [301, 302, 303, 307, 308], true); - } - - /** - * @return array{ - * method?: string, - * body?: StreamInterface, - * remove_headers?: list - * } - */ - private static function getRedirectRequestModifiers( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - ResponseInterface $response - ): array { - $statusCode = $response->getStatusCode(); - if ($statusCode !== 303 - && ($statusCode > 302 || $options['allow_redirects']['strict']) - ) { - return []; - } - - $requestMethod = $request->getMethod(); - - if ($requestMethod === 'QUERY' && \in_array($statusCode, [301, 302], true)) { - return []; - } - - $streamFactory = $options[RequestOptions::STREAM_FACTORY] ?? new HttpFactory(); - if (!$streamFactory instanceof StreamFactoryInterface) { - throw new InvalidArgumentException(\sprintf( - '%s must be an instance of %s', - RequestOptions::STREAM_FACTORY, - StreamFactoryInterface::class - )); - } - - return [ - 'method' => \in_array($requestMethod, ['GET', 'HEAD', 'OPTIONS'], true) ? $requestMethod : 'GET', - 'body' => $streamFactory->createStream(''), - 'remove_headers' => ['Content-Length', 'Transfer-Encoding'], - ]; - } - - /** - * Set the appropriate URL on the request based on the location header. - */ - private static function redirectUri( - UriFactoryInterface $uriFactory, - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - ResponseInterface $response, - array $protocols - ): UriInterface { - $location = $response->getHeaderLine('Location'); - - try { - $locationUri = $uriFactory->createUri($location); - $resolvedUri = Psr7\UriResolver::resolve( - $request->getUri(), - $locationUri - ); - - if (!$uriFactory instanceof HttpFactory - && $locationUri->getScheme() === '' - && $locationUri->getAuthority() === '' - ) { - $resolvedUri = $uriFactory->createUri((string) $resolvedUri); - } - } catch (\InvalidArgumentException $e) { - throw new BadResponseException(\sprintf('Redirect URI, %s, is invalid: %s', Psr7\DiagnosticValue::escape($location), $e->getMessage()), $request, $response, $e); - } - - // Ensure that the redirect URI is allowed based on the protocols. - if (!\in_array($resolvedUri->getScheme(), $protocols, true)) { - throw new BadResponseException(\sprintf('Redirect URI, %s, does not use one of the allowed redirect protocols: %s', Psr7\DiagnosticValue::escape((string) $resolvedUri), \implode(', ', $protocols)), $request, $response); - } - - return $resolvedUri; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RequestOptions.php deleted file mode 100644 index 7236817a4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RequestOptions.php +++ /dev/null @@ -1,525 +0,0 @@ -, - * default=['http', 'https']) Allowed redirect protocols. Values are - * case-sensitive; only "http" and "https" are accepted. - * - on_redirect: (callable(RequestInterface, ResponseInterface, UriInterface): mixed) - * PHP callable that is invoked when a redirect is encountered. The - * callable is invoked with the request, the redirect response that was - * received, and the effective URI. Any return value is ignored. When - * this callback is supplied via GuzzleHttp\Pool's "options" - * configuration, the pool appends the request's iterable key as a - * fourth argument. - * - track_redirects: (bool, default=false) Track redirected URI and status - * history in response headers. - */ - public const ALLOW_REDIRECTS = 'allow_redirects'; - - /** - * auth: (array{0: string, 1: string, 2?: string|null}|string|false|null) - * Pass an array of HTTP authentication parameters to use with the request. - * The array must contain the username in index [0], the password in index - * [1], and you can optionally provide a built-in authentication type in - * index [2]. Pass false or null to disable authentication for a request. - * Built-in Basic and Digest authentication are applied by the auth - * middleware, normally from HandlerStack::create(). String values are - * passed through for custom handlers. Built-in Basic usernames must not - * contain a colon, and neither Basic usernames nor passwords may contain - * ASCII control characters. Basic passwords may contain colons. - */ - public const AUTH = 'auth'; - - /** - * body: (resource|string|null|StreamInterface|(callable&object)|\Iterator|\Stringable) - * Body to send in the request. Resource and stringable object values are - * converted using the configured stream_factory. Callable and iterator - * bodies use Guzzle's existing stream handling. Strings are used as literal - * body contents, even when they name a callable. Callable bodies may be - * closures or invokable objects; arrays, int, float, bool, and generic - * objects without __toString() are not valid body values. - */ - public const BODY = 'body'; - - /** - * cert: (string|array{0: string, 1?: string|null}) Set to a string to - * specify the path to a client certificate file. PEM is the default - * certificate format. If a password is required, set cert to an array - * containing the certificate path in the first array element followed by - * the certificate password in the second array element. A null password is - * treated the same as omitting it. Use cert_type to specify another - * supported certificate format. - * - * @see self::CERT_TYPE - */ - public const CERT = 'cert'; - - /** - * cert_type: (string) Specify the SSL client certificate file type. - */ - public const CERT_TYPE = 'cert_type'; - - /** - * cookies: (false|GuzzleHttp\Cookie\CookieJarInterface, default=false) - * 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 - * handler has the `cookie` middleware. Valid values are `false` and - * an instance of {@see Cookie\CookieJarInterface}. - */ - public const COOKIES = 'cookies'; - - /** - * connect_timeout: (int|float, default=60) Number of seconds to wait - * while trying to connect to a server. Use 0 to disable the connect - * timeout. Positive values below 0.001 seconds are rejected by the - * built-in cURL handler. - */ - public const CONNECT_TIMEOUT = 'connect_timeout'; - - /** - * crypto_method: (int) A value describing the minimum TLS protocol - * version to use. The built-in cURL and stream handlers default HTTPS - * requests to TLS 1.2 or newer. - * - * This setting must be set to one of the - * ``STREAM_CRYPTO_METHOD_TLS*_CLIENT`` constants. cURL 7.52.0 or higher - * is required to use TLS 1.3 with the cURL handler. - */ - public const CRYPTO_METHOD = 'crypto_method'; - - /** - * crypto_method_max: (int) A value describing the maximum TLS protocol - * version to use. The built-in cURL and stream handlers default HTTPS - * requests to TLS 1.2 or newer, so a lower maximum requires explicitly - * lowering crypto_method too. - * - * This setting must be set to one of the - * ``STREAM_CRYPTO_METHOD_TLS*_CLIENT`` constants. cURL 7.54.0 or higher - * is required in order to specify a maximum TLS version with the cURL - * handler. - */ - public const CRYPTO_METHOD_MAX = 'crypto_method_max'; - - /** - * curl: (array) Raw cURL options to apply when using a built-in cURL - * handler. - */ - public const CURL = 'curl'; - - /** - * debug: (bool|resource) Set to true or set to a PHP stream returned by - * fopen() to enable debug output with the handler used to send a request. - * For example, when using cURL to transfer requests, cURL's verbose of - * CURLOPT_VERBOSE will be emitted. When using the PHP stream wrapper, - * stream wrapper notifications will be emitted. If set to true, the output - * is written to PHP's STDOUT. If a PHP stream is provided, output is - * written to the stream. - */ - public const DEBUG = 'debug'; - - /** - * decode_content: (bool|string, default=true) Specify whether or not - * Content-Encoding responses (gzip, deflate, etc.) are automatically - * decoded. - */ - public const DECODE_CONTENT = 'decode_content'; - - /** - * delay: (int|float) The finite, non-negative amount of time to delay - * before sending in milliseconds. - */ - public const DELAY = 'delay'; - - /** - * expect: (bool|integer) Controls the behavior of the - * "Expect: 100-Continue" header. - * - * Set to `true` to enable the "Expect: 100-Continue" header for all - * requests that sends a body. Set to `false` to disable the - * "Expect: 100-Continue" header for all requests. Set to a number so that - * the size of the payload must be greater than the number in order to send - * the Expect header. Setting to a number will send the Expect header for - * all requests in which the size of the payload cannot be determined or - * where the body is not rewindable. - * - * By default, Guzzle will add the "Expect: 100-Continue" header when the - * size of the body of a request is greater than 1 MB and a request is - * using HTTP/1.1. - */ - public const EXPECT = 'expect'; - - /** - * form_params: (array) - * Associative array of form field names to scalar, null, or nested array - * values. Sets the Content-Type header to application/x-www-form-urlencoded - * when no Content-Type header is already present. - */ - public const FORM_PARAMS = 'form_params'; - - /** - * headers: (array>|null) - * Associative array of HTTP headers. Each value MUST be a string or - * non-empty array of strings. - */ - public const HEADERS = 'headers'; - - /** - * http_errors: (bool, default=true) Set to false to disable exceptions - * when a non-successful HTTP response is received. By default, - * exceptions will be thrown for 4xx and 5xx responses. This option only - * works if your handler has the `httpErrors` middleware. - */ - public const HTTP_ERRORS = 'http_errors'; - - /** - * idn_conversion: (bool|int|null, default=false) A combination of IDNA_* - * constants for PHP's idn_to_ascii() function. Set to false or null to - * disable IDN support, or true to use the default configuration - * (IDNA_DEFAULT constant). - */ - public const IDN_CONVERSION = 'idn_conversion'; - - /** - * json: (mixed) Adds JSON data to a request. The provided value is JSON - * encoded and a Content-Type header of application/json will be added to - * the request if no Content-Type header is already present. An Accept - * header is not added automatically. - */ - public const JSON = 'json'; - - /** - * multipart: (array) Array of part arrays, each containing a required - * "name" key mapping to the string or integer form field name, a required - * "contents" key mapping to any non-array value accepted by PSR-7 - * Utils::streamFor() or a nested array of field values, an optional - * "headers" array of string custom header values, and an optional - * "filename" key mapping to a string to send as the filename in the part. - * "headers" and "filename" cannot be used when "contents" is an array. - */ - public const MULTIPART = 'multipart'; - - /** - * multiplex: (string, default=GuzzleHttp\Multiplexing::WAIT) Controls how a - * request sent through a built-in cURL handler relates to shared, - * multiplexed connections: how an HTTP/2 or HTTP/3 request pursues one, or, - * with Multiplexing::NONE, whether the transfer may share its connection at - * all. Use Multiplexing::EAGER to avoid waiting for pending connections, - * Multiplexing::WAIT to wait on libcurl-eligible pending connections with - * CURLOPT_PIPEWAIT, normally to the same origin, - * Multiplexing::REQUIRE_EAGER to fail unless a multiplexed protocol is - * guaranteed while dialing eagerly, or Multiplexing::REQUIRE_WAIT for the - * same guarantee while also waiting on pending connections. The required - * modes require a handler that permits actual multiplexing, not merely a - * multiplexed protocol, and are rejected on a Multiplexing::NONE handler. - * The stream handler ignores EAGER and WAIT, and rejects the required - * family; CurlHandler has no multi handle to multiplex over. The required - * family also rejects final CURLOPT_HTTPAUTH masks that permit NTLM, which - * libcurl retries over HTTP/1.1. Multiplexing::NONE disables multiplexing - * for a whole handler when passed as the "multiplex" client configuration - * option, which configures the default handler and also becomes the default - * request option, or, when constructing a handler directly, as the - * CurlMultiHandler "multiplex" constructor option. A handler configured - * with Multiplexing::NONE wins over the default WAIT: default requests run - * without waiting, explicitly requested wait modes are rejected as a - * configuration conflict when the transfer would actually wait, and the - * required modes are always rejected, because they require a handler that - * permits actual multiplexing, not merely a multiplexed protocol. As a - * request option value, Multiplexing::NONE guarantees the transfer does not - * share its connection with any concurrent transfer. Multiplexing::NONE - * does not force HTTP/1.1: on a Multiplexing::NONE handler, HTTP/2 still - * negotiates and each transfer keeps its connection to itself. - * - * The request option value is accepted exactly where the guarantee holds - * and can be verified: on a CurlMultiHandler configured with - * Multiplexing::NONE, for requests whose declared protocol version is - * HTTP/1.x, on CurlHandler, and on the stream handler, which never - * multiplexes. An HTTP/2 or HTTP/3 request with a Multiplexing::NONE - * request option is rejected on a CurlMultiHandler that permits - * multiplexing. Acceptance is decided from the request's declared protocol - * version, before any transport-level downgrade: an HTTP/3 request sent - * through a proxy is delivered over HTTP/2 or HTTP/1.1 on the wire, but is - * still rejected. On a CurlMultiHandler that permits multiplexing, - * Multiplexing::NONE is also rejected with a custom "handle_factory", when - * the handler requires persistent transport sharing (the safeguards can - * require a fresh connection, which required sharing forbids), when the - * request carries an Expect: 100-continue header (its 417 retries select - * connections outside the safeguards; remove an explicitly supplied - * header, or set the "expect" request option to false to prevent it being - * added automatically), and combined with a raw CURLOPT_HTTPAUTH cURL - * option, whose authentication retries do the same. - * - * On a client whose multi handler permits multiplexing, the ordinary - * non-streaming default stack - both cURL handlers available and no - * connection caps forcing multi-only routing - runs synchronous requests on - * the CurlHandler path, which satisfies the guarantee for any protocol - * version, while asynchronous requests run on the CurlMultiHandler, so an - * HTTP/2 request with Multiplexing::NONE succeeds synchronously and is - * rejected asynchronously on the same client. Keep-alive reuse between - * consecutive transfers is unaffected, except on libcurl versions below - * 7.77.0 and from 8.11.0 through 8.12.1, where an accepted HTTP/1.x request - * on a multiplexing CurlMultiHandler forces a fresh connection. Custom - * handlers receive the "multiplex" option unchanged: its semantics are - * handler-defined, Guzzle does not guarantee it is honored, and a - * client-level Multiplexing::NONE with a custom handler flows to it as a - * default request option without client-side enforcement. - */ - public const MULTIPLEX = 'multiplex'; - - /** - * on_headers: (callable(ResponseInterface, RequestInterface): mixed) A - * callable that is invoked when the HTTP headers of the final response, or - * a 101 Switching Protocols response, have been received but the body has - * not yet begun to download. The callable is passed the response and - * request as {@see ResponseInterface} and {@see RequestInterface} objects, - * respectively. If it throws, the request promise is rejected with a - * GuzzleHttp\Exception\ResponseException (a RequestException subtype) - * wrapping the thrown exception. When this callback is supplied via - * GuzzleHttp\Pool's "options" configuration, the pool appends the request's - * iterable key as a third argument. - */ - public const ON_HEADERS = 'on_headers'; - - /** - * on_stats: (callable(TransferStats): mixed) allows you to get access to - * transfer statistics of a request and access the lower level transfer - * details of the handler associated with your client. ``on_stats`` is a - * callable that is invoked when a handler has finished sending a request. - * The callback is invoked with transfer statistics about the request, the - * response received, or the error encountered. Included in the data is the - * total amount of time taken to send the request. Exceptions thrown by - * on_stats are not wrapped by Guzzle. Built-in handlers reject non-callable - * values before starting the transfer. The built-in cURL handlers release - * native easy handles before invoking on_stats and invoke it per low-level - * transfer attempt. When this callback is supplied via GuzzleHttp\Pool's - * "options" configuration, the pool appends the request's iterable key as a - * second argument. - */ - public const ON_STATS = 'on_stats'; - - /** - * on_trailers: (callable(array>, ResponseInterface, RequestInterface): mixed) - * A callable that is invoked exactly once when a transfer completes - * successfully, with the HTTP trailer fields of the response. The callable - * is passed an associative array of trailer field names mapped to lists of - * field values, the response, and the request. The array is empty when the - * response carried no trailer fields, and trailer field names are - * lowercased and grouped case-insensitively while values keep their wire - * order. The callable is never invoked for failed transfers. If it throws, - * the request promise is rejected with a - * GuzzleHttp\Exception\ResponseException (a RequestException subtype) - * wrapping the thrown exception. Only the built-in cURL handlers invoke - * on_trailers; the built-in stream handler rejects the option because it - * cannot observe trailer fields, and the mock handler ignores it. - * Malformed trailer field lines are discarded before parsing. Trailer - * fields are reported separately from response headers and are never - * merged into the response. When this callback is supplied via - * GuzzleHttp\Pool's "options" configuration, the pool appends the - * request's iterable key as a fourth argument. - */ - public const ON_TRAILERS = 'on_trailers'; - - /** - * progress: (callable(int, int, int, int): mixed) - * Defines a function to invoke when transfer progress is made. The function - * accepts the following positional arguments: the total number of bytes - * expected to be downloaded, the number of bytes downloaded so far, the - * number of bytes expected to be uploaded, the number of bytes uploaded so - * far. With the built-in cURL handlers, returning a truthy value aborts the - * transfer and throwing rejects the promise with a RequestException. The - * built-in stream handler ignores return values. When this callback is - * supplied via GuzzleHttp\Pool's "options" configuration, the pool appends - * the request's iterable key as a fifth argument. - */ - public const PROGRESS = 'progress'; - - /** - * protocols: (non-empty-array, - * default=['http', 'https']) Allowed URI schemes. Values are - * case-sensitive; only "http" and "https" are accepted. - */ - public const PROTOCOLS = 'protocols'; - - /** - * proxy: (string|array) Pass a string to specify an HTTP proxy, or an array - * to specify different proxies for different protocols (where the key is - * the protocol and the value is a proxy string or null). Provide a "no" key - * as a comma- or whitespace-delimited string, array of strings, or null to - * specify hosts, host-and-port pairs, IP literals, IP CIDR rules, or - * wildcard rules that should not be proxied. Domain rules are matched - * case-insensitively. Exact IP literals are normalized before matching. - * CIDR rules match IP literals only and are not port-specific. Custom - * handlers can use ProxyOptions::resolve() to apply Guzzle-compatible proxy - * selection; the built-in handlers' environment-variable fallback is not - * part of that helper. - */ - public const PROXY = 'proxy'; - - /** - * query: (array|string) Associative array of query string - * values to add to the request. This option uses PHP's http_build_query() - * to create the string representation. Pass a string value if you need - * more control than what this method provides - */ - public const QUERY = 'query'; - - /** - * request_factory: (Psr\Http\Message\RequestFactoryInterface) PSR-17 - * request factory used when creating requests through request() and - * requestAsync(). - */ - public const REQUEST_FACTORY = 'request_factory'; - - /** - * stream_factory: (Psr\Http\Message\StreamFactoryInterface) PSR-17 - * stream factory used when creating request body streams from body, - * form_params, and json request options, and when the built-in handlers - * create response body streams. - */ - public const STREAM_FACTORY = 'stream_factory'; - - /** - * response_factory: (Psr\Http\Message\ResponseFactoryInterface) PSR-17 - * response factory used by the built-in handlers when creating the - * response message. - */ - public const RESPONSE_FACTORY = 'response_factory'; - - /** - * sink: (resource|string|StreamInterface) Where the data of the - * response is written to. Defaults to a PHP temp stream. Providing a - * string will write data to a file by the given name. Built-in handlers - * treat PHP resources as caller-owned; callers are responsible for closing - * resource sinks. - */ - public const SINK = 'sink'; - - /** - * synchronous: (bool) Set to true to inform HTTP handlers that you intend - * on waiting on the response. This can be useful for optimizations. Note - * that a promise is still returned if you are using one of the async - * client methods. - */ - public const SYNCHRONOUS = 'synchronous'; - - /** - * ssl_key: (array{0: string, 1?: string|null}|string) Specify the path to - * a private SSL key file. PEM is the default private key format. If a - * password is required, set ssl_key to an array containing the key path in - * the first array element followed by the key password in the second - * element. A null password is treated the same as omitting it. Use - * ssl_key_type to specify another supported key format. - * - * @see self::SSL_KEY_TYPE - */ - public const SSL_KEY = 'ssl_key'; - - /** - * ssl_key_type: (string) Specify the SSL private key file type. - */ - public const SSL_KEY_TYPE = 'ssl_key_type'; - - /** - * stream: (bool) Set to true to attempt to stream a response rather than - * download it all up-front. - */ - public const STREAM = 'stream'; - - /** - * stream_context: (array) PHP stream context options to merge into the - * context used by the built-in stream handler. - */ - public const STREAM_CONTEXT = 'stream_context'; - - /** - * verify: (bool|string, default=true) Describes the SSL certificate - * verification behavior of a request. Set to true to enable SSL - * certificate verification using the system CA bundle when available - * (the default). Set to false to disable certificate verification (this - * is insecure!). Set to a string to provide the path to a CA bundle on - * disk to enable verification using a custom certificate. - */ - public const VERIFY = 'verify'; - - /** - * timeout: (int|float, default=0) Number of seconds to use as the total - * timeout of the request. Use 0 to disable the total timeout (the default - * behavior). Positive values below 0.001 seconds are rejected by the - * built-in handlers. - */ - public const TIMEOUT = 'timeout'; - - /** - * read_timeout: (int|float, default=60) Number of seconds the connection - * may sit silent at any stage of the request. Use 0 to disable the idle - * timeout. Positive values below 0.001 seconds are rejected by the - * built-in stream handler. - */ - public const READ_TIMEOUT = 'read_timeout'; - - /** - * retries: (int) Current retry count used by the retry middleware. - */ - public const RETRIES = 'retries'; - - /** - * uri_factory: (Psr\Http\Message\UriFactoryInterface) PSR-17 URI factory - * used when creating URI objects from string request URI, base_uri, and - * redirect Location values. - */ - public const URI_FACTORY = 'uri_factory'; - - /** - * version: (string|int|float, default=1.1) Specifies the HTTP protocol - * version to attempt to use. - * - * Guzzle defaults to HTTP/1.1. The built-in stream handler supports - * HTTP/1.0 and HTTP/1.1. The built-in cURL handler also supports HTTP/2 - * and HTTP/3 when the installed cURL stack reports those features. For - * HTTP/2 and HTTP/3, libcurl may use a lower HTTP version when - * negotiation or connection setup falls back. - */ - public const VERSION = 'version'; - - /** - * force_ip_resolve: ("v4"|"v6") Set to "v4" to force IPv4 resolution or - * "v6" to force IPv6 resolution when supported by the handler. - */ - public const FORCE_IP_RESOLVE = 'force_ip_resolve'; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php deleted file mode 100644 index 2709653d9..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php +++ /dev/null @@ -1,137 +0,0 @@ -): PromiseInterface - */ - private $nextHandler; - - /** - * @var callable(int, RequestInterface, ResponseInterface|null, mixed): bool - */ - private $decider; - - /** - * @var callable(int, ResponseInterface|null, RequestInterface): int - */ - private $delay; - - /** - * @param callable(int, RequestInterface, ResponseInterface|null, mixed): bool $decider Function that accepts the number of retries, - * a request, [response], and [rejection reason] - * and returns true if the request is to be retried. - * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke. - * @param (callable(int, ResponseInterface|null, RequestInterface): int)|null $delay Function that returns the number of milliseconds to delay. - */ - public function __construct(callable $decider, callable $nextHandler, ?callable $delay = null) - { - $this->decider = $decider; - $this->nextHandler = $nextHandler; - $this->delay = $delay ?: static function (int $retries): int { - return (int) ((2 ** ($retries - 1)) * 1000); - }; - } - - /** - * @return PromiseInterface - */ - public function __invoke( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options - ): PromiseInterface { - if (!isset($options['retries'])) { - $options['retries'] = 0; - } elseif (!\is_int($options['retries'])) { - throw new \InvalidArgumentException('retries must be an integer'); - } - - /** @var PromiseInterface */ - return ($this->nextHandler)($request, $options) - ->then( - $this->onFulfilled($request, $options), - $this->onRejected($request, $options) - ); - } - - /** - * Execute fulfilled closure - */ - private function onFulfilled(RequestInterface $request, array $options): callable - { - return function ( - #[\SensitiveParameter] - $value - ) use ($request, $options) { - if (!($this->decider)( - $options['retries'], - $request, - $value, - null - )) { - return $value; - } - - return $this->doRetry($request, $options, $value); - }; - } - - /** - * Execute rejected closure - */ - private function onRejected(RequestInterface $req, array $options): callable - { - return function ( - #[\SensitiveParameter] - $reason - ) use ($req, $options): PromiseInterface { - if (!($this->decider)( - $options['retries'], - $req, - null, - $reason - )) { - return P\Create::rejectionFor($reason); - } - - /** @var PromiseInterface */ - return $this->doRetry($req, $options); - }; - } - - /** - * @return PromiseInterface - */ - private function doRetry( - #[\SensitiveParameter] - RequestInterface $request, - #[\SensitiveParameter] - array $options, - #[\SensitiveParameter] - ?ResponseInterface $response = null - ): PromiseInterface { - ++$options['retries']; - $options['delay'] = ($this->delay)($options['retries'], $response, $request); - - return $this($request, $options); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/TransferStats.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/TransferStats.php deleted file mode 100644 index c9d4b66de..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/TransferStats.php +++ /dev/null @@ -1,123 +0,0 @@ -request = $request; - $this->response = $response; - $this->transferTime = $transferTime; - $this->handlerErrorData = $handlerErrorData; - $this->handlerStats = $handlerStats; - } - - public function getRequest(): RequestInterface - { - return $this->request; - } - - /** - * Returns the response that was received (if any). - */ - public function getResponse(): ?ResponseInterface - { - return $this->response; - } - - /** - * Returns true if a response was received. - */ - public function hasResponse(): bool - { - return $this->response !== null; - } - - /** - * Gets handler specific error data. - * - * This might be an exception, a integer representing an error code, or - * anything else. Relying on this value assumes that you know what handler - * you are using. - * - * @return mixed - */ - public function getHandlerErrorData() - { - return $this->handlerErrorData; - } - - /** - * Get the effective URI the request was sent to. - */ - public function getEffectiveUri(): UriInterface - { - return $this->request->getUri(); - } - - /** - * Get the estimated time the request was being transferred by the handler. - * - * @return float|null Time in seconds. - */ - public function getTransferTime(): ?float - { - return $this->transferTime; - } - - /** - * Gets an array of all of the handler specific transfer data. - */ - public function getHandlerStats(): array - { - return $this->handlerStats; - } - - /** - * Get a specific handler statistic from the handler by name. - * - * @param string $stat Handler specific transfer stat to retrieve. - * - * @return mixed|null - */ - public function getHandlerStat(string $stat) - { - return $this->handlerStats[$stat] ?? null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/TransportSharing.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/TransportSharing.php deleted file mode 100644 index 5d27c5af5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/guzzle/src/TransportSharing.php +++ /dev/null @@ -1,18 +0,0 @@ -): PromiseInterface Returns the best handler for the given system. - * - * @throws \RuntimeException if no viable Handler is available. - */ - public static function chooseHandler(array $handlerOptions = []): callable - { - $sharingMode = CurlShareHandleState::normalizeMode($handlerOptions['transport_sharing'] ?? null, 'transport_sharing'); - $sharingRequired = self::isTransportSharingRequired($sharingMode); - $connectionCapsRequired = self::hasConnectionCapOptions($handlerOptions); - - if ($connectionCapsRequired && $sharingMode === TransportSharing::PERSISTENT_REQUIRE) { - throw new InvalidArgumentException('The "max_host_connections" and "max_total_connections" options cannot be combined with required persistent transport sharing because libcurl does not reliably apply connection caps to shared connection pools.'); - } - - if ($connectionCapsRequired && $sharingMode === TransportSharing::PERSISTENT_PREFER) { - // libcurl does not apply cURL multi connection caps to transfers - // using a shared connection pool, so the best honorable offer for - // preferred persistent sharing is a handler-lifetime share. - $sharingMode = TransportSharing::HANDLER_PREFER; - } - - $handler = self::createCurlHandler($sharingMode, $handlerOptions); - - if ($sharingRequired && $handler === null) { - throw new \RuntimeException('Required transport sharing requires the PHP cURL extension, curl_exec() or curl_multi_exec(), and a supported libcurl version with SSL support.'); - } - - if (\ini_get('allow_url_fopen')) { - return self::addStreamHandler($handler, $sharingMode, self::connectionCapOptions($handlerOptions)); - } - - if ($handler !== null) { - return $handler; - } - - if ($connectionCapsRequired) { - throw new \RuntimeException('Connection cap options require a cap-capable cURL multi handler or the allow_url_fopen ini setting for stream fallback.'); - } - - throw new \RuntimeException('GuzzleHttp requires a supported cURL version with SSL support, the allow_url_fopen ini setting, or a custom HTTP handler.'); - } - - private static function isTransportSharingRequired(string $sharingMode): bool - { - return \in_array($sharingMode, [TransportSharing::HANDLER_REQUIRE, TransportSharing::PERSISTENT_REQUIRE], true); - } - - /** - * @param array{max_host_connections?: mixed, max_total_connections?: mixed} $handlerOptions - */ - private static function hasConnectionCapOptions(array $handlerOptions): bool - { - return self::connectionCapOptions($handlerOptions) !== []; - } - - /** - * @param array{max_host_connections?: mixed, max_total_connections?: mixed, multiplex?: mixed} $handlerOptions - * - * @return (callable(RequestInterface, array): PromiseInterface)|null - */ - private static function createCurlHandler(string $sharingMode, array $handlerOptions): ?callable - { - if (!CurlVersion::supportsCurlHandler()) { - return null; - } - - $connectionCapOptions = self::connectionCapOptions($handlerOptions); - if ($connectionCapOptions !== [] && !\function_exists('curl_multi_exec')) { - return null; - } - - $curlHandlerOptions = self::createCurlHandlerOptions($sharingMode); - $curlMultiHandlerOptions = $curlHandlerOptions + $connectionCapOptions; - if (($handlerOptions['multiplex'] ?? null) === Multiplexing::NONE) { - // Forwarded to the CurlMultiHandler only: CurlHandler and - // StreamHandler validate known options, and both satisfy NONE - // per-request without a handler option. - $curlMultiHandlerOptions['multiplex'] = Multiplexing::NONE; - } - - if (\function_exists('curl_multi_exec') && \function_exists('curl_exec')) { - $multiHandler = new CurlMultiHandler($curlMultiHandlerOptions); - - if ($connectionCapOptions !== []) { - // Connection caps only govern transfers on the multi handle, so - // the synchronous CurlHandler fast path would escape them. - return $multiHandler; - } - - return Proxy::wrapSync($multiHandler, new CurlHandler($curlHandlerOptions)); - } - - if ($connectionCapOptions === [] && \function_exists('curl_exec')) { - return new CurlHandler($curlHandlerOptions); - } - - if (\function_exists('curl_multi_exec')) { - return new CurlMultiHandler($curlMultiHandlerOptions); - } - - return null; - } - - /** - * @return array - */ - private static function createCurlHandlerOptions(string $sharingMode): array - { - if ($sharingMode === TransportSharing::NONE) { - return []; - } - - $shareState = CurlShareHandleState::fromOption($sharingMode); - - return $shareState === null ? [] : ['transport_sharing' => $shareState]; - } - - /** - * @param array{max_host_connections?: mixed, max_total_connections?: mixed} $handlerOptions - * - * @return array{max_host_connections?: int, max_total_connections?: int} - */ - private static function connectionCapOptions(array $handlerOptions): array - { - $options = []; - foreach (['max_host_connections', 'max_total_connections'] as $capOption) { - $value = $handlerOptions[$capOption] ?? null; - if ($value === null) { - continue; - } - - if (!\is_int($value) || $value < 1) { - throw new InvalidArgumentException(\sprintf('%s must be a positive integer.', $capOption)); - } - - $options[$capOption] = $value; - } - - return $options; - } - - /** - * @param (callable(RequestInterface, array): PromiseInterface)|null $handler - * @param array{max_host_connections?: int, max_total_connections?: int} $connectionCapOptions - * - * @return callable(RequestInterface, array): PromiseInterface - */ - private static function addStreamHandler(?callable $handler, string $sharingMode, array $connectionCapOptions): callable - { - $streamHandler = new StreamHandler(['transport_sharing' => $sharingMode] + $connectionCapOptions); - - return $handler - ? Proxy::wrapStreaming($handler, $streamHandler) - : $streamHandler; - } - - /** - * Get the default User-Agent string to use with Guzzle. - */ - public static function defaultUserAgent(): string - { - return sprintf('GuzzleHttp/%d', ClientInterface::MAJOR_VERSION); - } - - /** - * Creates an associative array of lowercase header names to the actual - * header casing. - */ - public static function normalizeHeaderKeys(array $headers): array - { - $result = []; - foreach (\array_keys($headers) as $key) { - $result[Psr7\Utils::asciiToLower((string) $key)] = $key; - } - - return $result; - } - - /** - * @param mixed $protocols - * - * @return string[] - * - * @throws InvalidArgumentException - */ - public static function normalizeProtocols($protocols): array - { - if (!\is_array($protocols) || $protocols === []) { - throw new InvalidArgumentException('protocols must be a non-empty array of "http" and/or "https"'); - } - - $normalized = []; - - foreach ($protocols as $protocol) { - if (!\is_string($protocol)) { - throw new InvalidArgumentException('protocols must contain only strings'); - } - - if ($protocol !== 'http' && $protocol !== 'https') { - throw new InvalidArgumentException('protocols may only contain "http" and "https"'); - } - - $normalized[$protocol] = true; - } - - return \array_keys($normalized); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/AGENTS.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/AGENTS.md deleted file mode 100644 index d740e9393..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/AGENTS.md +++ /dev/null @@ -1,62 +0,0 @@ -# Agent Guidelines - -## Code and tooling - -- All code must remain compatible with PHP 7.4. Run PHPStan and PHP-CS-Fixer - only under a PHP 7.4.x runtime; never run either tool under any other PHP - major.minor version. -- Use fully qualified `#[\SensitiveParameter]` on concrete executable - parameters when their established role normally carries a secret, - credential-bearing aggregate, or confidential Guzzle-owned container, and - the active frame can throw or invoke throwing code. -- Repeat the attribute on every qualifying owned caller, callee, concrete trait - method, and closure parameter. Do not add it to interfaces, abstract-only - declarations, pure/no-realistic-throw helpers, assignment-only sites, - arbitrary generic payloads, or completed non-recoverable derivatives. -- For PHP 7.4 compatibility, put `#[\SensitiveParameter]` on its own line and - the parameter on the following line, expand the complete parameter list, and - never add a comma after the final parameter. Native trace redaction starts on - PHP 8.2 and does not redact logs, messages, properties, wire traffic, captured - variables, return values, or the separate backtrace `$this`/`object`. -- Always pass an explicit character list to `trim()`, `ltrim()`, and `rtrim()`; - never rely on the default characters. -- Handle `preg_*` engine failures: when the result is used as data, test for - `false` or `null` and throw a `\RuntimeException` including - `preg_last_error_msg()`; boolean validation guards must compare strictly, such - as `=== 1`, so an engine failure can only ever fail closed. Diagnostic - escaping is the narrow exception: use a deterministic bytewise fallback rather - than throwing, so it cannot obscure the original exception. -- Anchor validation patterns to the true end of input with the `D` modifier or - `\z`; a bare `$` accepts a trailing newline. -- Never embed raw control bytes in exception messages and other diagnostics; - escape or redact the offending value first. -- Helper classes that expose only public static methods are `final` and have a - private constructor. -- Resist native PHP serialization when a class holds live state (streams, - resources, handles, callbacks, credentials); plain data holders remain - serializable. -- To resist, `__serialize()` and `__unserialize()` both throw - `\LogicException(static::class.' should never be serialized')` and its - unserialized counterpart, via the `@internal` `NonSerializableTrait`. -- In general, numeric inputs should not accept non-finite floats. In situations - where they are accepted and we need to cast to a string, we should branch on - `\is_finite($value)`, using `(string) $value` for the finite case and - `\is_nan($value) ? 'NAN' : ($value > 0 ? 'INF' : '-INF')` otherwise. -- Never call `strtolower()`, `strtoupper()`, `strcasecmp()`, `stripos()`, or - other locale-sensitive case functions; fold ASCII case with - `strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')` - and its inverse instead. -- Changes in behavior need a `CHANGELOG.md` entry in the unreleased section of - the target branch and an `UPGRADING.md` note when the behavior differs between - major versions. - -## Documentation - -- Wrap markdown prose and PHPDoc text to 80 columns using greedy wrapping. Never - split a markdown link or an inline code span across a line break; a line that - cannot be broken may exceed the limit. Avoid em dashes. -- Keep PHPDoc and the corresponding `docs/` pages in sync: shared prose is - deliberately word-for-word identical, including boilerplate copied verbatim - between related functions, so apply the same edit to every copy. Only - formatting and linking may differ, such as a docs link becoming a PHPDoc - `@see` tag; the wording must never drift. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/CHANGELOG.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/CHANGELOG.md deleted file mode 100644 index ace73ebff..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/CHANGELOG.md +++ /dev/null @@ -1,260 +0,0 @@ -# CHANGELOG - - -## 3.0.1 - 2026-08-05 - -### Changed - -- Changed the default `TReason` of `FulfilledPromise` and `Create::promiseFor()` to `never` -- Changed the default `TValue` of `RejectedPromise` and `Create::rejectionFor()` to `never` - -### Fixed - -- Fixed `EachPromise` abandoning its aggregate when the pending window drains unsettled -- Fixed `EachPromise` admitting new work after its aggregate has settled - - -## 3.0.0 - 2026-07-20 - -### Added - -- Added `concurrency` config support to `Utils::all()` and `Each::of()` -- Added generic PHPDoc annotations to promise APIs and collection callbacks -- Added recursive and `concurrency` config support to `Utils::settle()` -- Allowed promises to be resolved without passing a value - -### Changed - -- Changed `Utils::inspect()` to return actual rejection reasons -- Changed `Utils::inspect()` to prefer the settled state over late wait function exceptions -- Changed late rejection callbacks to follow rejected promises -- Reject native PHP serialization of in-flight runtime objects -- Made static helper classes non-instantiable -- Require iterable inputs for promise collection helpers and `EachPromise` -- Iterate `IteratorAggregate` inputs to collection helpers instead of treating them as a single value -- Improved recursive `Utils::all()` handling of dynamically-added settled values and raw values - -### Removed - -- Dropped support for PHP 7.2 and 7.3 - - -## 2.5.1 - 2026-07-08 - -### Fixed - -- Fixed recursive `Utils::all()` rejecting generator inputs - - -## 2.5.0 - 2026-06-02 - -### Deprecated - -- Deprecated passing non-iterable inputs to promise collection helpers and `EachPromise` - - -## 2.4.1 - 2026-05-20 - -### Fixed - -- Fixed cancelling settled coroutines when no current promise remains - - -## 2.4.0 - 2026-05-20 - -### Changed - -- Empty `EachPromise` instances now resolve when the task queue runs without `wait()` - - -## 2.3.1 - 2026-05-19 - -### Fixed - -- Fixed `Utils::inspect()` returning the internal reason array instead of the `AggregateException` - - -## 2.3.0 - 2025-08-22 - -### Added - -- PHP 8.5 support - - -## 2.2.0 - 2025-03-27 - -### Fixed - -- Revert "Allow an empty EachPromise to be resolved by running the queue" - - -## 2.1.0 - 2025-03-27 - -### Added - -- Allow an empty EachPromise to be resolved by running the queue - - -## 2.0.4 - 2024-10-17 - -### Fixed - -- Once settled, don't allow further rejection of additional promises - - -## 2.0.3 - 2024-07-18 - -### Changed - -- PHP 8.4 support - - -## 2.0.2 - 2023-12-03 - -### Changed - -- Replaced `call_user_func*` with native calls - - -## 2.0.1 - 2023-08-03 - -### Changed - -- PHP 8.3 support - - -## 2.0.0 - 2023-05-21 - -### Added - -- Added PHP 7 type hints - -### Changed - -- All previously non-final non-exception classes have been marked as soft-final - -### Removed - -- Dropped PHP < 7.2 support -- All functions in the `GuzzleHttp\Promise` namespace - - -## 1.5.3 - 2023-05-21 - -### Changed - -- Removed remaining usage of deprecated functions - - -## 1.5.2 - 2022-08-07 - -### Changed - -- Officially support PHP 8.2 - - -## 1.5.1 - 2021-10-22 - -### Fixed - -- Revert "Call handler when waiting on fulfilled/rejected Promise" -- Fix pool memory leak when empty array of promises provided - - -## 1.5.0 - 2021-10-07 - -### Changed - -- Call handler when waiting on fulfilled/rejected Promise -- Officially support PHP 8.1 - -### Fixed - -- Fix manually settle promises generated with `Utils::task` - - -## 1.4.1 - 2021-02-18 - -### Fixed - -- Fixed `each_limit` skipping promises and failing - - -## 1.4.0 - 2020-09-30 - -### Added - -- Support for PHP 8 -- Optional `$recursive` flag to `all` -- Replaced functions by static methods - -### Fixed - -- Fix empty `each` processing -- Fix promise handling for Iterators of non-unique keys -- Fixed `method_exists` crashes on PHP 8 -- Memory leak on exceptions - - -## 1.3.1 - 2016-12-20 - -### Fixed - -- `wait()` foreign promise compatibility - - -## 1.3.0 - 2016-11-18 - -### Added - -- Adds support for custom task queues. - -### Fixed - -- Fixed coroutine promise memory leak. - - -## 1.2.0 - 2016-05-18 - -### Changed - -- Update to now catch `\Throwable` on PHP 7+ - - -## 1.1.0 - 2016-03-07 - -### Changed - -- Update EachPromise to prevent recurring on a iterator when advancing, as this - could trigger fatal generator errors. -- Update Promise to allow recursive waiting without unwrapping exceptions. - - -## 1.0.3 - 2015-10-15 - -### Changed - -- Update EachPromise to immediately resolve when the underlying promise iterator - is empty. Previously, such a promise would throw an exception when its `wait` - function was called. - - -## 1.0.2 - 2015-05-15 - -### Changed - -- Conditionally require functions.php. - - -## 1.0.1 - 2015-06-24 - -### Changed - -- Updating EachPromise to call next on the underlying promise iterator as late - as possible to ensure that generators that generate new requests based on - callbacks are not iterated until after callbacks are invoked. - - -## 1.0.0 - 2015-05-12 - -- Initial release diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/LICENSE deleted file mode 100644 index 9f0f943be..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Michael Dowling -Copyright (c) 2015 Graham Campbell -Copyright (c) 2017 Tobias Schultze -Copyright (c) 2020 Tobias Nyholm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/README.md deleted file mode 100644 index 5619a5a45..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# Guzzle Promises - -`guzzlehttp/promises` is a small promise library used by Guzzle for asynchronous -operations. It implements promise chaining, synchronous waiting, cancellation, -and helpers for working with groups of promises. - -Most application developers use this package through -[`guzzlehttp/guzzle`](https://github.com/guzzle/guzzle/blob/8.0/README.md) by -calling methods such as `requestAsync()`. Install this package directly when you -need promise composition without the full HTTP client. - -## Installation - -```bash -composer require guzzlehttp/promises -``` - -## Version Guidance - -| Version | Status | PHP Version | -|---------|--------------|--------------| -| 3.0 | Latest | >=7.4,<8.6 | -| 2.5 | Maintenance | >=7.2.5,<8.6 | -| 1.5 | End of Life | >=5.5,<8.3 | - -## Quick Start - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); - -$promise->then( - function ($value) { - echo 'Fulfilled: ' . $value; - }, - function ($reason) { - echo 'Rejected: ' . $reason; - } -); - -$promise->resolve('done'); -Utils::queue()->run(); -``` - -You can wait for a promise to complete synchronously: - -```php -$value = $promise->wait(); -``` - -When using Guzzle HTTP requests, asynchronous methods return -`GuzzleHttp\Promise\PromiseInterface` instances: - -```php -$promise = $client->requestAsync('GET', 'https://example.com'); -$response = $promise->wait(); -``` - -## Documentation - -- [Promise Quick Start](docs/promise-quick-start.md) -- [Promise API](docs/promise-api.md) -- [Promise Interoperability](docs/promise-interoperability.md) -- [Implementation Notes](docs/implementation-notes.md) -- [Upgrade Guide](UPGRADING.md) -- [Changelog](CHANGELOG.md) - -## Security - -If you discover a security vulnerability within this package, please send an -email to security@tidelift.com. All security vulnerabilities will be promptly -addressed. Please do not disclose security-related issues publicly until a fix -has been announced. Please see -[Security Policy](https://github.com/guzzle/promises/security/policy) for more -information. - -## License - -Guzzle is made available under the MIT License (MIT). Please see -[License File](LICENSE) for more information. - -## For Enterprise - -Available as part of the Tidelift Subscription - -The maintainers of Guzzle and thousands of other packages are working with -Tidelift to deliver commercial support and maintenance for the open source -dependencies you use to build your applications. Save time, reduce risk, and -improve code health, while paying the maintainers of the exact dependencies you -use. -[Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-promises?utm_source=packagist-guzzlehttp-promises&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/UPGRADING.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/UPGRADING.md deleted file mode 100644 index 691c5882e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/UPGRADING.md +++ /dev/null @@ -1,279 +0,0 @@ -Guzzle Promises Upgrade Guide -============================= - -2.x to 3.0 ----------- - -Guzzle Promises 3.0 is a major release that raises the minimum PHP version, -updates promise and collection helper signatures, adds generic PHPDoc types for -static analyzers, tightens collection helper inputs, improves recursive -collection behavior, and clarifies rejection inspection and late rejection -callback behavior. - -#### PHP Version and Dependencies - -Guzzle Promises 3.0 requires PHP `^7.4 || ^8.0`. Guzzle Promises 2.x supported -PHP `^7.2.5 || ^8.0`. - -If your application still supports PHP 7.2 or 7.3, continue using Guzzle -Promises 2.x until your minimum PHP version is raised. - -Guzzle Promises 3.0 has no runtime package dependencies beyond PHP. It removes -the 2.x runtime dependency on `symfony/deprecation-contracts`; require that -package directly if your application uses it. - -#### Optional Promise Resolution Values - -`PromiseInterface::resolve()` now accepts an optional value. Calling `resolve()` -without an argument fulfills the promise with `null`. - -Custom implementations of `PromiseInterface`, and subclasses that override -`resolve()` on `Promise`, `FulfilledPromise`, or `RejectedPromise`, must update -their method signature from `resolve($value): void` to -`resolve($value = null): void`. - -#### Generic PHPDoc Types - -`PromiseInterface`, `PromisorInterface`, and the built-in promise classes now -include generic PHPDoc annotations for static analysis tools. The first template -type represents the fulfillment value and the second represents the rejection -reason. This is a static-analysis-only change and does not alter runtime -behavior, but projects with stricter static analysis may see new or different -diagnostics: - -```php -use GuzzleHttp\Promise\PromiseInterface; - -/** @var PromiseInterface */ -$promise = $factory->createPromise(); - -$value = $promise->wait(); -``` - -Code that uses unparameterized promise types continues to work and is treated as -`PromiseInterface`. If your project implements promise interfaces, -extends promise classes, or has stricter static analysis, you may need to update -your PHPDoc annotations to include the generic value and reason types. The -expanded PHPDoc also preserves promise-chain fulfillment and rejection types -more precisely through `then()` and `otherwise()`, and documents collection -callbacks with value or reason, key, and aggregate-promise arguments so -callbacks may declare only the arguments they use. - -#### Collection Helper Inputs - -Promise collection helpers now require iterable inputs. Passing a single promise -or scalar value directly now throws a `TypeError`. - -Wrap single promises or values in an array before passing them to -`Create::iterFor()`, `Each::of()`, `Each::ofLimit()`, `Each::ofLimitAll()`, -`EachPromise`, or the `Utils` collection helpers. - -```php -use GuzzleHttp\Promise\Each; - -// 2.x -$promise = Each::ofLimit($singlePromise, 2); - -// 3.0 -$promise = Each::ofLimit([$singlePromise], 2); -``` - -`IteratorAggregate` inputs are now iterated via `getIterator()`. In 2.x an -aggregate was treated as a single value and produced one result; in 3.0 its -entries are consumed individually. - -```php -use GuzzleHttp\Promise\Utils; - -$aggregate = new \ArrayObject([$promiseA, $promiseB]); - -// 2.x: one result — the ArrayObject itself -// 3.0: two results — the fulfillment values of $promiseA and $promiseB -$promise = Utils::all($aggregate); -``` - -#### Collection Helper Signatures - -`Utils::all()`, `Utils::settle()`, and `Each::of()` now accept trailing optional -arguments. Direct calls using the 2.x argument lists continue to work, and the -affected helper classes are final so subclass signatures do not need to change. -Code that mirrors or reflects exact helper signatures may need to be updated. - -Pass the recursive flag before the config array when using `Utils::all()` or -`Utils::settle()`: - -```php -use GuzzleHttp\Promise\Utils; - -$promise = Utils::all($promises, false, ['concurrency' => 5]); -$promise = Utils::settle($promises, false, ['concurrency' => 5]); -``` - -Only `concurrency` is honored by these helper config arrays. Callback config -keys such as `fulfilled` and `rejected` are ignored; pass callbacks to -`Each::of()` directly or use `EachPromise`. - -#### Recursive Collection Helpers - -Existing `Utils::all($promises, true)` calls may return different results in -3.0. Recursive mode now detects dynamically-added settled promises and raw -values. In 2.x, recursive mode only checked for pending promises. - -If you previously worked around the lack of recursive `Utils::settle()` support, -you can replace that workaround with the new `$recursive` argument: - -```php -use GuzzleHttp\Promise\Utils; - -$promise = Utils::settle($promises, true); -``` - -When `$recursive` is true, collection helpers continue taking passes over the -collection until no new entries are found and no visible promises remain -pending. This is intended for rewindable mutable collections such as -`ArrayIterator`. Generators are safe to pass, but they cannot be traversed -again once consumed, so recursive mode degrades to a single pass; use a -rewindable mutable collection when recursion needs to observe added values. - -#### Promise Inspection - -`Utils::inspect()` and `Utils::inspectAll()` now return the actual rejection -reason delivered to rejection callbacks. They no longer unwrap -`RejectionException` instances to their inner reason. - -For example, a promise rejected with a `RejectionException` now inspects with -that exception as the reason: - -```php -use GuzzleHttp\Promise\RejectedPromise; -use GuzzleHttp\Promise\RejectionException; -use GuzzleHttp\Promise\Utils; - -$reason = new RejectionException('reason'); -$result = Utils::inspect(new RejectedPromise($reason)); - -assert($result['reason'] === $reason); -``` - -Cancelled promises now inspect with a `CancellationException` reason. If you -need the string reason from a `RejectionException` or subclass, call -`getReason()` on the exception. - -`Utils::inspect()` still reports wait-function failures as rejection reasons -when the wait function does not settle the promise. If the wait function -settles the promise and then throws, `inspect()` reports the settled -fulfillment or rejection state; direct `Promise::wait()` calls continue to -throw that late exception. - -#### Late Rejection Callbacks - -Rejection callbacks registered after a promise was resolved with a rejected -promise are now invoked with the nested rejection reason. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\RejectedPromise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); -$promise->resolve(new RejectedPromise('reason')); - -$promise->then(null, function ($reason): void { - assert($reason === 'reason'); -}); - -Utils::queue()->run(); -``` - -#### Non-instantiable Helper Classes - -Static helper classes such as `Create`, `Each`, `Is`, and `Utils` now have -private constructors. Replace any accidental instantiation with static method -calls. - -#### Native PHP Serialization of Runtime Objects - -`Promise`, `TaskQueue`, `EachPromise`, and `Coroutine` no longer support native -PHP `serialize()` or `unserialize()`. Persist application values instead of -promise runtime state. - -1.x to 2.0 ----------- - -Guzzle Promises 2.0 is a major release that removes deprecated APIs, raises the -minimum PHP version, and adds PHP 7 parameter and return types. Applications that -only use the object-oriented API should usually need small changes. Applications -that call helper functions, implement package interfaces, extend package classes, -or pass invalid argument types need closer review. - -#### PHP Version and Dependencies - -Guzzle Promises 2.0 requires PHP `^7.2.5 || ^8.0`. Guzzle Promises 1.x -supported PHP `>=5.5`. - -#### PHP 7 Type Hints and Return Types - -Type hints and return types were added wherever possible. Please make sure: - -- You pass values of the documented type when calling methods and functions. -- Classes that implement `PromiseInterface`, `PromisorInterface`, or - `TaskQueueInterface` update method signatures to remain compatible. -- Classes that extend Guzzle Promises classes update any overridden method - signatures to remain compatible. -- Code that expected package-specific exceptions for invalid argument types may - now receive PHP `TypeError` exceptions instead. - -#### Soft-Final Classes - -All previously non-final non-exception classes are now final or annotated with -`@final`. If your code extends one of these classes, replace inheritance with -composition or implement the relevant interface directly. - -#### Removed Function API - -The static API was introduced in 1.4.0 to mitigate problems with functions -conflicting between global and local copies of the package. The function API was -removed in 2.0.0, along with the Composer `files` autoload entry that loaded -`src/functions_include.php`. - -Replace namespaced function calls with the corresponding static methods in the -`GuzzleHttp\Promise` namespace: - -```php -// Before: -use function GuzzleHttp\Promise\promise_for; - -$promise = promise_for('value'); - -// After: -use GuzzleHttp\Promise\Create; - -$promise = Create::promiseFor('value'); -``` - -| Original Function | Replacement Method | -|-------------------|--------------------| -| `queue` | `Utils::queue` | -| `task` | `Utils::task` | -| `promise_for` | `Create::promiseFor` | -| `rejection_for` | `Create::rejectionFor` | -| `exception_for` | `Create::exceptionFor` | -| `iter_for` | `Create::iterFor` | -| `inspect` | `Utils::inspect` | -| `inspect_all` | `Utils::inspectAll` | -| `unwrap` | `Utils::unwrap` | -| `all` | `Utils::all` | -| `some` | `Utils::some` | -| `any` | `Utils::any` | -| `settle` | `Utils::settle` | -| `each` | `Each::of` | -| `each_limit` | `Each::ofLimit` | -| `each_limit_all` | `Each::ofLimitAll` | -| `!is_fulfilled` | `Is::pending` | -| `is_fulfilled` | `Is::fulfilled` | -| `is_rejected` | `Is::rejected` | -| `is_settled` | `Is::settled` | -| `coroutine` | `Coroutine::of` | - -For the full 2.0 diff, see -https://github.com/guzzle/promises/compare/1.5.3...2.0.0. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/composer.json deleted file mode 100644 index 94f9254f3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/composer.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "guzzlehttp/promises", - "description": "Guzzle promises library", - "license": "MIT", - "keywords": [ - "promise" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^9.6.34" - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "GuzzleHttp\\Promise\\Tests\\": "tests/" - } - }, - "config": { - "allow-plugins": { - "bamarni/composer-bin-plugin": true - }, - "preferred-install": "dist", - "sort-packages": true - }, - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/implementation-notes.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/implementation-notes.md deleted file mode 100644 index 8e4071c2f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/implementation-notes.md +++ /dev/null @@ -1,72 +0,0 @@ -# Implementation Notes - -This document describes implementation details that explain observable behavior -in `guzzlehttp/promises`, especially queue-based callback execution, iterative -resolution, and why `Promise` also acts as the deferred value. Application code -usually only needs the [Promise Quick Start](promise-quick-start.md) and -[Promise API](promise-api.md). - -## Iterative Resolution and Chaining - -Promises are resolved iteratively by moving pending handlers between promises. -This keeps stack size constant even for very long `then()` chains. - -```php -then(function ($v) { - // The stack size remains constant. - echo xdebug_get_stack_depth() . ', '; - return $v + 1; - }); -} - -$parent->resolve(0); -var_dump($p->wait()); // int(1000) - -``` - -When a promise is fulfilled or rejected with a non-promise value, the promise -takes ownership of each child promise's handlers and delivers values down the -chain without recursion. - -When a promise is resolved with another promise, the original promise transfers -all of its pending handlers to the new promise. When the new promise is -eventually resolved, all pending handlers receive the forwarded -value. - -## A Promise Is the Deferred - -Some promise libraries implement promises using a deferred object to represent -a computation and a promise object to represent the delivery of the result of -the computation. That separation prevents consumers from modifying the value -that will eventually be delivered. - -Iterative resolution requires one promise to move handlers from another promise. -To do that without making handlers publicly mutable, `Promise` is also the -deferred value. Promises of the same class can modify each other's private -state, including handler ownership. This means a consumer that receives a -`Promise` can also resolve or reject it, but it keeps chaining efficient and -stack safe. - -```php -$promise = new Promise(); -$promise->then(function ($value) { echo $value; }); -// The promise is the deferred value, so you can deliver a value to it. -$promise->resolve('foo'); -GuzzleHttp\Promise\Utils::queue()->run(); -// Prints "foo" -``` - -## Related - -- [Quick Start](promise-quick-start.md) -- [Promise API](promise-api.md) -- [Promise Interoperability](promise-interoperability.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-api.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-api.md deleted file mode 100644 index a7caaec2a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-api.md +++ /dev/null @@ -1,172 +0,0 @@ -# Promise API - -This reference summarizes the public API provided by `guzzlehttp/promises`. -Promise APIs are documented for static analysis as -`PromiseInterface`. `TValue` is the fulfillment value type and -`TReason` is the rejection reason type. This typing is PHPDoc-only and does not -change runtime behavior. - -Callbacks registered with `then()` are queued. They are invoked when the global -task queue runs, when a returned promise is waited on, or when the queue is -drained by the default shutdown handler. - -## PromiseInterface and Promise - -`PromiseInterface` defines the common promise contract and the states -`pending`, `fulfilled`, and `rejected`. - -When creating a `Promise`, you can provide an optional `$waitFn` and -`$cancelFn`. `$waitFn` receives a boolean argument and is expected to resolve or -reject the promise. `$cancelFn` receives no arguments and is invoked when -`cancel()` is called. - -```php -use GuzzleHttp\Promise\Promise; - -$promise = new Promise( - function (bool $recursive) use (&$promise) { - $promise->resolve('waited'); - }, - function () { - // Cancel the underlying operation, such as closing a socket. - } -); - -assert('waited' === $promise->wait()); -``` - -A promise has the following methods: - -- `then(?callable $onFulfilled = null, ?callable $onRejected = null) : PromiseInterface` appends fulfillment and rejection handlers and returns a new promise resolving to the return value of the called handler. If a handler is omitted, the original fulfillment value or rejection reason is forwarded. -- `otherwise(callable $onRejected) : PromiseInterface` appends a rejection handler and returns a new promise resolving to the callback result if called, or to the original fulfillment value if the promise is fulfilled. -- `wait(bool $unwrap = true) : mixed` synchronously waits on the promise. When `$unwrap` is `true`, fulfilled values are returned and rejected reasons are thrown. When `$unwrap` is `false`, the promise is settled without returning or throwing its result. -- `cancel() : void` attempts to cancel the promise and dependent promises. -- `getState() : string` returns `pending`, `fulfilled`, or `rejected`. -- `resolve($value = null) : void` fulfills the promise with `$value`, or with `null` if no value is given. -- `reject($reason) : void` rejects the promise with `$reason`. - -## Settled Promises - -`FulfilledPromise` represents an already fulfilled promise. Fulfillment -callbacks are still queued and run when the task queue runs or the returned -promise is waited on. - -```php -use GuzzleHttp\Promise\FulfilledPromise; -use GuzzleHttp\Promise\Utils; - -$promise = new FulfilledPromise('value'); -$promise->then(function ($value) { - echo $value; -}); - -Utils::queue()->run(); -``` - -`RejectedPromise` represents an already rejected promise. Rejection callbacks -are also queued and run when the queue is drained or the returned promise is -waited on. - -```php -use GuzzleHttp\Promise\RejectedPromise; -use GuzzleHttp\Promise\Utils; - -$promise = new RejectedPromise('Error'); -$promise->then(null, function ($reason) { - echo $reason; -}); - -Utils::queue()->run(); -``` - -## Utils - -`GuzzleHttp\Promise\Utils` provides helpers for inspecting, aggregating, and -queuing promise work. - -- `Utils::queue(?TaskQueueInterface $assign = null) : TaskQueueInterface` returns the global task queue, or assigns a replacement queue when `$assign` is provided. -- `Utils::task(callable $task) : PromiseInterface` adds a task to the global queue and returns a promise that is fulfilled or rejected with the task result. -- `Utils::inspect(PromiseInterface $promise) : array` waits for one promise to settle and returns an inspection array with `state` and either `value` or `reason`. -- `Utils::inspectAll(iterable $promises) : array` inspects each promise and returns inspection arrays keyed like the input iterable. -- `Utils::unwrap(iterable $promises) : array` waits on all promises and returns fulfilled values, throwing if any promise rejects. -- `Utils::all(iterable $promises, bool $recursive = false, array $config = []) : PromiseInterface` returns a promise fulfilled with all values, or rejected when any input rejects. -- `Utils::settle(iterable $promises, bool $recursive = false, array $config = []) : PromiseInterface` returns a promise fulfilled with inspection arrays after all inputs settle. -- `Utils::some(int $count, iterable $promises) : PromiseInterface` fulfills with the values of the first `$count` promises to fulfill, in the order they appear in the input, or rejects with `AggregateException` if too few fulfill. -- `Utils::any(iterable $promises) : PromiseInterface` fulfills with the first fulfilled value, or rejects with `AggregateException` if none fulfill. - -`Utils::all()` and `Utils::settle()` accept `['concurrency' => 5]` or -`['concurrency' => callable]` for lazy iterables. This limits how many items are -pulled from the iterable at one time; it does not throttle promises that have -already been created or started. - -```php -use GuzzleHttp\Promise\Utils; - -$promise = Utils::all($promises, false, ['concurrency' => 5]); -``` - -## Create - -`GuzzleHttp\Promise\Create` provides factories used by the promise -implementation and by callers that need to normalize values. - -- `Create::promiseFor($value) : PromiseInterface` returns `$value` when it is already a Guzzle promise, wraps foreign thenables in a Guzzle promise, or returns a fulfilled promise for plain values. -- `Create::rejectionFor($reason) : PromiseInterface` returns `$reason` when it is already a promise, or returns a rejected promise for plain reasons. -- `Create::exceptionFor($reason) : Throwable` returns throwable reasons as-is, or wraps non-throwable reasons in `RejectionException`. -- `Create::iterFor(iterable $value) : Iterator` returns an iterator for arrays, iterators, iterator aggregates, and traversables. - -## Is - -`GuzzleHttp\Promise\Is` provides readable state checks: - -- `Is::pending(PromiseInterface $promise) : bool` -- `Is::settled(PromiseInterface $promise) : bool` -- `Is::fulfilled(PromiseInterface $promise) : bool` -- `Is::rejected(PromiseInterface $promise) : bool` - -## Each and EachPromise - -`Each::of()` consumes an iterable of promises or values and invokes callbacks as -items settle. Fulfillment callbacks receive the fulfilled value, iterable key, -and aggregate promise. Rejection callbacks receive the rejection reason, -iterable key, and aggregate promise. Callback return values are ignored. - -```php -use GuzzleHttp\Promise\Each; - -$promise = Each::of($promises, $onFulfilled, $onRejected, ['concurrency' => 5]); -``` - -- `Each::of(iterable $iterable, ?callable $onFulfilled = null, ?callable $onRejected = null, array $config = []) : PromiseInterface` consumes the iterable and optionally limits lazy iteration with `concurrency`. -- `Each::ofLimit(iterable $iterable, $concurrency, ?callable $onFulfilled = null, ?callable $onRejected = null) : PromiseInterface` is a convenience wrapper for `Each::of()` with a concurrency limit. -- `Each::ofLimitAll(iterable $iterable, $concurrency, ?callable $onFulfilled = null) : PromiseInterface` is like `ofLimit()`, but rejects the aggregate promise on the first rejection. -- `EachPromise` is the configurable class behind `Each`; use it directly when you need `fulfilled`, `rejected`, and `concurrency` keys in one configuration array. - -The concurrency options limit lazy promise creation. For HTTP request -concurrency, use `GuzzleHttp\Pool` from `guzzlehttp/guzzle`. - -## Coroutine - -`Coroutine::of(callable $generatorFn) : Coroutine` creates a promise resolved by -a generator that yields values or promises. The generator resumes with each -fulfilled value, and rejections are thrown into the generator. - -## Task Queue - -`TaskQueueInterface` exposes `isEmpty()`, `add(callable $task)`, and `run()`. -`TaskQueue` executes queued tasks in FIFO order. The default queue runs at -process shutdown unless disabled, and `wait()` drains the queue while resolving -the promise being waited on. - -## Exceptions - -- `RejectionException` is thrown by `wait()` when a rejected promise has a non-throwable reason. The original reason is available through `getReason()`. -- `AggregateException` extends `RejectionException` and is used by `Utils::some()` and `Utils::any()` when too few promises fulfill. -- `CancellationException` extends `RejectionException` and is used as the rejection reason for cancelled promises. - -## Related - -- [Quick Start](promise-quick-start.md) -- [Promise Interoperability](promise-interoperability.md) -- [Implementation Notes](implementation-notes.md) -- [Upgrade Guide](../UPGRADING.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-interoperability.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-interoperability.md deleted file mode 100644 index 85cdc159f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-interoperability.md +++ /dev/null @@ -1,78 +0,0 @@ -# Promise Interoperability - -This guide explains how Guzzle promises interact with foreign promise -implementations. A foreign promise is any object with a `then` method, such as a -[React promise](https://github.com/reactphp/promise). When a foreign promise is -returned from a `then` callback, Guzzle forwards resolution to that promise. - -## Foreign Promises - -Capture the promise returned from `then()`. That chained promise is the Guzzle -promise that follows the foreign promise's eventual result. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\Utils; - -$deferred = new React\Promise\Deferred(); -$reactPromise = $deferred->promise(); - -$guzzlePromise = new Promise(); -$chained = $guzzlePromise->then(function ($value) use ($reactPromise) { - // Use the Guzzle value, then continue with the React promise. - return $reactPromise; -}); - -$chained->then(function ($value) { - echo $value; -}); - -$guzzlePromise->resolve('start'); -Utils::queue()->run(); - -$deferred->resolve('done'); -Utils::queue()->run(); -``` - -Forwarding a foreign promise does not make Guzzle able to synchronously wait on -or cancel the foreign operation. The chained Guzzle promise settles only after -the foreign implementation invokes the callbacks registered through `then()`. -If the foreign promise has no compatible `wait()` or `cancel()` behavior, Guzzle -cannot invent that behavior. - -Use `Create::promiseFor($foreignPromise)` to shadow a foreign thenable as a -Guzzle promise. If the foreign object exposes `wait()` or `cancel()` methods, -the wrapper uses them. Otherwise, use the foreign implementation's event loop or -completion mechanism and drain Guzzle's task queue when callbacks need to run. - -## Event Loop Integration - -Guzzle promises use a task queue to keep stack size constant and to run promise -callbacks asynchronously. When waiting on promises synchronously, the task queue -is automatically run while resolving the blocking promise and forwarded Guzzle -promises. - -When using promises asynchronously in an event loop, run the task queue on loop -ticks. If you do not run the task queue, Guzzle promise callbacks may remain -queued. - -```php -$queue = GuzzleHttp\Promise\Utils::queue(); -$queue->run(); -``` - -For example, you could use Guzzle promises with React using a short periodic -timer. Avoid zero-interval timers because they may keep the loop busy even when -there is no promise work to run. - -```php -$queue = GuzzleHttp\Promise\Utils::queue(); -$loop = React\EventLoop\Factory::create(); -$loop->addPeriodicTimer(0.01, [$queue, 'run']); -``` - -## Related - -- [Quick Start](promise-quick-start.md) -- [Promise API](promise-api.md) -- [Implementation Notes](implementation-notes.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-quick-start.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-quick-start.md deleted file mode 100644 index 07a60e588..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/docs/promise-quick-start.md +++ /dev/null @@ -1,319 +0,0 @@ -# Promise Quick Start - -This guide covers the common promise operations needed when using -`guzzlehttp/promises` directly: registering callbacks, resolving or rejecting -promises, waiting synchronously, composing chains, and using generator-based -flows. For the full public surface, see the [Promise API](promise-api.md). - -A *promise* represents the eventual result of an asynchronous operation. The -primary way of interacting with a promise is through its `then` method, which -registers callbacks to receive either the eventual value or the reason why the -promise cannot be fulfilled. - -Guzzle promise callbacks are queued. They run when the task queue is drained, -for example by `Utils::queue()->run()`, by waiting on a returned promise, or by -the default shutdown handler at the end of the PHP process. Examples that show -callback output drain the queue explicitly. - -## Callbacks - -Callbacks are registered with the `then` method by providing an optional -`$onFulfilled` followed by an optional `$onRejected` function. - -```php -use GuzzleHttp\Promise\Promise; - -$promise = new Promise(); -$promise->then( - // $onFulfilled - function ($value) { - echo 'The promise was fulfilled.'; - }, - // $onRejected - function ($reason) { - echo 'The promise was rejected.'; - } -); -``` - -*Resolving* a promise means that you either fulfill a promise with a *value* or -reject a promise with a *reason*. Callbacks registered with `then` are invoked -only once and in the order in which they were added when the queue is drained. - -## Resolving a Promise - -Promises are fulfilled using the `resolve($value = null)` method. Calling -`resolve()` without an argument fulfills the promise with `null`. Resolving a -promise with any value other than a `GuzzleHttp\Promise\RejectedPromise` queues -the `$onFulfilled` callbacks. Resolving with a rejected promise rejects the -promise and queues the `$onRejected` callbacks. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); -$promise - ->then(function ($value) { - return 'Hello, ' . $value; - }) - ->then(function ($value) { - echo $value; - }); - -$promise->resolve('reader.'); -Utils::queue()->run(); -// Outputs "Hello, reader." -``` - -## Promise Forwarding - -Promises can be chained one after the other. Each `then` call returns a new -promise. The return value of a callback is forwarded to the next promise in the -chain. Returning a promise from a callback makes the next promise wait for that -returned promise to settle. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); -$nextPromise = new Promise(); - -$promise - ->then(function ($value) use ($nextPromise) { - echo $value; - - return $nextPromise; - }) - ->then(function ($value) { - echo $value; - }); - -$promise->resolve('A'); -Utils::queue()->run(); -// Outputs "A" - -$nextPromise->resolve('B'); -Utils::queue()->run(); -// Outputs "B" -``` - -## Promise Rejection - -When a promise is rejected, the `$onRejected` callbacks are invoked with the -rejection reason when the queue is drained. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); -$promise->then(null, function ($reason) { - echo $reason; -}); - -$promise->reject('Error!'); -Utils::queue()->run(); -// Outputs "Error!" -``` - -## Rejection Forwarding - -If an exception is thrown in an `$onRejected` callback, subsequent -`$onRejected` callbacks receive the thrown exception as the reason. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); -$promise->then(null, function ($reason) { - throw new Exception($reason); -})->then(null, function ($reason) { - assert($reason->getMessage() === 'Error!'); -}); - -$promise->reject('Error!'); -Utils::queue()->run(); -``` - -You can also forward a rejection down the promise chain by returning a -`GuzzleHttp\Promise\RejectedPromise` in either an `$onFulfilled` or -`$onRejected` callback. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\RejectedPromise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); -$promise->then(null, function ($reason) { - return new RejectedPromise($reason); -})->then(null, function ($reason) { - assert($reason === 'Error!'); -}); - -$promise->reject('Error!'); -Utils::queue()->run(); -``` - -If an exception is not thrown in an `$onRejected` callback and the callback -does not return a rejected promise, downstream `$onFulfilled` callbacks are -invoked using the value returned from the `$onRejected` callback. - -```php -use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\Utils; - -$promise = new Promise(); -$promise - ->then(null, function ($reason) { - return "It's ok"; - }) - ->then(function ($value) { - assert($value === "It's ok"); - }); - -$promise->reject('Error!'); -Utils::queue()->run(); -``` - -## Synchronous Wait - -You can synchronously force promises to complete using a promise's `wait` -method. When creating a promise, you can provide a wait function that is used -to synchronously complete the promise. The wait function receives a boolean -argument and is expected to resolve or reject the promise. If the wait function -does not settle the promise, an exception is thrown. - -```php -use GuzzleHttp\Promise\Promise; - -$promise = new Promise(function (bool $recursive) use (&$promise) { - $promise->resolve('foo'); -}); - -echo $promise->wait(); -// Outputs "foo" -``` - -If a throwable is encountered while invoking the wait function of a promise, -the promise is rejected with the throwable and the throwable is thrown. - -```php -$promise = new Promise(function (bool $recursive) use (&$promise) { - throw new Exception('foo'); -}); - -$promise->wait(); // Throws the exception. -``` - -Calling `wait` on a promise that has been fulfilled will not trigger the wait -function. It will simply return the previously resolved value. - -```php -$promise = new Promise(function (bool $recursive) { die('this is not called!'); }); -$promise->resolve('foo'); - -echo $promise->wait(); -// Outputs "foo" -``` - -Calling `wait` on a promise that has been rejected will throw. If the rejection -reason is an instance of `\Throwable`, the reason is thrown. Otherwise, a -`GuzzleHttp\Promise\RejectionException` is thrown and the reason can be -obtained by calling `getReason()` on the exception. - -```php -$promise = new Promise(); -$promise->reject('foo'); -$promise->wait(); -``` - -> PHP Fatal error: Uncaught exception 'GuzzleHttp\Promise\RejectionException' with message 'The promise was rejected with reason: foo' - -## Unwrapping a Promise - -When synchronously waiting on a promise, you are joining the state of the -promise into the current execution: the fulfilled value is returned, or the -rejection reason is thrown. This is called "unwrapping" the promise. Waiting on -a promise unwraps by default. - -You can force a promise to resolve and *not* unwrap its state by passing -`false` to `wait()`: - -```php -$promise = new Promise(); -$promise->reject('foo'); - -// This does not throw. It only ensures the promise has been resolved. -$promise->wait(false); -``` - -When unwrapping a promise, the resolved value of the promise will be waited on -until the unwrapped value is not a promise. This means that if promise A is -resolved with promise B, unwrapping promise A returns the value delivered to -promise B. - -When you do not unwrap the promise, no value is returned. - -## Inspecting a Promise - -`Utils::inspect($promise)` waits for a promise to settle and returns an array -describing its final state. For rejected promises, the `reason` entry is the -actual rejection reason delivered to rejection callbacks. - -This means `RejectionException` and subclasses are not unwrapped by -`inspect()`. For example, cancelled promises inspect with a -`CancellationException` reason. - -## Generator-Based Async - -`Coroutine::of()` creates a promise from a generator that yields values or -promises. The generator resumes each time the yielded value settles, which can -make sequential asynchronous flows easier to read. - -```php -use GuzzleHttp\Promise\Coroutine; -use GuzzleHttp\Promise\FulfilledPromise; - -$promise = Coroutine::of(function () { - $first = yield new FulfilledPromise('A'); - $second = yield new FulfilledPromise($first . 'B'); - - yield $second . 'C'; -}); - -echo $promise->wait(); -// Outputs "ABC" -``` - -If a yielded promise rejects, the rejection is thrown into the generator. Catch -it inside the generator to recover, or let it reject the coroutine promise. - -## Cancellation - -You can cancel a promise that has not yet been fulfilled using `cancel()`. When -creating a promise, you can provide an optional cancel function that cancels the -underlying operation, such as closing a socket or aborting a query. - -```php -use GuzzleHttp\Promise\Promise; - -$promise = new Promise(null, function () { - // Cancel the underlying operation. -}); - -$promise->cancel(); -``` - -Cancellation rejects the promise with a `CancellationException` unless the -cancel function settles the promise first. - -## Related - -- [Promise API](promise-api.md) -- [Promise Interoperability](promise-interoperability.md) -- [Implementation Notes](implementation-notes.md) -- [Upgrade Guide](../UPGRADING.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/AggregateException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/AggregateException.php deleted file mode 100644 index 40ffdbcf1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/AggregateException.php +++ /dev/null @@ -1,19 +0,0 @@ -then(function ($v) { echo $v; }); - * - * @template TValue = mixed - * @template TReason = mixed - * - * @implements PromiseInterface - * - * @see https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration - */ -final class Coroutine implements PromiseInterface -{ - use NonSerializableTrait; - - /** - * @var PromiseInterface|null - */ - private ?PromiseInterface $currentPromise = null; - - /** - * @var Generator - */ - private Generator $generator; - - /** - * @var Promise - */ - private PromiseInterface $result; - - /** - * @param callable(): Generator $generatorFn - */ - public function __construct(callable $generatorFn) - { - $this->generator = $generatorFn(); - $this->result = new Promise(function (): void { - while (isset($this->currentPromise)) { - $this->currentPromise->wait(); - } - }); - try { - $this->nextCoroutine($this->generator->current()); - } catch (\Throwable $throwable) { - $this->result->reject($throwable); - } - } - - /** - * Create a new coroutine. - * - * @param callable(): Generator $generatorFn - * - * @return self - */ - public static function of(callable $generatorFn): self - { - return new self($generatorFn); - } - - /** - * @template TFulfilledValue = never - * @template TFulfilledReason = never - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param (callable(TValue): (TFulfilledValue|PromiseInterface))|null $onFulfilled Invoked when the promise fulfills. - * @param (callable(TReason): (TRejectedValue|PromiseInterface))|null $onRejected Invoked when the promise is rejected. - * - * @return PromiseInterface<($onFulfilled is null ? TValue : TFulfilledValue)|($onRejected is null ? never : TRejectedValue), ($onFulfilled is null ? never : TFulfilledReason|\Throwable)|($onRejected is null ? TReason : TRejectedReason|\Throwable)> - */ - public function then( - ?callable $onFulfilled = null, - ?callable $onRejected = null - ): PromiseInterface { - return $this->result->then($onFulfilled, $onRejected); - } - - /** - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param callable(TReason): (TRejectedValue|PromiseInterface) $onRejected Invoked when the promise is rejected. - * - * @return PromiseInterface - */ - public function otherwise(callable $onRejected): PromiseInterface - { - return $this->result->otherwise($onRejected); - } - - public function wait(bool $unwrap = true) - { - return $this->result->wait($unwrap); - } - - public function getState(): string - { - return $this->result->getState(); - } - - public function resolve($value = null): void - { - $this->result->resolve($value); - } - - public function reject($reason): void - { - $this->result->reject($reason); - } - - public function cancel(): void - { - if (isset($this->currentPromise)) { - $this->currentPromise->cancel(); - } - - $this->result->cancel(); - } - - private function nextCoroutine($yielded): void - { - $this->currentPromise = Create::promiseFor($yielded) - ->then([$this, '_handleSuccess'], [$this, '_handleFailure']); - } - - /** - * @internal - */ - public function _handleSuccess($value): void - { - $this->currentPromise = null; - - try { - $next = $this->generator->send($value); - if ($this->generator->valid()) { - $this->nextCoroutine($next); - } else { - $this->result->resolve($value); - } - } catch (\Throwable $throwable) { - $this->result->reject($throwable); - } - } - - /** - * @internal - */ - public function _handleFailure($reason): void - { - $this->currentPromise = null; - - try { - $nextYield = $this->generator->throw(Create::exceptionFor($reason)); - // The throw was caught, so keep iterating on the coroutine - $this->nextCoroutine($nextYield); - } catch (\Throwable $throwable) { - $this->result->reject($throwable); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Create.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Create.php deleted file mode 100644 index df3b8dd5a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Create.php +++ /dev/null @@ -1,109 +0,0 @@ - = PromiseInterface - * - * @param TValue|TPromise $value Promise or value. - * - * @return ($value is PromiseInterface ? TPromise : FulfilledPromise) - */ - public static function promiseFor($value): PromiseInterface - { - if ($value instanceof PromiseInterface) { - return $value; - } - - // Return a Guzzle promise that shadows the given promise. - if (is_object($value) && method_exists($value, 'then')) { - $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null; - $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null; - $promise = new Promise($wfn, $cfn); - $value->then([$promise, 'resolve'], [$promise, 'reject']); - - return $promise; - } - - return new FulfilledPromise($value); - } - - /** - * Returns `$reason` when it is already a promise, or returns a rejected - * promise for plain reasons. - * - * @template TReason - * @template TValue = never - * @template TPromise of PromiseInterface = PromiseInterface - * - * @param TReason|TPromise $reason Promise or reason. - * - * @return ($reason is PromiseInterface ? TPromise : RejectedPromise) - */ - public static function rejectionFor($reason): PromiseInterface - { - if ($reason instanceof PromiseInterface) { - return $reason; - } - - return new RejectedPromise($reason); - } - - /** - * Returns throwable reasons as-is, or wraps non-throwable reasons in - * `RejectionException`. - * - * @template TReason - * - * @param TReason $reason - */ - public static function exceptionFor($reason): \Throwable - { - if ($reason instanceof \Throwable) { - return $reason; - } - - return new RejectionException($reason); - } - - /** - * Returns an iterator for arrays, iterators, iterator aggregates, and - * traversables. - * - * @template TKey of array-key - * @template TValue - * - * @param iterable $value - * - * @return \Iterator - */ - public static function iterFor(iterable $value): \Iterator - { - if ($value instanceof \Iterator) { - return $value; - } - - if (is_array($value)) { - return new \ArrayIterator($value); - } - - if ($value instanceof \IteratorAggregate) { - return self::iterFor($value->getIterator()); - } - - return new \IteratorIterator($value); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Each.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Each.php deleted file mode 100644 index 0a9e50afb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Each.php +++ /dev/null @@ -1,118 +0,0 @@ -> $iterable Iterator or array to iterate over. - * @param (callable(TValue, TKey, PromiseInterface): mixed)|null $onFulfilled - * @param (callable(TReason, TKey, PromiseInterface): mixed)|null $onRejected - * @param array{concurrency?: int|(callable(int): int)} $config Configuration options. - * - * @return PromiseInterface - */ - public static function of( - iterable $iterable, - ?callable $onFulfilled = null, - ?callable $onRejected = null, - array $config = [] - ): PromiseInterface { - $eachConfig = []; - - if (null !== $onFulfilled) { - $eachConfig['fulfilled'] = $onFulfilled; - } - - if (null !== $onRejected) { - $eachConfig['rejected'] = $onRejected; - } - - if (isset($config['concurrency'])) { - $eachConfig['concurrency'] = $config['concurrency']; - } - - return (new EachPromise($iterable, $eachConfig))->promise(); - } - - /** - * Like of, but only allows a certain number of outstanding promises at any - * given time. - * - * $concurrency may be an integer or a function that accepts the number of - * pending promises and returns a numeric concurrency limit value to allow - * for a dynamic concurrency size. - * - * @template TKey of array-key - * @template TValue - * @template TReason - * - * @param iterable> $iterable - * @param int|(callable(int): int) $concurrency - * @param (callable(TValue, TKey, PromiseInterface): mixed)|null $onFulfilled - * @param (callable(TReason, TKey, PromiseInterface): mixed)|null $onRejected - * - * @return PromiseInterface - */ - public static function ofLimit( - iterable $iterable, - $concurrency, - ?callable $onFulfilled = null, - ?callable $onRejected = null - ): PromiseInterface { - return self::of($iterable, $onFulfilled, $onRejected, ['concurrency' => $concurrency]); - } - - /** - * Like ofLimit, but rejects the aggregate promise on the first rejection. - * - * @template TKey of array-key - * @template TValue - * @template TReason - * - * @param iterable> $iterable - * @param int|(callable(int): int) $concurrency - * @param (callable(TValue, TKey, PromiseInterface): mixed)|null $onFulfilled - * - * @return PromiseInterface - */ - public static function ofLimitAll( - iterable $iterable, - $concurrency, - ?callable $onFulfilled = null - ): PromiseInterface { - return self::ofLimit( - $iterable, - $concurrency, - $onFulfilled, - function ($reason, $idx, PromiseInterface $aggregate): void { - $aggregate->reject($reason); - } - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/EachPromise.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/EachPromise.php deleted file mode 100644 index 3de26ee27..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/EachPromise.php +++ /dev/null @@ -1,295 +0,0 @@ - - * - * @final - */ -class EachPromise implements PromisorInterface -{ - use NonSerializableTrait; - - /** @var array>|null */ - private ?array $pending = []; - - private int $nextPendingIndex = 0; - - /** @var \Iterator>|null */ - private ?\Iterator $iterable; - - /** @var (callable(int): int)|int|null */ - private $concurrency; - - /** @var (callable(TValue, TKey, PromiseInterface): mixed)|null */ - private $onFulfilled; - - /** @var (callable(TReason, TKey, PromiseInterface): mixed)|null */ - private $onRejected; - - /** @var Promise|null */ - private ?Promise $aggregate = null; - - private ?bool $mutex = null; - - private bool $stepWhileLocked = false; - - /** - * Configuration hash can include the following key value pairs: - * - * - fulfilled: (callable) Invoked when a promise fulfills. The function - * is invoked with three arguments: the fulfillment value, the index - * position from the iterable list of the promise, and the aggregate - * promise that manages all of the promises. The aggregate promise may - * be resolved from within the callback to short-circuit the promise. - * - rejected: (callable) Invoked when a promise is rejected. The - * function is invoked with three arguments: the rejection reason, the - * index position from the iterable list of the promise, and the - * aggregate promise that manages all of the promises. The aggregate - * promise may be resolved from within the callback to short-circuit - * the promise. - * - concurrency: (integer) Pass this configuration option to limit the - * allowed number of outstanding concurrently executing promises, - * creating a capped pool of promises. There is no limit by default. - * - * @param iterable> $iterable Promises or values to iterate. - * @param array{ - * fulfilled?: callable(TValue, TKey, PromiseInterface): mixed, - * rejected?: callable(TReason, TKey, PromiseInterface): mixed, - * concurrency?: int|(callable(int): int) - * } $config Configuration options - */ - public function __construct(iterable $iterable, array $config = []) - { - $this->iterable = Create::iterFor($iterable); - - if (isset($config['concurrency'])) { - $this->concurrency = $config['concurrency']; - } - - if (isset($config['fulfilled'])) { - $this->onFulfilled = $config['fulfilled']; - } - - if (isset($config['rejected'])) { - $this->onRejected = $config['rejected']; - } - } - - /** - * @return PromiseInterface - */ - public function promise(): PromiseInterface - { - if ($this->aggregate) { - return $this->aggregate; - } - - try { - $this->createPromise(); - $this->iterable->rewind(); - $this->refillPending(); - if (!$this->pending) { - Utils::queue()->add(function (): void { - if (!$this->aggregate || Is::settled($this->aggregate)) { - return; - } - - try { - $this->checkIfFinished(); - } catch (\Throwable $e) { - $this->aggregate->reject($e); - } - }); - } - } catch (\Throwable $e) { - $this->aggregate->reject($e); - } - - return $this->aggregate; - } - - private function createPromise(): void - { - $this->mutex = false; - $this->aggregate = new Promise(function (): void { - while (true) { - if ($this->checkIfFinished()) { - return; - } - reset($this->pending); - // Consume a potentially fluctuating list of promises while - // ensuring that indexes are maintained (precluding array_shift). - while ($promise = current($this->pending)) { - next($this->pending); - $promise->wait(); - if (Is::settled($this->aggregate)) { - return; - } - } - // Refill and re-sweep; give up only when nothing remains. - $this->refillPending(); - if (Is::settled($this->aggregate) || !$this->pending) { - return; - } - } - }); - - // Clear the references when the promise is resolved. - $clearFn = function (): void { - $this->iterable = $this->concurrency = $this->pending = null; - $this->onFulfilled = $this->onRejected = null; - $this->nextPendingIndex = 0; - }; - - $this->aggregate->then($clearFn, $clearFn); - } - - private function refillPending(): void - { - if (!$this->concurrency) { - // Add all pending promises. - while ($this->addPending() && $this->advanceIterator()) { - } - - return; - } - - // Add only up to N pending promises. - $concurrency = is_callable($this->concurrency) - ? ($this->concurrency)(count($this->pending)) - : $this->concurrency; - // The callable can settle the aggregate; admit nothing more. - if (Is::settled($this->aggregate)) { - return; - } - $concurrency = max($concurrency - count($this->pending), 0); - // Concurrency may be set to 0 to disallow new promises. - if (!$concurrency) { - return; - } - // Add the first pending promise. - $this->addPending(); - // Note this is special handling for concurrency=1 so that we do - // not advance the iterator after adding the first promise. This - // helps work around issues with generators that might not have the - // next value to yield until promise callbacks are called. - while (--$concurrency - && $this->advanceIterator() - && $this->addPending()) { - } - } - - private function addPending(): bool - { - if (!$this->iterable || !$this->iterable->valid()) { - return false; - } - - $promise = Create::promiseFor($this->iterable->current()); - $key = $this->iterable->key(); - - // Iterable keys may not be unique, so we use a counter to - // guarantee uniqueness - $idx = $this->nextPendingIndex++; - - $this->pending[$idx] = $promise->then( - function ($value) use ($idx, $key): void { - if ($this->onFulfilled) { - ($this->onFulfilled)( - $value, - $key, - $this->aggregate - ); - } - $this->step($idx); - }, - function ($reason) use ($idx, $key): void { - if ($this->onRejected) { - ($this->onRejected)( - $reason, - $key, - $this->aggregate - ); - } - $this->step($idx); - } - ); - - return true; - } - - private function advanceIterator(): bool - { - // Place a lock on the iterator so that we ensure to not recurse, - // preventing fatal generator errors. - if ($this->mutex) { - $this->stepWhileLocked = true; - - return false; - } - - $this->mutex = true; - - try { - $this->iterable->next(); - $this->mutex = false; - } catch (\Throwable $e) { - $this->aggregate->reject($e); - $this->mutex = false; - - return false; - } - - // Run the completion check that locked steps skipped. - if ($this->stepWhileLocked) { - $this->stepWhileLocked = false; - if (!Is::settled($this->aggregate)) { - $this->checkIfFinished(); - } - } - - return true; - } - - private function step(int $idx): void - { - // If the promise was already resolved, then ignore this step. - if (Is::settled($this->aggregate)) { - return; - } - - unset($this->pending[$idx]); - - // Only refill pending promises if we are not locked, preventing the - // EachPromise to recursively invoke the provided iterator, which - // cause a fatal error: "Cannot resume an already running generator" - if ($this->advanceIterator() && !$this->checkIfFinished()) { - // Add more pending promises if possible. - $this->refillPending(); - } - } - - /** @phpstan-impure */ - private function checkIfFinished(): bool - { - if (!$this->pending && !$this->iterable->valid()) { - // Resolve the promise if there's nothing left to do. - $this->aggregate->resolve(null); - - return true; - } - - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/FulfilledPromise.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/FulfilledPromise.php deleted file mode 100644 index 5b0d70185..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/FulfilledPromise.php +++ /dev/null @@ -1,111 +0,0 @@ - - * - * @final - */ -class FulfilledPromise implements PromiseInterface -{ - /** @var TValue */ - private $value; - - /** - * @param TValue $value - */ - public function __construct($value) - { - if (is_object($value) && method_exists($value, 'then')) { - throw new \InvalidArgumentException( - 'You cannot create a FulfilledPromise with a promise.' - ); - } - - $this->value = $value; - } - - /** - * @template TFulfilledValue = never - * @template TFulfilledReason = never - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param (callable(TValue): (TFulfilledValue|PromiseInterface))|null $onFulfilled Invoked when the promise fulfills. - * @param (callable(TReason): (TRejectedValue|PromiseInterface))|null $onRejected Invoked when the promise is rejected. - * - * @return ($onFulfilled is null ? self : PromiseInterface) - */ - public function then( - ?callable $onFulfilled = null, - ?callable $onRejected = null - ): PromiseInterface { - // Return itself if there is no onFulfilled function. - if (!$onFulfilled) { - return $this; - } - - $queue = Utils::queue(); - $p = new Promise([$queue, 'run']); - $value = $this->value; - $queue->add(static function () use ($p, $value, $onFulfilled): void { - if (Is::pending($p)) { - try { - $p->resolve($onFulfilled($value)); - } catch (\Throwable $e) { - $p->reject($e); - } - } - }); - - return $p; - } - - /** - * @param callable(TReason): mixed $onRejected Invoked when the promise is rejected. - * - * @return self - */ - public function otherwise(callable $onRejected): PromiseInterface - { - return $this->then(null, $onRejected); - } - - public function wait(bool $unwrap = true) - { - return $unwrap ? $this->value : null; - } - - public function getState(): string - { - return self::FULFILLED; - } - - public function resolve($value = null): void - { - if ($value !== $this->value) { - throw new \LogicException('Cannot resolve a fulfilled promise'); - } - } - - public function reject($reason): void - { - throw new \LogicException('Cannot reject a fulfilled promise'); - } - - public function cancel(): void - { - // pass - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Is.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Is.php deleted file mode 100644 index 2c4c538dd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/Is.php +++ /dev/null @@ -1,44 +0,0 @@ -getState() === PromiseInterface::PENDING; - } - - /** - * Returns true if a promise is fulfilled or rejected. - */ - public static function settled(PromiseInterface $promise): bool - { - return $promise->getState() !== PromiseInterface::PENDING; - } - - /** - * Returns true if a promise is fulfilled. - */ - public static function fulfilled(PromiseInterface $promise): bool - { - return $promise->getState() === PromiseInterface::FULFILLED; - } - - /** - * Returns true if a promise is rejected. - */ - public static function rejected(PromiseInterface $promise): bool - { - return $promise->getState() === PromiseInterface::REJECTED; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/NonSerializableTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/NonSerializableTrait.php deleted file mode 100644 index c124769e4..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/NonSerializableTrait.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * @see https://promisesaplus.com/ - * - * @final - */ -class Promise implements PromiseInterface -{ - use NonSerializableTrait; - - /** @var self::PENDING|self::FULFILLED|self::REJECTED */ - private string $state = self::PENDING; - - /** @var TValue|TReason|PromiseInterface|null */ - private $result; - - /** @var (callable(): void)|null */ - private $cancelFn; - - /** @var (callable(bool): void)|null */ - private $waitFn; - - /** @var list>|null */ - private ?array $waitList = null; - - /** @var list, 1: callable|null, 2: callable|null}>|null */ - private ?array $handlers = []; - - /** - * @param (callable(bool): void)|null $waitFn Fn that when invoked resolves the promise. - * @param (callable(): void)|null $cancelFn Fn that when invoked cancels the promise. - */ - public function __construct( - ?callable $waitFn = null, - ?callable $cancelFn = null - ) { - $this->waitFn = $waitFn; - $this->cancelFn = $cancelFn; - } - - /** - * @template TFulfilledValue = never - * @template TFulfilledReason = never - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param (callable(TValue): (TFulfilledValue|PromiseInterface))|null $onFulfilled Invoked when the promise fulfills. - * @param (callable(TReason): (TRejectedValue|PromiseInterface))|null $onRejected Invoked when the promise is rejected. - * - * @return PromiseInterface<($onFulfilled is null ? TValue : TFulfilledValue)|($onRejected is null ? never : TRejectedValue), ($onFulfilled is null ? never : TFulfilledReason|\Throwable)|($onRejected is null ? TReason : TRejectedReason|\Throwable)> - */ - public function then( - ?callable $onFulfilled = null, - ?callable $onRejected = null - ): PromiseInterface { - if ($this->state === self::PENDING) { - $p = new Promise(null, [$this, 'cancel']); - $this->handlers[] = [$p, $onFulfilled, $onRejected]; - $p->waitList = $this->waitList; - $p->waitList[] = $this; - - return $p; - } - - // Return a fulfilled promise and immediately invoke any callbacks. - if ($this->state === self::FULFILLED) { - $promise = Create::promiseFor($this->result); - - return $promise->then($onFulfilled, $onRejected); - } - - // It's either cancelled or rejected, so return a rejected promise - // and immediately invoke any callbacks. - $rejection = Create::rejectionFor($this->result); - - /** @var PromiseInterface<($onFulfilled is null ? TValue : TFulfilledValue)|($onRejected is null ? never : TRejectedValue), ($onFulfilled is null ? never : TFulfilledReason|\Throwable)|($onRejected is null ? TReason : TRejectedReason|\Throwable)> $promise */ - $promise = $onRejected ? $rejection->then(null, $onRejected) : $rejection; - - return $promise; - } - - /** - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param callable(TReason): (TRejectedValue|PromiseInterface) $onRejected Invoked when the promise is rejected. - * - * @return PromiseInterface - */ - public function otherwise(callable $onRejected): PromiseInterface - { - return $this->then(null, $onRejected); - } - - public function wait(bool $unwrap = true) - { - $this->waitIfPending(); - - if ($this->result instanceof PromiseInterface) { - return $this->result->wait($unwrap); - } - if ($unwrap) { - if ($this->state === self::FULFILLED) { - return $this->result; - } - // It's rejected so "unwrap" and throw an exception. - throw Create::exceptionFor($this->result); - } - - return null; - } - - public function getState(): string - { - return $this->state; - } - - public function cancel(): void - { - if ($this->state !== self::PENDING) { - return; - } - - $this->waitFn = $this->waitList = null; - - if ($this->cancelFn) { - $fn = $this->cancelFn; - $this->cancelFn = null; - try { - $fn(); - } catch (\Throwable $e) { - $this->reject($e); - } - } - - // Reject the promise only if it wasn't rejected in a then callback. - /** @psalm-suppress RedundantCondition */ - if ($this->state === self::PENDING) { - $this->reject(new CancellationException('Promise has been cancelled')); - } - } - - public function resolve($value = null): void - { - $this->settle(self::FULFILLED, $value); - } - - public function reject($reason): void - { - $this->settle(self::REJECTED, $reason); - } - - private function settle(string $state, $value): void - { - if ($this->state !== self::PENDING) { - // Ignore calls with the same resolution. - if ($state === $this->state && $value === $this->result) { - return; - } - throw $this->state === $state - ? new \LogicException("The promise is already {$state}.") - : new \LogicException("Cannot change a {$this->state} promise to {$state}"); - } - - if ($value === $this) { - throw new \LogicException('Cannot fulfill or reject a promise with itself'); - } - - // Clear out the state of the promise but stash the handlers. - $this->state = $state; - $this->result = $value; - $handlers = $this->handlers; - $this->handlers = null; - $this->waitList = $this->waitFn = null; - $this->cancelFn = null; - - if (!$handlers) { - return; - } - - // If the value was not a settled promise or a thenable, then resolve - // it in the task queue using the correct ID. - if (!is_object($value) || !method_exists($value, 'then')) { - $id = $state === self::FULFILLED ? 1 : 2; - // It's a success, so resolve the handlers in the queue. - Utils::queue()->add(static function () use ($id, $value, $handlers): void { - foreach ($handlers as $handler) { - self::callHandler($id, $value, $handler); - } - }); - } elseif ($value instanceof Promise && Is::pending($value)) { - // We can just merge our handlers onto the next promise. - $value->handlers = array_merge($value->handlers, $handlers); - } else { - // Resolve the handlers when the forwarded promise is resolved. - $value->then( - static function ($value) use ($handlers): void { - foreach ($handlers as $handler) { - self::callHandler(1, $value, $handler); - } - }, - static function ($reason) use ($handlers): void { - foreach ($handlers as $handler) { - self::callHandler(2, $reason, $handler); - } - } - ); - } - } - - /** - * Call a stack of handlers using a specific callback index and value. - * - * @param int $index 1 (resolve) or 2 (reject). - * @param mixed $value Value to pass to the callback. - * @param array $handler Array of handler data (promise and callbacks). - */ - private static function callHandler(int $index, $value, array $handler): void - { - /** @var PromiseInterface $promise */ - $promise = $handler[0]; - - // The promise may have been cancelled or resolved before placing - // this thunk in the queue. - if (Is::settled($promise)) { - return; - } - - try { - if (isset($handler[$index])) { - /* - * If $f throws an exception, then $handler will be in the exception - * stack trace. Since $handler contains a reference to the callable - * itself we get a circular reference. We clear the $handler - * here to avoid that memory leak. - */ - $f = $handler[$index]; - unset($handler); - $promise->resolve($f($value)); - } elseif ($index === 1) { - // Forward resolution values as-is. - $promise->resolve($value); - } else { - // Forward rejections down the chain. - $promise->reject($value); - } - } catch (\Throwable $reason) { - $promise->reject($reason); - } - } - - private function waitIfPending(): void - { - if ($this->state !== self::PENDING) { - return; - } elseif ($this->waitFn) { - $this->invokeWaitFn(); - } elseif ($this->waitList) { - $this->invokeWaitList(); - } else { - // If there's no wait function, then reject the promise. - $this->reject('Cannot wait on a promise that has ' - .'no internal wait function. You must provide a wait ' - .'function when constructing the promise to be able to ' - .'wait on a promise.'); - } - - Utils::queue()->run(); - - /** @psalm-suppress RedundantCondition */ - if ($this->state === self::PENDING) { - $this->reject('Invoking the wait callback did not resolve the promise'); - } - } - - private function invokeWaitFn(): void - { - try { - $wfn = $this->waitFn; - $this->waitFn = null; - $wfn(true); - } catch (\Throwable $reason) { - if ($this->state === self::PENDING) { - // The promise has not been resolved yet, so reject the promise - // with the exception. - $this->reject($reason); - } else { - // The promise was already resolved, so there's a problem in - // the application. - throw $reason; - } - } - } - - private function invokeWaitList(): void - { - $waitList = $this->waitList; - $this->waitList = null; - - foreach ($waitList as $result) { - do { - $result->waitIfPending(); - $result = $result->result; - } while ($result instanceof Promise); - - if ($result instanceof PromiseInterface) { - $result->wait(false); - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/PromiseInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/PromiseInterface.php deleted file mode 100644 index 8358ab1d3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/PromiseInterface.php +++ /dev/null @@ -1,108 +0,0 @@ -))|null $onFulfilled Invoked when the promise fulfills. - * @param (callable(TReason): (TRejectedValue|PromiseInterface))|null $onRejected Invoked when the promise is rejected. - * - * @return PromiseInterface<($onFulfilled is null ? TValue : TFulfilledValue)|($onRejected is null ? never : TRejectedValue), ($onFulfilled is null ? never : TFulfilledReason|\Throwable)|($onRejected is null ? TReason : TRejectedReason|\Throwable)> - */ - public function then( - ?callable $onFulfilled = null, - ?callable $onRejected = null - ): PromiseInterface; - - /** - * Appends a rejection handler callback to the promise, and returns a new - * promise resolving to the return value of the callback if it is called, - * or to its original fulfillment value if the promise is instead - * fulfilled. - * - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param callable(TReason): (TRejectedValue|PromiseInterface) $onRejected Invoked when the promise is rejected. - * - * @return PromiseInterface - */ - public function otherwise(callable $onRejected): PromiseInterface; - - /** - * Get the state of the promise ("pending", "rejected", or "fulfilled"). - * - * The three states can be checked against the constants defined on - * PromiseInterface: PENDING, FULFILLED, and REJECTED. - * - * @return self::PENDING|self::FULFILLED|self::REJECTED - */ - public function getState(): string; - - /** - * Resolve the promise with the given value, or with null if no value is given. - * - * @param TValue|PromiseInterface|null $value - * - * @throws \RuntimeException if the promise is already resolved. - */ - public function resolve($value = null): void; - - /** - * Reject the promise with the given reason. - * - * @param TReason $reason - * - * @throws \RuntimeException if the promise is already resolved. - */ - public function reject($reason): void; - - /** - * Cancels the promise if possible. - * - * @see https://github.com/promises-aplus/cancellation-spec/issues/7 - */ - public function cancel(): void; - - /** - * Waits until the promise completes if possible. - * - * Pass $unwrap as true to unwrap the result of the promise, either - * returning the resolved value or throwing the rejected exception. - * - * If the promise cannot be waited on, then the promise will be rejected. - * - * @return ($unwrap is true ? TValue : null) - * - * @throws \LogicException if the promise has no wait function or if the - * promise does not settle after waiting. - */ - public function wait(bool $unwrap = true); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/PromisorInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/PromisorInterface.php deleted file mode 100644 index 6ed6f1b6f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/PromisorInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - - */ - public function promise(): PromiseInterface; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/RejectedPromise.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/RejectedPromise.php deleted file mode 100644 index 7104f49ce..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/RejectedPromise.php +++ /dev/null @@ -1,120 +0,0 @@ - - * - * @final - */ -class RejectedPromise implements PromiseInterface -{ - /** @var TReason */ - private $reason; - - /** - * @param TReason $reason - */ - public function __construct($reason) - { - if (is_object($reason) && method_exists($reason, 'then')) { - throw new \InvalidArgumentException( - 'You cannot create a RejectedPromise with a promise.' - ); - } - - $this->reason = $reason; - } - - /** - * @template TFulfilledValue = never - * @template TFulfilledReason = never - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param (callable(TValue): (TFulfilledValue|PromiseInterface))|null $onFulfilled Invoked when the promise fulfills. - * @param (callable(TReason): (TRejectedValue|PromiseInterface))|null $onRejected Invoked when the promise is rejected. - * - * @return ($onRejected is null ? self : PromiseInterface) - */ - public function then( - ?callable $onFulfilled = null, - ?callable $onRejected = null - ): PromiseInterface { - // If there's no onRejected callback then just return self. - if (!$onRejected) { - return $this; - } - - $queue = Utils::queue(); - $reason = $this->reason; - $p = new Promise([$queue, 'run']); - $queue->add(static function () use ($p, $reason, $onRejected): void { - if (Is::pending($p)) { - try { - // Return a resolved promise if onRejected does not throw. - $p->resolve($onRejected($reason)); - } catch (\Throwable $e) { - // onRejected threw, so return a rejected promise. - $p->reject($e); - } - } - }); - - return $p; - } - - /** - * @template TRejectedValue = never - * @template TRejectedReason = never - * - * @param callable(TReason): (TRejectedValue|PromiseInterface) $onRejected Invoked when the promise is rejected. - * - * @return PromiseInterface - */ - public function otherwise(callable $onRejected): PromiseInterface - { - return $this->then(null, $onRejected); - } - - public function wait(bool $unwrap = true) - { - if ($unwrap) { - throw Create::exceptionFor($this->reason); - } - - return null; - } - - public function getState(): string - { - return self::REJECTED; - } - - public function resolve($value = null): void - { - throw new \LogicException('Cannot resolve a rejected promise'); - } - - public function reject($reason): void - { - if ($reason !== $this->reason) { - throw new \LogicException('Cannot reject a rejected promise'); - } - } - - public function cancel(): void - { - // pass - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/RejectionException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/RejectionException.php deleted file mode 100644 index 47dca8624..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/RejectionException.php +++ /dev/null @@ -1,49 +0,0 @@ -reason = $reason; - - $message = 'The promise was rejected'; - - if ($description) { - $message .= ' with reason: '.$description; - } elseif (is_string($reason) - || (is_object($reason) && method_exists($reason, '__toString')) - ) { - $message .= ' with reason: '.$this->reason; - } elseif ($reason instanceof \JsonSerializable) { - $message .= ' with reason: '.json_encode($this->reason, JSON_PRETTY_PRINT); - } - - parent::__construct($message); - } - - /** - * Returns the rejection reason. - * - * @return mixed - */ - public function getReason() - { - return $this->reason; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/TaskQueue.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/TaskQueue.php deleted file mode 100644 index e86c0cd7c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/TaskQueue.php +++ /dev/null @@ -1,77 +0,0 @@ -run(); - * - * @final - */ -class TaskQueue implements TaskQueueInterface -{ - use NonSerializableTrait; - - private bool $enableShutdown = true; - /** @var list */ - private array $queue = []; - - public function __construct(bool $withShutdown = true) - { - if ($withShutdown) { - register_shutdown_function(function (): void { - if ($this->enableShutdown) { - // Only run the tasks if an E_ERROR didn't occur. - $err = error_get_last(); - if (!$err || ($err['type'] ^ E_ERROR)) { - $this->run(); - } - } - }); - } - } - - public function isEmpty(): bool - { - return !$this->queue; - } - - /** - * @param callable(): void $task - */ - public function add(callable $task): void - { - $this->queue[] = $task; - } - - public function run(): void - { - while ($task = array_shift($this->queue)) { - /** @var callable(): void $task */ - $task(); - } - } - - /** - * The task queue will be run and exhausted by default when the process - * exits IFF the exit is not the result of a PHP E_ERROR error. - * - * You can disable running the automatic shutdown of the queue by calling - * this function. If you disable the task queue shutdown process, then you - * MUST either run the task queue (as a result of running your event loop - * or manually using the run() method) or wait on each outstanding promise. - * - * Note: This shutdown will occur before any destructors are triggered. - */ - public function disableShutdown(): void - { - $this->enableShutdown = false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/TaskQueueInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/TaskQueueInterface.php deleted file mode 100644 index d44b7f6fd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/promises/src/TaskQueueInterface.php +++ /dev/null @@ -1,26 +0,0 @@ - - * while ($eventLoop->isRunning()) { - * GuzzleHttp\Promise\Utils::queue()->run(); - * } - * - * - * @param TaskQueueInterface|null $assign Optionally specify a new queue instance. - */ - public static function queue(?TaskQueueInterface $assign = null): TaskQueueInterface - { - static $queue; - - if ($assign) { - $queue = $assign; - } elseif (!$queue) { - $queue = new TaskQueue(); - } - - return $queue; - } - - /** - * Adds a task to the global queue and returns a promise that is fulfilled - * or rejected with the task result. - * - * @template TValue - * - * @param callable(): TValue $task Task function to run. - * - * @return PromiseInterface - */ - public static function task(callable $task): PromiseInterface - { - $queue = self::queue(); - $promise = new Promise([$queue, 'run']); - $queue->add(function () use ($task, $promise): void { - try { - if (Is::pending($promise)) { - $promise->resolve($task()); - } - } catch (\Throwable $e) { - $promise->reject($e); - } - }); - - return $promise; - } - - /** - * Synchronously waits on a promise to settle and returns an inspection - * state array. - * - * Returns a state associative array containing a "state" key mapping to a - * valid promise state. If the state of the promise is "fulfilled", the - * array will contain a "value" key mapping to the fulfilled value of the - * promise. If the promise is rejected, the array will contain a "reason" - * key mapping to the rejection reason of the promise. - * - * @template TValue - * @template TReason - * - * @param PromiseInterface $promise Promise to inspect. - * - * @return array{state: PromiseInterface::FULFILLED, value: TValue}|array{state: PromiseInterface::REJECTED, reason: TReason|\Throwable}|array{state: PromiseInterface::PENDING} - */ - public static function inspect(PromiseInterface $promise): array - { - $result = null; - $getResult = static function () use (&$result): ?array { - return $result; - }; - - $inspection = $promise->then( - static function ($value) use (&$result): void { - $result = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; - }, - static function ($reason) use (&$result): void { - $result = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; - } - ); - - try { - $inspection->wait(false); - } catch (\Throwable $e) { - $settled = $getResult(); - if (null !== $settled) { - return $settled; - } - - if (Is::settled($promise)) { - try { - self::queue()->run(); - } catch (\Throwable $queueError) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $queueError]; - } - - $settled = $getResult(); - if (null !== $settled) { - return $settled; - } - } - - return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; - } - - return $getResult() ?? ['state' => $promise->getState()]; - } - - /** - * Waits on all of the provided promises, but does not unwrap rejected - * promises as a thrown exception. - * - * Returns an array of inspection state arrays keyed like the input - * iterable. - * - * @see inspect for the inspection state array format. - * - * @template TKey of array-key - * @template TValue - * @template TReason - * - * @param iterable> $promises Traversable of promises to wait upon. - * - * @return array - */ - public static function inspectAll(iterable $promises): array - { - $results = []; - foreach ($promises as $key => $promise) { - $results[$key] = self::inspect($promise); - } - - return $results; - } - - /** - * Waits on all of the provided promises and returns the fulfilled values. - * - * Returns an array that contains the value of each promise (in the same - * order the promises were provided). An exception is thrown if any of the - * promises are rejected. - * - * @template TKey of array-key - * @template TValue - * @template TReason - * - * @param iterable> $promises Iterable of PromiseInterface objects to wait on. - * - * @return array - * - * @throws \Throwable on error - */ - public static function unwrap(iterable $promises): array - { - $results = []; - foreach ($promises as $key => $promise) { - $results[$key] = $promise->wait(); - } - - return $results; - } - - /** - * Given an array of promises, return a promise that is fulfilled when all - * the items in the array are fulfilled. - * - * The promise's fulfillment value is an array with fulfillment values at - * respective positions to the original array. If any promise in the array - * rejects, the returned promise is rejected with the rejection reason. - * - * The config array accepts a concurrency option for lazy iterables. Other - * config keys are ignored by this wrapper. - * - * @template TKey of array-key - * @template TValue - * @template TReason - * - * @param iterable> $promises Promises or values. - * @param bool $recursive If true, resolves newly-added entries until no unprocessed entries or pending promises remain. - * @param array{concurrency?: int|(callable(int): int)} $config Configuration options. - * - * @return PromiseInterface, TReason|\Throwable> - */ - public static function all(iterable $promises, bool $recursive = false, array $config = []): PromiseInterface - { - $results = []; - $promise = Each::of( - $promises, - function ($value, $idx) use (&$results): void { - $results[$idx] = $value; - }, - function ($reason, $idx, PromiseInterface $aggregate): void { - if (Is::pending($aggregate)) { - $aggregate->reject($reason); - } - }, - $config - )->then(function () use (&$results) { - ksort($results); - - return $results; - }); - - if (true === $recursive) { - $promise = $promise->then(function ($results) use (&$promises, $config) { - if (self::shouldRecurse($promises, $results)) { - return self::all($promises, true, $config); - } - - return $results; - }); - } - - return $promise; - } - - /** - * Initiate a competitive race between multiple promises or values (values - * will become immediately fulfilled promises). - * - * When count amount of promises have been fulfilled, the returned promise - * is fulfilled with an array that contains the fulfillment values of the - * winners, in the order they appear in the input. - * - * This promise is rejected with a {@see AggregateException} if the number - * of fulfilled promises is less than the desired $count. - * - * @template TValue - * @template TReason - * - * @param int $count Total number of promises. - * @param iterable> $promises Promises or values. - * - * @return PromiseInterface, \Throwable> - */ - public static function some(int $count, iterable $promises): PromiseInterface - { - $results = []; - $rejections = []; - - $promise = Each::of( - $promises, - function ($value, $idx, PromiseInterface $p) use (&$results, $count): void { - if (Is::settled($p)) { - return; - } - $results[$idx] = $value; - if (count($results) >= $count) { - $p->resolve(null); - } - }, - function ($reason) use (&$rejections): void { - $rejections[] = $reason; - } - )->then( - function () use (&$results, &$rejections, $count) { - if (count($results) !== $count) { - throw new AggregateException( - 'Not enough promises to fulfill count', - $rejections - ); - } - ksort($results); - - return array_values($results); - } - ); - - /** @var PromiseInterface, \Throwable> $promise */ - return $promise; - } - - /** - * Like some(), with 1 as count. However, if the promise fulfills, the - * fulfillment value is not an array of 1 but the value directly. - * - * @template TValue - * @template TReason - * - * @param iterable> $promises Promises or values. - * - * @return PromiseInterface - */ - public static function any(iterable $promises): PromiseInterface - { - return self::some(1, $promises)->then(function (array $values) { - return $values[0]; - }); - } - - /** - * Returns a promise that is fulfilled when all of the provided promises - * have been fulfilled or rejected. - * - * The returned promise is fulfilled with an array of inspection state - * arrays. - * - * The config array accepts a concurrency option for lazy iterables. Other - * config keys are ignored by this wrapper. - * - * @see inspect for the inspection state array format. - * - * @template TKey of array-key - * @template TValue - * @template TReason - * - * @param iterable> $promises Promises or values. - * @param bool $recursive If true, settles newly-added entries until no unprocessed entries or pending promises remain. - * @param array{concurrency?: int|(callable(int): int)} $config Configuration options. - * - * @return PromiseInterface, \Throwable> - */ - public static function settle(iterable $promises, bool $recursive = false, array $config = []): PromiseInterface - { - $results = []; - - $promise = Each::of( - $promises, - function ($value, $idx) use (&$results): void { - $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; - }, - function ($reason, $idx) use (&$results): void { - $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; - }, - $config - )->then(function () use (&$results) { - ksort($results); - - return $results; - }); - - if (true === $recursive) { - $promise = $promise->then(function ($results) use (&$promises, $config) { - if (self::shouldRecurse($promises, $results)) { - return self::settle($promises, true, $config); - } - - return $results; - }); - } - - return $promise; - } - - /** - * @template TKey of array-key - * - * @param iterable $promises Promises or values. - * @param array $results Results already collected for a pass. - */ - private static function shouldRecurse(iterable $promises, array $results): bool - { - // A consumed generator cannot be traversed again, so a recursive - // pass has nothing further to observe. - if ($promises instanceof \Generator) { - return false; - } - - foreach ($promises as $key => $promise) { - if (!array_key_exists($key, $results)) { - return true; - } - - if ($promise instanceof PromiseInterface && Is::pending($promise)) { - return true; - } - } - - return false; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/AGENTS.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/AGENTS.md deleted file mode 100644 index bd963331e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/AGENTS.md +++ /dev/null @@ -1,69 +0,0 @@ -# Agent Guidelines - -## Code and tooling - -- All code must remain compatible with PHP 7.4. Run PHPStan and PHP-CS-Fixer - only under a PHP 7.4.x runtime; never run either tool under any other PHP - major.minor version. -- Use fully qualified `#[\SensitiveParameter]` on concrete executable - parameters when their established role normally carries a secret, - credential-bearing aggregate, or confidential Guzzle-owned container, and - the active frame can throw or invoke throwing code. -- Repeat the attribute on every qualifying owned caller, callee, concrete trait - method, and closure parameter. Do not add it to interfaces, abstract-only - declarations, pure/no-realistic-throw helpers, assignment-only sites, - arbitrary generic payloads, or completed non-recoverable derivatives. -- For PHP 7.4 compatibility, put `#[\SensitiveParameter]` on its own line and - the parameter on the following line, expand the complete parameter list, and - never add a comma after the final parameter. Native trace redaction starts on - PHP 8.2 and does not redact logs, messages, properties, wire traffic, captured - variables, return values, or the separate backtrace `$this`/`object`. -- Always pass an explicit character list to `trim()`, `ltrim()`, and `rtrim()`; - never rely on the default characters. -- Handle `preg_*` engine failures: when the result is used as data, test for - `false` or `null` and throw a `\RuntimeException` including - `preg_last_error_msg()`; boolean validation guards must compare strictly, such - as `=== 1`, so an engine failure can only ever fail closed. Diagnostic - escaping is the narrow exception: use a deterministic bytewise fallback rather - than throwing, so it cannot obscure the original exception. -- Anchor validation patterns to the true end of input with the `D` modifier or - `\z`; a bare `$` accepts a trailing newline. -- Never embed raw control bytes in exception messages and other diagnostics; - escape or redact the offending value first. -- Helper classes that expose only public static methods are `final` and have a - private constructor. -- Resist native PHP serialization when a class holds live state (streams, - resources, handles, callbacks, credentials) or when magic methods such as - `__destruct()` have side effects that untrusted unserialized data could - redirect, as with the file and session write fixes in Guzzle's persisting - cookie jars. Plain data holders, such as Guzzle's in-memory cookie jar, remain - serializable. -- To resist, `__serialize()` and `__unserialize()` both throw - `\LogicException(static::class.' should never be serialized')` and its - unserialized counterpart, usually via the `@internal` - `NonSerializableStreamTrait`. Where a `__destruct()` has such a side effect, - it is enabled only by the constructor and disabled in `__wakeup()` and - `__unserialize()` before throwing, so the protection holds even if the - exception is swallowed. -- In general, numeric inputs should not accept non-finite floats. In situations - where they are accepted and we need to cast to a string, we should branch on - `\is_finite($value)`, using `(string) $value` for the finite case and - `\is_nan($value) ? 'NAN' : ($value > 0 ? 'INF' : '-INF')` otherwise. -- Never call `strtolower()`, `strtoupper()`, `strcasecmp()`, `stripos()`, or - other locale-sensitive case functions; use the locale-independent - `Utils::asciiToLower()`, `Utils::asciiToUpper()`, `Utils::caselessEquals()`, - and `Utils::caselessContains()` helpers instead. -- Changes in behavior need a `CHANGELOG.md` entry in the unreleased section of - the target branch and an `UPGRADING.md` note when the behavior differs between - major versions. - -## Documentation - -- Wrap markdown prose and PHPDoc text to 80 columns using greedy wrapping. Never - split a markdown link or an inline code span across a line break; a line that - cannot be broken may exceed the limit. Avoid em dashes. -- Keep PHPDoc and the corresponding `docs/` pages in sync: shared prose is - deliberately word-for-word identical, including boilerplate copied verbatim - between related functions, so apply the same edit to every copy. Only - formatting and linking may differ, such as a docs link becoming a PHPDoc - `@see` tag; the wording must never drift. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/CHANGELOG.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/CHANGELOG.md deleted file mode 100644 index b97308422..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/CHANGELOG.md +++ /dev/null @@ -1,744 +0,0 @@ -# Change Log - -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/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## 3.0.0 - 2026-07-20 - -### Added - -- Add `DiagnosticValue::escape()` to escape controls and malformed UTF-8 in diagnostics -- Add `GuzzleHttp\Psr7\Exception\TimeoutException` for timed-out stream operations -- Add `GuzzleHttp\Psr7\Utils::redactUserInfoInString()` to redact the userinfo of a raw URI string within text -- Promote `GuzzleHttp\Psr7\Rfc3986` to public API with `isValid*()` predicates and `canonicalizeIpv6()` -- Add `GuzzleHttp\Psr7\UriNormalizer::CANONICALIZE_IPV6_HOST` to `PRESERVING_NORMALIZATIONS` - -### Changed - -- Require `psr/http-message:^2.0` and add native parameter and return types -- Require `psr/http-factory:^1.1` -- Reject native PHP serialization of stream implementations -- Preserve request method casing, except `ServerRequest::fromGlobals()` still uppercases -- Reject empty arrays and non-string values as header values -- Reject invalid uploaded file trees and invalid parsed body values -- Reject uploaded file specs missing `tmp_name`, `size`, or `error` -- Reject non-integer and negative uploaded file `error` values -- Reject invalid stream/upload sizes, buffer high-water marks, and dropping-stream limits -- Rewind seekable uploaded-file streams before copying in `UploadedFile::moveTo()` -- Reject negative `read()` lengths across all stream implementations -- Detect the `+` flag anywhere in a mode for `Stream::isReadable()`/`isWritable()` -- Reject empty strings returned by `PumpStream` source callables -- Discard buffered bytes on `PumpStream` close and detach -- Restore the original stream position after `Message::bodySummary()` -- Allow `null` for the `Message::bodySummary()` truncation length to use the default -- Validate `LimitStream` offset/limit and track non-seekable offset by bytes skipped -- Make `FnStream` close and detach terminal, calling close callbacks at most once -- Suppress exceptions from `FnStream` close callbacks during destructor cleanup -- Make `CachingStream::close()` idempotent, preserving remote cleanup after detach -- Do not move the `CachingStream` cursor when a `SEEK_END` target on an unknown-size stream is rejected -- Normalize multiple leading slashes in `Uri::getPath()` and origin-form request targets -- Serialize authority-less `file` URIs with rootless paths without the `//` separator -- Serialize authority-less `file` URIs with empty paths as `file:` instead of the unparseable `file://` -- Remove dot segments above the root per RFC 3986, prefixing authority-less `//` paths with `/.` -- Return a network-path reference from `UriResolver::relativize()` when an empty-path target requires one -- Stop returning an empty reference from `UriResolver::relativize()` when it would inherit the base fragment -- Stop throwing from `UriResolver::relativize()` when an equal-path target's last path segment contains a colon -- Harden URI host validation (delimiters, backslashes, IPv6, embedded ports); require schemes to start with a letter -- Validate `Uri::fromParts()` ports instead of casting them -- Treat ports 80 and 443 as defaults for the `ws` and `wss` schemes -- Use the `ws` and `wss` default ports in `UriComparator::isCrossOrigin()` port comparisons -- Redact all non-empty URI userinfo in `Utils::redactUserInfo()` -- Rebuild server request URIs from `$_SERVER` by `REQUEST_METHOD`, using target authority before `SERVER_PORT` -- Remove userinfo from absolute-form `REQUEST_URI` targets in `ServerRequest::fromGlobals()` -- Reject zero-port `HTTP_HOST` and malformed `SERVER_PORT` in `ServerRequest::getUriFromGlobals()` -- Reject malformed `REQUEST_METHOD` and `SERVER_PROTOCOL` server values in `ServerRequest::fromGlobals()` -- Reject zero-port `Host` and normalize leading-zero ports in `Message::parseRequest()` -- Reject duplicate `Host` headers and validate present values for all request-target forms -- Reject zero-port, hostless, and userinfo absolute-form request targets in `Message::parseRequest()` -- Synchronize the `Host` header in `Request::withUri()` when the URI changes or Host is empty -- Include the URI port in `Host` headers synthesized by `Message::toString()` -- Validate the Host header synthesized by `Message::toString()` from the request URI -- Include non-default URI ports in `Host` headers set by `Utils::modifyRequest()` URI changes -- Accept `OPTIONS *` and `CONNECT` authority-form request targets in `Message::parseRequest()` -- Hide credential-bearing URI, server, and cookie arguments in stack traces on PHP 8.2+ -- Reject malformed HTTP request/response start-lines -- Unfold obsolete HTTP/1.0 line folding for all valid request method tokens -- Reject empty and control-character request targets in `Request::withRequestTarget()` -- Validate iterator chunks passed to `Utils::streamFor()` -- Validate unsupported values passed to `Query::build()` -- Reject non-finite float values in `Query::build()` and `MultipartStream` contents -- Reject non-finite float values in iterator chunks passed to `Utils::streamFor()` -- `Utils::streamFor()` now rejects non-string scalar bodies -- `Uri::withQueryValues()` now rejects non-string values -- Reject invalid `Utils::modifyRequest()` change values -- Use PHP debug type names in type error messages -- Changed `Utils::copyToStream()` to throw when destination streams cannot make progress -- Throw `TimeoutException` from `Stream` read/write and `Utils` copy/hash/readLine on stream timeouts -- Throw `TimeoutException` from `AppendStream::read()`, `CachingStream::read()`, and `Utils::tryGetContents()` on stream timeouts -- Re-throw `TimeoutException` from `InflateStream` when the decoded source stream times out -- Close the compressed source stream from `InflateStream::close()` -- Return the number of bytes copied from `Utils::copyToStream()` -- Throw `OverflowException` when stream byte counts or offsets exceed `PHP_INT_MAX` -- Translate `StreamWrapper` runtime failures to PHP stream failure values -- Stop adding default `Content-Length` to `multipart/form-data` parts (RFC 7578 §4.8) -- Escape multipart `Content-Disposition` parameters and reject unsafe boundaries and part headers -- Preserve trailing whitespace in custom `MultipartStream` part header values -- Preserve explicit custom `MultipartStream` boundary `'0'` instead of replacing it with a generated boundary -- Made static utility classes non-instantiable -- Validate bracketed IP-literal hosts consistently between parsing and `withHost()`, including userinfo forms -- Percent-encode raw control bytes in userinfo before bracketed IP-literal hosts instead of parsing mutated values -- Reject invalid UTF-8 and preserve percent-sequences in userinfo before bracketed IP-literal hosts -- Normalize percent-encoded octets in the URI host to uppercase hex -- Canonicalize IPv6 hosts to RFC 5952 form in `Uri` construction, `fromParts()`, and `withHost()` -- Canonicalize bracketed IPv6 hosts in `UriComparator::isCrossOrigin()` -- Reject malformed percent-sequences and percent-encoded bytes forbidden by the URI host policy -- Extend `CAPITALIZE_PERCENT_ENCODING` and `DECODE_UNRESERVED_CHARACTERS` to userinfo and host -- Trim header list elements with only spaces, horizontal tabs, and line terminators in `Header::splitList()` -- Report header parameter PCRE failures explicitly in `Header::parse()` -- Escape controls and malformed UTF-8 consistently in generated exception messages - -### Removed - -- Dropped support for PHP 7.2 and 7.3 -- Removed the `ralouphie/getallheaders` dependency -- Removed deprecated `Header::normalize()` method - -## 2.13.0 - 2026-07-16 - -### Added - -- Add `Utils::` `asciiToLower`, `asciiToUpper`, `asciiUcFirst`, `caselessEquals`, `caselessContains` - -### Changed - -- Use locale-independent ASCII case folding everywhere case is normalized -- Trigger a runtime deprecation for previously deprecated functionality in 2.3.0 - -## 2.12.5 - 2026-07-13 - -### Fixed - -- Compare header names and hosts with locale-independent ASCII lowercasing -- Compare hosts without locale sensitivity when detecting cross-origin redirects - -## 2.12.4 - 2026-07-08 - -### Changed - -- Pass explicit trim characters ahead of the PHP 8.6 trim default change - -### Fixed - -- Anchor server port and response start-line patterns to the true end of input -- Treat host-less origin-form request targets starting with `//` as paths in `Message::parseRequest()` -- Reject raw DEL bytes in bracketed IP-literal hosts instead of parsing a mutated host -- Reject invalid bytes after a bracketed IP-literal host instead of reparsing a different host - -## 2.12.3 - 2026-06-23 - -### Security - -- Validate the URI host so `getHost()` matches the URI authority (GHSA-c2w2-prh8-qm98) - -## 2.12.2 - 2026-06-23 - -### Fixed - -- Report URI parsing, filtering, and normalization PCRE failures explicitly -- Report HTTP message parser PCRE failures explicitly -- Fail closed when PCRE validation fails for request targets and hosts - -## 2.12.1 - 2026-06-18 - -### Security - -- Reject CR/LF in HTTP method, protocol version, and reason phrase (GHSA-vm85-hxw5-5432) - -## 2.12.0 - 2026-06-16 - -### Deprecated - -- Deprecated non-finite float values in `Query::build()` that guzzlehttp/psr7 3.0 rejects -- Deprecated non-finite float multipart contents that guzzlehttp/psr7 3.0 rejects -- Deprecated non-string scalar bodies in `Utils::streamFor()`; cast them to a string for 3.0 -- Deprecated non-string `Uri::withQueryValues()` values; cast them to a string for 3.0 - -## 2.11.1 - 2026-06-12 - -### Fixed - -- Fixed non-finite float values emitting coercion warnings on PHP 8.5 - -## 2.11.0 - 2026-06-02 - -### Changed - -- Changed `Utils::modifyRequest()` to reject conflicting URI and `Host` header changes in the same call -- Changed `Header::parse()` to split semicolon-separated parameters without repeated regular expression lookaheads -- Changed `UriComparator::isCrossOrigin()` so only HTTP and HTTPS missing ports receive implicit default ports - -### Deprecated - -- Deprecated invalid PSR-7 arguments that guzzlehttp/psr7 3.0 will require native types for -- Deprecated non-string header values that guzzlehttp/psr7 3.0 will reject -- Deprecated empty header value arrays that guzzlehttp/psr7 3.0 will reject -- Deprecated URI schemes that do not match guzzlehttp/psr7 3.0 syntax requirements -- Deprecated multipart boundary and custom part header metadata that guzzlehttp/psr7 3.0 will reject -- Deprecated reliance on automatic uppercasing of request methods; guzzlehttp/psr7 3.0 preserves method casing -- Deprecated invalid `Utils::modifyRequest()` change values that guzzlehttp/psr7 3.0 will reject - -### Fixed - -- Fixed `Utils::copyToStream()` to retry short destination writes instead of dropping the unwritten remainder -- Fixed `Header::parse()` splitting of semicolon-separated parameters with escaped quotes - -## 2.10.4 - 2026-05-29 - -### Fixed - -- Apply `UriNormalizer` percent-encoding normalizations to URI fragments -- Make `LimitStream::getSize()` return `0` for slices past the underlying stream end -- Make `AppendStream::read()` return an empty string when no streams are attached -- Make `CachingStream::read()` throw on an incomplete cache-target write instead of silently corrupting replays -- Prevent `CachingStream::seek()` from looping indefinitely when the remote stream makes no progress - -## 2.10.3 - 2026-05-27 - -### Fixed - -- Fixed URI parsing for IPv6 literals containing embedded IPv4 addresses -- Fixed malformed UTF-8 URI strings being parsed as empty URIs - -## 2.10.2 - 2026-05-25 - -### Security - -- Reject control and whitespace characters in URI host components (GHSA-hq7v-mx3g-29hw) -- Reject malformed Host values when constructing request URIs (GHSA-34xg-wgjx-8xph) - -### Fixed - -- Make `ServerRequest::fromGlobals()` robust against unexpected HTTP header value types in `$_SERVER` - -## 2.10.1 - 2026-05-20 - -### Fixed - -- Fix `Utils::modifyRequest()` with numeric header names - -## 2.10.0 - 2026-05-19 - -### Changed - -- Harden `ServerRequest::fromGlobals()` against malformed `$_SERVER` values -- Prevent custom stream metadata from affecting internal size handling -- Throw when `StreamWrapper::getResource()` cannot create a resource -- Preserve custom request implementations in `Utils::modifyRequest()` -- Preserve custom URI implementations in `UriResolver::resolve()` -- Make `Uri::__toString()` side-effect-free - -## 2.9.1 - 2026-05-19 - -### Fixed - -- Fix parsing of relative path references containing a colon in a non-initial path segment -- Fix `CachingStream::detach()` returning an incomplete resource before the decorated stream has been fully read -- Fix `Message::bodySummary()` returning `null` when truncating printable UTF-8 bodies inside a multibyte character - -## 2.9.0 - 2026-03-10 - -### Added - -- Added nested array expansion support to `MultipartStream` -- Added `@return static` to `MessageTrait` methods - -### Changed - -- Updated MIME type mappings - -## 2.8.1 - 2026-03-10 - -### Fixed - -- Encode `+` signs in `Uri::withQueryValue()` and `Uri::withQueryValues()` to prevent them being interpreted as spaces - -## 2.8.0 - 2025-08-23 - -### Added - -- Allow empty lists as header values - -### Changed - -- PHP 8.5 support - -## 2.7.1 - 2025-03-27 - -### Fixed - -- Fixed uppercase IPv6 addresses in URI - -### Changed - -- Improve uploaded file error message - -## 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 - -### Fixed - -- Fixed another issue with the fact that PHP transforms numeric strings in array keys to ints - -### Changed - -- Updated links in docs to their canonical versions -- Replaced `call_user_func*` with native calls - -## 2.6.1 - 2023-08-27 - -### Fixed - -- Properly handle the fact that PHP transforms numeric strings in array keys to ints - -## 2.6.0 - 2023-08-03 - -### Changed - -- Updated the mime type map to add some new entries, fix a couple of invalid entries, and remove an invalid entry -- Fallback to `application/octet-stream` if we are unable to guess the content type for a multipart file upload - -## 2.5.1 - 2023-08-03 - -### Fixed - -- Corrected mime type for `.acc` files to `audio/aac` - -### Changed - -- PHP 8.3 support - -## 2.5.0 - 2023-04-17 - -### Changed - -- Adjusted `psr/http-message` version constraint to `^1.1 || ^2.0` - -## 2.4.5 - 2023-04-17 - -### Fixed - -- Prevent possible warnings on unset variables in `ServerRequest::normalizeNestedFileSpec` -- Fixed `Message::bodySummary` when `preg_match` fails -- Fixed header validation issue - -## 2.4.4 - 2023-03-09 - -### Changed - -- Removed the need for `AllowDynamicProperties` in `LazyOpenStream` - -## 2.4.3 - 2022-10-26 - -### Changed - -- Replaced `sha1(uniqid())` by `bin2hex(random_bytes(20))` - -## 2.4.2 - 2022-10-25 - -### Fixed - -- Fixed erroneous behaviour when combining host and relative path - -## 2.4.1 - 2022-08-28 - -### Fixed - -- Rewind body before reading in `Message::bodySummary` - -## 2.4.0 - 2022-06-20 - -### Added - -- Added provisional PHP 8.2 support -- Added `UriComparator::isCrossOrigin` method - -## 2.3.0 - 2022-06-09 - -### Fixed - -- Added `Header::splitList` method -- Added `Utils::tryGetContents` method -- Improved `Stream::getContents` method -- Updated mimetype mappings - -## 2.2.2 - 2022-06-08 - -### Fixed - -- Fix `Message::parseRequestUri` for numeric headers -- Re-wrap exceptions thrown in `fread` into runtime exceptions -- Throw an exception when multipart options is misformatted - -## 2.2.1 - 2022-03-20 - -### Fixed - -- Correct header value validation - -## 2.2.0 - 2022-03-20 - -### Added - -- A more compressive list of mime types -- Add JsonSerializable to Uri -- Missing return types - -### Fixed - -- Bug MultipartStream no `uri` metadata -- Bug MultipartStream with filename for `data://` streams -- Fixed new line handling in MultipartStream -- Reduced RAM usage when copying streams -- Updated parsing in `Header::normalize()` - -## 2.1.1 - 2022-03-20 - -### Fixed - -- Validate header values properly - -## 2.1.0 - 2021-10-06 - -### Changed - -- Attempting to create a `Uri` object from a malformed URI will no longer throw a generic - `InvalidArgumentException`, but rather a `MalformedUriException`, which inherits from the former - for backwards compatibility. Callers relying on the exception being thrown to detect invalid - URIs should catch the new exception. - -### Fixed - -- Return `null` in caching stream size if remote size is `null` - -## 2.0.0 - 2021-06-30 - -Identical to the RC release. - -## 2.0.0@RC-1 - 2021-04-29 - -### Fixed - -- Handle possibly unset `url` in `stream_get_meta_data` - -## 2.0.0@beta-1 - 2021-03-21 - -### Added - -- PSR-17 factories -- Made classes final -- PHP7 type hints - -### Changed - -- When building a query string, booleans are represented as 1 and 0. - -### Removed - -- PHP < 7.2 support -- All functions in the `GuzzleHttp\Psr7` namespace - -## 1.8.1 - 2021-03-21 - -### Fixed - -- Issue parsing IPv6 URLs -- Issue modifying ServerRequest lost all its attributes - -## 1.8.0 - 2021-03-21 - -### Added - -- Locale independent URL parsing -- Most classes got a `@final` annotation to prepare for 2.0 - -### Fixed - -- Issue when creating stream from `php://input` and curl-ext is not installed -- Broken `Utils::tryFopen()` on PHP 8 - -## 1.7.0 - 2020-09-30 - -### Added - -- Replaced functions by static methods - -### Fixed - -- Converting a non-seekable stream to a string -- Handle multiple Set-Cookie correctly -- Ignore array keys in header values when merging -- Allow multibyte characters to be parsed in `Message:bodySummary()` - -### Changed - -- Restored partial HHVM 3 support - - -## [1.6.1] - 2019-07-02 - -### Fixed - -- Accept null and bool header values again - - -## [1.6.0] - 2019-06-30 - -### Added - -- Allowed version `^3.0` of `ralouphie/getallheaders` dependency (#244) -- Added MIME type for WEBP image format (#246) -- Added more validation of values according to PSR-7 and RFC standards, e.g. status code range (#250, #272) - -### Changed - -- Tests don't pass with HHVM 4.0, so HHVM support got dropped. Other libraries like composer have done the same. (#262) -- Accept port number 0 to be valid (#270) - -### Fixed - -- Fixed subsequent reads from `php://input` in ServerRequest (#247) -- Fixed readable/writable detection for certain stream modes (#248) -- Fixed encoding of special characters in the `userInfo` component of an URI (#253) - - -## [1.5.2] - 2018-12-04 - -### Fixed - -- Check body size when getting the message summary - - -## [1.5.1] - 2018-12-04 - -### Fixed - -- Get the summary of a body only if it is readable - - -## [1.5.0] - 2018-12-03 - -### Added - -- Response first-line to response string exception (fixes #145) -- A test for #129 behavior -- `get_message_body_summary` function in order to get the message summary -- `3gp` and `mkv` mime types - -### Changed - -- Clarify exception message when stream is detached - -### Deprecated - -- Deprecated parsing folded header lines as per RFC 7230 - -### Fixed - -- Fix `AppendStream::detach` to not close streams -- `InflateStream` preserves `isSeekable` attribute of the underlying stream -- `ServerRequest::getUriFromGlobals` to support URLs in query parameters - - -Several other fixes and improvements. - - -## [1.4.2] - 2017-03-20 - -### Fixed - -- Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing - calls to `trigger_error` when deprecated methods are invoked. - - -## [1.4.1] - 2017-02-27 - -### Added - -- Rriggering of silenced deprecation warnings. - -### Fixed - -- Reverted BC break by reintroducing behavior to automagically fix a URI with a - relative path and an authority by adding a leading slash to the path. It's only - deprecated now. - - -## [1.4.0] - 2017-02-21 - -### Added - -- Added common URI utility methods based on RFC 3986 (see documentation in the readme): - - `Uri::isDefaultPort` - - `Uri::isAbsolute` - - `Uri::isNetworkPathReference` - - `Uri::isAbsolutePathReference` - - `Uri::isRelativePathReference` - - `Uri::isSameDocumentReference` - - `Uri::composeComponents` - - `UriNormalizer::normalize` - - `UriNormalizer::isEquivalent` - - `UriResolver::relativize` - -### Changed - -- Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form. -- Allow `parse_response` to parse a response without delimiting space and reason. -- Ensure each URI modification results in a valid URI according to PSR-7 discussions. - Invalid modifications will throw an exception instead of returning a wrong URI or - doing some magic. - - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception - because the path of a URI with an authority must start with a slash "/" or be empty - - `(new Uri())->withScheme('http')` will return `'http://localhost'` - -### Deprecated - -- `Uri::resolve` in favor of `UriResolver::resolve` -- `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments` - -### Fixed - -- `Stream::read` when length parameter <= 0. -- `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory. -- `ServerRequest::getUriFromGlobals` when `Host` header contains port. -- Compatibility of URIs with `file` scheme and empty host. - - -## [1.3.1] - 2016-06-25 - -### Fixed - -- `Uri::__toString` for network path references, e.g. `//example.org`. -- Missing lowercase normalization for host. -- Handling of URI components in case they are `'0'` in a lot of places, - e.g. as a user info password. -- `Uri::withAddedHeader` to correctly merge headers with different case. -- Trimming of header values in `Uri::withAddedHeader`. Header values may - be surrounded by whitespace which should be ignored according to RFC 7230 - Section 3.2.4. This does not apply to header names. -- `Uri::withAddedHeader` with an array of header values. -- `Uri::resolve` when base path has no slash and handling of fragment. -- Handling of encoding in `Uri::with(out)QueryValue` so one can pass the - key/value both in encoded as well as decoded form to those methods. This is - consistent with withPath, withQuery etc. -- `ServerRequest::withoutAttribute` when attribute value is null. - - -## [1.3.0] - 2016-04-13 - -### Added - -- Remaining interfaces needed for full PSR7 compatibility - (ServerRequestInterface, UploadedFileInterface, etc.). -- Support for stream_for from scalars. - -### Changed - -- Can now extend Uri. - -### Fixed -- A bug in validating request methods by making it more permissive. - - -## [1.2.3] - 2016-02-18 - -### Fixed - -- Support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote - streams, which can sometimes return fewer bytes than requested with `fread`. -- Handling of gzipped responses with FNAME headers. - - -## [1.2.2] - 2016-01-22 - -### Added - -- Support for URIs without any authority. -- Support for HTTP 451 'Unavailable For Legal Reasons.' -- Support for using '0' as a filename. -- Support for including non-standard ports in Host headers. - - -## [1.2.1] - 2015-11-02 - -### Changes - -- Now supporting negative offsets when seeking to SEEK_END. - - -## [1.2.0] - 2015-08-15 - -### Changed - -- Body as `"0"` is now properly added to a response. -- Now allowing forward seeking in CachingStream. -- Now properly parsing HTTP requests that contain proxy targets in - `parse_request`. -- functions.php is now conditionally required. -- user-info is no longer dropped when resolving URIs. - - -## [1.1.0] - 2015-06-24 - -### Changed - -- URIs can now be relative. -- `multipart/form-data` headers are now overridden case-insensitively. -- URI paths no longer encode the following characters because they are allowed - in URIs: "(", ")", "*", "!", "'" -- A port is no longer added to a URI when the scheme is missing and no port is - present. - - -## 1.0.0 - 2015-05-19 - -Initial release. - -Currently unsupported: - -- `Psr\Http\Message\ServerRequestInterface` -- `Psr\Http\Message\UploadedFileInterface` - - - -[1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0 -[1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2 -[1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1 -[1.5.0]: https://github.com/guzzle/psr7/compare/1.4.2...1.5.0 -[1.4.2]: https://github.com/guzzle/psr7/compare/1.4.1...1.4.2 -[1.4.1]: https://github.com/guzzle/psr7/compare/1.4.0...1.4.1 -[1.4.0]: https://github.com/guzzle/psr7/compare/1.3.1...1.4.0 -[1.3.1]: https://github.com/guzzle/psr7/compare/1.3.0...1.3.1 -[1.3.0]: https://github.com/guzzle/psr7/compare/1.2.3...1.3.0 -[1.2.3]: https://github.com/guzzle/psr7/compare/1.2.2...1.2.3 -[1.2.2]: https://github.com/guzzle/psr7/compare/1.2.1...1.2.2 -[1.2.1]: https://github.com/guzzle/psr7/compare/1.2.0...1.2.1 -[1.2.0]: https://github.com/guzzle/psr7/compare/1.1.0...1.2.0 -[1.1.0]: https://github.com/guzzle/psr7/compare/1.0.0...1.1.0 diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/LICENSE deleted file mode 100644 index 51c7ec81c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Michael Dowling -Copyright (c) 2015 Márk Sági-Kazár -Copyright (c) 2015 Graham Campbell -Copyright (c) 2016 Tobias Schultze -Copyright (c) 2016 George Mponos -Copyright (c) 2018 Tobias Nyholm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/README.md deleted file mode 100644 index 8fea29a83..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# Guzzle PSR-7 - -`guzzlehttp/psr7` is a PSR-7 HTTP message implementation for PHP. It provides -request, response, URI, uploaded file, and stream objects that work with Guzzle -and any other library using the PSR-7 interfaces. - -Use this package directly when you need to create or inspect PSR-7 messages -without sending HTTP requests. If you only want to make HTTP requests, install -[`guzzlehttp/guzzle`](https://github.com/guzzle/guzzle/blob/8.0/README.md) -instead; it already depends on this package. - -## Installation - -```bash -composer require guzzlehttp/psr7 -``` - -## Version Guidance - -| Version | Status | PHP Version | -|---------|--------------|--------------| -| 3.0 | Latest | >=7.4,<8.6 | -| 2.13 | Maintenance | >=7.2.5,<8.6 | -| 1.9 | End of Life | >=5.4,<8.2 | - -## Quick Start - -```php -use GuzzleHttp\Psr7\Request; -use GuzzleHttp\Psr7\Response; -use GuzzleHttp\Psr7\Utils; - -$request = new Request('GET', 'https://example.com/api'); -$response = new Response(200, ['Content-Type' => 'text/plain'], 'OK'); -$stream = Utils::streamFor('request or response body'); - -echo $request->getMethod(); -echo $response->getStatusCode(); -echo $stream; -``` - -PSR-7 messages and URIs are immutable. Methods such as `withHeader()` and -`withUri()` return a changed copy instead of modifying the original object. -Streams are mutable body handles; reading, writing, seeking, and closing a -stream can change its cursor, contents, or usability. - -```php -$request = $request->withHeader('Accept', 'application/json'); -``` - -## Documentation - -- [PSR-7 Messages](docs/psr-7-messages.md) -- [Streams and Decorators](docs/streams-and-decorators.md) -- [URI Helpers](docs/uri-helpers.md) -- [PSR-17 Factories](docs/psr-17-factories.md) -- [Message Helpers](docs/message-helpers.md) -- [Diagnostic Values](docs/diagnostic-values.md) -- [Header and Query Helpers](docs/header-and-query-helpers.md) -- [Stream Helpers](docs/stream-helpers.md) -- [URI and MIME Helpers](docs/uri-and-mime-helpers.md) -- [Upgrade Guide](UPGRADING.md) -- [Changelog](CHANGELOG.md) - -## Security - -If you discover a security vulnerability within this package, please send an -email to security@tidelift.com. All security vulnerabilities will be promptly -addressed. Please do not disclose security-related issues publicly until a fix -has been announced. Please see -[Security Policy](https://github.com/guzzle/psr7/security/policy) for more -information. - -## License - -Guzzle is made available under the MIT License (MIT). Please see -[License File](LICENSE) for more information. - -## For Enterprise - -Available as part of the Tidelift Subscription - -The maintainers of Guzzle and thousands of other packages are working with -Tidelift to deliver commercial support and maintenance for the open source -dependencies you use to build your applications. Save time, reduce risk, and -improve code health, while paying the maintainers of the exact dependencies you -use. -[Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-psr7?utm_source=packagist-guzzlehttp-psr7&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/UPGRADING.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/UPGRADING.md deleted file mode 100644 index 7fbd4b578..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/UPGRADING.md +++ /dev/null @@ -1,1084 +0,0 @@ -Guzzle PSR-7 Upgrade Guide -========================== - -2.x to 3.0 ----------- - -Guzzle PSR-7 3.0 is a major release that raises the minimum PHP version, -updates to the PSR-7 v2 interfaces, validates header values more strictly, -preserves explicit request method casing, and rejects several invalid URI, -request, response, upload, query, stream, and multipart values that 2.x -previously accepted or cast. - -#### PHP Version and Dependencies - -Guzzle PSR-7 3.0 requires PHP `^7.4 || ^8.0`. Guzzle PSR-7 2.x supported PHP -`^7.2.5 || ^8.0`. - -If your application still supports PHP 7.2 or 7.3, continue using Guzzle PSR-7 -2.x until your minimum PHP version is raised. - -Guzzle PSR-7 3.0 requires `psr/http-message:^2.0` and -`psr/http-factory:^1.1`. Guzzle PSR-7 2.x supported -`psr/http-message:^1.1 || ^2.0` and `psr/http-factory:^1.0`. If your dependency -constraints pin `psr/http-message` to v1, update them before upgrading. - -Guzzle PSR-7 no longer depends on `ralouphie/getallheaders` and no longer -provides a transitive global `getallheaders()` polyfill. -`ServerRequest::fromGlobals()` continues to collect request headers internally. -Applications that call `getallheaders()` directly on SAPIs where PHP does not -provide it should require their own polyfill. - -#### Header Values - -Header values must now be strings or non-empty arrays of strings. Empty strings -remain valid explicit header values, but empty arrays, `null`, `false`, integers, -floats, and other non-string values are no longer cast or accepted. - -```php -// 2.x, no longer accepted in 3.0 -$response = $response->withHeader('Api-Version', 1); -$response = $response->withHeader('Empty-List', []); - -// 3.0 -$response = $response->withHeader('Api-Version', '1'); -$response = $response->withHeader('Empty-Value', ''); -``` - -Use `withoutHeader()` to remove a header. - -#### Request Method Casing - -Request methods passed explicitly to `Request`, `ServerRequest`, `withMethod()`, -`Message::parseRequest()`, and the PSR-17 factories are no longer uppercased. -PSR-7 treats method names as case-sensitive, so these APIs now preserve the -method exactly as provided. If your application requires uppercase methods, -normalize methods before constructing or modifying requests. - -`ServerRequest::fromGlobals()` is the compatibility-oriented exception. It -continues to uppercase string `REQUEST_METHOD` values read from PHP server -globals, matching Guzzle PSR-7 2.x and common server request behavior. This -normalization only applies when hydrating from globals; it does not apply to -methods passed explicitly to constructors, factories, or `withMethod()`. - -```php -// 2.x -$request = new Request('get', '/'); -$request->getMethod(); // GET - -// 3.0 -$request = new Request('get', '/'); -$request->getMethod(); // get - -// 3.0, server globals -$_SERVER['REQUEST_METHOD'] = 'post'; -$request = ServerRequest::fromGlobals(); -$request->getMethod(); // POST -``` - -#### Native PSR-7 Parameter Types - -Guzzle PSR-7 3.0 requires the argument types documented by PSR-7 more strictly. -It adds the native parameter types from `psr/http-message` v2. Code passing -invalid argument types may now receive PHP `TypeError` exceptions instead of -package-specific `InvalidArgumentException` exceptions or implicit casts. - -Native parameter type changes include: - -- `MessageInterface::withProtocolVersion()` now requires `string`. -- Message header names now require `string`. -- `RequestInterface::withRequestTarget()` and `withMethod()` now require `string`. -- `RequestInterface::withUri()` now requires `bool` for `$preserveHost`. -- `ResponseInterface::withStatus()` now requires `int` status codes and `string` reason phrases. -- Server request attribute names now require `string`. -- `UriInterface::withPort()` now requires `int|null`. -- URI scheme, user info, host, path, query, and fragment mutators now require strings. -- Stream `seek()`, `read()`, `write()`, and `getMetadata()` now require their PSR-7 v2 parameter types. -- `UploadedFileInterface::moveTo()` now requires a string target path. - -Update callers to pass values of the documented type before calling these -methods: - -```php -// 2.x, no longer supported in 3.0 -$response = $response->withStatus('201'); -$uri = $uri->withPort('8080'); - -// 3.0 -$response = $response->withStatus(201); -$uri = $uri->withPort(8080); -``` - -#### Request Modification Changes - -`Utils::modifyRequest()` now validates recognized change values before applying -request modifications. Unknown change keys are still ignored. Explicit `null` -values are no longer treated as omitted recognized changes; omit the key instead. - -Recognized change values must use the documented types: - -- `method`: `string` -- `uri`: `UriInterface` -- `query`: `string` -- `version`: `string` -- `body`: `resource|string|StreamInterface|callable|\Iterator|\Stringable` -- `set_headers`: `array>` -- `remove_headers`: `array` - -When a `uri` change contains a host, the synthesized `Host` header now -includes any non-default URI port, matching the `Request` constructor. 2.x -omitted port zero and every port on schemes other than HTTP and HTTPS. - -#### Uploaded Files - -`ServerRequestInterface::withUploadedFiles()` now rejects invalid nested upload -trees. Every leaf must be an `UploadedFileInterface` instance. - -`ServerRequest::normalizeFiles()` and `ServerRequest::fromGlobals()` now reject -malformed `$_FILES` specifications earlier. Single-file specifications must -contain non-null `tmp_name`, `size`, and `error` values. Single-file and nested -file `size` values and `error` values must be non-negative PHP integers; -numeric strings are no longer cast. If PHP supplies an upload size as a string -because the byte count cannot fit in `PHP_INT_MAX`, it is rejected rather than -truncated or cast. Nested specifications must provide `tmp_name`, `size`, and -`error` as arrays. Every key in `tmp_name` must also exist in `size` and -`error`; additional metadata entries without a matching `tmp_name` entry are -ignored. When nested `name` or `type` metadata is provided, it must also be an -array. - -If your tests or adapters build `$_FILES` arrays manually, populate the full -shape or create `UploadedFile` instances directly. - -```php -// 2.x, no longer accepted in 3.0 -$files = ['file' => ['tmp_name' => '/tmp/php123', 'error' => '0']]; - -// 3.0 -$files = ['file' => ['tmp_name' => '/tmp/php123', 'size' => 123, 'error' => UPLOAD_ERR_OK]]; -``` - -For stream-backed uploads, `UploadedFile::moveTo()` now rewinds seekable streams -before copying them. If application code reads from a seekable uploaded stream -before calling `moveTo()`, 3.0 writes the full stream contents to the target -instead of only the unread suffix. Non-seekable stream-backed uploads continue to -copy from their current position because consumed bytes cannot be replayed. - -#### Parsed Body Values - -`ServerRequestInterface::withParsedBody()` now rejects values other than -`array`, `object`, or `null`. - -```php -// 2.x, no longer accepted in 3.0 -$request = $request->withParsedBody('name=value'); - -// 3.0 -$request = $request->withParsedBody(['name' => 'value']); -``` - -#### URI Host and Scheme Validation - -URI hosts containing URI delimiters, backslashes, embedded ports passed to -`withHost()`, malformed IP-literal brackets, unbracketed IPv6, or other -malformed host forms are no longer accepted. URI schemes containing whitespace -or control characters are also no longer accepted. - -If you previously passed a host and port together to `withHost()`, split them -between `withHost()` and `withPort()`: - -```php -// 2.x, no longer accepted in 3.0 -$uri = $uri->withHost('example.com:8080'); - -// 3.0 -$uri = $uri->withHost('example.com')->withPort(8080); -``` - -Normal URI strings with ports are still supported: - -```php -$uri = new Uri('https://example.com:8080/path'); -``` - -URI parsing now accepts bracketed IPv6 and IPvFuture hosts consistently with -`withHost()` for userinfo and network-path authorities such as -`http://user@[::1]/`, `//[::1]`, and `http://[v7.a:b]/`. Invalid -delimiter-free bracketed literals, such as `[gggg::1]`, are also reported with -the intact host. Bracketed literals containing authority/path delimiters, such -as `[a@b]` or `[v1.a/b]`, still reject after fallback parsing and may report the -mangled parsed host. - -Userinfo before a bracketed IP-literal host is now percent-encoded ahead of -parsing, so raw control bytes yield encoded userinfo, such as `us%01er`, -instead of a silently mutated value, and raw DEL bytes in bracketed hosts are -rejected instead of parsed as a mutated host. Consistent with registered-name -authorities, such userinfo containing invalid UTF-8 is now rejected, -percent-sequences such as `u%41` are preserved rather than decoded, and a -literal `+` is preserved rather than decoded to a space. - -Only an optional numeric port (which may be empty) and a path, query, or -fragment may follow a bracketed IP-literal host. Trailing bytes that are -neither, such as `http://[::1]:80@evil/` or `http://[::1]:80x/`, are now -rejected instead of being reparsed into a different host. - -Parsing still URL-decodes bracketed IP-literal hosts before validation -(registered-name hosts round-trip unchanged), so a literal `+` in a bracketed -IP-literal decodes to a space and is rejected: `withHost('[v1.fe80::a+en1]')` -accepts the literal while parsing `http://[v1.fe80::a+en1]/` rejects it. -Percent-encoding inside a bracketed IP-literal is now rejected during parsing as -well, since RFC 3986 IP-literals contain no percent-encoding, so -`http://[%3A%3A1]/` no longer decodes to `[::1]`; this matches `withHost()` and -`Rfc3986::isValidHost()`. - -Percent-encoded octets in a registered-name host are normalized to uppercase -hex, so a host such as `a%c3%a9b` is represented as `a%C3%A9b`. Malformed -percent sequences and percent-encoded octets that decode to a byte forbidden in -a host, such as `ex%zz` and `%2fhost`, are rejected. - -`Uri::fromParts()` accepts integer and decimal digit string ports, but floats and -other port values are no longer cast. - -Common host forms such as `localhost`, single-label hosts, underscores, Unicode -hosts, valid IPv6 literals, and normal host and port URI strings remain -supported. - -URI schemes must now match RFC 3986 syntax and begin with a letter. - -```php -// 2.x, no longer accepted in 3.0 -$uri = (new Uri())->withScheme('0'); - -// 3.0 -$uri = (new Uri())->withScheme('https'); -``` - -The stricter validation also applies when a request is created or modified from -a custom `UriInterface` implementation and its host is used to generate or -update a `Host` header. - -`ServerRequest::getUriFromGlobals()` now falls back to `SERVER_NAME`, then -`SERVER_ADDR`, then the existing default host behavior for malformed -`HTTP_HOST` values. It also rejects zero-port `HTTP_HOST` authorities and -malformed `SERVER_PORT` values when fallback authority reconstruction needs the -server port. When `REQUEST_URI` is absolute-form or CONNECT authority-form and -supplies a valid authority, that authority is used before fallback `SERVER_PORT` -validation. Origin-form, asterisk-form, missing `REQUEST_URI`, and fallback -reconstruction paths still reject malformed `SERVER_PORT` values when fallback -authority reconstruction needs the server port. - -Absolute-form `REQUEST_URI` userinfo is removed when reconstructing the URI and -request target from globals, including empty userinfo such as -`http://@example.com/`. The host after the last raw `@` remains the URI host. - -`Message::parseRequest()` now applies 3.0 authority rules when deriving a URI -from an origin-form or asterisk-form request target. Host ports with leading -zeroes are normalized for URI reconstruction, and port zero is rejected. -It also rejects duplicate `Host` field lines, including case-insensitive -duplicates. Any present raw `Host` field is validated before returning a parsed -request, even when the request target supplies the URI authority, such as -absolute-form and CONNECT requests. Valid `Host` values may still differ from -the absolute-form or CONNECT request-target authority. - -For server globals, applications that need to reject malformed inbound `Host` -headers should validate the original server parameters before calling -`getUriFromGlobals()` or inspect them afterward. - -`Message::parseRequest()` now applies the same HTTP authority validation to -absolute-form request targets. A zero or padded-zero port -(`http://example.com:0/admin`) is rejected instead of producing a request -whose synthesized `Host` header the same parser rejects elsewhere. -Absolute-form targets with no URI host, such as `file:///etc/passwd`, are -also rejected instead of producing a hostless request URI. - -Absolute-form targets whose authority contains userinfo are also rejected, -including empty userinfo such as `http://@example.com/`. RFC 9110 deprecates -userinfo in http(s) target URIs and directs recipients to treat its presence -as an error; `Host` headers and CONNECT targets already reject it. These -rules apply to absolute-form targets of every scheme. -`ServerRequest::fromGlobals()` is unchanged and continues to strip -`REQUEST_URI` userinfo. - -URI hosts now validate percent-encoding. Malformed sequences such as `ex%zz`, -and percent-encoded octets that decode to bytes the raw host grammar already -rejects (controls, space, DEL, `/`, `?`, `#`, `@`, `\`, `:`, `[`, `]`, and `%` -itself) throw `MalformedUriException` from URI parsing and -`InvalidArgumentException` from `Uri::withHost()`, and are rejected wherever -hosts are validated, including `Host` headers and request targets in -`Message::parseRequest()`. WHATWG-conformant browsers reject all of these hosts; -curl rejects them too, except encoded DEL (`%7F`), which it decodes and forwards -to name resolution. Other percent-encoded octets, including UTF-8 data such as -`a%C3%A9b`, remain accepted and are normalized to uppercase hex. - -IPv6 hosts are now canonicalized to their RFC 5952 form when a URI is -constructed, so `getHost()`, `getAuthority()`, and `(string) $uri` return the -canonical spelling and synthesized `Host` headers use it. Leading zeros are -suppressed, hexadecimal fields are lowercase, and the longest run of two or -more zero fields is collapsed with `::`. Embedded dotted-decimal notation -follows the rendering policy of BIND-derived `inet_ntop()` implementations and -curl 8.11 and newer: exactly the IPv4-mapped (`::ffff:0:0/96`) and deprecated -IPv4-compatible (`::/96`) layouts use it, while other embedded-IPv4 forms, -including translated (NAT64) well-known prefixes such as `64:ff9b::/96` -(RFC 6052), serialize in pure hexadecimal fields. - -```php -// 2.x preserved the spelling as given -(string) new Uri('http://[0:0:0:0:0:0:0:1]/'); // http://[0:0:0:0:0:0:0:1]/ - -// 3.0 -(string) new Uri('http://[0:0:0:0:0:0:0:1]/'); // http://[::1]/ -(string) new Uri('http://[::FFFF:7F00:1]/'); // http://[::ffff:127.0.0.1]/ -(string) new Uri('http://[2001:db8:3:4::192.0.2.33]/'); // http://[2001:db8:3:4::c000:221]/ -``` - -Applications that persist URI strings, for example as cache keys, will observe -the new canonical form for previously non-canonical IPv6 spellings. Equivalent -spellings of the same address now compare as same-origin in -`UriComparator::isCrossOrigin()`, which canonicalizes bracketed IPv6 literals -from any PSR-7 implementation before comparing hosts, and as equivalent in -`UriNormalizer::isEquivalent()`. The new -`UriNormalizer::CANONICALIZE_IPV6_HOST` flag, included in the default -`UriNormalizer::PRESERVING_NORMALIZATIONS`, requests the canonical host from -other PSR-7 implementations through `withHost()` and keeps the result only -when the returned `getHost()` exactly matches the requested spelling; a -nonexact result leaves that step unchanged while other selected normalizations -still apply, and setter exceptions propagate. `UriComparator` does not share -this limitation, since it canonicalizes the extracted host text directly. The -public helper `Rfc3986::canonicalizeIpv6()` exposes the underlying -transformation. - -#### Request Host Synchronization - -`Request::withUri()` now applies PSR-7 Host header synchronization before using -the same-URI no-op shortcut. When the provided URI is the same object already -attached to the request, the method may still return a new request if the URI -has a host and the current Host header is missing, empty, or stale. - -With `$preserveHost = true`, a non-empty Host header is still preserved. Missing -or empty Host headers are treated as absent and are populated from the URI when -the URI contains a host. - -```php -$request = (new Request('GET', 'http://example.com:8124/'))->withoutHeader('Host'); - -$updated = $request->withUri($request->getUri()); - -$updated->getHeaderLine('Host'); // example.com:8124 -``` - -If your application intentionally sends an empty or stale Host header, set it -after calling `withUri()` or preserve a non-empty Host header explicitly. - -`Message::toString()` now applies the same URI host and port synthesis when -serializing a request without a `Host` header. Generated `Host` lines include -non-null URI ports. - -`Message::toString()` also validates the host it synthesizes from the request -URI and throws `InvalidArgumentException` for an invalid host, closing a header- -injection vector. This affects only a custom `UriInterface` implementation that -returns an invalid host when the request has no stored `Host` header; first- -party `Uri` instances always carry a valid host and are unaffected. - -#### URI Paths and Request Targets - -`Uri::getPath()` now normalizes multiple leading slashes to one slash when -returning the path in isolation. Casting the URI to string still preserves the -original URI representation. - -```php -$uri = new Uri('http://example.org//valid///path'); - -$uri->getPath(); // /valid///path -(string) $uri; // http://example.org//valid///path -``` - -`Request::getRequestTarget()` applies the same normalization for URI-derived -origin-form request targets. - -Reference resolution and normalization (`UriResolver`, `UriNormalizer`, and -`Uri::isSameDocumentReference()`) operate on the raw path from the URI string -form and are therefore unaffected by this normalization. - -Authority-less `file` URIs with rootless paths now serialize without the `//` -authority separator: `(string) new Uri('file:foo/bar')` returns `file:foo/bar` -instead of `file://foo/bar`, which reparses with host `foo` and path `/bar`. -Rooted paths such as `file:///myfile` keep their existing serialization. - -Authority-less `file` URIs with empty paths now serialize as `file:` instead of -`file://`, which `new Uri()` itself rejects as unparseable. This affects -degenerate URIs such as `new Uri('file:')` or -`Uri::fromParts(['scheme' => 'file'])`; the serialization of every file URI -with a non-empty path is unchanged. - -`UriResolver::removeDotSegments()` now applies RFC 3986 Section 5.2.4 to `..` -segments above the root of an absolute path: excess `..` segments no longer -consume the root, so a following empty segment is preserved. Resolving `/..//a` -against `http://example.org/base` yields `http://example.org//a` where 2.x -produced `http://example.org/a`. When the resulting URI has no authority, -`UriResolver::resolve()` and `UriNormalizer::normalize()` serialize such a -`//`-leading path with a `/.` prefix (`mailto:/.//a`), like the WHATWG URL -Standard, instead of collapsing the slashes or throwing. - -#### URI Reference Relativization - -`UriResolver::relativize()` now returns a network-path reference (for example -`//example.com`) when the target URI has the same authority as the base URI -but an empty path that no other relative reference round-trips. No path -reference can express such a target, as resolving one always produces a path -of at least `/`, and an empty reference would keep the base path or inherit -the base query or fragment. The returned reference resolves back to the -exact target string, restoring the documented round-trip guarantee for these -targets. - -```php -$base = new Uri('http://example.com/a'); -$target = new Uri('http://example.com'); - -// 2.x -(string) UriResolver::relativize($base, $target); // ../ -// which resolved back to http://example.com/ - -// 3.0 -(string) UriResolver::relativize($base, $target); // //example.com -``` - -The same applies when the base URI has a query or fragment component that an -empty relative reference would otherwise inherit. When the base URI has an -empty path as well and nothing would be inherited, shorter references such -as the empty reference, `#fragment` or `?query` are still returned. - -`relativize()` also no longer returns the empty reference when the target -path equals the base path but the base has a fragment the target lacks, as -the empty reference would reintroduce that fragment. A relative-path -reference, or a query reference when the target has a query, is returned -instead. When the relative-path reference would be a single path segment -containing a colon, which would be mistaken for a scheme name, it is -prefixed with `./` (for example `./a:b`); 2.x threw a `MalformedUriException` -for such targets when the base had a query the target lacked. - -#### HTTP Start-line Parsing - -`Message::parseRequest()` and `Message::parseResponse()` now validate HTTP -start-line fields more strictly. Malformed request methods, request targets -containing whitespace or control characters, malformed protocol versions, -invalid response status codes, invalid response spacing, and reason phrases -containing invalid control characters now throw `InvalidArgumentException`. - -`Request` and `Response` constructors and mutators apply the same validation to -protocol versions, request targets, status codes, and reason phrases. If you -parse raw HTTP messages or construct messages from partially validated input, -normalize or reject invalid values before passing them to Guzzle PSR-7. - -```php -// 2.x-style tolerant input, no longer accepted in 3.0 -Message::parseRequest("GET /foo bar HTTP/1.1\r\nHost: example.com\r\n\r\n"); -new Response(200, [], null, 'HTTP/1.1'); - -// 3.0 -Message::parseRequest("GET /foo%20bar HTTP/1.1\r\nHost: example.com\r\n\r\n"); -new Response(200, [], null, '1.1'); -``` - -`ServerRequest::fromGlobals()` applies the same validation to the -`REQUEST_METHOD` and `SERVER_PROTOCOL` server values. Malformed values that 2.x -hydrated, such as the `SERVER_PROTOCOL` value `INCLUDED` that Apache sets for -server-side include subrequests, now throw `InvalidArgumentException`. Sanitize -`$_SERVER` before calling `fromGlobals()` if such environments must be -tolerated. - -`Request::withRequestTarget('')` throws `InvalidArgumentException`; omit the -explicit request target to derive `/` or the URI-derived target automatically. - -`Message::parseMessage()` no longer unfolds folded HTTP/1.0 messages whose -start line carries control bytes in the request target; such messages now -throw the obsolete-line-folding `InvalidArgumentException`. -`Message::parseRequest()` and `Message::parseResponse()` rejected these -messages either way. - -#### Query Builder Values - -`Query::build()` now rejects unsupported values instead of relying on PHP string -casts. Query values must be scalar, `null`, stringable objects, or flat arrays of -those values. - -Nested arrays, resources, and objects without `__toString()` now throw -`InvalidArgumentException`. - -```php -// Before: could produce warnings or silently mangle the value. -Query::build(['filter' => ['name' => ['value']]]); - -// After: use explicit query keys for nested query shapes. -Query::build(['filter[name]' => 'value']); -``` - -Flat arrays are still supported for repeated query parameters: - -```php -Query::build(['tag' => ['a', 'b']]); -// tag=a&tag=b -``` - -`Uri::withQueryValues()` is stricter than `Query::build()` and requires `string` -or `null` values; cast numeric and boolean query values to string. - -#### Non-string Scalar Bodies - -`Utils::streamFor()` and message bodies no longer accept `int`, `float`, or -`bool` values. Cast them to strings first. - -```php -// 2.x, no longer accepted in 3.0 -$response = new Response(200, [], 404); - -// 3.0 -$response = new Response(200, [], '404'); -``` - -#### PumpStream Source Callables - -`PumpStream` source callables must now return a non-empty string when producing -data. Returning an empty string now throws `RuntimeException` instead of being -retried indefinitely. Return `false` or `null` to signal EOF. - -If your callable used `''` to mean "temporarily no data", update it to wait -until data is available, return a non-empty string, or return `false` or `null` -when the stream is complete. - -#### Iterator-backed Streams - -`Utils::streamFor()` now validates values yielded by `Iterator` instances before -passing them to the internal `PumpStream`. Strings, integers, finite floats, -booleans, `null`, and stringable objects are converted to string chunks. -Non-finite floats, arrays, resources, and non-stringable objects now throw -`UnexpectedValueException` when the stream is read. - -Iterator exhaustion is now the only EOF signal for iterator-backed streams. -Yielding `false`, `null`, or an empty string no longer ends the stream; those -values are zero-length chunks and are skipped while the iterator advances. If -your iterator yielded `false` or `null` to stop streaming, update it to finish -iteration instead. - -Avoid iterators that yield only zero-length chunks indefinitely. Such iterators -never produce bytes and never reach EOF, so they cannot satisfy stream reads. - -```php -// Before: yielding false or null could stop an iterator-backed stream early. -$stream = Utils::streamFor(new ArrayIterator([false, 'body'])); - -// After: false and null are skipped chunks. End the iterator to signal EOF. -$stream = Utils::streamFor(new ArrayIterator(['body'])); -``` - -#### Stream Behavior Changes - -All stream implementations now reject negative `read()` lengths with -`RuntimeException`. In 2.x, some decorators passed negative lengths through, -some returned sliced data, and some behavior varied by PHP version. - -`LimitStream` now rejects negative offsets and limits below `-1`. For -non-seekable streams, offsets are tracked by the number of bytes actually -skipped. Short reads are retried until the offset is reached, EOF is reached, or -the decorated stream stops making progress. - -`StreamWrapper` now translates `RuntimeException` failures from the wrapped -PSR-7 stream into PHP stream-wrapper failure values. When using a resource from -`StreamWrapper::getResource()`, functions such as `fread()`, `fwrite()`, -`fseek()`, `feof()`, and `fstat()` may now return normal PHP failure values -instead of propagating the PSR-7 stream exception. Call the PSR-7 stream directly -if you need exception-based failure handling. - -The `StreamWrapper::stream_read()` callback no longer declares a native return -type so read failures can return `false`. The `StreamWrapper::stream_tell()` -callback no longer declares a native return type so post-seek position lookup -failures can make `fseek()` fail. - -#### Stream Mode Capabilities - -`Stream::isReadable()` and `Stream::isWritable()` now follow PHP stream mode -semantics more closely. Update modes are detected by the presence of `+`, -including valid modes such as `rt+`, `wt+`, `at+`, `xt+`, and `ct+`. - -Literal `rw` metadata is now treated as read-only, matching PHP real-file -streams. If a custom stream wrapper previously exposed `rw` for a writable -resource, open it with a valid update mode such as `r+`, `w+`, or `a+` instead. - -#### Stream Copy Behavior - -Stream sizes, offsets, high-water marks, and byte counts are now validated as -non-negative PHP integers where applicable. Operations that would overflow -`PHP_INT_MAX` throw `OverflowException` instead of silently wrapping or producing -an invalid position or size. - -`Utils::copyToStream()` now returns the number of bytes copied and throws a -`RuntimeException` when the destination stream cannot make progress, for example -a `BufferStream` at its high-water mark or a full `DroppingStream`. Its -signature changed from `: void` to `: int`, but callers that ignore the return -value do not need to change anything. In 2.x, the copy stopped silently when the -destination could not make progress. For a guaranteed full copy, use a normal -writable stream such as a file or `php://temp` stream. - -#### Stream Timeout Detection - -Timed-out stream operations now throw -`GuzzleHttp\Psr7\Exception\TimeoutException`, which extends -`RuntimeException`. `Stream::read()`, `Stream::write()`, -`AppendStream::read()`, `CachingStream::read()`, `InflateStream::read()`, -`Utils::copyToStream()`, `Utils::copyToString()`, `Utils::hash()`, -`Utils::readLine()`, and `Utils::tryGetContents()` detect PHP-style stream -timeout metadata when a read or write operation cannot make progress. Timeout -detection is best-effort; custom stream implementations that do not expose -`timed_out` metadata continue to behave as before. Previously, timed-out reads -could be treated as EOF or return partial results, and timed-out writes could be -reported as generic write failures or no-progress writes. - -#### Message Body Summaries - -`Message::bodySummary()` still summarizes seekable bodies from the beginning, -even when the body was already partially read. It now restores the body cursor to -the position it had before the summary was created. In 2.x, calling -`bodySummary()` left seekable bodies rewound to the beginning. The optional -`$truncateAt` argument now accepts `null` as an explicit request for the default -summary length, matching the behavior of omitting the argument. - -Most applications do not need to change anything. Check your code only if you -called `bodySummary()` and then read the same body while relying on -`bodySummary()` to leave the body rewound. If you need to read the body from the -beginning after summarizing it, call `Message::rewindBody()` explicitly. - -#### Stream Lifecycle - -`FnStream` now treats `close()` and successful `detach()` calls as terminal -lifecycle operations. Its configured `close` callback is invoked at most once; -repeated `close()` calls are no-ops, destruction after explicit close no longer -invokes the close callback, and closed or detached streams no longer forward -read, write, seek, metadata, or stringification callbacks. `FnStream` also -suppresses exceptions thrown by destructor-triggered close callbacks. Call -`close()` explicitly if cleanup failures must be observed. - -`CachingStream::close()` is now idempotent. Calling `close()` after `detach()` -still closes the remote stream owned by the `CachingStream`, but it no longer -closes the detached cache resource returned to the caller. Repeated `close()` -calls are no-ops. - -`InflateStream::close()` now also closes the compressed source stream that was -passed to its constructor. In 2.x, closing an `InflateStream` left the source -stream open. Call `detach()` instead of `close()` if the compressed source -stream must stay open; `close()` after `detach()` no longer closes the source. - -`PumpStream::close()` and `PumpStream::detach()` now discard internally buffered -unread bytes. If a callable or iterator source returns more bytes than a read -requested, drain the stream before closing it if you need those buffered bytes. - -#### Multipart Part Headers and Metadata - -`MultipartStream` no longer adds default `Content-Length` headers to individual -`multipart/form-data` parts. RFC 7578 section 4.8 says multipart form-data -parts must not include `Content-*` headers other than the supported multipart -part headers, so 3.0 stops generating per-part `Content-Length` by default. - -If your tests compare raw multipart payloads, remove the generated -`Content-Length` lines from expected strings: - -```text -// 2.x generated: ---boundary\r\n -Content-Disposition: form-data; name="foo"\r\n -Content-Length: 3\r\n -\r\n -bar\r\n - -// 3.0 generates: ---boundary\r\n -Content-Disposition: form-data; name="foo"\r\n -\r\n -bar\r\n -``` - -Applications can still pass an explicit `Content-Length` header in a multipart -element's `headers` array if a non-standard peer requires it: - -```php -$body = new MultipartStream([ - [ - 'name' => 'foo', - 'contents' => 'bar', - 'headers' => ['Content-Length' => '3'], - ], -]); -``` - -`MultipartStream` now escapes generated `Content-Disposition` `name` and -`filename` parameters before serializing multipart part headers. Double quotes, -carriage returns, and line feeds are encoded as `%22`, `%0D`, and `%0A`. Literal -backslashes and other characters are serialized unchanged, matching browser -multipart form submission behavior. - -```php -// Before: these values were interpolated into the generated part header. -$body = new MultipartStream([ - [ - 'name' => "field\"\r\nname", - 'filename' => "avatar\"\r\n.txt", - 'contents' => 'body', - ], -]); - -// After: the generated Content-Disposition parameters contain -// field%22%0D%0Aname and avatar%22%0D%0A.txt. -``` - -Explicit custom boundaries are now validated using RFC 2046 multipart boundary -syntax. Omit the boundary or pass `null` to continue using a generated random -boundary. - -The string `'0'` is now treated as an explicit custom boundary and is serialized -literally. In 2.x, PHP truthiness caused `new MultipartStream($elements, '0')` -to use a generated random boundary. Omit the boundary or pass `null` when you -want a generated boundary. - -Custom multipart part header names and values are also validated before -serialization. Header names must be valid HTTP tokens, and header values must be -strings without CR, LF, or other invalid control bytes. - -`MultipartStream` now preserves trailing spaces and tabs in custom multipart -part header values when serializing the body. In 2.x, the final serialized part -header line was trimmed as a side effect of removing the generated header -terminator. Normal multipart parsers treat this optional whitespace as -insignificant, but tests, signatures, or snapshots that compare raw multipart -body bytes may need updated expectations. - -#### URI Userinfo Redaction - -`Utils::redactUserInfo()` now redacts all non-empty URI userinfo, including -username-only userinfo. In 2.x, it only redacted the password portion when -userinfo contained a password delimiter. - -```php -use GuzzleHttp\Psr7\Uri; -use GuzzleHttp\Psr7\Utils; - -// 2.x: https://TOKEN@example.com -// 3.0: https://***@example.com -(string) Utils::redactUserInfo(new Uri('https://TOKEN@example.com')); - -// 2.x: https://user:***@example.com -// 3.0: https://***@example.com -(string) Utils::redactUserInfo(new Uri('https://user:pass@example.com')); -``` - -#### Header List Helpers - -The deprecated `Header::normalize()` method was removed. Use -`Header::splitList()` to split HTTP headers that are defined as comma-separated -lists. - -`Header::splitList()` now trims list elements with spaces, horizontal tabs, -carriage returns, and line feeds. 2.x also trimmed null bytes and vertical -tabs. Validated header values cannot contain those bytes, so this only affects -strings passed to `Header::splitList()` directly. - -#### Non-instantiable Utility Classes - -Static utility and constant classes such as `Header`, `Message`, `MimeType`, -`Query`, and `Utils` now have private constructors. Replace any accidental -instantiation with static method calls or constant access. - -#### Native PHP Serialization of Streams - -Guzzle PSR-7 stream implementations no longer support native PHP `serialize()` -or `unserialize()`. Persist stream contents explicitly and recreate streams with -`Utils::streamFor()` when needed. - -#### URI Normalization of Userinfo and Host - -`UriNormalizer::CAPITALIZE_PERCENT_ENCODING` and -`UriNormalizer::DECODE_UNRESERVED_CHARACTERS` now also apply to the userinfo and -host components. In 2.x, these normalizations only rewrote the path, query, and -fragment. - -Since the host is case-insensitive and PSR-7 requires it to be lowercase, octets -decoded in the host are lowercased. Reserved percent-encoded octets such as -`%3A` are never decoded, so component boundaries cannot change, and these two -flags never modify bracketed IP-literal hosts, which only the separate -`UriNormalizer::CANONICALIZE_IPV6_HOST` normalization may canonicalize. Both -flags are part of `UriNormalizer::PRESERVING_NORMALIZATIONS`, so the output of -`UriNormalizer::normalize()` and the result of `UriNormalizer::isEquivalent()` -can change for URIs whose userinfo or host contains percent-encoded octets. -Custom `UriInterface` implementations now receive `withUserInfo()` or -`withHost()` calls from the normalizer when a normalization changes those -components; unchanged components are never rewritten. The rewrite is kept only -when the value returned by the implementation matches the normalized form, and -a userinfo with an empty user segment is never rewritten. If a setter returns a -different representation, that rewrite is discarded, while other selected -normalizations still apply, and setter exceptions propagate. No percent-encoding -normalization is applied to a component with malformed percent syntax, such as a -`%` not followed by two hexadecimal digits. - -```php -use GuzzleHttp\Psr7\Uri; -use GuzzleHttp\Psr7\UriNormalizer; - -// 2.x: http://%75ser@ex%61mple.com/ -// 3.0: http://user@example.com/ -(string) UriNormalizer::normalize(new Uri('http://%75ser@ex%61mple.com/')); -``` - -#### URI Ports and Authority Handling - -Several 3.0 changes affect how URI ports are accepted, validated, and rendered. -Each is described in its own section above: - -- `UriInterface::withPort()` now requires `int|null`; see "Native PSR-7 - Parameter Types". -- `Uri::fromParts()` validates ports instead of casting them, and `withHost()` - rejects embedded `host:port` values; see "URI Host and Scheme Validation". -- A generic `Uri` can represent ports 0 through 65535. Inbound HTTP authority - parsing is stricter: `Message::parseRequest()` rejects zero-valued ports but - accepts nonzero leading-zero ports, normalizing the reconstructed URI while - preserving the raw `Host` or request-target text; see "HTTP Start-line - Parsing" and "URI Host and Scheme Validation". -- Server globals reject a zero-valued `HTTP_HOST` and validate `SERVER_PORT` - when fallback authority reconstruction needs it. A recognized absolute-form - or CONNECT `REQUEST_URI` authority takes precedence and can still produce a - URI with port zero; see "URI Host and Scheme Validation". -- Synthesized `Host` headers now include any non-default URI port; see "Request - Modification Changes" and "Request Host Synchronization". - -`Uri` now knows the default ports of the `ws` and `wss` schemes, 80 and 443 per -RFC 6455. An explicit default port on a `ws` or `wss` URI is removed when the -URI is constructed or modified, `Uri::isDefaultPort()` returns `true` for such -URIs, and `UriNormalizer::normalize()` with the `REMOVE_DEFAULT_PORT` flag -removes the port from other `UriInterface` implementations as well. In 2.x, -these ports were preserved. - -```php -use GuzzleHttp\Psr7\Uri; - -// 2.x: ws://example.com:80/chat -// 3.0: ws://example.com/chat -(string) new Uri('ws://example.com:80/chat'); - -// 2.x: 443 -// 3.0: null -(new Uri('wss://example.com:443'))->getPort(); -``` - -Because a native `Uri` never carries a default `ws` or `wss` port, the `Host` -header synchronized from such a request URI omits the port. `Request` and -`Message` `Host` synthesis and `Utils::modifyRequest()` still append an explicit -default port that a `ws` or `wss` URI from another `UriInterface` implementation -reports. - -`UriComparator::isCrossOrigin()` now applies these default ports when comparing -effective ports, so two `ws` or `wss` URIs that differ only by an explicit -default port, such as `ws://example.com/` and `ws://example.com:80/`, are -same-origin no matter which `UriInterface` implementation supplies them. In 2.x, -such pairs were considered cross-origin. Schemes other than `http`, `https`, -`ws`, and `wss` still receive no implicit default port. - -#### Sensitive Stack Trace Arguments - -Credential-bearing URI, server-global, Authorization-header, and cookie -arguments are marked with `#[\SensitiveParameter]`. PHP 8.2 and later replace -those arguments in stack traces with `SensitiveParameterValue`. PHP 7.4 through -8.1 do not redact trace arguments. - -This does not redact logs, exception messages, object properties, wire traffic, -captured variables, return values, user callbacks, or the separate executing -object in an explicit backtrace. - -1.x to 2.0 ----------- - -Guzzle PSR-7 2.0 is a major release that removes deprecated APIs, raises the -minimum PHP version, and adds PHP 7 parameter and return types. Applications that -only depend on PSR-7 interfaces should usually need small changes. Applications -that call helper functions, extend package classes, or pass invalid argument -types need closer review. - -#### PHP Version and Dependencies - -Guzzle PSR-7 2.0 requires PHP `^7.2.5 || ^8.0`. Guzzle PSR-7 1.x supported PHP -`>=5.4.0`. - -Composer dependency changes that can affect upgrades: - -- `ralouphie/getallheaders` v2 support was dropped; 2.0 requires `^3.0`. -- `psr/http-factory:^1.0` is required because 2.0 ships PSR-17 factories through `GuzzleHttp\Psr7\HttpFactory`. - -#### PHP 7 Type Hints and Return Types - -Type hints and return types were added wherever possible. Please make sure: - -- You pass values of the documented type when calling methods and functions. -- Classes that extend Guzzle PSR-7 classes update any overridden method signatures to remain compatible. -- Code that expected package-specific `InvalidArgumentException` exceptions for invalid argument types may now receive PHP `TypeError` exceptions instead. - -Common examples include passing a real integer status code to `Response::__construct()` and passing a string method to `Request::__construct()`. - -#### Removed Function API - -The static API was introduced in 1.7.0 to mitigate problems with functions -conflicting between global and local copies of the package. The function API was -removed in 2.0.0, along with the Composer `files` autoload entry that loaded -`src/functions_include.php`. - -Replace namespaced function calls with the corresponding static methods in the -`GuzzleHttp\Psr7` namespace: - -```php -// Before: -use function GuzzleHttp\Psr7\stream_for; - -$stream = stream_for('body'); - -// After: -use GuzzleHttp\Psr7\Utils; - -$stream = Utils::streamFor('body'); -``` - -| Original Function | Replacement Method | -|-------------------|--------------------| -| `str` | `Message::toString` | -| `uri_for` | `Utils::uriFor` | -| `stream_for` | `Utils::streamFor` | -| `parse_header` | `Header::parse` | -| `normalize_header` | `Header::normalize` | -| `modify_request` | `Utils::modifyRequest` | -| `rewind_body` | `Message::rewindBody` | -| `try_fopen` | `Utils::tryFopen` | -| `copy_to_string` | `Utils::copyToString` | -| `copy_to_stream` | `Utils::copyToStream` | -| `hash` | `Utils::hash` | -| `readline` | `Utils::readLine` | -| `parse_request` | `Message::parseRequest` | -| `parse_response` | `Message::parseResponse` | -| `parse_query` | `Query::parse` | -| `build_query` | `Query::build` | -| `mimetype_from_filename` | `MimeType::fromFilename` | -| `mimetype_from_extension` | `MimeType::fromExtension` | -| `_parse_message` | `Message::parseMessage` | -| `_parse_request_uri` | `Message::parseRequestUri` | -| `get_message_body_summary` | `Message::bodySummary` | -| `_caseless_remove` | `Utils::caselessRemove` | - -`Header::normalize()` remains the direct 2.0 replacement for -`normalize_header()`. In newer 2.x versions, prefer `Header::splitList()` for -new code. - -#### Deprecated URI Methods Removed - -The deprecated `Uri::resolve()` and `Uri::removeDotSegments()` methods were -removed. Use `UriResolver` instead. - -```php -// Before: -$resolved = Uri::resolve($base, '../path'); -$path = Uri::removeDotSegments('/a/../b'); - -// After: -use GuzzleHttp\Psr7\UriResolver; -use GuzzleHttp\Psr7\Utils; - -$resolved = UriResolver::resolve($base, Utils::uriFor('../path')); -$path = UriResolver::removeDotSegments('/a/../b'); -``` - -#### Stricter URI Validation - -Guzzle PSR-7 1.x automatically fixed a URI that combined an authority with a -relative path by prepending `/` to the path. That deprecated behavior was removed -in 2.0. Such URIs now throw `InvalidArgumentException`. - -```php -// Before: automatically converted to //example.com/foo. -$uri = (new Uri())->withHost('example.com')->withPath('foo'); - -// After: make the absolute path explicit. -$uri = (new Uri())->withHost('example.com')->withPath('/foo'); -``` - -#### Header Validation - -Header names are validated more strictly according to RFC 7230 token syntax. -Names containing whitespace, `/`, `(`, `)`, `\\`, or other invalid characters are -rejected. - -If you construct messages from untrusted or non-standard input, normalize or -reject invalid header names before constructing `Request`, `Response`, or -`ServerRequest` instances. - -#### Query String Boolean Serialization - -`Query::build()` now serializes booleans as `1` and `0`, matching -`http_build_query()` behavior. - -```php -Query::build(['enabled' => true, 'disabled' => false]); -// enabled=1&disabled=0 -``` - -In current 2.x versions, pass `false` as the third argument if you need textual -boolean values: - -```php -Query::build(['enabled' => true, 'disabled' => false], PHP_QUERY_RFC3986, false); -// enabled=true&disabled=false -``` - -#### Final Stream and Decorator Classes - -Several classes that were annotated with `@final` in 1.x are declared `final` in -2.0: - -- `AppendStream` -- `BufferStream` -- `CachingStream` -- `DroppingStream` -- `FnStream` -- `InflateStream` -- `LazyOpenStream` -- `LimitStream` -- `MultipartStream` -- `NoSeekStream` -- `PumpStream` -- `StreamWrapper` - -If your code extends one of these classes, replace inheritance with composition. -For custom streams, implement `Psr\Http\Message\StreamInterface` directly or use -`GuzzleHttp\Psr7\StreamDecoratorTrait` in your own class. - -`Request`, `Response`, `ServerRequest`, `Stream`, `UploadedFile`, and `Uri` remain -extendable in 2.0, but overridden methods must have compatible signatures. - -#### Public Constants and Internal Details - -Some constants that were public in 1.x are implementation details in 2.0: - -- `Stream::READABLE_MODES` -- `Stream::WRITABLE_MODES` -- `Uri::HTTP_DEFAULT_HOST` - -If your code used these constants, define application-specific constants instead -of depending on package internals. - -#### Stream Behavior Changes - -`BufferStream::write()` returns `0` instead of `false` when the buffer exceeds -its high-water mark. This keeps the method compatible with the `int` return type -from `StreamInterface::write()`. - -Several stream `__toString()` implementations now catch `Throwable`. On PHP 7.4 -and newer, exceptions thrown during stringification are rethrown. Avoid relying -on `(string) $stream` to hide read failures; call `getContents()` or `read()` and -handle exceptions when failures are possible. - -#### PSR-17 Factories - -Guzzle PSR-7 2.0 adds `GuzzleHttp\Psr7\HttpFactory`, an implementation of the -PSR-17 factory interfaces from `psr/http-factory`. This is additive, but it is -the reason for the new required dependency. - -For the full 2.0 diff, see -https://github.com/guzzle/psr7/compare/1.8.1...2.0.0. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/composer.json deleted file mode 100644 index 135eba57f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/composer.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "guzzlehttp/psr7", - "description": "PSR-7 message implementation that also provides common utility methods", - "license": "MIT", - "keywords": [ - "request", - "response", - "message", - "stream", - "http", - "uri", - "url", - "psr-7" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "require": { - "php": "^7.4 || ^8.0", - "psr/http-factory": "^1.1", - "psr/http-message": "^2.0", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php82": "^1.27" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "1.1.0", - "jshttp/mime-db": "1.54.0.1", - "php-http/psr7-integration-tests": "^1.5.1", - "phpunit/phpunit": "^9.6.34" - }, - "provide": { - "psr/http-factory-implementation": "1.1", - "psr/http-message-implementation": "2.0" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "repositories": [ - { - "type": "package", - "package": { - "name": "jshttp/mime-db", - "version": "1.54.0.1", - "dist": { - "type": "zip", - "url": "https://codeload.github.com/jshttp/mime-db/zip/0a9fd0bfbc87a725ff638495839114e7807b7177" - } - } - } - ], - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "GuzzleHttp\\Tests\\Psr7\\": "tests/" - } - }, - "config": { - "allow-plugins": { - "bamarni/composer-bin-plugin": true - }, - "preferred-install": "dist", - "sort-packages": true - }, - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/diagnostic-values.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/diagnostic-values.md deleted file mode 100644 index 36f99a9f7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/diagnostic-values.md +++ /dev/null @@ -1,30 +0,0 @@ -# Diagnostic Values - -## `GuzzleHttp\Psr7\DiagnosticValue::escape` - -`public static function escape(string $value): string` - -Escapes C0, DEL, and C1 controls as uppercase `\xNN` sequences. - -ASCII bytes from 0x20 through 0x7E and valid UTF-8 characters outside those -control ranges remain unchanged. If the input is malformed UTF-8 or PCRE cannot -process it, every byte outside printable ASCII is escaped. Valid C1 characters -are rendered as `\xNN` using their Unicode code points. During bytewise -fallback, each original byte outside printable ASCII is rendered in the same -form. The result is diagnostic text, not a reversible encoding. - -This does not encode values for HTML, JSON, shells, terminals, URLs, or protocol -fields. - -Use this helper when including an untrusted value in diagnostic text: - -```php -use GuzzleHttp\Psr7\DiagnosticValue; - -$value = "bad\nvalue"; -$message = sprintf('Invalid value: %s', DiagnosticValue::escape($value)); -// Invalid value: bad\x0Avalue -``` - -Applications must still encode the completed diagnostic for its final output -context, such as HTML or JSON. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/header-and-query-helpers.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/header-and-query-helpers.md deleted file mode 100644 index f14371213..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/header-and-query-helpers.md +++ /dev/null @@ -1,107 +0,0 @@ -# Header and Query Helpers - -This page covers helper methods for parsing structured header values, splitting -list headers, and parsing or building query strings. For basic message header -behavior, see [PSR-7 Messages](psr-7-messages.md). - -## `GuzzleHttp\Psr7\Header::parse` - -`public static function parse(string|array $header): array` - -Parses semicolon-separated header parameters into associative arrays, one per -comma-separated header value. Parameters without a value are appended as values -under integer keys. - -## `GuzzleHttp\Psr7\Header::splitList` - -`public static function splitList(string|string[] $header): string[]` - -Splits an HTTP header defined to contain a comma-separated list into each -individual value. Empty values are removed: - -```php -$knownEtags = Header::splitList($request->getHeader('if-none-match')); -``` - -Example headers include `accept`, `cache-control`, and `if-none-match`. - -This method must not be used to parse headers that are not defined as a list, -such as `user-agent` or `set-cookie`. - -## `GuzzleHttp\Psr7\Query::parse` - -`public static function parse(string $str, int|bool $urlEncoding = true): array` - -Parse a query string into an associative array. - -If multiple values are found for the same key, the value of that key-value pair -becomes an array. This function does not parse nested PHP style arrays into an -associative array. For example, `foo[a]=1&foo[b]=2` will be parsed into -`['foo[a]' => '1', 'foo[b]' => '2']`. - -## `GuzzleHttp\Psr7\Query::build` - -`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. - -This function can use the return value of `parse()` to build a query string. -This function does not modify the provided keys when an array is encountered, -unlike `http_build_query()`. - -## `GuzzleHttp\Psr7\Utils::asciiToLower` - -`public static function asciiToLower(string $string): string` - -Converts ASCII uppercase letters in a string to lowercase. - -Unlike `strtolower()`, which honors `LC_CTYPE` before PHP 8.2, the conversion is -locale-independent and leaves every non-ASCII byte unchanged, as HTTP protocol -elements require. - -## `GuzzleHttp\Psr7\Utils::asciiToUpper` - -`public static function asciiToUpper(string $string): string` - -Converts ASCII lowercase letters in a string to uppercase. - -Unlike `strtoupper()`, which honors `LC_CTYPE` before PHP 8.2, the conversion is -locale-independent and leaves every non-ASCII byte unchanged, as HTTP protocol -elements require. - -## `GuzzleHttp\Psr7\Utils::asciiUcFirst` - -`public static function asciiUcFirst(string $string): string` - -Converts the first character of a string to uppercase when it is an ASCII -lowercase letter. - -Unlike `ucfirst()`, which honors `LC_CTYPE` before PHP 8.2, the conversion is -locale-independent and leaves every non-ASCII byte unchanged, as HTTP protocol -elements require. - -## `GuzzleHttp\Psr7\Utils::caselessContains` - -`public static function caselessContains(string $haystack, string $needle): bool` - -Checks whether the haystack contains the needle, comparing ASCII letters -case-insensitively and without locale sensitivity. - -## `GuzzleHttp\Psr7\Utils::caselessEquals` - -`public static function caselessEquals(string $left, string $right): bool` - -Checks whether two strings are equal, comparing ASCII letters case-insensitively -and without locale sensitivity. - -## `GuzzleHttp\Psr7\Utils::caselessRemove` - -`public static function caselessRemove(array $keys, array $data): array` - -Remove the items given by the keys from the data, case-insensitively. - -## Related - -- [PSR-7 Messages](psr-7-messages.md) -- [Message Helpers](message-helpers.md) -- [URI Helpers](uri-helpers.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/message-helpers.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/message-helpers.md deleted file mode 100644 index b560ce021..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/message-helpers.md +++ /dev/null @@ -1,112 +0,0 @@ -# Message Helpers - -This page covers static helper methods for converting, parsing, summarizing, -rewinding, and cloning PSR-7 messages. For conceptual request and response -behavior, start with [PSR-7 Messages](psr-7-messages.md). - -## `GuzzleHttp\Psr7\Message::toString` - -`public static function toString(MessageInterface $message): string` - -Returns the string representation of an HTTP message. - -```php -$request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com'); -echo GuzzleHttp\Psr7\Message::toString($request); -``` - -## `GuzzleHttp\Psr7\Message::bodySummary` - -`public static function bodySummary(MessageInterface $message, ?int $truncateAt = null): string|null` - -Get a short summary of the message body. - -Will return `null` if the response is not printable. - -Reads seekable bodies from the beginning and restores the original cursor -position before returning. Pass `null` for `$truncateAt` to use the default -summary length. - -## `GuzzleHttp\Psr7\Message::rewindBody` - -`public static function rewindBody(MessageInterface $message): void` - -Attempts to rewind a message body and throws an exception on failure. - -The body of the message will only be rewound if a call to `tell()` returns a -value other than `0`. - -## `GuzzleHttp\Psr7\Message::parseMessage` - -`public static function parseMessage(string $message): array` - -Parses an HTTP message into an associative array. - -The array contains the `start-line` key containing the start line of the -message, `headers` key containing an associative array of header array values, -and a `body` key containing the body of the message. - -## `GuzzleHttp\Psr7\Message::parseRequestUri` - -`public static function parseRequestUri(string $path, array $headers): string` - -Constructs a URI for an HTTP request message. - -The URI is composed from the start-line path and the `Host` header, using -`https` when the host's port is `443` and `http` otherwise. Without a `Host` -header, only the path is returned, with extra leading slashes collapsed so an -origin-form target cannot be parsed as a network-path reference with its own -authority. An `InvalidArgumentException` is thrown when the `Host` header is -invalid. - -## `GuzzleHttp\Psr7\Message::parseRequest` - -`public static function parseRequest(string $message): RequestInterface` - -Parses a request message string into a request object. - -The request-target must be in origin form, absolute form (without a userinfo -component), authority form (`CONNECT`), or asterisk form (`OPTIONS`), and any -`Host` header must be a single valid value; otherwise an -`InvalidArgumentException` is thrown. Non-origin-form targets are preserved on -the returned request via `withRequestTarget()`. - -## `GuzzleHttp\Psr7\Message::parseResponse` - -`public static function parseResponse(string $message): ResponseInterface` - -Parses a response message string into a response object. - -## `GuzzleHttp\Psr7\Utils::modifyRequest` - -`public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface` - -Clone and modify a request with the given changes. - -This method is useful for reducing the number of clones needed to mutate a -message. - -The changes can be one of: - -- method: (string) Changes the HTTP method. -- set_headers: (array) Sets the given headers. Values must be strings or - non-empty arrays of strings. -- remove_headers: (array) Remove the given headers. Values may be strings or - integers. -- body: (mixed) Sets the given body. Present non-null values are converted with - `GuzzleHttp\Psr7\Utils::streamFor()`, including resources, streams, iterators, - callable arrays, closures, invokable objects, and stringable objects. String - inputs remain literal bodies. -- uri: (UriInterface) Set the URI. When the URI contains a host, the Host header - is updated from it, and combining this with an explicit Host entry in - set_headers throws an InvalidArgumentException. Apply an intentional Host - override separately with withHeader() afterwards. -- query: (string) Set the query string value of the URI. -- version: (string) Set the protocol version. - -## Related - -- [PSR-7 Messages](psr-7-messages.md) -- [Header and Query Helpers](header-and-query-helpers.md) -- [Stream Helpers](stream-helpers.md) -- [URI and MIME Helpers](uri-and-mime-helpers.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/psr-17-factories.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/psr-17-factories.md deleted file mode 100644 index 463e77610..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/psr-17-factories.md +++ /dev/null @@ -1,33 +0,0 @@ -# PSR-17 Factories - -This page explains `GuzzleHttp\Psr7\HttpFactory`, the PSR-17 factory implementation provided by this package. Use it when code expects PSR-17 factory interfaces and you want factories that create Guzzle PSR-7 messages, streams, uploaded files, and URIs. - -## `GuzzleHttp\Psr7\HttpFactory` - -`GuzzleHttp\Psr7\HttpFactory` implements all PSR-17 factory interfaces: `RequestFactoryInterface`, `ResponseFactoryInterface`, `ServerRequestFactoryInterface`, `StreamFactoryInterface`, `UploadedFileFactoryInterface`, and `UriFactoryInterface`. - -```php -use GuzzleHttp\Psr7\HttpFactory; - -$factory = new HttpFactory(); - -$request = $factory->createRequest('GET', 'https://example.com'); -$response = $factory->createResponse(200); -$serverRequest = $factory->createServerRequest('POST', '/submit', ['REMOTE_ADDR' => '192.0.2.1']); -$stream = $factory->createStream('body'); -$uri = $factory->createUri('https://example.com/path'); -``` - -It also creates streams from files and resources, and uploaded files from streams. - -```php -$stream = $factory->createStreamFromFile('/path/to/file.txt', 'r'); -$upload = $factory->createUploadedFile($stream, $stream->getSize(), UPLOAD_ERR_OK, 'file.txt', 'text/plain'); -``` - -## Related - -- [PSR-7 Messages](psr-7-messages.md) -- [Streams and Decorators](streams-and-decorators.md) -- [URI Helpers](uri-helpers.md) -- [Message Helpers](message-helpers.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/psr-7-messages.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/psr-7-messages.md deleted file mode 100644 index 1dd4cc274..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/psr-7-messages.md +++ /dev/null @@ -1,402 +0,0 @@ -# PSR-7 Messages - -This page covers the PSR-7 message objects provided by this package: requests, responses, server requests, uploaded files, and the message-specific header, URI, and body APIs. Use these objects when you need HTTP messages that can move between Guzzle, PSR-18 clients, PSR-15 middleware, and other PSR-7 compatible libraries. - -HTTP requests and responses are both messages. A message has a start line, headers, and an optional body stream. Message and URI objects are immutable; methods named `with*()` return changed copies. Body streams are mutable handles, so reads and writes can change their cursor or contents. For body details, see [Streams and Decorators](streams-and-decorators.md). For URI helpers, see [URI Helpers](uri-helpers.md). - -## Creating Requests - -You can create a request with `GuzzleHttp\Psr7\Request`. - -```php -use GuzzleHttp\Psr7\Request; - -$request = new Request('GET', 'https://example.com/users/123'); - -// You can provide optional headers and a body. -$headers = ['Accept' => 'application/json']; -$body = 'request body'; -$request = new Request('PUT', 'https://example.com/users/123', $headers, $body); -``` - -## Creating Responses - -You can create a response with `GuzzleHttp\Psr7\Response`. - -```php -use GuzzleHttp\Psr7\Response; - -// The constructor requires no arguments. -$response = new Response(); -echo $response->getStatusCode(); -// 200 -echo $response->getProtocolVersion(); -// 1.1 - -// You can provide a status, headers, body, and protocol version. -$response = new Response(200, ['Content-Type' => 'application/json'], '{"ok":true}', '1.1'); -``` - -## Creating Server Requests - -Server requests represent incoming HTTP requests on the server side. They include the normal request method, URI, headers, and body, plus server parameters, cookies, query parameters, parsed body data, attributes, and uploaded files. - -```php -use GuzzleHttp\Psr7\ServerRequest; - -$request = new ServerRequest('POST', 'https://example.com/form', [], 'name=Guzzle', '1.1', [ - 'REMOTE_ADDR' => '192.0.2.1', -]); - -$request = $request - ->withCookieParams(['session' => 'abc']) - ->withQueryParams(['page' => '1']) - ->withParsedBody(['name' => 'Guzzle']) - ->withAttribute('route', 'profile'); - -echo $request->getServerParams()['REMOTE_ADDR']; -echo $request->getCookieParams()['session']; -echo $request->getQueryParams()['page']; -echo $request->getParsedBody()['name']; -echo $request->getAttribute('route'); -``` - -Use `ServerRequest::fromGlobals()` to create a server request from PHP superglobals. It reads `$_SERVER`, `$_GET`, `$_POST`, `$_COOKIE`, and `$_FILES`, and attempts to include request headers when available. - -```php -use GuzzleHttp\Psr7\ServerRequest; - -$request = ServerRequest::fromGlobals(); -``` - -Use `ServerRequest::getUriFromGlobals()` when you only need the URI derived from `$_SERVER`. - -```php -use GuzzleHttp\Psr7\ServerRequest; - -$uri = ServerRequest::getUriFromGlobals(); -``` - -For URI construction and normalization helpers, see [URI Helpers](uri-helpers.md). - -## Requests - -```php -use GuzzleHttp\Psr7\Request; - -$request = new Request('GET', 'https://example.com/users/123', [ - 'Accept' => 'application/json', -]); - -echo $request->getMethod(); -echo $request->getUri(); -``` - -PSR-7 messages are immutable. Methods such as `withHeader()` and `withUri()` return a modified copy. - -```php -$jsonRequest = $request->withHeader('Accept', 'application/json'); -``` - -## Responses - -```php -use GuzzleHttp\Psr7\Response; - -$response = new Response(200, ['Content-Type' => 'application/json'], '{"ok":true}'); - -echo $response->getStatusCode(); -echo $response->getHeaderLine('Content-Type'); -echo $response->getBody(); -``` - -## URIs - -```php -use GuzzleHttp\Psr7\Uri; - -$uri = new Uri('https://example.com/users?active=1'); - -echo $uri->getHost(); -echo $uri->getQuery(); -``` - -For URI-specific helper methods, see [URI Helpers](uri-helpers.md). - -## Headers - -Both request and response messages contain HTTP headers. - -### Accessing Headers - -You can check if a request or response has a specific header using `hasHeader()`. - -```php -use GuzzleHttp\Psr7\Request; - -$request = new Request('GET', '/', ['X-Foo' => 'bar']); - -if ($request->hasHeader('X-Foo')) { - echo 'It is there'; -} -``` - -Retrieve all header values as an array of strings with `getHeader()`. - -```php -$request->getHeader('X-Foo'); -// ['bar'] - -// Missing headers return an empty array. -$request->getHeader('X-Bar'); -// [] -``` - -Iterate over the headers of a message with `getHeaders()`. - -```php -foreach ($request->getHeaders() as $name => $values) { - echo $name . ': ' . implode(', ', $values) . "\r\n"; -} -``` - -### Complex Headers - -Some headers contain additional key-value pair information. For example, `Link` headers contain a link and additional parameters: - -```http -; rel="front"; type="image/jpeg" -``` - -Use `GuzzleHttp\Psr7\Header::parse()` to parse these headers. - -```php -use GuzzleHttp\Psr7\Header; -use GuzzleHttp\Psr7\Request; - -$request = new Request('GET', '/', [ - 'Link' => '; rel="front"; type="image/jpeg"', -]); - -$parsed = Header::parse($request->getHeader('Link')); -var_export($parsed); -``` - -This outputs: - -```php -array ( - 0 => - array ( - 0 => '', - 'rel' => 'front', - 'type' => 'image/jpeg', - ), -) -``` - -The result contains key-value pairs. Header values that have no key are indexed numerically, while header parts that form a key-value pair are added with their parameter name. - -## Body - -Request and response bodies are `Psr\Http\Message\StreamInterface` instances. Streams are used for both uploading data and downloading data. - -```php -use GuzzleHttp\Psr7\Response; - -$response = new Response(200, [], 'response body'); - -echo $response->getBody(); -// response body -``` - -The body can be cast to a string, or you can read bytes from the stream as needed. - -```php -$body = $response->getBody(); - -echo $body->read(4); -$body->seek(0); -echo $body->getContents(); -``` - -For more stream creation and decorator examples, see [Streams and Decorators](streams-and-decorators.md). - -## Uploaded Files - -Uploaded files are represented by `Psr\Http\Message\UploadedFileInterface` instances. This package provides `GuzzleHttp\Psr7\UploadedFile`, which can wrap a local file path, PHP stream resource, or PSR-7 stream. - -```php -use GuzzleHttp\Psr7\UploadedFile; -use GuzzleHttp\Psr7\Utils; - -$stream = Utils::streamFor('file contents'); -$upload = new UploadedFile($stream, $stream->getSize(), UPLOAD_ERR_OK, 'example.txt', 'text/plain'); - -echo $upload->getClientFilename(); -echo $upload->getClientMediaType(); -echo $upload->getSize(); -``` - -Call `getStream()` to read the uploaded content, or `moveTo()` to move or copy it to a target path. After `moveTo()` succeeds, `isMoved()` returns `true`, and calls that need the active upload stream will throw. - -```php -$body = $upload->getStream(); -echo $body->getContents(); - -$upload->moveTo('/path/to/target.txt'); -var_export($upload->isMoved()); -// true -``` - -If the upload error code is not `UPLOAD_ERR_OK`, the object still exposes `getError()`, `getSize()`, `getClientFilename()`, and `getClientMediaType()`, but `getStream()` and `moveTo()` throw because no successful upload content is available. - -`ServerRequest::normalizeFiles()` converts a `$_FILES`-style array into a tree of uploaded file instances. It accepts simple file specs, nested PHP `$_FILES` shapes, existing `UploadedFileInterface` instances, and nested arrays of uploaded files. - -```php -use GuzzleHttp\Psr7\ServerRequest; - -$files = ServerRequest::normalizeFiles([ - 'avatar' => [ - 'tmp_name' => '/tmp/php123', - 'size' => 1024, - 'error' => UPLOAD_ERR_OK, - 'name' => 'avatar.png', - 'type' => 'image/png', - ], - 'photos' => [ - 'tmp_name' => [ - 'first' => '/tmp/php456', - ], - 'size' => [ - 'first' => 2048, - ], - 'error' => [ - 'first' => UPLOAD_ERR_OK, - ], - 'name' => [ - 'first' => 'photo.jpg', - ], - 'type' => [ - 'first' => 'image/jpeg', - ], - ], -]); - -$request = (new ServerRequest('POST', '/upload'))->withUploadedFiles($files); -``` - -## HTTP Method Casing - -HTTP method names are case-sensitive in PSR-7. Requests created explicitly with -`Request`, `ServerRequest`, `withMethod()`, `Message::parseRequest()`, or the -PSR-17 factories preserve the method string as provided. `ServerRequest::fromGlobals()` -normalizes `$_SERVER['REQUEST_METHOD']` to uppercase for compatibility when -hydrating requests from PHP server globals. - -## Request Methods - -When creating a request, provide the HTTP method you want to perform. You can specify any method, including custom methods that are not part of RFC 9110. - -```php -use GuzzleHttp\Psr7\Request; - -$request = new Request('MOVE', 'https://example.com/resource'); - -echo $request->getMethod(); -// MOVE -``` - -## Request URI - -The request URI is represented by a `Psr\Http\Message\UriInterface` object. This package provides an implementation through `GuzzleHttp\Psr7\Uri`. - -When creating a request, you can provide the URI as a string or as a `UriInterface` instance. - -```php -use GuzzleHttp\Psr7\Request; -use GuzzleHttp\Psr7\Uri; - -$request = new Request('GET', new Uri('https://example.com/users?id=123')); -``` - -### Scheme - -The [scheme](https://datatracker.ietf.org/doc/html/rfc3986#section-3.1) specifies the protocol. For HTTP requests, this is usually `http` or `https`. - -```php -$request = new Request('GET', 'https://example.com'); -echo $request->getUri()->getScheme(); -// https -``` - -### Host - -The host is accessible from the URI and is also represented by the `Host` header. - -```php -$request = new Request('GET', 'https://example.com'); -echo $request->getUri()->getHost(); -// example.com -echo $request->getHeaderLine('Host'); -// example.com -``` - -### Port - -No port is necessary for the default `http` and `https` ports. - -```php -$request = new Request('GET', 'https://example.com:8443'); -echo $request->getUri()->getPort(); -// 8443 -``` - -### Path - -The request path is accessible through the URI object. - -```php -$request = new Request('GET', 'https://example.com/users/123'); -echo $request->getUri()->getPath(); -// /users/123 -``` - -Characters that are not allowed in a URI path are percent-encoded according to [RFC 3986 section 3.3](https://datatracker.ietf.org/doc/html/rfc3986#section-3.3). - -### Query String - -The query string is accessible through the URI object. - -```php -$request = new Request('GET', 'https://example.com/?foo=bar'); -echo $request->getUri()->getQuery(); -// foo=bar -``` - -Characters that are not allowed in a URI query are percent-encoded according to [RFC 3986 section 3.4](https://datatracker.ietf.org/doc/html/rfc3986#section-3.4). - -## Response Status - -Responses expose the status code, reason phrase, and protocol version. - -```php -use GuzzleHttp\Psr7\Response; - -$response = new Response(200, [], 'OK'); - -echo $response->getStatusCode(); -// 200 -echo $response->getReasonPhrase(); -// OK -echo $response->getProtocolVersion(); -// 1.1 -``` - -## Related - -- [Streams and Decorators](streams-and-decorators.md) -- [URI Helpers](uri-helpers.md) -- [Message Helpers](message-helpers.md) -- [Header and Query Helpers](header-and-query-helpers.md) -- [PSR-17 Factories](psr-17-factories.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/stream-helpers.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/stream-helpers.md deleted file mode 100644 index 7a2c43b0b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/stream-helpers.md +++ /dev/null @@ -1,134 +0,0 @@ -# Stream Helpers - -This page covers `GuzzleHttp\Psr7\Utils` helper methods for creating, copying, -hashing, reading, and safely opening PSR-7 streams. For stream implementations -and decorators, see [Streams and Decorators](streams-and-decorators.md). - -## `GuzzleHttp\Psr7\Utils::copyToStream` - -`public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): int` - -Copy the contents of a stream into another stream until the given number of -bytes have been read, returning the number of bytes copied as an `int`. On -32-bit PHP, an unbounded copy larger than `PHP_INT_MAX` bytes cannot be -represented by that return type. 64-bit PHP is not affected. - -The destination must accept writes that make positive progress. Streams that -return 0 as a backpressure or drop signal (a `BufferStream` at its high water -mark, or a full `DroppingStream`) will cause this method to throw. For full -copies, use a normal writable stream such as a file or `php://temp` stream. - -Throws `GuzzleHttp\Psr7\Exception\TimeoutException` when PHP-style timeout -metadata can be detected after a source read or destination write cannot make -progress. - -## `GuzzleHttp\Psr7\Utils::copyToString` - -`public static function copyToString(StreamInterface $stream, int $maxLen = -1): string` - -Copy the contents of a stream into a string until the given number of bytes have -been read. - -Throws `GuzzleHttp\Psr7\Exception\TimeoutException` when PHP-style timeout -metadata can be detected after a stream read cannot make progress. - -## `GuzzleHttp\Psr7\Utils::hash` - -`public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string` - -Calculate a hash of a stream. - -This method reads the entire stream to calculate a rolling hash, based on PHP's -`hash_init` functions. - -Throws `GuzzleHttp\Psr7\Exception\TimeoutException` when PHP-style timeout -metadata can be detected after a stream read cannot make progress. - -## `GuzzleHttp\Psr7\Utils::readLine` - -`public static function readLine(StreamInterface $stream, ?int $maxLength = null): string` - -Read a line from the stream up to the maximum allowed buffer length. - -Throws `GuzzleHttp\Psr7\Exception\TimeoutException` when PHP-style timeout -metadata can be detected after a stream read cannot make progress. - -## `GuzzleHttp\Psr7\Utils::streamFor` - -`public static function streamFor(resource|string|null|StreamInterface|callable|\Iterator|\Stringable $resource = '', array $options = []): StreamInterface` - -Create a new stream based on the input type. - -Options are provided as an associative array that can contain the following -keys: - -- metadata: Array of custom metadata. -- size: Size of the stream. - -This method accepts the following `$resource` types: - -- `Psr\Http\Message\StreamInterface`: Returns the value as-is. -- `string`: Creates a stream object that uses the given string as the contents. -- `resource`: Creates a stream object that wraps the given PHP stream resource. -- `Iterator`: If the provided value implements `Iterator`, then a read-only - stream object will be created that wraps the given iterable. Each time the - stream is read from, data from the iterator will fill a buffer and will be - continuously called until the buffer is equal to the requested read size. - Yielded strings, integers, finite floats, booleans, `null`, and stringable - objects are converted to string chunks; non-finite floats and other values - throw `UnexpectedValueException` when the stream is read. Values that - stringify to an empty string are skipped while the iterator advances. - Subsequent read calls will first read from the buffer and then call `next` on - the underlying iterator until it is exhausted. -- `object` with `__toString()`: If the object has the `__toString()` method, the - object will be cast to a string and then a stream will be returned that uses - the string value. -- `NULL`: When `null` is passed, an empty stream object is returned. -- `callable`: When a callable array, closure, or invokable object is passed and - no earlier resource or object rule applies, a read-only stream object will be - created that invokes the given callable. The callable is invoked with the - suggested number of bytes to read. The callable can return fewer or more bytes - than requested, but MUST return a non-empty string to provide data and MUST - return `false` or `null` when there is no more data to return. Any additional - bytes will be buffered and used in subsequent reads. String inputs are always - treated as string bodies, even when they name callable functions. - -```php -$stream = GuzzleHttp\Psr7\Utils::streamFor('foo'); -$stream = GuzzleHttp\Psr7\Utils::streamFor(fopen('/path/to/file', 'r')); - -$generator = function ($bytes) { - for ($i = 0; $i < $bytes; $i++) { - yield ' '; - } -}; - -$stream = GuzzleHttp\Psr7\Utils::streamFor($generator(100)); -``` - -## `GuzzleHttp\Psr7\Utils::tryFopen` - -`public static function tryFopen(string $filename, string $mode): resource` - -Safely opens a PHP stream resource using a filename. - -When `fopen()` fails, PHP normally raises a warning. This function adds an error -handler that checks for errors and throws an exception instead. - -## `GuzzleHttp\Psr7\Utils::tryGetContents` - -`public static function tryGetContents(resource $stream): string` - -Safely gets the contents of a given stream. - -When `stream_get_contents()` fails, PHP normally raises a warning. This function -adds an error handler that checks for errors and throws an exception instead. - -Throws `GuzzleHttp\Psr7\Exception\TimeoutException` when PHP-style timeout -metadata can be detected after the stream read cannot make progress. - -## Related - -- [Streams and Decorators](streams-and-decorators.md) -- [PSR-17 Factories](psr-17-factories.md) -- [Message Helpers](message-helpers.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/streams-and-decorators.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/streams-and-decorators.md deleted file mode 100644 index 6af5cb5cc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/streams-and-decorators.md +++ /dev/null @@ -1,387 +0,0 @@ -# Streams and Decorators - -PSR-7 request and response bodies are streams. This page covers stream creation, cursor and I/O behavior, built-in stream decorators, and wrapping PSR-7 streams as PHP resources. - -Streams allow HTTP messages to represent small strings, large files, generated data, remote resources, and other body sources through a common interface. - -The PSR-7 `Psr\Http\Message\StreamInterface` exposes methods that let consumers read, write, seek, and inspect body data without requiring the entire body to be loaded into memory. - -Streams expose their capabilities using `isReadable()`, `isWritable()`, and `isSeekable()`. These methods help collaborators determine whether a stream supports the operations they need. - -## Creating Streams - -Use `GuzzleHttp\Psr7\Utils::streamFor()` to create streams from common PHP values. It accepts strings, resources returned from `fopen()`, objects that implement `__toString()`, iterators, callable arrays, closures, invokable objects, and existing `Psr\Http\Message\StreamInterface` instances. - -Strings and `null` are stored in `php://temp` streams. PHP keeps `php://temp` data in memory until the stream exceeds 2 MB, then spills to a temporary file on disk. Non-string scalars such as integers, floats, and booleans are rejected; cast them to strings first. - -Callable sources receive a suggested read length, may return fewer or more bytes, and end the stream by returning `false` or `null`. Strings remain literal body contents, even when they name a callable. - -```php -use GuzzleHttp\Psr7\Utils; - -$stream = Utils::streamFor('string data'); -echo $stream; -// string data -echo $stream->read(3); -// str -echo $stream->getContents(); -// ing data -var_export($stream->eof()); -// true -var_export($stream->tell()); -// 11 -``` - -You can create streams from iterators. The iterator can yield any number of bytes per iteration. Any excess bytes returned by the iterator that were not requested by a stream consumer will be buffered until a subsequent read. - -```php -use GuzzleHttp\Psr7\Utils; - -$generator = function ($bytes) { - for ($i = 0; $i < $bytes; $i++) { - yield '.'; - } -}; - -$stream = Utils::streamFor($generator(1024)); -echo $stream->read(3); -// ... -``` - -## Metadata - -Streams expose stream metadata through `getMetadata()`. This method provides the data returned by PHP's [stream_get_meta_data()](https://www.php.net/manual/en/function.stream-get-meta-data.php), and can optionally expose custom metadata. - -```php -use GuzzleHttp\Psr7\Utils; - -$resource = Utils::tryFopen('/path/to/file', 'r'); -$stream = Utils::streamFor($resource); - -echo $stream->getMetadata('uri'); -// /path/to/file -var_export($stream->isReadable()); -// true -var_export($stream->isWritable()); -// false -var_export($stream->isSeekable()); -// true -``` - -## AppendStream - -`GuzzleHttp\Psr7\AppendStream` - -Reads from multiple streams, one after the other. - -```php -use GuzzleHttp\Psr7; - -$a = Psr7\Utils::streamFor('abc, '); -$b = Psr7\Utils::streamFor('123.'); -$composed = new Psr7\AppendStream([$a, $b]); - -$composed->addStream(Psr7\Utils::streamFor(' Above all listen to me')); - -echo $composed; // abc, 123. Above all listen to me. -``` - - -## BufferStream - -`GuzzleHttp\Psr7\BufferStream` - -Provides a buffer stream that can be written to fill a buffer, then read -from it to remove bytes from the buffer. - -This stream returns a "hwm" metadata value that tells upstream consumers -what the configured high water mark of the stream is, or the maximum -preferred size of the buffer. - -```php -use GuzzleHttp\Psr7; - -// When the buffer reaches or exceeds 1024 bytes, it will begin returning 0 to -// writes. This is an indication that writers should slow down. -$buffer = new Psr7\BufferStream(1024); -``` - - -## CachingStream - -The CachingStream is used to allow seeking over previously read bytes on -non-seekable streams. This can be useful when transferring a non-seekable -entity body fails due to needing to rewind the stream (for example, resulting -from a redirect). Data that is read from the remote stream will be buffered in -a PHP temp stream so that previously read bytes are cached first in memory, -then on disk. - -```php -use GuzzleHttp\Psr7; - -$original = Psr7\Utils::streamFor(fopen('http://www.google.com', 'r')); -$stream = new Psr7\CachingStream($original); - -$stream->read(1024); -echo $stream->tell(); -// 1024 - -$stream->seek(0); -echo $stream->tell(); -// 0 -``` - -By default the bytes are cached in a `php://temp` stream. You can supply your own -cache target as the second constructor argument, but it is used as a random-access -byte buffer to replay the remote stream, so it must be readable, writable, and -seekable, report an accurate position and size, and store writes losslessly. Lossy -or non-seekable streams such as `BufferStream` and `DroppingStream` are not valid -targets. - - -## DroppingStream - -`GuzzleHttp\Psr7\DroppingStream` - -Stream decorator that begins dropping data once the size of the underlying -stream becomes too full. - -```php -use GuzzleHttp\Psr7; - -// Create an empty stream -$stream = Psr7\Utils::streamFor(); - -// Start dropping data when the stream has more than 10 bytes -$dropping = new Psr7\DroppingStream($stream, 10); - -$dropping->write('01234567890123456789'); -echo $stream; // 0123456789 -``` - - -## FnStream - -`GuzzleHttp\Psr7\FnStream` - -Compose stream implementations based on a hash of callables. - -Allows for easy testing and extension of a provided stream without needing -to create a concrete class for a simple extension point. - -```php - -use GuzzleHttp\Psr7; - -$stream = Psr7\Utils::streamFor('hi'); -$fnStream = Psr7\FnStream::decorate($stream, [ - 'rewind' => function () use ($stream) { - echo 'About to rewind - '; - $stream->rewind(); - echo 'rewound!'; - } -]); - -$fnStream->rewind(); -// Outputs: About to rewind - rewound! -``` - - -## InflateStream - -`GuzzleHttp\Psr7\InflateStream` - -Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content. - -This stream decorator converts the provided stream to a PHP stream resource, -appends the zlib.inflate filter, and wraps the filtered resource as a stream. - -Closing an `InflateStream` also closes the compressed source stream it decorates; `detach()` leaves the source stream open. - - -## LazyOpenStream - -`GuzzleHttp\Psr7\LazyOpenStream` - -Lazily reads from or writes to a file that is opened only after an I/O operation -takes place on the stream. - -```php -use GuzzleHttp\Psr7; - -$stream = new Psr7\LazyOpenStream('/path/to/file', 'r'); -// The file has not yet been opened... - -echo $stream->read(10); -// The file is opened and read from only when needed. -``` - - -## LimitStream - -`GuzzleHttp\Psr7\LimitStream` - -LimitStream can be used to read a subset or slice of an existing stream object. -This can be useful for breaking a large file into smaller pieces to be sent in -chunks (e.g. Amazon S3's multipart upload API). - -```php -use GuzzleHttp\Psr7; - -$original = Psr7\Utils::streamFor(fopen('/tmp/test.txt', 'r+')); -echo $original->getSize(); -// >>> 1048576 - -// Limit the size of the body to 1024 bytes and start reading from byte 2048 -$stream = new Psr7\LimitStream($original, 1024, 2048); -echo $stream->getSize(); -// >>> 1024 -echo $stream->tell(); -// >>> 0 -``` - - -## MultipartStream - -`GuzzleHttp\Psr7\MultipartStream` - -A stream that returns bytes for a streaming multipart or multipart/form-data -body when read. - -Each multipart element must contain a `name` and `contents` key. `contents` may -be any non-array value accepted by `GuzzleHttp\Psr7\Utils::streamFor()`, -including closures and invokable objects. Array contents are recursively -expanded into nested form fields. - - -## NoSeekStream - -`GuzzleHttp\Psr7\NoSeekStream` - -NoSeekStream wraps a stream and does not allow seeking. - -```php -use GuzzleHttp\Psr7; - -$original = Psr7\Utils::streamFor('foo'); -$noSeek = new Psr7\NoSeekStream($original); - -echo $noSeek->read(3); -// foo -var_export($noSeek->isSeekable()); -// false - -try { - $noSeek->seek(0); -} catch (\RuntimeException $e) { - echo $e->getMessage(); - // Cannot seek a NoSeekStream -} -``` - - -## PumpStream - -`GuzzleHttp\Psr7\PumpStream` - -Provides a read-only stream that pumps data from a PHP callable. - -When invoking the provided callable, the PumpStream will pass the suggested -number of bytes to read to the callable. The callable can choose to ignore -this value and return fewer or more bytes than requested. Any extra data -returned by the provided callable is buffered internally until drained using -the `read()` method of the PumpStream. The provided callable MUST return a -non-empty string to provide data, and MUST return false or null when there is -no more data to read. Returning an empty string causes a RuntimeException -because it cannot satisfy a positive-length read. - -Userland callables that declare no parameters are tolerated by PHP, but -length-aware callables remain the recommended formal shape. - - -## Implementing Stream Decorators - -Creating a stream decorator is very easy thanks to the -`GuzzleHttp\Psr7\StreamDecoratorTrait`. This trait provides methods that -implement `Psr\Http\Message\StreamInterface` by proxying to an underlying -stream. Just `use` the `StreamDecoratorTrait` and implement your custom -methods. - -For example, let's say we wanted to call a specific function each time the last -byte is read from a stream. This could be implemented by overriding the -`read()` method. - -```php -use Psr\Http\Message\StreamInterface; -use GuzzleHttp\Psr7\StreamDecoratorTrait; - -class EofCallbackStream implements StreamInterface -{ - use StreamDecoratorTrait; - - private $callback; - - private $stream; - - public function __construct(StreamInterface $stream, callable $cb) - { - $this->stream = $stream; - $this->callback = $cb; - } - - public function read(int $length): string - { - $result = $this->stream->read($length); - - // Invoke the callback when EOF is hit. - if ($this->eof()) { - ($this->callback)(); - } - - return $result; - } -} -``` - -This decorator could be added to any existing stream and used like so: - -```php -use GuzzleHttp\Psr7; - -$original = Psr7\Utils::streamFor('foo'); - -$eofStream = new EofCallbackStream($original, function () { - echo 'EOF!'; -}); - -$eofStream->read(2); -$eofStream->read(1); -// echoes "EOF!" -$eofStream->seek(0); -$eofStream->read(3); -// echoes "EOF!" -``` - - -## PHP StreamWrapper - -You can use the `GuzzleHttp\Psr7\StreamWrapper` class if you need to use a -PSR-7 stream as a PHP stream resource. - -Use the `GuzzleHttp\Psr7\StreamWrapper::getResource()` method to create a PHP -stream from a PSR-7 stream. - -```php -use GuzzleHttp\Psr7\StreamWrapper; - -$stream = GuzzleHttp\Psr7\Utils::streamFor('hello!'); -$resource = StreamWrapper::getResource($stream); -echo fread($resource, 6); // outputs hello! -``` - -## Related - -- [PSR-7 Messages](psr-7-messages.md) -- [Stream Helpers](stream-helpers.md) -- [PSR-17 Factories](psr-17-factories.md) -- [URI Helpers](uri-helpers.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/uri-and-mime-helpers.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/uri-and-mime-helpers.md deleted file mode 100644 index 01046350a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/uri-and-mime-helpers.md +++ /dev/null @@ -1,61 +0,0 @@ -# URI and MIME Helpers - -This page covers small helper methods for redacting URI user info, converting -values into URI objects, and resolving MIME types from filenames or extensions. -For URI resolution, normalization, and comparison helpers, see -[URI Helpers](uri-helpers.md). - -## `GuzzleHttp\Psr7\Utils::redactUserInfo` - -`public static function redactUserInfo(UriInterface $uri): UriInterface` - -Redact the user info part of a URI. - -Returns the URI with the whole userinfo component replaced by `***` when one -is present, so neither the username nor the password survives into logs and -diagnostics. A URI without userinfo is returned unchanged. - -## `GuzzleHttp\Psr7\Utils::redactUserInfoInString` - -`public static function redactUserInfoInString(string $subject, string $uri): string` - -Redacts the userinfo of a raw URI string wherever it appears in a subject -string. - -The needle is taken verbatim from the raw URI rather than from parsed -components, so credentials that URI normalization would rewrite, such as raw -control bytes or unencoded reserved characters, are still found in text that -embeds the URI exactly as given, for example transport error messages. A URI -without `://` is treated as authority-form: a host and port with optional -userinfo. - -A URI that does not parse has no trustworthy authority boundary, so everything -between any scheme and its last `@` is redacted as a safe-side fallback. - -## `GuzzleHttp\Psr7\Utils::uriFor` - -`public static function uriFor(string|UriInterface $uri): UriInterface` - -Returns a `UriInterface` for the given value. - -This function accepts a string or `UriInterface` and returns a `UriInterface` -for the given value. If the value is already a `UriInterface`, it is returned -as-is. - -## `GuzzleHttp\Psr7\MimeType::fromFilename` - -`public static function fromFilename(string $filename): string|null` - -Determines the MIME type of a file by looking at its extension. - -## `GuzzleHttp\Psr7\MimeType::fromExtension` - -`public static function fromExtension(string $extension): string|null` - -Maps a file extension to a MIME type. - -## Related - -- [URI Helpers](uri-helpers.md) -- [Header and Query Helpers](header-and-query-helpers.md) -- [Stream Helpers](stream-helpers.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/uri-helpers.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/uri-helpers.md deleted file mode 100644 index 754aec14c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/docs/uri-helpers.md +++ /dev/null @@ -1,436 +0,0 @@ -# URI Helpers - -This page covers this package's `Psr\Http\Message\UriInterface` implementation -and URI helper classes for classifying, composing, resolving, normalizing, -comparing, and safely modifying URIs. - -Aside from the standard `Psr\Http\Message\UriInterface` implementation provided -by the `GuzzleHttp\Psr7\Uri` class, this library also provides additional static -methods for working with URIs. - -## URI Types - -An instance of `Psr\Http\Message\UriInterface` can either be an absolute URI or -a relative reference. An absolute URI has a scheme. A relative reference is used -to express a URI relative to another URI, the base URI. Relative references can -be divided into several forms according to -[RFC 3986 Section 4.2](https://datatracker.ietf.org/doc/html/rfc3986#section-4.2): - -- network-path references, e.g. `//example.com/path` -- absolute-path references, e.g. `/path` -- relative-path references, e.g. `subpath` - -The following methods can be used to identify the type of the URI. - -### `GuzzleHttp\Psr7\Uri::isAbsolute` - -`public static function isAbsolute(UriInterface $uri): bool` - -Whether the URI is absolute, i.e. it has a scheme. - -### `GuzzleHttp\Psr7\Uri::isNetworkPathReference` - -`public static function isNetworkPathReference(UriInterface $uri): bool` - -Whether the URI is a network-path reference. A relative reference that begins -with two slash characters is termed a network-path reference. - -### `GuzzleHttp\Psr7\Uri::isAbsolutePathReference` - -`public static function isAbsolutePathReference(UriInterface $uri): bool` - -Whether the URI is an absolute-path reference. A relative reference that begins -with a single slash character is termed an absolute-path reference. - -### `GuzzleHttp\Psr7\Uri::isRelativePathReference` - -`public static function isRelativePathReference(UriInterface $uri): bool` - -Whether the URI is a relative-path reference. A relative reference that does not -begin with a slash character is termed a relative-path reference. - -### `GuzzleHttp\Psr7\Uri::isSameDocumentReference` - -`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 fragment component, identical to the base URI. -When no base URI is given, only an empty URI reference (apart from its fragment) -is considered a same-document reference. - -## URI Syntax Validation - -`GuzzleHttp\Psr7\Rfc3986` provides static methods for validating and -canonicalizing individual URI components against the grammar defined by -[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). They operate on raw -component strings rather than on `Psr\Http\Message\UriInterface` instances. - -### `GuzzleHttp\Psr7\Rfc3986::isValidScheme` - -`public static function isValidScheme(string $scheme): bool` - -Whether the string is a valid URI scheme. Per -[RFC 3986 Section 3.1](https://datatracker.ietf.org/doc/html/rfc3986#section-3.1), -a scheme must start with a letter, followed by any number of letters, digits, -`+`, `-`, or `.`. The empty string is also accepted, since a URI reference may -omit the scheme. - -### `GuzzleHttp\Psr7\Rfc3986::isValidHost` - -`public static function isValidHost(string $host): bool` - -Whether the string is a valid URI host. Per -[RFC 3986 Section 3.2.2](https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2), -the host is an IP-literal, IPv4 address, or registered name. An empty host is -accepted, since the authority, and thus the host, may be empty. Bracketed values -are validated as IPv6 or IPvFuture literals; any other value is rejected if it -contains control characters, whitespace, an authority or path delimiter (`/`, -`?`, `#`, `@`, `\`), or an embedded colon denoting a port. Percent-encoding is -validated the same way: malformed sequences (a `%` not followed by two hex -digits) and percent-encoded octets that decode to one of the rejected bytes, to -a bracket (`[`, `]`), or to `%` itself are invalid, while all other -percent-encoded octets are accepted. Rejecting these percent-encoded octets is a -deliberate guzzle host policy, stricter than the RFC 3986 `reg-name` grammar, -which permits any well-formed `pct-encoded` octet; it matches the stricter -policy used throughout the library. RFC 6874 IPv6 zone identifiers (for example -`[fe80::1%25eth0]`) are not supported. - -Registered names are otherwise intentionally permissive: single-label hosts such -as `localhost`, underscores, sub-delims, and raw or percent-encoded non-ASCII -(IDN) data are accepted and preserved as given, with no punycode conversion. -IDNA is treated as a client concern. Consumers that need DNS IDNs must perform -the conversion themselves, for example via Guzzle's `idn_conversion` request -option. - -### `GuzzleHttp\Psr7\Rfc3986::isValidPort` - -`public static function isValidPort(string $port): bool` - -Whether the string is a valid port number. RFC 3986 defines the port as -`*DIGIT`, which also permits an empty port and has no upper bound; this applies -the stricter policy used throughout the library instead, accepting a non-empty -run of digits (leading zeros are accepted and normalized) that resolves to a -value in the range 0-65535. - -### `GuzzleHttp\Psr7\Rfc3986::canonicalizeIpv6` - -`public static function canonicalizeIpv6(string $address): string` - -Returns the [RFC 5952](https://datatracker.ietf.org/doc/html/rfc5952#section-4) -canonical form of a valid IPv6 address. The address must be a valid textual -IPv6 address without brackets and without a zone identifier, such as the -inside of an IP-literal accepted by `isValidHost()`. Canonicalization -lowercases the hexadecimal fields, suppresses leading zeros, and collapses the -longest run of two or more zero fields (the leftmost on a tie) with `::`. -Embedded dotted-decimal notation follows the rendering policy of BIND-derived -`inet_ntop()` implementations and curl: exactly the IPv4-mapped -(`::ffff:0:0/96`) and deprecated IPv4-compatible (`::/96`) layouts use it, -while other embedded-IPv4 forms, including translated (NAT64) well-known -prefixes such as `64:ff9b::/96` (RFC 6052), serialize in pure hexadecimal -fields. An `\InvalidArgumentException` is thrown if the address cannot be -parsed. - -Validation is strict and platform-independent: the address is checked against -the RFC 3986 `IPv6address` grammar with PHP's `FILTER_VALIDATE_IP` filter and -parsed in pure PHP, so spellings that only some platform parsers accept, such as -the zero-padded dotted octets in `::ffff:192.168.001.001`, are rejected -everywhere. - -Emitting dotted-decimal notation for these two selected layouts is the -BIND-derived `inet_ntop()` and curl compatibility policy used here. -[RFC 5952 Section 5](https://datatracker.ietf.org/doc/html/rfc5952#section-5) -permits mixed notation for recognizable embedded-IPv4 prefixes but does not -limit that category to these layouts; RFC 6052, for example, defines -`64:ff9b::/96` as a Well-Known Prefix, which this implementation renders in -pure hexadecimal. The WHATWG URL Standard always emits pure hexadecimal -fields. - -## URI Components - -Additional methods to work with URI components. - -### `GuzzleHttp\Psr7\Uri::isDefaultPort` - -`public static function isDefaultPort(UriInterface $uri): bool` - -Whether the URI has the default port of the current scheme. -`Psr\Http\Message\UriInterface::getPort` may return null or the standard port. -This method can be used independently of the implementation. - -### `GuzzleHttp\Psr7\Uri::composeComponents` - -`public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string` - -Composes a URI reference string from its various components according to -[RFC 3986 Section 5.3](https://datatracker.ietf.org/doc/html/rfc3986#section-5.3). -Usually this method does not need to be called manually but instead is used -indirectly via `Psr\Http\Message\UriInterface::__toString`. - -PSR-7 UriInterface treats an empty component the same as a missing component as -`getQuery()`, `getFragment()` etc. always return a string. This explains the -slight difference to RFC 3986 Section 5.3. - -Another adjustment is that the authority separator is added even when the -authority is missing/empty for the "file" scheme. This is because PHP stream -functions like `file_get_contents` only work with `file:///myfile` but not with -`file:/myfile` although they are equivalent according to RFC 3986. But -`file:///` is the more common syntax for the file scheme anyway (Chrome for -example redirects to that format). The separator is omitted when such a URI has -a rootless or empty path: adding it would turn the first path segment into the -authority of the composed URI, or compose the string `file://`, which cannot be -parsed back into a URI. - -### `GuzzleHttp\Psr7\Uri::fromParts` - -`public static function fromParts(array $parts): UriInterface` - -Creates a URI from a hash of -[`parse_url`](https://www.php.net/manual/en/function.parse-url.php) components. - -### `GuzzleHttp\Psr7\Uri::withQueryValue` - -`public static function withQueryValue(UriInterface $uri, string $key, ?string $value): UriInterface` - -Creates a new URI with a specific query string value. Any existing query string -values that exactly match the provided key are removed and replaced with the -given key value pair. A value of null will set the query string key without a -value, e.g. "key" instead of "key=value". - -### `GuzzleHttp\Psr7\Uri::withQueryValues` - -`public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface` - -Creates a new URI with multiple query string values. It has the same behavior as -`withQueryValue()` but for an associative array of key => value. - -### `GuzzleHttp\Psr7\Uri::withoutQueryValue` - -`public static function withoutQueryValue(UriInterface $uri, string $key): UriInterface` - -Creates a new URI with a specific query string value removed. Any existing query -string values that exactly match the provided key are removed. - -## Cross-Origin Detection - -`GuzzleHttp\Psr7\UriComparator` provides methods to determine if a modified URI -should be considered cross-origin. - -### `GuzzleHttp\Psr7\UriComparator::isCrossOrigin` - -`public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool` - -Determines if a modified URI should be considered cross-origin with respect to -an original URI. - -Two URIs are cross-origin when their scheme, host, or effective port differ. -Host comparison is case-insensitive, and bracketed IPv6 literals are -canonicalized to their RFC 5952 form from any PSR-7 implementation before -comparison, so equivalent spellings of the same address are same-origin. -IPvFuture literals and bracketed values that cannot be parsed as an IPv6 -address, such as those carrying zone identifiers, still compare as -case-insensitive text. Missing ports use the default port for `http`, `https`, -`ws`, or `wss`. Other schemes do not receive implicit default ports. - -This helper only compares URI origins. It does not implement redirect handling -or credential policy. - -## Reference Resolution - -`GuzzleHttp\Psr7\UriResolver` provides methods to resolve a URI reference in the -context of a base URI according to -[RFC 3986 Section 5](https://datatracker.ietf.org/doc/html/rfc3986#section-5). -This is also what web browsers do when resolving a link in a document based on -the current request URI. - -### `GuzzleHttp\Psr7\UriResolver::resolve` - -`public static function resolve(UriInterface $base, UriInterface $rel): UriInterface` - -Converts the relative URI into a new URI that is resolved against the base URI. - -### `GuzzleHttp\Psr7\UriResolver::removeDotSegments` - -`public static function removeDotSegments(string $path): string` - -Removes dot segments from a path and returns the new path according to -[RFC 3986 Section 5.2.4](https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4). - -Excess `..` segments above the root of an absolute path are dropped without -consuming the root, so the result can begin with `//` (e.g. `/..//a` becomes -`//a`). Such a path is not valid for a URI without an authority (RFC 3986 -Section 3.3); `resolve()` and `UriNormalizer::normalize()` serialize it with a -`/.` prefix in that case, like the WHATWG URL Standard. - -### `GuzzleHttp\Psr7\UriResolver::relativize` - -`public static function relativize(UriInterface $base, UriInterface $target): UriInterface` - -Returns the target URI as a relative reference from the base URI. This method is -the counterpart to `resolve()`: - -```php -(string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target)) -``` - -One use case is to use the current request URI as the base URI and then generate -relative links in your documents to reduce the document size or offer -self-contained downloadable document archives. - -```php -$base = new Uri('http://example.com/a/b/'); -echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'. -echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'. -echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'. -echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'. -echo UriResolver::relativize($base, new Uri('http://example.com')); // prints '//example.com'. -``` - -This method also accepts a target that is already relative and will try to -relativize it further. Only a relative-path reference will be returned as-is. - -```php -echo UriResolver::relativize($base, new Uri('/a/b/c')); // prints 'c' as well -``` - -## Normalization and Comparison - -`GuzzleHttp\Psr7\UriNormalizer` provides methods to normalize and compare URIs -according to -[RFC 3986 Section 6](https://datatracker.ietf.org/doc/html/rfc3986#section-6). - -### `GuzzleHttp\Psr7\UriNormalizer::normalize` - -`public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS): UriInterface` - -Returns a normalized URI. The scheme and host component are already normalized -to lowercase per PSR-7 UriInterface. This method adds additional normalizations -that can be configured with the `$flags` parameter, which is a bitmask of -normalizations to apply. - -PSR-7 UriInterface cannot distinguish between an empty component and a missing -component as `getQuery()`, `getFragment()` etc. always return a string. This -means the URIs `/?#` and `/` are treated equivalent which is not necessarily -true according to RFC 3986. But that difference is highly uncommon in reality. -So this potential normalization is implied in PSR-7 as well. - -The following normalizations are available: - -- `UriNormalizer::PRESERVING_NORMALIZATIONS` - - Default normalizations which only include the ones that preserve semantics. - -- `UriNormalizer::CAPITALIZE_PERCENT_ENCODING` - - All letters within a percent-encoding triplet (e.g., "%3A") are - case-insensitive, and should be capitalized. This applies to the userinfo, - host, path, query, and fragment components. Bracketed IP-literal hosts are - skipped as a legacy tolerance for nonstandard values other implementations - may carry; zone-identifier text was briefly valid URI syntax under RFC 6874, - which RFC 9844 obsoleted and reverted. The userinfo and host are only - rewritten when the value returned by the implementation matches the - normalized form, and a userinfo with an empty user segment is never - rewritten. No percent-encoding normalization is applied to a component that - contains malformed percent syntax, such as a `%` not followed by two - hexadecimal digits. - - Example: `http://example.org/a%c2%b1b` → `http://example.org/a%C2%B1b` - -- `UriNormalizer::DECODE_UNRESERVED_CHARACTERS` - - Decodes percent-encoded octets of unreserved characters. For consistency, - percent-encoded octets in the ranges of ALPHA (%41–%5A and %61–%7A), DIGIT - (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) - should not be created by URI producers and, when found in a URI, should be - decoded to their corresponding unreserved characters by URI normalizers. - This applies to the userinfo, host, path, query, and fragment components. - Since the host is case-insensitive and PSR-7 requires it to be lowercase, - octets decoded in the host are lowercased (e.g., "%41" becomes "a"). - Bracketed IP-literal hosts are skipped as a legacy tolerance for nonstandard - values other implementations may carry; zone-identifier text was briefly - valid URI syntax under RFC 6874, which RFC 9844 obsoleted and reverted. The - userinfo and host are only rewritten when the value returned by the - implementation matches the normalized form, and a userinfo with an empty - user segment is never rewritten. No percent-encoding normalization is - applied to a component that contains malformed percent syntax, such as a `%` - not followed by two hexadecimal digits. - - Example: `http://example.org/%7Eusern%61me/` → `http://example.org/~username/` - -- `UriNormalizer::CONVERT_EMPTY_PATH` - - Converts the empty path to "/" for http and https URIs. - - Example: `http://example.org` → `http://example.org/` - -- `UriNormalizer::REMOVE_DEFAULT_HOST` - - Removes the default host of the given URI scheme from the URI. Only the - "file" scheme defines the default host "localhost". All of `file:/myfile`, - `file:///myfile`, and `file://localhost/myfile` are equivalent according to - RFC 3986. - - Example: `file://localhost/myfile` → `file:///myfile` - -- `UriNormalizer::REMOVE_DEFAULT_PORT` - - Removes the default port of the given URI scheme from the URI. - - Example: `http://example.org:80/` → `http://example.org/` - -- `UriNormalizer::REMOVE_DOT_SEGMENTS` - - Removes unnecessary dot-segments. Dot-segments in relative-path references - are not removed as it would change the semantics of the URI reference. - - Example: `http://example.org/../a/b/../c/./d.html` → `http://example.org/a/c/d.html` - -- `UriNormalizer::REMOVE_DUPLICATE_SLASHES` - - Paths which include two or more adjacent slashes are converted to one. - Webservers usually ignore duplicate slashes and treat those URIs equivalent. - But in theory those URIs do not need to be equivalent. So this normalization - may change the semantics. Encoded slashes (%2F) are not removed. - - Example: `http://example.org//foo///bar.html` → `http://example.org/foo/bar.html` - -- `UriNormalizer::SORT_QUERY_PARAMETERS` - - Sort query parameters with their values in alphabetical order. However, the - order of parameters in a URI may be significant (this is not defined by the - standard). So this normalization is not safe and may change the semantics of - the URI. - - Example: `?lang=en&article=fred` → `?article=fred&lang=en` - -- `UriNormalizer::CANONICALIZE_IPV6_HOST` - - Canonicalizes IPv6 hosts to their RFC 5952 form. IPv6 addresses allow - leading zeros and multiple placements of the `::` elision, so the same - address has many textual spellings. The canonical form is required for - IPv6 literals in URIs by RFC 5952 Section 6 and never changes what the URI - refers to. Native `Uri` instances already guarantee canonical output; for - other implementations, the canonical host is requested through - `withHost()` and the result is kept only when the returned `getHost()` - exactly matches the requested spelling, otherwise this step leaves the URI - unchanged while other selected normalizations still apply, and setter - exceptions propagate. - - Example: `http://[::0:0a]/` → `http://[::a]/` - -### `GuzzleHttp\Psr7\UriNormalizer::isEquivalent` - -`public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool` - -Whether two URIs can be considered equivalent. Both URIs are normalized -automatically before comparison with the given `$normalizations` bitmask. The -method also accepts relative URI references and returns true when they are -equivalent. This of course assumes they will be resolved against the same base -URI. If this is not the case, determination of equivalence or difference of -relative references does not mean anything. - -## Related - -- [PSR-7 Messages](psr-7-messages.md) -- [Streams and Decorators](streams-and-decorators.md) -- [URI and MIME Helpers](uri-and-mime-helpers.md) -- [Header and Query Helpers](header-and-query-helpers.md) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/AppendStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/AppendStream.php deleted file mode 100644 index 2e046cda7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/AppendStream.php +++ /dev/null @@ -1,243 +0,0 @@ -addStream($stream); - } - } - - public function __toString(): string - { - $this->rewind(); - - return $this->getContents(); - } - - /** - * Add a stream to the AppendStream - * - * @param StreamInterface $stream Stream to append. Must be readable. - * - * @throws \InvalidArgumentException if the stream is not readable - */ - public function addStream(StreamInterface $stream): void - { - if (!$stream->isReadable()) { - throw new \InvalidArgumentException('Each stream must be readable'); - } - - // The stream is only seekable if all streams are seekable - if (!$stream->isSeekable()) { - $this->seekable = false; - } - - $this->streams[] = $stream; - } - - public function getContents(): string - { - return Utils::copyToString($this); - } - - /** - * Closes each attached stream. - */ - public function close(): void - { - $this->pos = $this->current = 0; - $this->seekable = true; - - foreach ($this->streams as $stream) { - $stream->close(); - } - - $this->streams = []; - } - - /** - * Detaches each attached stream. - * - * Returns null as it's not clear which underlying stream resource to return. - */ - public function detach() - { - $this->pos = $this->current = 0; - $this->seekable = true; - - foreach ($this->streams as $stream) { - $stream->detach(); - } - - $this->streams = []; - - return null; - } - - public function tell(): int - { - return $this->pos; - } - - /** - * Tries to calculate the size by adding the size of each stream. - * - * If any of the streams do not return a valid number, then the size of the - * append stream cannot be determined and null is returned. - */ - public function getSize(): ?int - { - $size = 0; - - foreach ($this->streams as $stream) { - $s = $stream->getSize(); - if ($s === null) { - return null; - } - $size = Integers::add($size, $s); - } - - return $size; - } - - public function eof(): bool - { - return !$this->streams - || ($this->current >= count($this->streams) - 1 - && $this->streams[$this->current]->eof()); - } - - public function rewind(): void - { - $this->seek(0); - } - - /** - * Attempts to seek to the given position. Only supports SEEK_SET. - */ - public function seek(int $offset, int $whence = SEEK_SET): void - { - if (!$this->seekable) { - throw new \RuntimeException('This AppendStream is not seekable'); - } elseif ($whence !== SEEK_SET) { - throw new \RuntimeException('The AppendStream can only seek with SEEK_SET'); - } - - $this->pos = $this->current = 0; - - // Rewind each stream - foreach ($this->streams as $i => $stream) { - try { - $stream->rewind(); - } catch (\Exception $e) { - throw new \RuntimeException('Unable to seek stream ' - .$i.' of the AppendStream', 0, $e); - } - } - - // Seek to the actual position by reading from each stream - while ($this->pos < $offset && !$this->eof()) { - $result = $this->read(min(8096, $offset - $this->pos)); - if ($result === '') { - break; - } - } - } - - /** - * Reads from all of the appended streams until the length is met or EOF. - */ - public function read(int $length): string - { - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - if ($this->streams === []) { - return ''; - } - - $buffer = ''; - $total = count($this->streams) - 1; - $remaining = $length; - $progressToNext = false; - - while ($remaining > 0) { - // Progress to the next stream if needed. - if ($progressToNext || $this->streams[$this->current]->eof()) { - $progressToNext = false; - if ($this->current === $total) { - break; - } - ++$this->current; - } - - $result = StreamTimeout::read($this->streams[$this->current], $remaining, 'Unable to read from stream: timed out'); - - if ($result === '') { - $progressToNext = true; - continue; - } - - $buffer .= $result; - $remaining = $length - strlen($buffer); - } - - $this->pos = Integers::add($this->pos, strlen($buffer)); - - return $buffer; - } - - public function isReadable(): bool - { - return true; - } - - public function isWritable(): bool - { - return false; - } - - public function isSeekable(): bool - { - return $this->seekable; - } - - public function write(string $string): int - { - throw new \RuntimeException('Cannot write to an AppendStream'); - } - - public function getMetadata(?string $key = null): ?array - { - return $key === null ? [] : null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/BufferStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/BufferStream.php deleted file mode 100644 index 68ae060bd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/BufferStream.php +++ /dev/null @@ -1,151 +0,0 @@ -hwm = Integers::assertNonNegativeInteger($hwm, 'High water mark'); - } - - public function __toString(): string - { - return $this->getContents(); - } - - public function getContents(): string - { - $buffer = $this->buffer; - $this->buffer = ''; - - return $buffer; - } - - public function close(): void - { - $this->buffer = ''; - } - - public function detach() - { - $this->close(); - - return null; - } - - public function getSize(): ?int - { - return strlen($this->buffer); - } - - public function isReadable(): bool - { - return true; - } - - public function isWritable(): bool - { - return true; - } - - public function isSeekable(): bool - { - return false; - } - - public function rewind(): void - { - $this->seek(0); - } - - public function seek(int $offset, int $whence = SEEK_SET): void - { - throw new \RuntimeException('Cannot seek a BufferStream'); - } - - public function eof(): bool - { - return strlen($this->buffer) === 0; - } - - public function tell(): int - { - throw new \RuntimeException('Cannot determine the position of a BufferStream'); - } - - /** - * Reads data from the buffer. - */ - public function read(int $length): string - { - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - $currentLength = strlen($this->buffer); - - if ($length >= $currentLength) { - // No need to slice the buffer because we don't have enough data. - $result = $this->buffer; - $this->buffer = ''; - } else { - // Slice up the result to provide a subset of the buffer. - $result = substr($this->buffer, 0, $length); - $this->buffer = substr($this->buffer, $length); - } - - return $result; - } - - /** - * Writes data to the buffer. - */ - public function write(string $string): int - { - $this->buffer .= $string; - - if (strlen($this->buffer) >= $this->hwm) { - return 0; - } - - return strlen($string); - } - - /** - * @return mixed - */ - public function getMetadata(?string $key = null) - { - if ($key === 'hwm') { - return $this->hwm; - } - - return $key === null ? [] : null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/CachingStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/CachingStream.php deleted file mode 100644 index d7d6f0bcc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/CachingStream.php +++ /dev/null @@ -1,239 +0,0 @@ -remoteStream = $stream; - $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+')); - } - - public function getSize(): ?int - { - if ($this->detached) { - return null; - } - - $remoteSize = $this->remoteStream->getSize(); - - if (null === $remoteSize) { - return null; - } - - return max($this->stream->getSize(), $remoteSize); - } - - public function rewind(): void - { - $this->seek(0); - } - - public function seek(int $offset, int $whence = SEEK_SET): void - { - if ($whence === SEEK_SET) { - $byte = $offset; - } elseif ($whence === SEEK_CUR) { - $byte = Integers::addSigned($this->tell(), $offset); - } elseif ($whence === SEEK_END) { - $size = $this->remoteStream->getSize(); - if ($size === null) { - // Discovering the size reads the remote stream to EOF and - // moves the cursor, so restore the cursor if the computed - // target is rejected to keep a failed seek side-effect free. - $position = $this->tell(); - $size = $this->cacheEntireStream(); - - try { - $byte = Integers::addSigned($size, $offset); - } catch (\Throwable $e) { - $this->stream->seek($position); - - throw $e; - } - } else { - $byte = Integers::addSigned($size, $offset); - } - } else { - throw new \InvalidArgumentException('Invalid whence'); - } - - $diff = $byte - $this->stream->getSize(); - - if ($diff > 0) { - // Read the remoteStream until we have read in at least the amount - // of bytes requested, or we reach the end of the file. - while ($diff > 0 && !$this->remoteStream->eof()) { - $previousSize = $this->stream->getSize(); - $previousSkipReadBytes = $this->skipReadBytes; - $data = $this->read($diff); - $currentSize = $this->stream->getSize(); - - if ($data === '' && $currentSize === $previousSize && $this->skipReadBytes === $previousSkipReadBytes) { - break; - } - - $diff = $byte - $currentSize; - } - } else { - // We can just do a normal seek since we've already seen this byte. - $this->stream->seek($byte); - } - } - - public function read(int $length): string - { - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - // Perform a regular read on any previously read data from the buffer - $data = $this->stream->read($length); - $remaining = $length - strlen($data); - - // More data was requested so read from the remote stream - if ($remaining) { - // If data was written to the buffer in a position that would have - // been filled from the remote stream, then we must skip bytes on - // the remote stream to emulate overwriting bytes from that - // position. This mimics the behavior of other PHP stream wrappers. - $remoteData = StreamTimeout::read( - $this->remoteStream, - Integers::add($remaining, $this->skipReadBytes), - 'Unable to read from stream: timed out' - ); - - if ($this->skipReadBytes) { - $len = strlen($remoteData); - $remoteData = substr($remoteData, $this->skipReadBytes); - $this->skipReadBytes = max(0, $this->skipReadBytes - $len); - } - - $data .= $remoteData; - - // A short cache write would silently corrupt later replays, so fail loudly. - if ($this->stream->write($remoteData) !== strlen($remoteData)) { - throw new \RuntimeException('Unable to cache the entire read from the remote stream'); - } - } - - return $data; - } - - public function write(string $string): int - { - // When appending to the end of the currently read stream, you'll want - // to skip bytes from being read from the remote stream to emulate - // other stream wrappers. Basically replacing bytes of data of a fixed - // length. - $overflow = Integers::add(strlen($string), $this->tell()) - $this->remoteStream->tell(); - if ($overflow > 0) { - $this->skipReadBytes = Integers::add($this->skipReadBytes, $overflow); - } - - return $this->stream->write($string); - } - - public function eof(): bool - { - return $this->stream->eof() && $this->remoteStream->eof(); - } - - public function detach() - { - if ($this->detached) { - return null; - } - - $position = $this->tell(); - - $this->cacheEntireStream(); - $this->stream->seek($position); - - $resource = $this->stream->detach(); - $this->detached = true; - - return $resource; - } - - /** - * Close the remote stream and any attached cache stream. - */ - public function close(): void - { - if ($this->closed) { - return; - } - - $closeCache = !$this->detached; - $this->closed = true; - $this->detached = true; - - $exception = null; - - try { - $this->remoteStream->close(); - } catch (\Throwable $e) { - $exception = $e; - } - - if ($closeCache) { - try { - $this->stream->close(); - } catch (\Throwable $e) { - if ($exception === null) { - $exception = $e; - } - } - } - - if ($exception !== null) { - throw $exception; - } - } - - private function cacheEntireStream(): int - { - $target = new FnStream(['write' => 'strlen']); - Utils::copyToStream($this, $target); - - return $this->tell(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/DiagnosticValue.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/DiagnosticValue.php deleted file mode 100644 index 151aa9f73..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/DiagnosticValue.php +++ /dev/null @@ -1,63 +0,0 @@ -= 0x20 && $byte <= 0x7E) { - $escaped .= $value[$offset]; - - continue; - } - - $escaped .= \sprintf('\\x%02X', $byte); - } - - return $escaped; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/DroppingStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/DroppingStream.php deleted file mode 100644 index 3a84ef52a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/DroppingStream.php +++ /dev/null @@ -1,48 +0,0 @@ -stream = $stream; - $this->maxLength = Integers::assertNonNegativeInteger($maxLength, 'Maximum length'); - } - - public function write(string $string): int - { - $diff = $this->maxLength - $this->stream->getSize(); - - // Begin returning 0 when the underlying stream is too large. - if ($diff <= 0) { - return 0; - } - - // Write the stream or a subset of the stream if needed. - if (strlen($string) < $diff) { - return $this->stream->write($string); - } - - return $this->stream->write(substr($string, 0, $diff)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php deleted file mode 100644 index 3a084779a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php +++ /dev/null @@ -1,14 +0,0 @@ - */ - private array $methods; - - private bool $detached = false; - - /** - * @param array $methods Hash of method name to a callable. - */ - public function __construct(array $methods) - { - $this->methods = $methods; - - // Create the callables on the class - foreach ($methods as $name => $fn) { - $this->{'_fn_'.$name} = $fn; - } - } - - /** - * Lazily determine which methods are not implemented. - * - * @throws \BadMethodCallException - */ - public function __get(string $name): void - { - throw new \BadMethodCallException(\sprintf('%s() is not implemented in the FnStream', DiagnosticValue::escape(str_replace('_fn_', '', $name)))); - } - - /** - * The close method is called on the underlying stream only if possible. - */ - public function __destruct() - { - if ($this->detached || !isset($this->_fn_close)) { - return; - } - - try { - $this->close(); - } catch (\Throwable $e) { - // Destructors must not surface cleanup failures. - } - } - - /** - * An unserialize would allow the __destruct to run when the unserialized value goes out of scope. - * - * @throws \LogicException - */ - public function __wakeup(): void - { - $this->methods = []; - $this->detached = true; - - throw new \LogicException(static::class.' should never be unserialized'); - } - - public function __unserialize(array $data): void - { - $this->methods = []; - $this->detached = true; - - throw new \LogicException(static::class.' should never be unserialized'); - } - - /** - * Adds custom functionality to an underlying stream by intercepting - * specific method calls. - * - * @param StreamInterface $stream Stream to decorate - * @param array $methods Hash of method name to a callable - */ - public static function decorate(StreamInterface $stream, array $methods): self - { - // If any of the required methods were not provided, then simply - // proxy to the decorated stream. - foreach (array_diff(self::SLOTS, array_keys($methods)) as $diff) { - /** @var callable $callable */ - $callable = [$stream, $diff]; - $methods[$diff] = $callable; - } - - return new self($methods); - } - - public function __toString(): string - { - $this->assertAttached(); - - /** @var string */ - return ($this->_fn___toString)(); - } - - public function close(): void - { - if ($this->detached) { - return; - } - - $close = $this->_fn_close; - $this->detached = true; - $close(); - } - - public function detach() - { - if ($this->detached) { - return null; - } - - $detach = $this->_fn_detach; - $result = $detach(); - $this->detached = true; - - return $result; - } - - public function getSize(): ?int - { - if ($this->detached) { - return null; - } - - return ($this->_fn_getSize)(); - } - - public function tell(): int - { - $this->assertAttached(); - - return ($this->_fn_tell)(); - } - - public function eof(): bool - { - $this->assertAttached(); - - return ($this->_fn_eof)(); - } - - public function isSeekable(): bool - { - if ($this->detached) { - return false; - } - - return ($this->_fn_isSeekable)(); - } - - public function rewind(): void - { - $this->assertAttached(); - - ($this->_fn_rewind)(); - } - - public function seek(int $offset, int $whence = SEEK_SET): void - { - $this->assertAttached(); - - ($this->_fn_seek)($offset, $whence); - } - - public function isWritable(): bool - { - if ($this->detached) { - return false; - } - - return ($this->_fn_isWritable)(); - } - - public function write(string $string): int - { - $this->assertAttached(); - - return ($this->_fn_write)($string); - } - - public function isReadable(): bool - { - if ($this->detached) { - return false; - } - - return ($this->_fn_isReadable)(); - } - - public function read(int $length): string - { - $this->assertAttached(); - - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - return ($this->_fn_read)($length); - } - - public function getContents(): string - { - $this->assertAttached(); - - return ($this->_fn_getContents)(); - } - - /** - * @return mixed - */ - public function getMetadata(?string $key = null) - { - if ($this->detached) { - return $key === null ? [] : null; - } - - return ($this->_fn_getMetadata)($key); - } - - private function assertAttached(): void - { - if ($this->detached) { - throw new \RuntimeException('Stream is detached'); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Header.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Header.php deleted file mode 100644 index 52583c7bf..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Header.php +++ /dev/null @@ -1,168 +0,0 @@ -]+>|[^=]+/', $kvp, $matches); - - if ($count === false) { - throw new \RuntimeException('Unable to parse header parameters: '.preg_last_error_msg()); - } - - if ($count !== 0) { - $m = $matches[0]; - if (isset($m[1])) { - $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); - } else { - $part[] = trim($m[0], $trimmed); - } - } - } - if ($part) { - $params[] = $part; - } - } - } - - return $params; - } - - /** - * Split a header value into semicolon-separated parameters. - * - * @return string[] - */ - private static function splitParameters(string $value): array - { - $values = []; - $start = 0; - $isQuoted = false; - $isEscaped = false; - - for ($i = 0, $max = \strlen($value); $i < $max; ++$i) { - $char = $value[$i]; - - if ($isEscaped) { - $isEscaped = false; - - continue; - } - - if ($isQuoted && $char === '\\') { - $isEscaped = true; - - continue; - } - - if ($char === '"') { - $isQuoted = !$isQuoted; - - continue; - } - - if (!$isQuoted && $char === ';') { - $values[] = \substr($value, $start, $i - $start); - $start = $i + 1; - } - } - - $values[] = \substr($value, $start); - - return $values; - } - - /** - * Splits an HTTP header defined to contain a comma-separated list into each - * individual value. Empty values are removed. - * - * Example headers include `accept`, `cache-control`, and `if-none-match`. - * - * This method must not be used to parse headers that are not defined as a - * list, such as `user-agent` or `set-cookie`. - * - * @param string|string[] $values Header value as returned by - * MessageInterface::getHeader() - * - * @return string[] - */ - public static function splitList($values): array - { - if (!\is_array($values)) { - $values = [$values]; - } - - $result = []; - foreach ($values as $value) { - if (!\is_string($value)) { - throw new \TypeError('$header must either be a string or an array containing strings.'); - } - - $v = ''; - $isQuoted = false; - $isEscaped = false; - for ($i = 0, $max = \strlen($value); $i < $max; ++$i) { - if ($isEscaped) { - $v .= $value[$i]; - $isEscaped = false; - - continue; - } - - if (!$isQuoted && $value[$i] === ',') { - $v = \trim($v, " \t\n\r"); - if ($v !== '') { - $result[] = $v; - } - - $v = ''; - continue; - } - - if ($isQuoted && $value[$i] === '\\') { - $isEscaped = true; - $v .= $value[$i]; - - continue; - } - if ($value[$i] === '"') { - $isQuoted = !$isQuoted; - $v .= $value[$i]; - - continue; - } - - $v .= $value[$i]; - } - - $v = \trim($v, " \t\n\r"); - if ($v !== '') { - $result[] = $v; - } - } - - return $result; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/HttpFactory.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/HttpFactory.php deleted file mode 100644 index a515fc38f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/HttpFactory.php +++ /dev/null @@ -1,104 +0,0 @@ -getSize(); - } - - return new UploadedFile( - $stream, - Integers::assertOptionalNonNegativeSize($size, 'Uploaded file size'), - $error, - $clientFilename, - $clientMediaType - ); - } - - public function createStream(string $content = ''): StreamInterface - { - return Utils::streamFor($content); - } - - public function createStreamFromFile(string $file, string $mode = 'r'): StreamInterface - { - try { - $resource = Utils::tryFopen($file, $mode); - } catch (\RuntimeException $e) { - if ('' === $mode || false === \in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], true)) { - throw new \InvalidArgumentException(sprintf('Invalid file opening mode: %s', DiagnosticValue::escape($mode)), 0, $e); - } - - throw $e; - } - - return Utils::streamFor($resource); - } - - public function createStreamFromResource($resource): StreamInterface - { - return Utils::streamFor($resource); - } - - public function createServerRequest( - string $method, - $uri, - #[\SensitiveParameter] - array $serverParams = [] - ): ServerRequestInterface { - if (empty($method)) { - if (!empty($serverParams['REQUEST_METHOD'])) { - $method = $serverParams['REQUEST_METHOD']; - } else { - throw new \InvalidArgumentException('Cannot determine HTTP method'); - } - } - - return new ServerRequest($method, $uri, [], null, '1.1', $serverParams); - } - - public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface - { - return new Response($code, [], null, '1.1', $reasonPhrase); - } - - public function createRequest(string $method, $uri): RequestInterface - { - return new Request($method, $uri); - } - - public function createUri(string $uri = ''): UriInterface - { - return new Uri($uri); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/InflateStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/InflateStream.php deleted file mode 100644 index 77a869e12..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/InflateStream.php +++ /dev/null @@ -1,101 +0,0 @@ -source = $stream; - $resource = StreamWrapper::getResource($stream); - // Specify window=15+32, so zlib will use header detection to both gzip (with header) and zlib data - // See https://www.zlib.net/manual.html#Advanced definition of inflateInit2 - // "Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection" - // Default window size is 15. - stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15 + 32]); - $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource)); - } - - public function read(int $length): string - { - if ($length <= 0 || $this->source === null) { - return $this->stream->read($length); - } - - try { - $data = $this->stream->read($length); - } catch (TimeoutException $e) { - throw $e; - } catch (\RuntimeException $e) { - if (StreamTimeout::isReadTimedOut($this->source)) { - throw new TimeoutException('Unable to read from stream: timed out', 0, $e); - } - - throw $e; - } - - if ($data === '' && StreamTimeout::isReadTimedOut($this->source)) { - throw new TimeoutException('Unable to read from stream: timed out'); - } - - return $data; - } - - public function close(): void - { - $source = $this->source; - $this->source = null; - - $exception = null; - - try { - $this->stream->close(); - } catch (\Throwable $e) { - $exception = $e; - } - - if ($source !== null) { - try { - $source->close(); - } catch (\Throwable $e) { - if ($exception === null) { - $exception = $e; - } - } - } - - if ($exception !== null) { - throw $exception; - } - } - - public function detach() - { - $this->source = null; - - return $this->stream->detach(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Integers.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Integers.php deleted file mode 100644 index 7eead6468..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Integers.php +++ /dev/null @@ -1,104 +0,0 @@ - \PHP_INT_MAX - $a) { - throw new \OverflowException('Stream byte count exceeds the maximum integer size supported on this platform'); - } - - return $a + $b; - } - - public static function addSigned(int $base, int $delta): int - { - if ($base < 0) { - throw new \InvalidArgumentException('Stream offset must be non-negative'); - } - - if ($delta > 0 && $delta > \PHP_INT_MAX - $base) { - throw new \OverflowException('Stream offset exceeds the maximum integer size supported on this platform'); - } - - $value = $base + $delta; - if ($value < 0) { - // A negative computed offset is a seek failure at runtime, so throw - // RuntimeException per PSR-7, unlike the precondition check above. - throw new \RuntimeException('Stream offset must be non-negative'); - } - - return $value; - } - - /** - * @param mixed $value - */ - public static function assertEngineInteger($value, string $what): ?int - { - if ($value === false || $value === null) { - return null; - } - - if (!\is_int($value) || $value < 0) { - throw new \OverflowException($what.' exceeds the maximum integer size supported on this platform'); - } - - return $value; - } - - /** - * @param mixed $value - */ - public static function assertOptionalNonNegativeSize($value, string $name): ?int - { - if ($value === null) { - return null; - } - - if (!\is_int($value) || $value < 0) { - throw new \InvalidArgumentException($name.' must be a non-negative integer or null'); - } - - return $value; - } - - /** - * @param mixed $value - */ - public static function assertNonNegativeInteger($value, string $name): int - { - if (!\is_int($value) || $value < 0) { - throw new \InvalidArgumentException($name.' must be a non-negative integer'); - } - - return $value; - } - - /** - * @param mixed $value - */ - public static function assertLimitInteger($value, string $name): int - { - if (!\is_int($value) || $value < -1) { - throw new \InvalidArgumentException($name.' must be -1 or a non-negative integer'); - } - - return $value; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/LazyOpenStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/LazyOpenStream.php deleted file mode 100644 index 06e0849ee..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/LazyOpenStream.php +++ /dev/null @@ -1,52 +0,0 @@ -filename = $filename; - $this->mode = $mode; - - // unsetting the property forces the first access to go through - // __get(). - unset($this->stream); - } - - public function __unserialize(array $data): void - { - $this->stream = new BufferStream(); - - throw new \LogicException(static::class.' should never be unserialized'); - } - - /** - * Creates the underlying stream lazily when required. - */ - protected function createStream(): StreamInterface - { - return Utils::streamFor(Utils::tryFopen($this->filename, $this->mode)); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/LimitStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/LimitStream.php deleted file mode 100644 index 03887b32a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/LimitStream.php +++ /dev/null @@ -1,197 +0,0 @@ -stream = $stream; - $this->setLimit($limit); - $this->setOffset($offset); - } - - public function eof(): bool - { - // Always return true if the underlying stream is EOF - if ($this->stream->eof()) { - return true; - } - - // No limit and the underlying stream is not at EOF - if ($this->limit === -1) { - return false; - } - - return $this->stream->tell() >= Integers::add($this->offset, $this->limit); - } - - /** - * Returns the size of the limited subset of data - */ - public function getSize(): ?int - { - if (null === ($length = $this->stream->getSize())) { - return null; - } - - $size = $length - $this->offset; - - if ($this->limit !== -1) { - $size = min($this->limit, $size); - } - - return max(0, $size); - } - - /** - * Allow for a bounded seek on the read limited stream - */ - public function seek(int $offset, int $whence = SEEK_SET): void - { - if ($whence !== SEEK_SET || $offset < 0) { - throw new \RuntimeException(sprintf( - 'Cannot seek to offset %s with whence %s', - $offset, - $whence - )); - } - - $offset = Integers::add($this->offset, $offset); - - if ($this->limit !== -1) { - $upperBound = Integers::add($this->offset, $this->limit); - if ($offset > $upperBound) { - $offset = $upperBound; - } - } - - $this->stream->seek($offset); - } - - /** - * Give a relative tell() - */ - public function tell(): int - { - return $this->stream->tell() - $this->offset; - } - - /** - * Set the offset to start limiting from - * - * @param int $offset Offset to seek to and begin byte limiting from - * - * @throws \RuntimeException if the stream cannot be seeked. - */ - public function setOffset(int $offset): void - { - $offset = Integers::assertNonNegativeInteger($offset, 'Offset'); - - $current = $this->stream->tell(); - - if ($current === $offset) { - $this->offset = $offset; - - return; - } - - // If the stream cannot seek to the offset position, then read to it. - if ($this->stream->isSeekable()) { - $this->stream->seek($offset); - $this->offset = $offset; - - return; - } - - if ($current > $offset) { - throw new \RuntimeException("Could not seek to stream offset $offset"); - } - - while ($current < $offset) { - if ($this->stream->eof()) { - $this->offset = $current; - - return; - } - - $result = $this->stream->read($offset - $current); - - if ($result === '') { - if ($this->stream->eof()) { - $this->offset = $current; - - return; - } - - throw new \RuntimeException("Could not seek to stream offset $offset"); - } - - $current = Integers::add($current, strlen($result)); - } - - $this->offset = $offset; - } - - /** - * Set the limit of bytes that the decorator allows to be read from the - * stream. - * - * @param int $limit Number of bytes to allow to be read from the stream. - * Use -1 for no limit. - */ - public function setLimit(int $limit): void - { - $this->limit = Integers::assertLimitInteger($limit, 'Limit'); - } - - public function read(int $length): string - { - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - if ($this->limit === -1) { - return $this->stream->read($length); - } - - // Check if the current position is less than the total allowed - // bytes + original offset - $remaining = Integers::add($this->offset, $this->limit) - $this->stream->tell(); - if ($remaining > 0) { - // Only return the amount of requested data, ensuring that the byte - // limit is not exceeded - return $this->stream->read(min($remaining, $length)); - } - - return ''; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Message.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Message.php deleted file mode 100644 index 5158f692b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Message.php +++ /dev/null @@ -1,256 +0,0 @@ -getMethod().' ' - .$message->getRequestTarget(), " \n\r\t\0\x0B") - .' HTTP/'.$message->getProtocolVersion(); - if (!$message->hasHeader('host')) { - $msg .= "\r\nHost: ".self::hostHeaderFromUri($message->getUri()); - } - } elseif ($message instanceof ResponseInterface) { - $msg = 'HTTP/'.$message->getProtocolVersion().' ' - .$message->getStatusCode().' ' - .$message->getReasonPhrase(); - } else { - throw new \InvalidArgumentException('Unknown message type'); - } - - foreach ($message->getHeaders() as $name => $values) { - if (is_string($name) && Utils::asciiToLower($name) === 'set-cookie') { - foreach ($values as $value) { - $msg .= "\r\n{$name}: ".$value; - } - } else { - $msg .= "\r\n{$name}: ".implode(', ', $values); - } - } - - return "{$msg}\r\n\r\n".$message->getBody(); - } - - private static function hostHeaderFromUri(UriInterface $uri): string - { - $host = $uri->getHost(); - - if ($host === '') { - return ''; - } - - Uri::assertValidHost($host); - - if (($port = $uri->getPort()) !== null) { - $host .= ':'.$port; - } - - return $host; - } - - /** - * Get a short summary of the message body. - * - * Will return `null` if the response is not printable. - * - * Reads seekable bodies from the beginning and restores the original cursor - * position before returning. Pass `null` for `$truncateAt` to use the - * default summary length. - * - * @param MessageInterface $message The message to get the body summary - * @param int|null $truncateAt Maximum allowed size of the summary - */ - public static function bodySummary(MessageInterface $message, ?int $truncateAt = null): ?string - { - $truncateAt ??= self::DEFAULT_BODY_SUMMARY_TRUNCATE_AT; - - $body = $message->getBody(); - - if (!$body->isSeekable() || !$body->isReadable()) { - return null; - } - - $size = $body->getSize(); - - if ($size === 0) { - return null; - } - - $position = $body->tell(); - - try { - $body->rewind(); - $summary = $body->read($truncateAt); - - if ($size > $truncateAt) { - if (preg_match('//u', $summary) !== 1) { - $summary = self::trimTrailingIncompleteUtf8Character($summary, $body->read(3)); - } - - $summary .= ' (truncated...)'; - } - } finally { - $body->seek($position); - } - - // Matches any printable character, including unicode characters: - // letters, marks, numbers, punctuation, spacing, and separators. - if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary) !== 0) { - return null; - } - - return $summary; - } - - /** - * Trims a partial UTF-8 character from the end of a truncated string. - */ - private static function trimTrailingIncompleteUtf8Character(string $summary, string $lookahead): string - { - $length = strlen($summary); - - if ($length === 0) { - return $summary; - } - - $start = $length - 1; - - while ($start >= 0) { - $byte = ord($summary[$start]); - - if ($byte < 0x80 || $byte > 0xBF) { - break; - } - - --$start; - } - - if ($start < 0) { - return $summary; - } - - $lead = ord($summary[$start]); - - if ($lead >= 0xC2 && $lead <= 0xDF) { - $expectedLength = 2; - } elseif ($lead >= 0xE0 && $lead <= 0xEF) { - $expectedLength = 3; - } elseif ($lead >= 0xF0 && $lead <= 0xF4) { - $expectedLength = 4; - } else { - return $summary; - } - - $availableLength = $length - $start; - - if ($availableLength >= $expectedLength) { - return $summary; - } - - $sequence = substr($summary, $start).substr($lookahead, 0, $expectedLength - $availableLength); - - if (strlen($sequence) !== $expectedLength || preg_match('//u', $sequence) !== 1) { - return $summary; - } - - return substr($summary, 0, $start); - } - - /** - * Attempts to rewind a message body and throws an exception on failure. - * - * The body of the message will only be rewound if a call to `tell()` - * returns a value other than `0`. - * - * @param MessageInterface $message Message to rewind - * - * @throws \RuntimeException - */ - public static function rewindBody(MessageInterface $message): void - { - $body = $message->getBody(); - - if ($body->tell()) { - $body->rewind(); - } - } - - /** - * Parses an HTTP message into an associative array. - * - * The array contains the `start-line` key containing the start line of the - * message, `headers` key containing an associative array of header array - * values, and a `body` key containing the body of the message. - * - * @param string $message HTTP request or response to parse. - */ - public static function parseMessage(string $message): array - { - return MessageParser::parseMessage($message); - } - - /** - * Constructs a URI for an HTTP request message. - * - * The URI is composed from the start-line path and the `Host` header, using - * `https` when the host's port is `443` and `http` otherwise. Without a - * `Host` header, only the path is returned, with extra leading slashes - * collapsed so an origin-form target cannot be parsed as a network-path - * reference with its own authority. An `InvalidArgumentException` is thrown - * when the `Host` header is invalid. - * - * @param string $path Path from the start-line - * @param array $headers Array of headers (each value an array). - */ - public static function parseRequestUri(string $path, array $headers): string - { - return MessageParser::parseRequestUri($path, $headers); - } - - /** - * Parses a request message string into a request object. - * - * The request-target must be in origin form, absolute form (without a - * userinfo component), authority form (`CONNECT`), or asterisk form - * (`OPTIONS`), and any `Host` header must be a single valid value; - * otherwise an `InvalidArgumentException` is thrown. Non-origin-form - * targets are preserved on the returned request via `withRequestTarget()`. - * - * @param string $message Request message string. - */ - public static function parseRequest(string $message): RequestInterface - { - return MessageParser::parseRequest($message); - } - - /** - * Parses a response message string into a response object. - * - * @param string $message Response message string. - */ - public static function parseResponse(string $message): ResponseInterface - { - return MessageParser::parseResponse($message); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MessageParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MessageParser.php deleted file mode 100644 index 22fe01899..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MessageParser.php +++ /dev/null @@ -1,363 +0,0 @@ -> $headerLines */ - if ($count === false) { - throw new \RuntimeException('Unable to parse HTTP headers: '.preg_last_error_msg()); - } - - // If these aren't the same, then one line didn't match and there's an invalid header. - if ($count !== substr_count($rawHeaders, "\n")) { - // Folding is deprecated, see https://datatracker.ietf.org/doc/html/rfc9112#section-5.2 - $hasFoldedHeader = preg_match(Rfc9112::HEADER_FOLD_REGEX, $rawHeaders); - - if ($hasFoldedHeader === false) { - throw new \RuntimeException('Unable to inspect HTTP header folding: '.preg_last_error_msg()); - } - - if ($hasFoldedHeader === 1) { - throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); - } - - throw new \InvalidArgumentException('Invalid header syntax'); - } - - $headers = []; - - foreach ($headerLines as $headerLine) { - $headers[$headerLine[1]][] = $headerLine[2]; - } - - return [ - 'start-line' => $startLine, - 'headers' => $headers, - 'body' => $body, - ]; - } - - public static function parseRequestUri(string $path, array $headers): string - { - $host = self::getHostFromHeaders($headers); - - // If no host is found, then a full URI cannot be constructed. - // Collapse leading slashes so an origin-form target cannot be - // parsed as a network-path reference with its own authority. - if ($host === null) { - return self::normalizePathForOriginForm($path); - } - - [$authorityHost, $port] = self::parseHostHeaderAuthority($host); - $scheme = $port === 443 ? 'https' : 'http'; - - return $scheme.'://'.self::composeAuthority($authorityHost, $port).'/'.ltrim($path, '/'); - } - - private static function normalizePathForOriginForm(string $path): string - { - if (str_starts_with($path, '//')) { - return '/'.ltrim($path, '/'); - } - - return $path; - } - - /** - * @return array{0: string, 1: int|null} - */ - private static function parseHostHeaderAuthority(string $authority): array - { - $parsed = Rfc9112::parseHostHeader($authority); - if ($parsed === null) { - throw new \InvalidArgumentException('Invalid request string'); - } - - return $parsed; - } - - private static function composeAuthority(string $host, ?int $port): string - { - return $host.($port !== null ? ':'.$port : ''); - } - - /** - * @param array $headers Array of headers (each value an array). - */ - private static function getHostFromHeaders(array $headers): ?string - { - $host = self::getSingleHostHeader($headers); - if ($host === null) { - return null; - } - - self::parseHostHeaderAuthority($host); - - return $host; - } - - /** - * @param array $headers Array of headers (each value an array). - */ - private static function getSingleHostHeader(array $headers): ?string - { - $host = null; - $found = false; - - foreach ($headers as $name => $values) { - if (Utils::asciiToLower((string) $name) !== 'host') { - continue; - } - - if ($found || !is_array($values) || count($values) !== 1) { - throw new \InvalidArgumentException('Invalid request string'); - } - - $found = true; - $host = reset($values); - } - - if (!$found) { - return null; - } - - if (!is_string($host)) { - throw new \InvalidArgumentException('Invalid request string'); - } - - return $host; - } - - /** - * @param array $headers Array of headers (each value an array). - */ - private static function parseRequestAuthorityUri(array $headers): string - { - $host = self::getHostFromHeaders($headers); - if ($host === null) { - return ''; - } - - [$authorityHost, $port] = self::parseHostHeaderAuthority($host); - $scheme = $port === 443 ? 'https' : 'http'; - - return $scheme.'://'.self::composeAuthority($authorityHost, $port); - } - - public static function parseRequest(string $message): RequestInterface - { - $data = self::parseMessage($message); - $matches = []; - $matched = preg_match( - '/^(?P'.Rfc9110::TOKEN_PATTERN.') (?P'.Rfc9112::REQUEST_TARGET_PATTERN.') HTTP\/(?P'.Rfc9112::PROTOCOL_VERSION_PATTERN.')$/D', - $data['start-line'], - $matches - ); - - if ($matched === false) { - throw new \RuntimeException('Unable to parse request start line: '.preg_last_error_msg()); - } - - if ($matched === 0) { - throw new \InvalidArgumentException('Invalid request string'); - } - - self::getHostFromHeaders($data['headers']); - - if (str_starts_with($matches['target'], '/')) { - return new Request( - $matches['method'], - self::parseRequestUri($matches['target'], $data['headers']), - $data['headers'], - $data['body'], - $matches['version'] - ); - } - - $absoluteFormUri = self::parseAbsoluteFormRequestTarget($matches['target']); - if ($absoluteFormUri !== null) { - return (new Request( - $matches['method'], - $absoluteFormUri, - $data['headers'], - $data['body'], - $matches['version'] - ))->withRequestTarget($matches['target']); - } - - if (Rfc9112::isAsteriskFormRequestTarget($matches['method'], $matches['target'])) { - return (new Request( - $matches['method'], - self::parseRequestAuthorityUri($data['headers']), - $data['headers'], - $data['body'], - $matches['version'] - ))->withRequestTarget($matches['target']); - } - - $connectUri = self::parseConnectAuthorityFormRequestTarget($matches['method'], $matches['target']); - if ($connectUri !== null) { - return (new Request( - $matches['method'], - $connectUri, - $data['headers'], - $data['body'], - $matches['version'] - ))->withRequestTarget($matches['target']); - } - - throw new \InvalidArgumentException('Invalid request string'); - } - - private static function parseAbsoluteFormRequestTarget(string $target): ?Uri - { - if (!Rfc9112::isAbsoluteFormRequestTarget($target)) { - return null; - } - - $authority = substr($target, strpos($target, '//') + 2); - $authority = substr($authority, 0, strcspn($authority, '/?#')); - - // RFC 9110 deprecates userinfo in message target URIs and directs - // recipients to treat its presence as an error, since it can obscure - // the authority. Host headers and CONNECT targets already reject it. - if (str_contains($authority, '@')) { - return null; - } - - try { - $uri = new Uri($target); - } catch (\InvalidArgumentException $e) { - return null; - } - - if ($uri->getHost() === '') { - return null; - } - - try { - self::parseHostHeaderAuthority(self::composeAuthority($uri->getHost(), $uri->getPort())); - } catch (\InvalidArgumentException $e) { - return null; - } - - return $uri; - } - - private static function parseConnectAuthorityFormRequestTarget(string $method, string $target): ?Uri - { - if (!Rfc9112::isConnectAuthorityFormRequestTarget($method, $target)) { - return null; - } - - $parsed = Rfc9112::parseHostHeader($target); - if ($parsed === null) { - return null; - } - - [$host, $port] = $parsed; - if ($port === null) { - return null; - } - - try { - return new Uri('//'.self::composeAuthority($host, $port)); - } catch (\InvalidArgumentException $e) { - return null; - } - } - - public static function parseResponse(string $message): ResponseInterface - { - $data = self::parseMessage($message); - // According to https://datatracker.ietf.org/doc/html/rfc9112#section-4 - // the space between status-code and reason-phrase is required. But - // browsers accept responses without space and reason as well. - $matched = preg_match( - '/^HTTP\/(?P'.Rfc9112::PROTOCOL_VERSION_PATTERN.') (?P[1-5][0-9]{2})(?: (?P'.Rfc9110::FIELD_VALUE_PATTERN.'))?$/D', - $data['start-line'], - $matches - ); - - if ($matched === false) { - throw new \RuntimeException('Unable to parse response start line: '.preg_last_error_msg()); - } - - if ($matched === 0) { - throw new \InvalidArgumentException(\sprintf('Invalid response string: %s', DiagnosticValue::escape($data['start-line']))); - } - - return new Response( - (int) $matches['status'], - $data['headers'], - $data['body'], - $matches['version'], - $matches['reason'] ?? null - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MessageTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MessageTrait.php deleted file mode 100644 index 12da9f5f5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MessageTrait.php +++ /dev/null @@ -1,275 +0,0 @@ - array of values */ - private array $headers = []; - - /** @var string[] Map of lowercase header name => original name at registration */ - private array $headerNames = []; - - private string $protocol = '1.1'; - - private ?StreamInterface $stream = null; - - public function getProtocolVersion(): string - { - return $this->protocol; - } - - /** - * @return static - */ - public function withProtocolVersion(string $version): MessageInterface - { - $this->assertProtocolVersion($version); - - if ($this->protocol === $version) { - return $this; - } - - $new = clone $this; - $new->protocol = $version; - - return $new; - } - - public function getHeaders(): array - { - return $this->headers; - } - - public function hasHeader(string $name): bool - { - return isset($this->headerNames[Utils::asciiToLower($name)]); - } - - public function getHeader(string $name): array - { - $header = Utils::asciiToLower($name); - - if (!isset($this->headerNames[$header])) { - return []; - } - - $header = $this->headerNames[$header]; - - return $this->headers[$header]; - } - - public function getHeaderLine(string $name): string - { - return implode(', ', $this->getHeader($name)); - } - - /** - * @return static - */ - public function withHeader(string $name, $value): MessageInterface - { - $this->assertHeader($name); - $value = $this->normalizeHeaderValue($value); - $normalized = Utils::asciiToLower($name); - - $new = clone $this; - if (isset($new->headerNames[$normalized])) { - unset($new->headers[$new->headerNames[$normalized]]); - } - $new->headerNames[$normalized] = $name; - $new->headers[$name] = $value; - - return $new; - } - - /** - * @return static - */ - public function withAddedHeader(string $name, $value): MessageInterface - { - $this->assertHeader($name); - $value = $this->normalizeHeaderValue($value); - $normalized = Utils::asciiToLower($name); - - $new = clone $this; - if (isset($new->headerNames[$normalized])) { - $name = $this->headerNames[$normalized]; - $new->headers[$name] = array_merge($this->headers[$name], $value); - } else { - $new->headerNames[$normalized] = $name; - $new->headers[$name] = $value; - } - - return $new; - } - - /** - * @return static - */ - public function withoutHeader(string $name): MessageInterface - { - $normalized = Utils::asciiToLower($name); - - if (!isset($this->headerNames[$normalized])) { - return $this; - } - - $name = $this->headerNames[$normalized]; - - $new = clone $this; - unset($new->headers[$name], $new->headerNames[$normalized]); - - return $new; - } - - public function getBody(): StreamInterface - { - if (!$this->stream) { - $this->stream = Utils::streamFor(''); - } - - return $this->stream; - } - - /** - * @return static - */ - public function withBody(StreamInterface $body): MessageInterface - { - if ($body === $this->stream) { - return $this; - } - - $new = clone $this; - $new->stream = $body; - - return $new; - } - - /** - * @param (string|string[])[] $headers - */ - private function setHeaders(array $headers): void - { - $this->headerNames = $this->headers = []; - foreach ($headers as $header => $value) { - // Numeric array keys are converted to int by PHP. - $header = (string) $header; - - $this->assertHeader($header); - $value = $this->normalizeHeaderValue($value); - $normalized = Utils::asciiToLower($header); - if (isset($this->headerNames[$normalized])) { - $header = $this->headerNames[$normalized]; - $this->headers[$header] = array_merge($this->headers[$header], $value); - } else { - $this->headerNames[$normalized] = $header; - $this->headers[$header] = $value; - } - } - } - - /** - * @param mixed $value - * - * @return string[] - */ - private function normalizeHeaderValue($value): array - { - if (is_array($value) && $value === []) { - throw new \InvalidArgumentException('Header value must be a non-empty array or string.'); - } - - if (!is_array($value)) { - return $this->trimAndValidateHeaderValues([$value]); - } - - return $this->trimAndValidateHeaderValues($value); - } - - /** - * Trims whitespace from the header values. - * - * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field. - * - * header-field = field-name ":" OWS field-value OWS - * OWS = *( SP / HTAB ) - * - * @param mixed[] $values Header values - * - * @return string[] Trimmed header values - * - * @see https://datatracker.ietf.org/doc/html/rfc9110#section-5.5 - */ - private function trimAndValidateHeaderValues(array $values): array - { - return array_map(function ($value): string { - if (!is_string($value)) { - throw new \InvalidArgumentException(sprintf( - 'Header value must be a string or array of strings but %s provided.', - \get_debug_type($value) - )); - } - - $trimmed = trim($value, " \t"); - $this->assertValue($trimmed); - - return $trimmed; - }, array_values($values)); - } - - /** - * @see https://datatracker.ietf.org/doc/html/rfc9110#section-5.1 - */ - private function assertHeader(string $header): void - { - if (!Rfc9110::isToken($header)) { - throw new \InvalidArgumentException(sprintf('Invalid header name: %s', DiagnosticValue::escape($header))); - } - } - - private function assertProtocolVersion(string $version): void - { - if (!Rfc9112::isValidProtocolVersion($version)) { - throw new \InvalidArgumentException('Protocol version must be a valid HTTP version number.'); - } - } - - /** - * @see https://datatracker.ietf.org/doc/html/rfc9110#section-5.5 - * - * field-value = *( field-content / obs-fold ) - * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] - * field-vchar = VCHAR / obs-text - * VCHAR = %x21-7E - * obs-text = %x80-FF - * obs-fold = CRLF 1*( SP / HTAB ) - */ - private function assertValue(string $value): void - { - // The regular expression intentionally does not support the obs-fold - // production, because as per RFC 9112#5.2: - // - // A sender MUST NOT generate a message that includes line folding - // (i.e., that has any field-value that contains a match to the obs-fold - // rule) unless the message is intended for packaging within the - // message/http media type. - // - // Clients must not send a request with line folding and a server - // sending folded headers is likely very rare. Line folding is a fairly - // obscure feature of HTTP/1.1 and thus not accepting folding is not - // likely to break any legitimate use case. - if (!Rfc9110::isFieldValue($value)) { - throw new \InvalidArgumentException(sprintf('Invalid header value: %s', DiagnosticValue::escape($value))); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MimeType.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MimeType.php deleted file mode 100644 index 0d17cd2ae..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MimeType.php +++ /dev/null @@ -1,1309 +0,0 @@ - 'application/vnd.lotus-1-2-3', - '1km' => 'application/vnd.1000minds.decision-model+xml', - '210' => 'model/step', - '3dml' => 'text/vnd.in3d.3dml', - '3ds' => 'image/x-3ds', - '3g2' => 'video/3gpp2', - '3gp' => 'video/3gpp', - '3gpp' => 'video/3gpp', - '3mf' => 'model/3mf', - '7z' => 'application/x-7z-compressed', - '7zip' => 'application/x-7z-compressed', - 'aab' => 'application/x-authorware-bin', - 'aac' => 'audio/aac', - 'aam' => 'application/x-authorware-map', - 'aas' => 'application/x-authorware-seg', - 'abw' => 'application/x-abiword', - 'ac' => 'application/pkix-attr-cert', - 'ac3' => 'audio/ac3', - 'acc' => 'application/vnd.americandynamics.acc', - 'ace' => 'application/x-ace-compressed', - 'acu' => 'application/vnd.acucobol', - 'acutc' => 'application/vnd.acucorp', - 'adp' => 'audio/adpcm', - 'adts' => 'audio/aac', - 'aep' => 'application/vnd.audiograph', - 'afm' => 'application/x-font-type1', - 'afp' => 'application/vnd.ibm.modcap', - 'age' => 'application/vnd.age', - 'ahead' => 'application/vnd.ahead.space', - 'ai' => 'application/postscript', - 'aif' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'air' => 'application/vnd.adobe.air-application-installer-package+zip', - 'ait' => 'application/vnd.dvb.ait', - 'ami' => 'application/vnd.amiga.ami', - 'aml' => 'application/automationml-aml+xml', - 'amlx' => 'application/automationml-amlx+zip', - 'amr' => 'audio/amr', - 'apk' => 'application/vnd.android.package-archive', - 'apng' => 'image/apng', - 'appcache' => 'text/cache-manifest', - 'appinstaller' => 'application/appinstaller', - 'application' => 'application/x-ms-application', - 'appx' => 'application/appx', - 'appxbundle' => 'application/appxbundle', - 'apr' => 'application/vnd.lotus-approach', - 'arc' => 'application/x-freearc', - 'arj' => 'application/x-arj', - 'asc' => 'application/pgp-keys', - 'asf' => 'video/x-ms-asf', - 'asm' => 'text/x-asm', - 'aso' => 'application/vnd.accpac.simply.aso', - 'asx' => 'video/x-ms-asf', - 'atc' => 'application/vnd.acucorp', - 'atom' => 'application/atom+xml', - 'atomcat' => 'application/atomcat+xml', - 'atomdeleted' => 'application/atomdeleted+xml', - 'atomsvc' => 'application/atomsvc+xml', - 'atx' => 'application/vnd.antix.game-component', - 'au' => 'audio/basic', - 'avci' => 'image/avci', - 'avcs' => 'image/avcs', - 'avi' => 'video/x-msvideo', - 'avif' => 'image/avif', - 'aw' => 'application/applixware', - 'azf' => 'application/vnd.airzip.filesecure.azf', - 'azs' => 'application/vnd.airzip.filesecure.azs', - 'azv' => 'image/vnd.airzip.accelerator.azv', - 'azw' => 'application/vnd.amazon.ebook', - 'b16' => 'image/vnd.pco.b16', - 'bary' => 'model/vnd.bary', - 'bat' => 'application/x-msdownload', - 'bcpio' => 'application/x-bcpio', - 'bdf' => 'application/x-font-bdf', - 'bdm' => 'application/vnd.syncml.dm+wbxml', - 'bdo' => 'application/vnd.nato.bindingdataobject+xml', - 'bdoc' => 'application/bdoc', - 'bed' => 'application/vnd.realvnc.bed', - 'bh2' => 'application/vnd.fujitsu.oasysprs', - 'bin' => 'application/octet-stream', - 'blb' => 'application/x-blorb', - 'blend' => 'application/x-blender', - 'blorb' => 'application/x-blorb', - 'bmi' => 'application/vnd.bmi', - 'bmml' => 'application/vnd.balsamiq.bmml+xml', - 'bmp' => 'image/bmp', - 'book' => 'application/vnd.framemaker', - 'box' => 'application/vnd.previewsystems.box', - 'boz' => 'application/x-bzip2', - 'bpk' => 'application/octet-stream', - 'bpmn' => 'application/octet-stream', - 'brush' => 'application/vnd.procreate.brush', - 'brushset' => 'application/vnd.procreate.brushset', - 'bsp' => 'model/vnd.valve.source.compiled-map', - 'btf' => 'image/prs.btif', - 'btif' => 'image/prs.btif', - 'buffer' => 'application/octet-stream', - 'bz' => 'application/x-bzip', - 'bz2' => 'application/x-bzip2', - 'c' => 'text/x-c', - 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', - 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', - 'c4d' => 'application/vnd.clonk.c4group', - 'c4f' => 'application/vnd.clonk.c4group', - 'c4g' => 'application/vnd.clonk.c4group', - 'c4p' => 'application/vnd.clonk.c4group', - 'c4u' => 'application/vnd.clonk.c4group', - 'cab' => 'application/vnd.ms-cab-compressed', - 'caf' => 'audio/x-caf', - 'cap' => 'application/vnd.tcpdump.pcap', - 'car' => 'application/vnd.curl.car', - 'cat' => 'application/vnd.ms-pki.seccat', - 'cb7' => 'application/x-cbr', - 'cba' => 'application/x-cbr', - 'cbr' => 'application/x-cbr', - 'cbt' => 'application/x-cbr', - 'cbz' => 'application/x-cbr', - 'cc' => 'text/x-c', - 'cco' => 'application/x-cocoa', - 'cct' => 'application/x-director', - 'ccxml' => 'application/ccxml+xml', - 'cdbcmsg' => 'application/vnd.contact.cmsg', - 'cdf' => 'application/x-netcdf', - 'cdfx' => 'application/cdfx+xml', - 'cdkey' => 'application/vnd.mediastation.cdkey', - 'cdmia' => 'application/cdmi-capability', - 'cdmic' => 'application/cdmi-container', - 'cdmid' => 'application/cdmi-domain', - 'cdmio' => 'application/cdmi-object', - 'cdmiq' => 'application/cdmi-queue', - 'cdx' => 'chemical/x-cdx', - 'cdxml' => 'application/vnd.chemdraw+xml', - 'cdy' => 'application/vnd.cinderella', - 'cer' => 'application/pkix-cert', - 'cfs' => 'application/x-cfs-compressed', - 'cgm' => 'image/cgm', - 'chat' => 'application/x-chat', - 'chm' => 'application/vnd.ms-htmlhelp', - 'chrt' => 'application/vnd.kde.kchart', - 'cif' => 'chemical/x-cif', - 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', - 'cil' => 'application/vnd.ms-artgalry', - 'cjs' => 'application/node', - 'cla' => 'application/vnd.claymore', - 'class' => 'application/java-vm', - 'cld' => 'model/vnd.cld', - 'clkk' => 'application/vnd.crick.clicker.keyboard', - 'clkp' => 'application/vnd.crick.clicker.palette', - 'clkt' => 'application/vnd.crick.clicker.template', - 'clkw' => 'application/vnd.crick.clicker.wordbank', - 'clkx' => 'application/vnd.crick.clicker', - 'clp' => 'application/x-msclip', - 'cmc' => 'application/vnd.cosmocaller', - 'cmdf' => 'chemical/x-cmdf', - 'cml' => 'chemical/x-cml', - 'cmp' => 'application/vnd.yellowriver-custom-menu', - 'cmx' => 'image/x-cmx', - 'cod' => 'application/vnd.rim.cod', - 'coffee' => 'text/coffeescript', - 'com' => 'application/x-msdownload', - 'conf' => 'text/plain', - 'cpio' => 'application/x-cpio', - 'cpl' => 'application/cpl+xml', - 'cpp' => 'text/x-c', - 'cpt' => 'application/mac-compactpro', - 'crd' => 'application/x-mscardfile', - 'crl' => 'application/pkix-crl', - 'crt' => 'application/x-x509-ca-cert', - 'crx' => 'application/x-chrome-extension', - 'cryptonote' => 'application/vnd.rig.cryptonote', - 'csh' => 'application/x-csh', - 'csl' => 'application/vnd.citationstyles.style+xml', - 'csml' => 'chemical/x-csml', - 'csp' => 'application/vnd.commonspace', - 'csr' => 'application/octet-stream', - 'css' => 'text/css', - 'cst' => 'application/x-director', - 'csv' => 'text/csv', - 'cu' => 'application/cu-seeme', - 'curl' => 'text/vnd.curl', - 'cwl' => 'application/cwl', - 'cww' => 'application/prs.cww', - 'cxt' => 'application/x-director', - 'cxx' => 'text/x-c', - 'dae' => 'model/vnd.collada+xml', - 'daf' => 'application/vnd.mobius.daf', - 'dart' => 'application/vnd.dart', - 'dataless' => 'application/vnd.fdsn.seed', - 'davmount' => 'application/davmount+xml', - 'dbf' => 'application/vnd.dbf', - 'dbk' => 'application/docbook+xml', - 'dcm' => 'application/dicom', - 'dcmp' => 'application/vnd.dcmp+xml', - 'dcr' => 'application/x-director', - 'dcurl' => 'text/vnd.curl.dcurl', - 'dd2' => 'application/vnd.oma.dd2+xml', - 'ddd' => 'application/vnd.fujixerox.ddd', - 'ddf' => 'application/vnd.syncml.dmddf+xml', - 'dds' => 'image/vnd.ms-dds', - 'deb' => 'application/x-debian-package', - 'def' => 'text/plain', - 'deploy' => 'application/octet-stream', - 'der' => 'application/x-x509-ca-cert', - 'dfac' => 'application/vnd.dreamfactory', - 'dgc' => 'application/x-dgc-compressed', - 'dib' => 'image/bmp', - 'dic' => 'text/x-c', - 'dir' => 'application/x-director', - 'dis' => 'application/vnd.mobius.dis', - 'disposition-notification' => 'message/disposition-notification', - 'dist' => 'application/octet-stream', - 'distz' => 'application/octet-stream', - 'djv' => 'image/vnd.djvu', - 'djvu' => 'image/vnd.djvu', - 'dll' => 'application/octet-stream', - 'dmg' => 'application/x-apple-diskimage', - 'dmn' => 'application/octet-stream', - 'dmp' => 'application/vnd.tcpdump.pcap', - 'dms' => 'application/octet-stream', - 'dna' => 'application/vnd.dna', - 'dng' => 'image/x-adobe-dng', - 'doc' => 'application/msword', - 'docm' => 'application/vnd.ms-word.document.macroenabled.12', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dot' => 'application/msword', - 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', - 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - 'dp' => 'application/vnd.osgi.dp', - 'dpg' => 'application/vnd.dpgraph', - 'dpx' => 'image/dpx', - 'dra' => 'audio/vnd.dra', - 'drle' => 'image/dicom-rle', - 'drm' => 'application/vnd.procreate.dream', - 'dsc' => 'text/prs.lines.tag', - 'dssc' => 'application/dssc+der', - 'dst' => 'application/octet-stream', - 'dtb' => 'application/x-dtbook+xml', - 'dtd' => 'application/xml-dtd', - 'dts' => 'audio/vnd.dts', - 'dtshd' => 'audio/vnd.dts.hd', - 'dump' => 'application/octet-stream', - 'dvb' => 'video/vnd.dvb.file', - 'dvi' => 'application/x-dvi', - 'dwd' => 'application/atsc-dwd+xml', - 'dwf' => 'model/vnd.dwf', - 'dwg' => 'image/vnd.dwg', - 'dxf' => 'image/vnd.dxf', - 'dxp' => 'application/vnd.spotfire.dxp', - 'dxr' => 'application/x-director', - 'ear' => 'application/java-archive', - 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', - 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', - 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', - 'ecma' => 'application/ecmascript', - 'edm' => 'application/vnd.novadigm.edm', - 'edx' => 'application/vnd.novadigm.edx', - 'efif' => 'application/vnd.picsel', - 'ei6' => 'application/vnd.pg.osasli', - 'elc' => 'application/octet-stream', - 'emf' => 'image/emf', - 'eml' => 'message/rfc822', - 'emma' => 'application/emma+xml', - 'emotionml' => 'application/emotionml+xml', - 'emz' => 'application/x-msmetafile', - 'eol' => 'audio/vnd.digital-winds', - 'eot' => 'application/vnd.ms-fontobject', - 'eps' => 'application/postscript', - 'epub' => 'application/epub+zip', - 'es3' => 'application/vnd.eszigno3+xml', - 'esa' => 'application/vnd.osgi.subsystem', - 'esf' => 'application/vnd.epson.esf', - 'et3' => 'application/vnd.eszigno3+xml', - 'etx' => 'text/x-setext', - 'eva' => 'application/x-eva', - 'evy' => 'application/x-envoy', - 'exe' => 'application/octet-stream', - 'exi' => 'application/exi', - 'exp' => 'application/express', - 'exr' => 'image/aces', - 'ext' => 'application/vnd.novadigm.ext', - 'ez' => 'application/andrew-inset', - 'ez2' => 'application/vnd.ezpix-album', - 'ez3' => 'application/vnd.ezpix-package', - 'f' => 'text/x-fortran', - 'f4v' => 'video/mp4', - 'f77' => 'text/x-fortran', - 'f90' => 'text/x-fortran', - 'facti' => 'image/vnd.blockfact.facti', - 'fbs' => 'image/vnd.fastbidsheet', - 'fbx' => 'application/vnd.autodesk.fbx', - 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', - 'fcs' => 'application/vnd.isac.fcs', - 'fdf' => 'application/fdf', - 'fdt' => 'application/fdt+xml', - 'fe_launch' => 'application/vnd.denovo.fcselayout-link', - 'fg5' => 'application/vnd.fujitsu.oasysgp', - 'fgd' => 'application/x-director', - 'fh' => 'image/x-freehand', - 'fh4' => 'image/x-freehand', - 'fh5' => 'image/x-freehand', - 'fh7' => 'image/x-freehand', - 'fhc' => 'image/x-freehand', - 'fig' => 'application/x-xfig', - 'fits' => 'image/fits', - 'flac' => 'audio/x-flac', - 'fli' => 'video/x-fli', - 'flo' => 'application/vnd.micrografx.flo', - 'flv' => 'video/x-flv', - 'flw' => 'application/vnd.kde.kivio', - 'flx' => 'text/vnd.fmi.flexstor', - 'fly' => 'text/vnd.fly', - 'fm' => 'application/vnd.framemaker', - 'fnc' => 'application/vnd.frogans.fnc', - 'fo' => 'application/vnd.software602.filler.form+xml', - 'for' => 'text/x-fortran', - 'fpx' => 'image/vnd.fpx', - 'frame' => 'application/vnd.framemaker', - 'fsc' => 'application/vnd.fsc.weblaunch', - 'fst' => 'image/vnd.fst', - 'ftc' => 'application/vnd.fluxtime.clip', - 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', - 'fvt' => 'video/vnd.fvt', - 'fxp' => 'application/vnd.adobe.fxp', - 'fxpl' => 'application/vnd.adobe.fxp', - 'fzs' => 'application/vnd.fuzzysheet', - 'g2w' => 'application/vnd.geoplan', - 'g3' => 'image/g3fax', - 'g3w' => 'application/vnd.geospace', - 'gac' => 'application/vnd.groove-account', - 'gam' => 'application/x-tads', - 'gbr' => 'application/rpki-ghostbusters', - 'gca' => 'application/x-gca-compressed', - 'gdl' => 'model/vnd.gdl', - 'gdoc' => 'application/vnd.google-apps.document', - 'gdraw' => 'application/vnd.google-apps.drawing', - 'ged' => 'text/vnd.familysearch.gedcom', - 'geo' => 'application/vnd.dynageo', - 'geojson' => 'application/geo+json', - 'gex' => 'application/vnd.geometry-explorer', - 'gform' => 'application/vnd.google-apps.form', - 'ggb' => 'application/vnd.geogebra.file', - 'ggs' => 'application/vnd.geogebra.slides', - 'ggt' => 'application/vnd.geogebra.tool', - 'ghf' => 'application/vnd.groove-help', - 'gif' => 'image/gif', - 'gim' => 'application/vnd.groove-identity-message', - 'gjam' => 'application/vnd.google-apps.jam', - 'glb' => 'model/gltf-binary', - 'gltf' => 'model/gltf+json', - 'gmap' => 'application/vnd.google-apps.map', - 'gml' => 'application/gml+xml', - 'gmx' => 'application/vnd.gmx', - 'gnumeric' => 'application/x-gnumeric', - 'gph' => 'application/vnd.flographit', - 'gpx' => 'application/gpx+xml', - 'gqf' => 'application/vnd.grafeq', - 'gqs' => 'application/vnd.grafeq', - 'gram' => 'application/srgs', - 'gramps' => 'application/x-gramps-xml', - 'gre' => 'application/vnd.geometry-explorer', - 'grv' => 'application/vnd.groove-injector', - 'grxml' => 'application/srgs+xml', - 'gscript' => 'application/vnd.google-apps.script', - 'gsf' => 'application/x-font-ghostscript', - 'gsheet' => 'application/vnd.google-apps.spreadsheet', - 'gsite' => 'application/vnd.google-apps.site', - 'gslides' => 'application/vnd.google-apps.presentation', - 'gtar' => 'application/x-gtar', - 'gtm' => 'application/vnd.groove-tool-message', - 'gtw' => 'model/vnd.gtw', - 'gv' => 'text/vnd.graphviz', - 'gxf' => 'application/gxf', - 'gxt' => 'application/vnd.geonext', - 'gz' => 'application/gzip', - 'gzip' => 'application/gzip', - 'h' => 'text/x-c', - 'h261' => 'video/h261', - 'h263' => 'video/h263', - 'h264' => 'video/h264', - 'hal' => 'application/vnd.hal+xml', - 'hbci' => 'application/vnd.hbci', - 'hbs' => 'text/x-handlebars-template', - 'hdd' => 'application/x-virtualbox-hdd', - 'hdf' => 'application/x-hdf', - 'heic' => 'image/heic', - 'heics' => 'image/heic-sequence', - 'heif' => 'image/heif', - 'heifs' => 'image/heif-sequence', - 'hej2' => 'image/hej2k', - 'held' => 'application/atsc-held+xml', - 'hh' => 'text/x-c', - 'hjson' => 'application/hjson', - 'hlp' => 'application/winhlp', - 'hpgl' => 'application/vnd.hp-hpgl', - 'hpid' => 'application/vnd.hp-hpid', - 'hps' => 'application/vnd.hp-hps', - 'hqx' => 'application/mac-binhex40', - 'htc' => 'text/x-component', - 'htke' => 'application/vnd.kenameaapp', - 'htm' => 'text/html', - 'html' => 'text/html', - 'hvd' => 'application/vnd.yamaha.hv-dic', - 'hvp' => 'application/vnd.yamaha.hv-voice', - 'hvs' => 'application/vnd.yamaha.hv-script', - 'i2g' => 'application/vnd.intergeo', - 'icc' => 'application/vnd.iccprofile', - 'ice' => 'x-conference/x-cooltalk', - 'icm' => 'application/vnd.iccprofile', - 'ico' => 'image/vnd.microsoft.icon', - 'ics' => 'text/calendar', - 'ief' => 'image/ief', - 'ifb' => 'text/calendar', - 'ifm' => 'application/vnd.shana.informed.formdata', - 'iges' => 'model/iges', - 'igl' => 'application/vnd.igloader', - 'igm' => 'application/vnd.insors.igm', - 'igs' => 'model/iges', - 'igx' => 'application/vnd.micrografx.igx', - 'iif' => 'application/vnd.shana.informed.interchange', - 'img' => 'application/octet-stream', - 'imp' => 'application/vnd.accpac.simply.imp', - 'ims' => 'application/vnd.ms-ims', - 'in' => 'text/plain', - 'indd' => 'application/x-indesign', - 'ini' => 'text/plain', - 'ink' => 'application/inkml+xml', - 'inkml' => 'application/inkml+xml', - 'install' => 'application/x-install-instructions', - 'iota' => 'application/vnd.astraea-software.iota', - 'ipfix' => 'application/ipfix', - 'ipk' => 'application/vnd.shana.informed.package', - 'ipynb' => 'application/x-ipynb+json', - 'irm' => 'application/vnd.ibm.rights-management', - 'irp' => 'application/vnd.irepository.package+xml', - 'iso' => 'application/x-iso9660-image', - 'itp' => 'application/vnd.shana.informed.formtemplate', - 'its' => 'application/its+xml', - 'ivp' => 'application/vnd.immervision-ivp', - 'ivu' => 'application/vnd.immervision-ivu', - 'jad' => 'text/vnd.sun.j2me.app-descriptor', - 'jade' => 'text/jade', - 'jaii' => 'image/jaii', - 'jais' => 'image/jais', - 'jam' => 'application/vnd.jam', - 'jar' => 'application/java-archive', - 'jardiff' => 'application/x-java-archive-diff', - 'java' => 'text/x-java-source', - 'jfif' => 'image/jpeg', - 'jhc' => 'image/jphc', - 'jisp' => 'application/vnd.jisp', - 'jls' => 'image/jls', - 'jlt' => 'application/vnd.hp-jlyt', - 'jng' => 'image/x-jng', - 'jnlp' => 'application/x-java-jnlp-file', - 'joda' => 'application/vnd.joost.joda-archive', - 'jp2' => 'image/jp2', - 'jpe' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'jpf' => 'image/jpx', - 'jpg' => 'image/jpeg', - 'jpg2' => 'image/jp2', - 'jpgm' => 'image/jpm', - 'jpgv' => 'video/jpeg', - 'jph' => 'image/jph', - 'jpm' => 'image/jpm', - 'jpx' => 'image/jpx', - 'js' => 'text/javascript', - 'json' => 'application/json', - 'json5' => 'application/json5', - 'jsonld' => 'application/ld+json', - 'jsonml' => 'application/jsonml+json', - 'jsx' => 'text/jsx', - 'jt' => 'model/jt', - 'jxl' => 'image/jxl', - 'jxr' => 'image/jxr', - 'jxra' => 'image/jxra', - 'jxrs' => 'image/jxrs', - 'jxs' => 'image/jxs', - 'jxsc' => 'image/jxsc', - 'jxsi' => 'image/jxsi', - 'jxss' => 'image/jxss', - 'kar' => 'audio/midi', - 'karbon' => 'application/vnd.kde.karbon', - 'kbl' => 'application/kbl+xml', - 'kdb' => 'application/octet-stream', - 'kdbx' => 'application/x-keepass2', - 'key' => 'application/vnd.apple.keynote', - 'kfo' => 'application/vnd.kde.kformula', - 'kia' => 'application/vnd.kidspiration', - 'kml' => 'application/vnd.google-earth.kml+xml', - 'kmz' => 'application/vnd.google-earth.kmz', - 'kne' => 'application/vnd.kinar', - 'knp' => 'application/vnd.kinar', - 'kon' => 'application/vnd.kde.kontour', - 'kpr' => 'application/vnd.kde.kpresenter', - 'kpt' => 'application/vnd.kde.kpresenter', - 'kpxx' => 'application/vnd.ds-keypoint', - 'ksp' => 'application/vnd.kde.kspread', - 'ktr' => 'application/vnd.kahootz', - 'ktx' => 'image/ktx', - 'ktx2' => 'image/ktx2', - 'ktz' => 'application/vnd.kahootz', - 'kwd' => 'application/vnd.kde.kword', - 'kwt' => 'application/vnd.kde.kword', - 'lasxml' => 'application/vnd.las.las+xml', - 'latex' => 'application/x-latex', - 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', - 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', - 'les' => 'application/vnd.hhe.lesson-player', - 'less' => 'text/less', - 'lgr' => 'application/lgr+xml', - 'lha' => 'application/x-lzh-compressed', - 'link66' => 'application/vnd.route66.link66+xml', - 'list' => 'text/plain', - 'list3820' => 'application/vnd.ibm.modcap', - 'listafp' => 'application/vnd.ibm.modcap', - 'litcoffee' => 'text/coffeescript', - 'lnk' => 'application/x-ms-shortcut', - 'log' => 'text/plain', - 'lostxml' => 'application/lost+xml', - 'lottie' => 'application/zip+dotlottie', - 'lrf' => 'application/octet-stream', - 'lrm' => 'application/vnd.ms-lrm', - 'ltf' => 'application/vnd.frogans.ltf', - 'lua' => 'text/x-lua', - 'luac' => 'application/x-lua-bytecode', - 'lvp' => 'audio/vnd.lucent.voice', - 'lwp' => 'application/vnd.lotus-wordpro', - 'lzh' => 'application/x-lzh-compressed', - 'm13' => 'application/x-msmediaview', - 'm14' => 'application/x-msmediaview', - 'm1v' => 'video/mpeg', - 'm21' => 'application/mp21', - 'm2a' => 'audio/mpeg', - 'm2t' => 'video/mp2t', - 'm2ts' => 'video/mp2t', - 'm2v' => 'video/mpeg', - 'm3a' => 'audio/mpeg', - 'm3u' => 'audio/x-mpegurl', - 'm3u8' => 'application/vnd.apple.mpegurl', - 'm4a' => 'audio/mp4', - 'm4b' => 'audio/mp4', - 'm4p' => 'application/mp4', - 'm4s' => 'video/iso.segment', - 'm4u' => 'video/vnd.mpegurl', - 'm4v' => 'video/x-m4v', - 'ma' => 'application/mathematica', - 'mads' => 'application/mads+xml', - 'maei' => 'application/mmt-aei+xml', - 'mag' => 'application/vnd.ecowin.chart', - 'maker' => 'application/vnd.framemaker', - 'man' => 'text/troff', - 'manifest' => 'text/cache-manifest', - 'map' => 'application/json', - 'mar' => 'application/octet-stream', - 'markdown' => 'text/markdown', - 'mathml' => 'application/mathml+xml', - 'mb' => 'application/mathematica', - 'mbk' => 'application/vnd.mobius.mbk', - 'mbox' => 'application/mbox', - 'mc1' => 'application/vnd.medcalcdata', - 'mcd' => 'application/vnd.mcd', - 'mcurl' => 'text/vnd.curl.mcurl', - 'md' => 'text/markdown', - 'mdb' => 'application/x-msaccess', - 'mdi' => 'image/vnd.ms-modi', - 'mdx' => 'text/mdx', - 'me' => 'text/troff', - 'mesh' => 'model/mesh', - 'meta4' => 'application/metalink4+xml', - 'metalink' => 'application/metalink+xml', - 'mets' => 'application/mets+xml', - 'mfm' => 'application/vnd.mfmp', - 'mft' => 'application/rpki-manifest', - 'mgp' => 'application/vnd.osgeo.mapguide.package', - 'mgz' => 'application/vnd.proteus.magazine', - 'mht' => 'message/rfc822', - 'mhtml' => 'message/rfc822', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mie' => 'application/x-mie', - 'mif' => 'application/vnd.mif', - 'mime' => 'message/rfc822', - 'mj2' => 'video/mj2', - 'mjp2' => 'video/mj2', - 'mjs' => 'text/javascript', - 'mk3d' => 'video/matroska-3d', - 'mka' => 'audio/matroska', - 'mkd' => 'text/x-markdown', - 'mks' => 'video/x-matroska', - 'mkv' => 'video/matroska', - 'mlp' => 'application/vnd.dolby.mlp', - 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', - 'mmf' => 'application/vnd.smaf', - 'mml' => 'text/mathml', - 'mmr' => 'image/vnd.fujixerox.edmics-mmr', - 'mng' => 'video/x-mng', - 'mny' => 'application/x-msmoney', - 'mobi' => 'application/x-mobipocket-ebook', - 'mods' => 'application/mods+xml', - 'mov' => 'video/quicktime', - 'movie' => 'video/x-sgi-movie', - 'mp2' => 'audio/mpeg', - 'mp21' => 'application/mp21', - 'mp2a' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mp4a' => 'audio/mp4', - 'mp4s' => 'application/mp4', - 'mp4v' => 'video/mp4', - 'mpc' => 'application/vnd.mophun.certificate', - 'mpd' => 'application/dash+xml', - 'mpe' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpf' => 'application/media-policy-dataset+xml', - 'mpg' => 'video/mpeg', - 'mpg4' => 'video/mp4', - 'mpga' => 'audio/mpeg', - 'mpkg' => 'application/vnd.apple.installer+xml', - 'mpm' => 'application/vnd.blueice.multipass', - 'mpn' => 'application/vnd.mophun.application', - 'mpp' => 'application/vnd.ms-project', - 'mpt' => 'application/vnd.ms-project', - 'mpy' => 'application/vnd.ibm.minipay', - 'mqy' => 'application/vnd.mobius.mqy', - 'mrc' => 'application/marc', - 'mrcx' => 'application/marcxml+xml', - 'ms' => 'text/troff', - 'mscml' => 'application/mediaservercontrol+xml', - 'mseed' => 'application/vnd.fdsn.mseed', - 'mseq' => 'application/vnd.mseq', - 'msf' => 'application/vnd.epson.msf', - 'msg' => 'application/vnd.ms-outlook', - 'msh' => 'model/mesh', - 'msi' => 'application/octet-stream', - 'msix' => 'application/msix', - 'msixbundle' => 'application/msixbundle', - 'msl' => 'application/vnd.mobius.msl', - 'msm' => 'application/octet-stream', - 'msp' => 'application/octet-stream', - 'msty' => 'application/vnd.muvee.style', - 'mtl' => 'model/mtl', - 'mts' => 'video/mp2t', - 'mus' => 'application/vnd.musician', - 'musd' => 'application/mmt-usd+xml', - 'musicxml' => 'application/vnd.recordare.musicxml+xml', - 'mvb' => 'application/x-msmediaview', - 'mvt' => 'application/vnd.mapbox-vector-tile', - 'mwf' => 'application/vnd.mfer', - 'mxf' => 'application/mxf', - 'mxl' => 'application/vnd.recordare.musicxml', - 'mxmf' => 'audio/mobile-xmf', - 'mxml' => 'application/xv+xml', - 'mxs' => 'application/vnd.triscape.mxs', - 'mxu' => 'video/vnd.mpegurl', - 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', - 'n3' => 'text/n3', - 'nb' => 'application/mathematica', - 'nbp' => 'application/vnd.wolfram.player', - 'nc' => 'application/x-netcdf', - 'ncx' => 'application/x-dtbncx+xml', - 'ndjson' => 'application/x-ndjson', - 'nfo' => 'text/x-nfo', - 'ngdat' => 'application/vnd.nokia.n-gage.data', - 'nitf' => 'application/vnd.nitf', - 'nlu' => 'application/vnd.neurolanguage.nlu', - 'nml' => 'application/vnd.enliven', - 'nnd' => 'application/vnd.noblenet-directory', - 'nns' => 'application/vnd.noblenet-sealer', - 'nnw' => 'application/vnd.noblenet-web', - 'npx' => 'image/vnd.net-fpx', - 'nq' => 'application/n-quads', - 'nsc' => 'application/x-conference', - 'nsf' => 'application/vnd.lotus-notes', - 'nt' => 'application/n-triples', - 'ntf' => 'application/vnd.nitf', - 'numbers' => 'application/vnd.apple.numbers', - 'nzb' => 'application/x-nzb', - 'oa2' => 'application/vnd.fujitsu.oasys2', - 'oa3' => 'application/vnd.fujitsu.oasys3', - 'oas' => 'application/vnd.fujitsu.oasys', - 'obd' => 'application/x-msbinder', - 'obgx' => 'application/vnd.openblox.game+xml', - 'obj' => 'model/obj', - 'oda' => 'application/oda', - 'odb' => 'application/vnd.oasis.opendocument.database', - 'odc' => 'application/vnd.oasis.opendocument.chart', - 'odf' => 'application/vnd.oasis.opendocument.formula', - 'odft' => 'application/vnd.oasis.opendocument.formula-template', - 'odg' => 'application/vnd.oasis.opendocument.graphics', - 'odi' => 'application/vnd.oasis.opendocument.image', - 'odm' => 'application/vnd.oasis.opendocument.text-master', - 'odp' => 'application/vnd.oasis.opendocument.presentation', - 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', - 'odt' => 'application/vnd.oasis.opendocument.text', - 'oga' => 'audio/ogg', - 'ogex' => 'model/vnd.opengex', - 'ogg' => 'audio/ogg', - 'ogv' => 'video/ogg', - 'ogx' => 'application/ogg', - 'omdoc' => 'application/omdoc+xml', - 'one' => 'application/onenote', - 'onea' => 'application/onenote', - 'onepkg' => 'application/onenote', - 'onetmp' => 'application/onenote', - 'onetoc' => 'application/onenote', - 'onetoc2' => 'application/onenote', - 'opf' => 'application/oebps-package+xml', - 'opml' => 'text/x-opml', - 'oprc' => 'application/vnd.palm', - 'opus' => 'audio/ogg', - 'org' => 'application/vnd.lotus-organizer', - 'osf' => 'application/vnd.yamaha.openscoreformat', - 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', - 'osm' => 'application/vnd.openstreetmap.data+xml', - 'otc' => 'application/vnd.oasis.opendocument.chart-template', - 'otf' => 'font/otf', - 'otg' => 'application/vnd.oasis.opendocument.graphics-template', - 'oth' => 'application/vnd.oasis.opendocument.text-web', - 'oti' => 'application/vnd.oasis.opendocument.image-template', - 'otp' => 'application/vnd.oasis.opendocument.presentation-template', - 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', - 'ott' => 'application/vnd.oasis.opendocument.text-template', - 'ova' => 'application/x-virtualbox-ova', - 'ovf' => 'application/x-virtualbox-ovf', - 'owl' => 'application/rdf+xml', - 'oxps' => 'application/oxps', - 'oxt' => 'application/vnd.openofficeorg.extension', - 'p' => 'text/x-pascal', - 'p10' => 'application/pkcs10', - 'p12' => 'application/x-pkcs12', - 'p21' => 'model/step', - 'p7a' => 'application/x-pkcs7-signature', - 'p7b' => 'application/x-pkcs7-certificates', - 'p7c' => 'application/pkcs7-mime', - 'p7e' => 'application/pkcs7-mime', - 'p7m' => 'application/pkcs7-mime', - 'p7r' => 'application/x-pkcs7-certreqresp', - 'p7s' => 'application/pkcs7-signature', - 'p8' => 'application/pkcs8', - 'pac' => 'application/x-ns-proxy-autoconfig', - 'pages' => 'application/vnd.apple.pages', - 'parquet' => 'application/vnd.apache.parquet', - 'pas' => 'text/x-pascal', - 'paw' => 'application/vnd.pawaafile', - 'pbd' => 'application/vnd.powerbuilder6', - 'pbm' => 'image/x-portable-bitmap', - 'pcap' => 'application/vnd.tcpdump.pcap', - 'pcf' => 'application/x-font-pcf', - 'pcl' => 'application/vnd.hp-pcl', - 'pclxl' => 'application/vnd.hp-pclxl', - 'pct' => 'image/x-pict', - 'pcurl' => 'application/vnd.curl.pcurl', - 'pcx' => 'image/vnd.zbrush.pcx', - 'pdb' => 'application/vnd.palm', - 'pde' => 'text/x-processing', - 'pdf' => 'application/pdf', - 'pem' => 'application/x-x509-user-cert', - 'pfa' => 'application/x-font-type1', - 'pfb' => 'application/x-font-type1', - 'pfm' => 'application/x-font-type1', - 'pfr' => 'application/font-tdpfr', - 'pfx' => 'application/x-pkcs12', - 'pgm' => 'image/x-portable-graymap', - 'pgn' => 'application/x-chess-pgn', - 'pgp' => 'application/pgp-encrypted', - 'phar' => 'application/octet-stream', - 'php' => 'application/x-httpd-php', - 'php3' => 'application/x-httpd-php', - 'php4' => 'application/x-httpd-php', - 'phps' => 'application/x-httpd-php-source', - 'phtml' => 'application/x-httpd-php', - 'pic' => 'image/x-pict', - 'pkg' => 'application/octet-stream', - 'pki' => 'application/pkixcmp', - 'pkipath' => 'application/pkix-pkipath', - 'pkpass' => 'application/vnd.apple.pkpass', - 'pl' => 'application/x-perl', - 'plb' => 'application/vnd.3gpp.pic-bw-large', - 'plc' => 'application/vnd.mobius.plc', - 'plf' => 'application/vnd.pocketlearn', - 'pls' => 'application/pls+xml', - 'pm' => 'application/x-perl', - 'pml' => 'application/vnd.ctc-posml', - 'png' => 'image/png', - 'pnm' => 'image/x-portable-anymap', - 'portpkg' => 'application/vnd.macports.portpkg', - 'pot' => 'application/vnd.ms-powerpoint', - 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', - 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - 'ppa' => 'application/vnd.ms-powerpoint', - 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', - 'ppd' => 'application/vnd.cups-ppd', - 'ppm' => 'image/x-portable-pixmap', - 'pps' => 'application/vnd.ms-powerpoint', - 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', - 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'pqa' => 'application/vnd.palm', - 'prc' => 'model/prc', - 'pre' => 'application/vnd.lotus-freelance', - 'prf' => 'application/pics-rules', - 'provx' => 'application/provenance+xml', - 'ps' => 'application/postscript', - 'psb' => 'application/vnd.3gpp.pic-bw-small', - 'psd' => 'image/vnd.adobe.photoshop', - 'psf' => 'application/x-font-linux-psf', - 'pskcxml' => 'application/pskc+xml', - 'pti' => 'image/prs.pti', - 'ptid' => 'application/vnd.pvi.ptid1', - 'pub' => 'application/x-mspublisher', - 'pv' => 'application/octet-stream', - 'pvb' => 'application/vnd.3gpp.pic-bw-var', - 'pwn' => 'application/vnd.3m.post-it-notes', - 'pxf' => 'application/octet-stream', - 'pya' => 'audio/vnd.ms-playready.media.pya', - 'pyo' => 'model/vnd.pytha.pyox', - 'pyox' => 'model/vnd.pytha.pyox', - 'pyv' => 'video/vnd.ms-playready.media.pyv', - 'qam' => 'application/vnd.epson.quickanime', - 'qbo' => 'application/vnd.intu.qbo', - 'qfx' => 'application/vnd.intu.qfx', - 'qps' => 'application/vnd.publishare-delta-tree', - 'qt' => 'video/quicktime', - 'qwd' => 'application/vnd.quark.quarkxpress', - 'qwt' => 'application/vnd.quark.quarkxpress', - 'qxb' => 'application/vnd.quark.quarkxpress', - 'qxd' => 'application/vnd.quark.quarkxpress', - 'qxl' => 'application/vnd.quark.quarkxpress', - 'qxt' => 'application/vnd.quark.quarkxpress', - 'ra' => 'audio/x-realaudio', - 'ram' => 'audio/x-pn-realaudio', - 'raml' => 'application/raml+yaml', - 'rapd' => 'application/route-apd+xml', - 'rar' => 'application/vnd.rar', - 'ras' => 'image/x-cmu-raster', - 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', - 'rdf' => 'application/rdf+xml', - 'rdz' => 'application/vnd.data-vision.rdz', - 'relo' => 'application/p2p-overlay+xml', - 'rep' => 'application/vnd.businessobjects', - 'res' => 'application/x-dtbresource+xml', - 'rgb' => 'image/x-rgb', - 'rif' => 'application/reginfo+xml', - 'rip' => 'audio/vnd.rip', - 'ris' => 'application/x-research-info-systems', - 'rl' => 'application/resource-lists+xml', - 'rlc' => 'image/vnd.fujixerox.edmics-rlc', - 'rld' => 'application/resource-lists-diff+xml', - 'rm' => 'application/vnd.rn-realmedia', - 'rmi' => 'audio/midi', - 'rmp' => 'audio/x-pn-realaudio-plugin', - 'rms' => 'application/vnd.jcp.javame.midlet-rms', - 'rmvb' => 'application/vnd.rn-realmedia-vbr', - 'rnc' => 'application/relax-ng-compact-syntax', - 'rng' => 'application/xml', - 'roa' => 'application/rpki-roa', - 'roff' => 'text/troff', - 'rp9' => 'application/vnd.cloanto.rp9', - 'rpm' => 'application/x-redhat-package-manager', - 'rpss' => 'application/vnd.nokia.radio-presets', - 'rpst' => 'application/vnd.nokia.radio-preset', - 'rq' => 'application/sparql-query', - 'rs' => 'application/rls-services+xml', - 'rsa' => 'application/x-pkcs7', - 'rsat' => 'application/atsc-rsat+xml', - 'rsd' => 'application/rsd+xml', - 'rsheet' => 'application/urc-ressheet+xml', - 'rss' => 'application/rss+xml', - 'rtf' => 'text/rtf', - 'rtx' => 'text/richtext', - 'run' => 'application/x-makeself', - 'rusd' => 'application/route-usd+xml', - 'rv' => 'video/vnd.rn-realvideo', - 's' => 'text/x-asm', - 's3m' => 'audio/s3m', - 'saf' => 'application/vnd.yamaha.smaf-audio', - 'sass' => 'text/x-sass', - 'sbml' => 'application/sbml+xml', - 'sc' => 'application/vnd.ibm.secure-container', - 'scd' => 'application/x-msschedule', - 'scm' => 'application/vnd.lotus-screencam', - 'scq' => 'application/scvp-cv-request', - 'scs' => 'application/scvp-cv-response', - 'scss' => 'text/x-scss', - 'scurl' => 'text/vnd.curl.scurl', - 'sda' => 'application/vnd.stardivision.draw', - 'sdc' => 'application/vnd.stardivision.calc', - 'sdd' => 'application/vnd.stardivision.impress', - 'sdkd' => 'application/vnd.solent.sdkm+xml', - 'sdkm' => 'application/vnd.solent.sdkm+xml', - 'sdp' => 'application/sdp', - 'sdw' => 'application/vnd.stardivision.writer', - 'sea' => 'application/x-sea', - 'see' => 'application/vnd.seemail', - 'seed' => 'application/vnd.fdsn.seed', - 'sema' => 'application/vnd.sema', - 'semd' => 'application/vnd.semd', - 'semf' => 'application/vnd.semf', - 'senmlx' => 'application/senml+xml', - 'sensmlx' => 'application/sensml+xml', - 'ser' => 'application/java-serialized-object', - 'setpay' => 'application/set-payment-initiation', - 'setreg' => 'application/set-registration-initiation', - 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', - 'sfs' => 'application/vnd.spotfire.sfs', - 'sfv' => 'text/x-sfv', - 'sgi' => 'image/sgi', - 'sgl' => 'application/vnd.stardivision.writer-global', - 'sgm' => 'text/sgml', - 'sgml' => 'text/sgml', - 'sh' => 'application/x-sh', - 'shar' => 'application/x-shar', - 'shex' => 'text/shex', - 'shf' => 'application/shf+xml', - 'shtml' => 'text/html', - 'sid' => 'image/x-mrsid-image', - 'sieve' => 'application/sieve', - 'sig' => 'application/pgp-signature', - 'sil' => 'audio/silk', - 'silo' => 'model/mesh', - 'sis' => 'application/vnd.symbian.install', - 'sisx' => 'application/vnd.symbian.install', - 'sit' => 'application/x-stuffit', - 'sitx' => 'application/x-stuffitx', - 'siv' => 'application/sieve', - 'skd' => 'application/vnd.koan', - 'skm' => 'application/vnd.koan', - 'skp' => 'application/vnd.koan', - 'skt' => 'application/vnd.koan', - 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', - 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - 'slim' => 'text/slim', - 'slm' => 'text/slim', - 'sls' => 'application/route-s-tsid+xml', - 'slt' => 'application/vnd.epson.salt', - 'sm' => 'application/vnd.stepmania.stepchart', - 'smf' => 'application/vnd.stardivision.math', - 'smi' => 'application/smil+xml', - 'smil' => 'application/smil+xml', - 'smv' => 'video/x-smv', - 'smzip' => 'application/vnd.stepmania.package', - 'snd' => 'audio/basic', - 'snf' => 'application/x-font-snf', - 'so' => 'application/octet-stream', - 'spc' => 'application/x-pkcs7-certificates', - 'spdx' => 'text/spdx', - 'spf' => 'application/vnd.yamaha.smaf-phrase', - 'spl' => 'application/x-futuresplash', - 'spot' => 'text/vnd.in3d.spot', - 'spp' => 'application/scvp-vp-response', - 'spq' => 'application/scvp-vp-request', - 'spx' => 'audio/ogg', - 'sql' => 'application/sql', - 'sqlite' => 'application/vnd.sqlite3', - 'sqlite3' => 'application/vnd.sqlite3', - 'src' => 'application/x-wais-source', - 'srt' => 'application/x-subrip', - 'sru' => 'application/sru+xml', - 'srx' => 'application/sparql-results+xml', - 'ssdl' => 'application/ssdl+xml', - 'sse' => 'application/vnd.kodak-descriptor', - 'ssf' => 'application/vnd.epson.ssf', - 'ssml' => 'application/ssml+xml', - 'sst' => 'application/octet-stream', - 'st' => 'application/vnd.sailingtracker.track', - 'stc' => 'application/vnd.sun.xml.calc.template', - 'std' => 'application/vnd.sun.xml.draw.template', - 'step' => 'model/step', - 'stf' => 'application/vnd.wt.stf', - 'sti' => 'application/vnd.sun.xml.impress.template', - 'stk' => 'application/hyperstudio', - 'stl' => 'model/stl', - 'stp' => 'model/step', - 'stpnc' => 'model/step', - 'stpx' => 'model/step+xml', - 'stpxz' => 'model/step-xml+zip', - 'stpz' => 'model/step+zip', - 'str' => 'application/vnd.pg.format', - 'stw' => 'application/vnd.sun.xml.writer.template', - 'styl' => 'text/stylus', - 'stylus' => 'text/stylus', - 'sub' => 'image/vnd.dvb.subtitle', - 'sus' => 'application/vnd.sus-calendar', - 'susp' => 'application/vnd.sus-calendar', - 'sv4cpio' => 'application/x-sv4cpio', - 'sv4crc' => 'application/x-sv4crc', - 'svc' => 'application/vnd.dvb.service', - 'svd' => 'application/vnd.svd', - 'svg' => 'image/svg+xml', - 'svgz' => 'image/svg+xml', - 'swa' => 'application/x-director', - 'swf' => 'application/x-shockwave-flash', - 'swi' => 'application/vnd.aristanetworks.swi', - 'swidtag' => 'application/swid+xml', - 'sxc' => 'application/vnd.sun.xml.calc', - 'sxd' => 'application/vnd.sun.xml.draw', - 'sxg' => 'application/vnd.sun.xml.writer.global', - 'sxi' => 'application/vnd.sun.xml.impress', - 'sxm' => 'application/vnd.sun.xml.math', - 'sxw' => 'application/vnd.sun.xml.writer', - 'systemverify' => 'application/vnd.pp.systemverify+xml', - 't' => 'text/troff', - 't3' => 'application/x-t3vm-image', - 't38' => 'image/t38', - 'taglet' => 'application/vnd.mynfc', - 'tao' => 'application/vnd.tao.intent-module-archive', - 'tap' => 'image/vnd.tencent.tap', - 'tar' => 'application/x-tar', - 'tcap' => 'application/vnd.3gpp2.tcap', - 'tcl' => 'application/x-tcl', - 'td' => 'application/urc-targetdesc+xml', - 'teacher' => 'application/vnd.smart.teacher', - 'tei' => 'application/tei+xml', - 'teicorpus' => 'application/tei+xml', - 'tex' => 'application/x-tex', - 'texi' => 'application/x-texinfo', - 'texinfo' => 'application/x-texinfo', - 'text' => 'text/plain', - 'tfi' => 'application/thraud+xml', - 'tfm' => 'application/x-tex-tfm', - 'tfx' => 'image/tiff-fx', - 'tga' => 'image/x-tga', - 'tgz' => 'application/gzip', - 'thmx' => 'application/vnd.ms-officetheme', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'tk' => 'application/x-tcl', - 'tmo' => 'application/vnd.tmobile-livetv', - 'toml' => 'application/toml', - 'torrent' => 'application/x-bittorrent', - 'tpl' => 'application/vnd.groove-tool-template', - 'tpt' => 'application/vnd.trid.tpt', - 'tr' => 'text/troff', - 'tra' => 'application/vnd.trueapp', - 'trig' => 'application/trig', - 'trm' => 'application/x-msterminal', - 'ts' => 'video/mp2t', - 'tsd' => 'application/timestamped-data', - 'tsv' => 'text/tab-separated-values', - 'ttc' => 'font/collection', - 'ttf' => 'font/ttf', - 'ttl' => 'text/turtle', - 'ttml' => 'application/ttml+xml', - 'twd' => 'application/vnd.simtech-mindmapper', - 'twds' => 'application/vnd.simtech-mindmapper', - 'txd' => 'application/vnd.genomatix.tuxedo', - 'txf' => 'application/vnd.mobius.txf', - 'txt' => 'text/plain', - 'u32' => 'application/x-authorware-bin', - 'u3d' => 'model/u3d', - 'u8dsn' => 'message/global-delivery-status', - 'u8hdr' => 'message/global-headers', - 'u8mdn' => 'message/global-disposition-notification', - 'u8msg' => 'message/global', - 'ubj' => 'application/ubjson', - 'udeb' => 'application/x-debian-package', - 'ufd' => 'application/vnd.ufdl', - 'ufdl' => 'application/vnd.ufdl', - 'ulx' => 'application/x-glulx', - 'umj' => 'application/vnd.umajin', - 'unityweb' => 'application/vnd.unity', - 'uo' => 'application/vnd.uoml+xml', - 'uoml' => 'application/vnd.uoml+xml', - 'uri' => 'text/uri-list', - 'uris' => 'text/uri-list', - 'urls' => 'text/uri-list', - 'usda' => 'model/vnd.usda', - 'usdz' => 'model/vnd.usdz+zip', - 'ustar' => 'application/x-ustar', - 'utz' => 'application/vnd.uiq.theme', - 'uu' => 'text/x-uuencode', - 'uva' => 'audio/vnd.dece.audio', - 'uvd' => 'application/vnd.dece.data', - 'uvf' => 'application/vnd.dece.data', - 'uvg' => 'image/vnd.dece.graphic', - 'uvh' => 'video/vnd.dece.hd', - 'uvi' => 'image/vnd.dece.graphic', - 'uvm' => 'video/vnd.dece.mobile', - 'uvp' => 'video/vnd.dece.pd', - 'uvs' => 'video/vnd.dece.sd', - 'uvt' => 'application/vnd.dece.ttml+xml', - 'uvu' => 'video/vnd.uvvu.mp4', - 'uvv' => 'video/vnd.dece.video', - 'uvva' => 'audio/vnd.dece.audio', - 'uvvd' => 'application/vnd.dece.data', - 'uvvf' => 'application/vnd.dece.data', - 'uvvg' => 'image/vnd.dece.graphic', - 'uvvh' => 'video/vnd.dece.hd', - 'uvvi' => 'image/vnd.dece.graphic', - 'uvvm' => 'video/vnd.dece.mobile', - 'uvvp' => 'video/vnd.dece.pd', - 'uvvs' => 'video/vnd.dece.sd', - 'uvvt' => 'application/vnd.dece.ttml+xml', - 'uvvu' => 'video/vnd.uvvu.mp4', - 'uvvv' => 'video/vnd.dece.video', - 'uvvx' => 'application/vnd.dece.unspecified', - 'uvvz' => 'application/vnd.dece.zip', - 'uvx' => 'application/vnd.dece.unspecified', - 'uvz' => 'application/vnd.dece.zip', - 'vbox' => 'application/x-virtualbox-vbox', - 'vbox-extpack' => 'application/x-virtualbox-vbox-extpack', - 'vcard' => 'text/vcard', - 'vcd' => 'application/x-cdlink', - 'vcf' => 'text/x-vcard', - 'vcg' => 'application/vnd.groove-vcard', - 'vcs' => 'text/x-vcalendar', - 'vcx' => 'application/vnd.vcx', - 'vdi' => 'application/x-virtualbox-vdi', - 'vds' => 'model/vnd.sap.vds', - 'vdx' => 'application/vnd.ms-visio.viewer', - 'vec' => 'application/vec+xml', - 'vhd' => 'application/x-virtualbox-vhd', - 'vis' => 'application/vnd.visionary', - 'viv' => 'video/vnd.vivo', - 'vmdk' => 'application/x-virtualbox-vmdk', - 'vob' => 'video/x-ms-vob', - 'vor' => 'application/vnd.stardivision.writer', - 'vox' => 'application/x-authorware-bin', - 'vrml' => 'model/vrml', - 'vsd' => 'application/vnd.visio', - 'vsdx' => 'application/vnd.visio', - 'vsf' => 'application/vnd.vsf', - 'vss' => 'application/vnd.visio', - 'vst' => 'application/vnd.visio', - 'vsw' => 'application/vnd.visio', - 'vtf' => 'image/vnd.valve.source.texture', - 'vtt' => 'text/vtt', - 'vtu' => 'model/vnd.vtu', - 'vtx' => 'application/vnd.visio', - 'vxml' => 'application/voicexml+xml', - 'w3d' => 'application/x-director', - 'wad' => 'application/x-doom', - 'wadl' => 'application/vnd.sun.wadl+xml', - 'war' => 'application/java-archive', - 'wasm' => 'application/wasm', - 'wav' => 'audio/wav', - 'wax' => 'audio/x-ms-wax', - 'wbmp' => 'image/vnd.wap.wbmp', - 'wbs' => 'application/vnd.criticaltools.wbs+xml', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wcm' => 'application/vnd.ms-works', - 'wdb' => 'application/vnd.ms-works', - 'wdp' => 'image/vnd.ms-photo', - 'weba' => 'audio/webm', - 'webapp' => 'application/x-web-app-manifest+json', - 'webm' => 'video/webm', - 'webmanifest' => 'application/manifest+json', - 'webp' => 'image/webp', - 'wg' => 'application/vnd.pmi.widget', - 'wgsl' => 'text/wgsl', - 'wgt' => 'application/widget', - 'wif' => 'application/watcherinfo+xml', - 'wks' => 'application/vnd.ms-works', - 'wm' => 'video/x-ms-wm', - 'wma' => 'audio/x-ms-wma', - 'wmd' => 'application/x-ms-wmd', - 'wmf' => 'image/wmf', - 'wml' => 'text/vnd.wap.wml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'wmls' => 'text/vnd.wap.wmlscript', - 'wmlsc' => 'application/vnd.wap.wmlscriptc', - 'wmv' => 'video/x-ms-wmv', - 'wmx' => 'video/x-ms-wmx', - 'wmz' => 'application/x-ms-wmz', - 'woff' => 'font/woff', - 'woff2' => 'font/woff2', - 'word' => 'application/msword', - 'wpd' => 'application/vnd.wordperfect', - 'wpl' => 'application/vnd.ms-wpl', - 'wps' => 'application/vnd.ms-works', - 'wqd' => 'application/vnd.wqd', - 'wri' => 'application/x-mswrite', - 'wrl' => 'model/vrml', - 'wsc' => 'message/vnd.wfa.wsc', - 'wsdl' => 'application/wsdl+xml', - 'wspolicy' => 'application/wspolicy+xml', - 'wtb' => 'application/vnd.webturbo', - 'wvx' => 'video/x-ms-wvx', - 'x32' => 'application/x-authorware-bin', - 'x3d' => 'model/x3d+xml', - 'x3db' => 'model/x3d+fastinfoset', - 'x3dbz' => 'model/x3d+binary', - 'x3dv' => 'model/x3d-vrml', - 'x3dvz' => 'model/x3d+vrml', - 'x3dz' => 'model/x3d+xml', - 'x_b' => 'model/vnd.parasolid.transmit.binary', - 'x_t' => 'model/vnd.parasolid.transmit.text', - 'xaml' => 'application/xaml+xml', - 'xap' => 'application/x-silverlight-app', - 'xar' => 'application/vnd.xara', - 'xav' => 'application/xcap-att+xml', - 'xbap' => 'application/x-ms-xbap', - 'xbd' => 'application/vnd.fujixerox.docuworks.binder', - 'xbm' => 'image/x-xbitmap', - 'xca' => 'application/xcap-caps+xml', - 'xcs' => 'application/calendar+xml', - 'xdcf' => 'application/vnd.gov.sk.xmldatacontainer+xml', - 'xdf' => 'application/xcap-diff+xml', - 'xdm' => 'application/vnd.syncml.dm+xml', - 'xdp' => 'application/vnd.adobe.xdp+xml', - 'xdssc' => 'application/dssc+xml', - 'xdw' => 'application/vnd.fujixerox.docuworks', - 'xel' => 'application/xcap-el+xml', - 'xenc' => 'application/xenc+xml', - 'xer' => 'application/patch-ops-error+xml', - 'xfdf' => 'application/xfdf', - 'xfdl' => 'application/vnd.xfdl', - 'xht' => 'application/xhtml+xml', - 'xhtm' => 'application/vnd.pwg-xhtml-print+xml', - 'xhtml' => 'application/xhtml+xml', - 'xhvml' => 'application/xv+xml', - 'xif' => 'image/vnd.xiff', - 'xl' => 'application/vnd.ms-excel', - 'xla' => 'application/vnd.ms-excel', - 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', - 'xlc' => 'application/vnd.ms-excel', - 'xlf' => 'application/xliff+xml', - 'xlm' => 'application/vnd.ms-excel', - 'xls' => 'application/vnd.ms-excel', - 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', - 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xlt' => 'application/vnd.ms-excel', - 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', - 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - 'xlw' => 'application/vnd.ms-excel', - 'xm' => 'audio/xm', - 'xml' => 'application/xml', - 'xns' => 'application/xcap-ns+xml', - 'xo' => 'application/vnd.olpc-sugar', - 'xop' => 'application/xop+xml', - 'xpi' => 'application/x-xpinstall', - 'xpl' => 'application/xproc+xml', - 'xpm' => 'image/x-xpixmap', - 'xpr' => 'application/vnd.is-xpr', - 'xps' => 'application/vnd.ms-xpsdocument', - 'xpw' => 'application/vnd.intercon.formnet', - 'xpx' => 'application/vnd.intercon.formnet', - 'xsd' => 'application/xml', - 'xsf' => 'application/prs.xsf+xml', - 'xsl' => 'application/xslt+xml', - 'xslt' => 'application/xslt+xml', - 'xsm' => 'application/vnd.syncml+xml', - 'xspf' => 'application/xspf+xml', - 'xul' => 'application/vnd.mozilla.xul+xml', - 'xvm' => 'application/xv+xml', - 'xvml' => 'application/xv+xml', - 'xwd' => 'image/x-xwindowdump', - 'xyz' => 'chemical/x-xyz', - 'xz' => 'application/x-xz', - 'yaml' => 'text/yaml', - 'yang' => 'application/yang', - 'yin' => 'application/yin+xml', - 'yml' => 'text/yaml', - 'ymp' => 'text/x-suse-ymp', - 'z' => 'application/x-compress', - 'z1' => 'application/x-zmachine', - 'z2' => 'application/x-zmachine', - 'z3' => 'application/x-zmachine', - 'z4' => 'application/x-zmachine', - 'z5' => 'application/x-zmachine', - 'z6' => 'application/x-zmachine', - 'z7' => 'application/x-zmachine', - 'z8' => 'application/x-zmachine', - 'zaz' => 'application/vnd.zzazz.deck+xml', - 'zip' => 'application/zip', - 'zir' => 'application/vnd.zul', - 'zirz' => 'application/vnd.zul', - 'zmm' => 'application/vnd.handheld-entertainment+xml', - 'zsh' => 'text/x-scriptzsh', - ]; - - /** - * Determines the MIME type of a file by looking at its extension. - * - * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json - */ - public static function fromFilename(string $filename): ?string - { - return self::fromExtension(pathinfo($filename, PATHINFO_EXTENSION)); - } - - /** - * Maps a file extension to a MIME type. - * - * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json - */ - public static function fromExtension(string $extension): ?string - { - return self::MIME_TYPES[Utils::asciiToLower($extension)] ?? null; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MultipartStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MultipartStream.php deleted file mode 100644 index 74cb9cd9e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/MultipartStream.php +++ /dev/null @@ -1,282 +0,0 @@ -boundary = $boundary ?? bin2hex(random_bytes(20)); - $this->stream = $this->createStream($elements); - } - - public function getBoundary(): string - { - return $this->boundary; - } - - public function isWritable(): bool - { - return false; - } - - /** - * Get the headers needed before transferring the content of a POST file - * - * @param array $headers - */ - private function getHeaders(array $headers): string - { - $str = ''; - foreach ($headers as $key => $value) { - $key = (string) $key; - - self::validatePartHeaderName($key); - self::validatePartHeaderValue($value); - - $str .= "{$key}: {$value}\r\n"; - } - - return "--{$this->boundary}\r\n".rtrim($str, "\r\n")."\r\n\r\n"; - } - - /** - * Create the aggregate stream that will be used to upload the POST data - */ - protected function createStream(array $elements = []): StreamInterface - { - $stream = new AppendStream(); - - foreach ($elements as $element) { - if (!is_array($element)) { - throw new \UnexpectedValueException('An array is expected'); - } - $this->addElement($stream, $element); - } - - // Add the trailing boundary with CRLF - $stream->addStream(Utils::streamFor("--{$this->boundary}--\r\n")); - - return $stream; - } - - private function addElement(AppendStream $stream, array $element): void - { - foreach (['contents', 'name'] as $key) { - if (!array_key_exists($key, $element)) { - throw new \InvalidArgumentException("A '{$key}' key is required"); - } - } - - if (!is_string($element['name']) && !is_int($element['name'])) { - throw new \InvalidArgumentException("The 'name' key must be a string or integer"); - } - - if (is_array($element['contents'])) { - if (array_key_exists('filename', $element) || array_key_exists('headers', $element)) { - throw new \InvalidArgumentException( - "The 'filename' and 'headers' options cannot be used when 'contents' is an array" - ); - } - - $this->addNestedElements($stream, $element['contents'], (string) $element['name']); - - return; - } - - $contents = $element['contents']; - if (is_scalar($contents) && !is_string($contents)) { - // Multipart field values are byte strings on the wire, so finite - // numeric and boolean field values are cast to string here rather - // than rejected by streamFor(). Non-finite floats cannot be - // represented and are rejected. - if (is_float($contents) && !is_finite($contents)) { - throw new \InvalidArgumentException('Cannot create a stream from a non-finite float.'); - } - - $contents = (string) $contents; - } - $element['contents'] = Utils::streamFor($contents); - - if (empty($element['filename'])) { - $uri = $element['contents']->getMetadata('uri'); - if ($uri && \is_string($uri) && !str_starts_with($uri, 'php://') && !str_starts_with($uri, 'data://')) { - $element['filename'] = $uri; - } - } - - [$body, $headers] = $this->createElement( - (string) $element['name'], - $element['contents'], - $element['filename'] ?? null, - $element['headers'] ?? [] - ); - - $stream->addStream(Utils::streamFor($this->getHeaders($headers))); - $stream->addStream($body); - $stream->addStream(Utils::streamFor("\r\n")); - } - - /** - * Recursively expand array contents into multiple form fields. - * - * @param array $contents - */ - private function addNestedElements(AppendStream $stream, array $contents, string $root): void - { - foreach ($contents as $key => $value) { - $fieldName = $root === '' ? sprintf('[%s]', (string) $key) : sprintf('%s[%s]', $root, (string) $key); - - if (is_array($value)) { - $this->addNestedElements($stream, $value, $fieldName); - } else { - $this->addElement($stream, ['name' => $fieldName, 'contents' => $value]); - } - } - } - - /** - * @param array $headers - * - * @return array{0: StreamInterface, 1: array} - */ - private function createElement(string $name, StreamInterface $stream, ?string $filename, array $headers): array - { - $headers = self::normalizePartHeaders($headers); - - // Set a default content-disposition header if one was no provided - $disposition = self::getHeader($headers, 'content-disposition'); - if (!$disposition) { - $escapedName = self::escapeContentDispositionParameter($name); - $headers['Content-Disposition'] = ($filename === '0' || $filename) - ? sprintf( - 'form-data; name="%s"; filename="%s"', - $escapedName, - self::escapeContentDispositionParameter(basename($filename)) - ) - : sprintf('form-data; name="%s"', $escapedName); - } - - // Set a default Content-Type if one was not supplied - $type = self::getHeader($headers, 'content-type'); - if (!$type && ($filename === '0' || $filename)) { - $headers['Content-Type'] = MimeType::fromFilename($filename) ?? 'application/octet-stream'; - } - - return [$stream, $headers]; - } - - /** - * @param array $headers - */ - private static function getHeader(array $headers, string $key): ?string - { - $lowercaseHeader = Utils::asciiToLower($key); - foreach ($headers as $k => $v) { - if (Utils::asciiToLower((string) $k) === $lowercaseHeader) { - return $v; - } - } - - return null; - } - - private static function validateBoundary(string $boundary): void - { - $length = strlen($boundary); - - if ($length < 1 || $length > 70 || $boundary[$length - 1] === ' ') { - throw new \InvalidArgumentException('Invalid multipart boundary.'); - } - - if (strspn($boundary, self::BOUNDARY_CHARS) !== $length) { - throw new \InvalidArgumentException('Invalid multipart boundary.'); - } - } - - /** - * @param array $headers - * - * @return array - */ - private static function normalizePartHeaders(array $headers): array - { - $normalized = []; - - foreach ($headers as $key => $value) { - $key = (string) $key; - - self::validatePartHeaderName($key); - - if (!is_string($value)) { - throw new \InvalidArgumentException('Multipart part header value must be a string.'); - } - - self::validatePartHeaderValue($value); - - $normalized[$key] = $value; - } - - return $normalized; - } - - private static function validatePartHeaderName(string $name): void - { - if (!Rfc9110::isToken($name)) { - throw new \InvalidArgumentException(sprintf('Invalid multipart part header name: %s', DiagnosticValue::escape($name))); - } - } - - private static function validatePartHeaderValue(string $value): void - { - if (!Rfc9110::isFieldValue($value)) { - throw new \InvalidArgumentException(sprintf('Invalid multipart part header value: %s', DiagnosticValue::escape($value))); - } - } - - private static function escapeContentDispositionParameter(string $value): string - { - // Match WHATWG browser multipart/form-data behavior: escape CR, LF, and DQUOTE only. - return str_replace(["\r", "\n", '"'], ['%0D', '%0A', '%22'], $value); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/NoSeekStream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/NoSeekStream.php deleted file mode 100644 index 1611e3277..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/NoSeekStream.php +++ /dev/null @@ -1,28 +0,0 @@ -source = $source; - $this->size = Integers::assertOptionalNonNegativeSize($options['size'] ?? null, 'Stream size'); - $this->metadata = $options['metadata'] ?? []; - $this->buffer = new BufferStream(); - } - - public function __unserialize(array $data): void - { - $this->source = null; - $this->size = null; - $this->tellPos = 0; - $this->metadata = []; - $this->buffer = new BufferStream(); - - throw new \LogicException(static::class.' should never be unserialized'); - } - - public function __toString(): string - { - return Utils::copyToString($this); - } - - public function close(): void - { - $this->detach(); - } - - public function detach() - { - $this->tellPos = 0; - $this->source = null; - $this->buffer->close(); - - return null; - } - - public function getSize(): ?int - { - return $this->size; - } - - public function tell(): int - { - return $this->tellPos; - } - - public function eof(): bool - { - return $this->source === null; - } - - public function isSeekable(): bool - { - return false; - } - - public function rewind(): void - { - $this->seek(0); - } - - public function seek(int $offset, int $whence = SEEK_SET): void - { - throw new \RuntimeException('Cannot seek a PumpStream'); - } - - public function isWritable(): bool - { - return false; - } - - public function write(string $string): int - { - throw new \RuntimeException('Cannot write to a PumpStream'); - } - - public function isReadable(): bool - { - return true; - } - - public function read(int $length): string - { - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - $bufferLength = $this->buffer->getSize() ?? 0; - - if ($length > $bufferLength) { - $this->pump($length - $bufferLength); - } - - $data = $this->buffer->read($length); - $this->tellPos = Integers::add($this->tellPos, strlen($data)); - - return $data; - } - - public function getContents(): string - { - return Utils::copyToString($this); - } - - /** - * @return mixed - */ - public function getMetadata(?string $key = null) - { - if ($key === null) { - return $this->metadata; - } - - return $this->metadata[$key] ?? null; - } - - private function pump(int $length): void - { - if ($this->source !== null) { - do { - /** @var string|false|null $data */ - $data = ($this->source)($length); - if ($data === false || $data === null) { - $this->source = null; - - return; - } - - if ($data === '') { - throw new \RuntimeException('PumpStream source returned an empty string'); - } - - $this->buffer->write($data); - $length -= strlen($data); - } while ($length > 0); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Query.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Query.php deleted file mode 100644 index c54c669f2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Query.php +++ /dev/null @@ -1,156 +0,0 @@ - '1', 'foo[b]' => '2']`. - * - * @param string $str Query string to parse - * @param int|bool $urlEncoding How the query string is encoded - */ - public static function parse(string $str, $urlEncoding = true): array - { - $result = []; - - if ($str === '') { - return $result; - } - - if ($urlEncoding === true) { - $decoder = function (string $value): string { - return \rawurldecode(str_replace('+', ' ', $value)); - }; - } elseif ($urlEncoding === PHP_QUERY_RFC3986) { - $decoder = static function (string $value): string { - return \rawurldecode($value); - }; - } elseif ($urlEncoding === PHP_QUERY_RFC1738) { - $decoder = static function (string $value): string { - return \urldecode($value); - }; - } else { - $decoder = function (string $str): string { - return $str; - }; - } - - foreach (explode('&', $str) as $kvp) { - $parts = explode('=', $kvp, 2); - $key = $decoder($parts[0]); - $value = isset($parts[1]) ? $decoder($parts[1]) : null; - if (!array_key_exists($key, $result)) { - $result[$key] = $value; - } else { - if (!is_array($result[$key])) { - $result[$key] = [$result[$key]]; - } - $result[$key][] = $value; - } - } - - return $result; - } - - /** - * Build a query string from an array of key-value pairs. - * - * This function can use the return value of `parse()` to build a query - * string. This function does not modify the provided keys when an array is - * encountered, unlike `http_build_query()`. - * - * @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, bool $treatBoolsAsInts = true): string - { - if (!$params) { - return ''; - } - - if ($encoding === false) { - $encoder = function (string $str): string { - return $str; - }; - } elseif ($encoding === PHP_QUERY_RFC3986) { - $encoder = static function (string $value): string { - return \rawurlencode($value); - }; - } elseif ($encoding === PHP_QUERY_RFC1738) { - $encoder = static function (string $value): string { - return \urlencode($value); - }; - } else { - throw new \InvalidArgumentException('Invalid type'); - } - - $qs = ''; - foreach ($params as $k => $v) { - $k = $encoder((string) $k); - if (!is_array($v)) { - $qs .= $k; - $v = self::normalizeValue($v, $treatBoolsAsInts); - if ($v !== null) { - $qs .= '='.$encoder($v); - } - $qs .= '&'; - } else { - foreach ($v as $vv) { - $qs .= $k; - $vv = self::normalizeValue($vv, $treatBoolsAsInts); - if ($vv !== null) { - $qs .= '='.$encoder($vv); - } - $qs .= '&'; - } - } - } - - return $qs ? (string) substr($qs, 0, -1) : ''; - } - - /** - * @param mixed $value - */ - private static function normalizeValue($value, bool $treatBoolsAsInts): ?string - { - if ($value === null) { - return null; - } - - if (is_bool($value)) { - return $treatBoolsAsInts ? (string) (int) $value : ($value ? 'true' : 'false'); - } - - if (is_float($value) && !is_finite($value)) { - throw new \InvalidArgumentException('Query string values must be finite; non-finite floats are not supported.'); - } - - if (is_scalar($value)) { - return (string) $value; - } - - if (is_object($value) && method_exists($value, '__toString')) { - return $value->__toString(); - } - - throw new \InvalidArgumentException('Query string values must be scalar, null, or stringable objects'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Request.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Request.php deleted file mode 100644 index c49b16d63..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Request.php +++ /dev/null @@ -1,210 +0,0 @@ -assertMethod($method); - $this->assertProtocolVersion($version); - - if (!$uri instanceof UriInterface) { - $uri = new Uri($uri); - } - self::getRequestTargetFromUri($uri); - - $this->method = $method; - $this->uri = $uri; - $this->setHeaders($headers); - $this->protocol = $version; - - if (!isset($this->headerNames['host'])) { - $this->updateHostFromUri(); - } - - if ($body !== '' && $body !== null) { - $this->stream = Utils::streamFor($body); - } - } - - public function getRequestTarget(): string - { - if ($this->requestTarget !== null) { - return $this->requestTarget; - } - - return self::getRequestTargetFromUri($this->uri); - } - - public function withRequestTarget(string $requestTarget): RequestInterface - { - self::assertRequestTarget($requestTarget); - - $new = clone $this; - $new->requestTarget = $requestTarget; - - return $new; - } - - public function getMethod(): string - { - return $this->method; - } - - public function withMethod(string $method): RequestInterface - { - $this->assertMethod($method); - $new = clone $this; - $new->method = $method; - - return $new; - } - - public function getUri(): UriInterface - { - return $this->uri; - } - - public function withUri(UriInterface $uri, bool $preserveHost = false): RequestInterface - { - $sameUri = $uri === $this->uri; - - if (!$sameUri && $this->requestTarget === null) { - self::getRequestTargetFromUri($uri); - } - - $currentHost = $this->getHeaderLine('Host'); - $host = null; - - if (!$preserveHost || $currentHost === '') { - $host = $this->getHostFromUri($uri); - } - - if ($sameUri && ($host === null || $currentHost === $host)) { - return $this; - } - - $new = clone $this; - $new->uri = $uri; - - if ($host !== null) { - $new->setHostHeader($host); - } - - return $new; - } - - private function updateHostFromUri(): void - { - $host = $this->getHostFromUri($this->uri); - - if ($host === null) { - return; - } - - $this->setHostHeader($host); - } - - private function getHostFromUri(UriInterface $uri): ?string - { - $host = $uri->getHost(); - - if ($host === '') { - return null; - } - - Uri::assertValidHost($host); - - if (($port = $uri->getPort()) !== null) { - $host .= ':'.$port; - } - - $this->assertValue($host); - - return $host; - } - - private function setHostHeader(string $host): void - { - if (isset($this->headerNames['host'])) { - $header = $this->headerNames['host']; - } else { - $header = 'Host'; - $this->headerNames['host'] = 'Host'; - } - // Ensure Host is the first header. - // See: https://datatracker.ietf.org/doc/html/rfc9110#section-7.2 - $this->headers = [$header => [$host]] + $this->headers; - } - - private function assertMethod(string $method): void - { - if (!Rfc9110::isToken($method)) { - throw new InvalidArgumentException('Method must be a valid HTTP token.'); - } - } - - private static function getRequestTargetFromUri(UriInterface $uri): string - { - $target = self::normalizePathForOriginForm($uri->getPath()); - if ($target === '') { - $target = '/'; - } - if ($uri->getQuery() != '') { - $target .= '?'.$uri->getQuery(); - } - - self::assertRequestTarget($target); - - return $target; - } - - private static function assertRequestTarget(string $requestTarget): void - { - if (!Rfc9112::isValidRequestTarget($requestTarget)) { - throw new InvalidArgumentException( - 'Invalid request target provided; cannot be empty or contain whitespace or control characters' - ); - } - } - - private static function normalizePathForOriginForm(string $path): string - { - if (str_starts_with($path, '//')) { - return '/'.ltrim($path, '/'); - } - - return $path; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Response.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Response.php deleted file mode 100644 index a4e8ff664..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Response.php +++ /dev/null @@ -1,159 +0,0 @@ - 'Continue', - 101 => 'Switching Protocols', - 102 => 'Processing', - 200 => 'OK', - 201 => 'Created', - 202 => 'Accepted', - 203 => 'Non-Authoritative Information', - 204 => 'No Content', - 205 => 'Reset Content', - 206 => 'Partial Content', - 207 => 'Multi-status', - 208 => 'Already Reported', - 300 => 'Multiple Choices', - 301 => 'Moved Permanently', - 302 => 'Found', - 303 => 'See Other', - 304 => 'Not Modified', - 305 => 'Use Proxy', - 306 => 'Switch Proxy', - 307 => 'Temporary Redirect', - 308 => 'Permanent Redirect', - 400 => 'Bad Request', - 401 => 'Unauthorized', - 402 => 'Payment Required', - 403 => 'Forbidden', - 404 => 'Not Found', - 405 => 'Method Not Allowed', - 406 => 'Not Acceptable', - 407 => 'Proxy Authentication Required', - 408 => 'Request Time-out', - 409 => 'Conflict', - 410 => 'Gone', - 411 => 'Length Required', - 412 => 'Precondition Failed', - 413 => 'Request Entity Too Large', - 414 => 'Request-URI Too Large', - 415 => 'Unsupported Media Type', - 416 => 'Requested range not satisfiable', - 417 => 'Expectation Failed', - 418 => 'I\'m a teapot', - 422 => 'Unprocessable Entity', - 423 => 'Locked', - 424 => 'Failed Dependency', - 425 => 'Unordered Collection', - 426 => 'Upgrade Required', - 428 => 'Precondition Required', - 429 => 'Too Many Requests', - 431 => 'Request Header Fields Too Large', - 451 => 'Unavailable For Legal Reasons', - 500 => 'Internal Server Error', - 501 => 'Not Implemented', - 502 => 'Bad Gateway', - 503 => 'Service Unavailable', - 504 => 'Gateway Time-out', - 505 => 'HTTP Version not supported', - 506 => 'Variant Also Negotiates', - 507 => 'Insufficient Storage', - 508 => 'Loop Detected', - 510 => 'Not Extended', - 511 => 'Network Authentication Required', - ]; - - private string $reasonPhrase; - - private int $statusCode; - - /** - * @param int $status Status code - * @param (string|string[])[] $headers Response headers - * @param string|resource|StreamInterface|null $body Response body - * @param string $version Protocol version - * @param string|null $reason Reason phrase (when empty a default will be used based on the status code) - */ - public function __construct( - int $status = 200, - array $headers = [], - $body = null, - string $version = '1.1', - ?string $reason = null - ) { - $this->assertStatusCodeRange($status); - $this->assertProtocolVersion($version); - - $this->statusCode = $status; - - if ($body !== '' && $body !== null) { - $this->stream = Utils::streamFor($body); - } - - $this->setHeaders($headers); - if ($reason == '' && isset(self::PHRASES[$this->statusCode])) { - $reasonPhrase = self::PHRASES[$this->statusCode]; - } else { - $reasonPhrase = (string) $reason; - } - - $this->assertReasonPhrase($reasonPhrase); - $this->reasonPhrase = $reasonPhrase; - - $this->protocol = $version; - } - - public function getStatusCode(): int - { - return $this->statusCode; - } - - public function getReasonPhrase(): string - { - return $this->reasonPhrase; - } - - public function withStatus(int $code, string $reasonPhrase = ''): ResponseInterface - { - $this->assertStatusCodeRange($code); - - $new = clone $this; - $new->statusCode = $code; - if ($reasonPhrase === '' && isset(self::PHRASES[$new->statusCode])) { - $reasonPhrase = self::PHRASES[$new->statusCode]; - } - $this->assertReasonPhrase($reasonPhrase); - $new->reasonPhrase = $reasonPhrase; - - return $new; - } - - private function assertStatusCodeRange(int $statusCode): void - { - if ($statusCode < 100 || $statusCode >= 600) { - throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.'); - } - } - - private function assertReasonPhrase(string $reasonPhrase): void - { - if (!Rfc9112::isValidReasonPhrase($reasonPhrase)) { - throw new \InvalidArgumentException('Reason phrase must not contain invalid control characters.'); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Rfc3986.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Rfc3986.php deleted file mode 100644 index d6cc92aeb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Rfc3986.php +++ /dev/null @@ -1,361 +0,0 @@ - $word) { - if ($word !== 0) { - $start = -1; - continue; - } - if ($start === -1) { - $start = $i; - } - if ($i - $start + 1 > $bestLen) { - $bestStart = $start; - $bestLen = $i - $start + 1; - } - } - if ($bestLen < 2) { - $bestLen = 0; - } - - // RFC 5952 section 5: embedded IPv4 notation for IPv4-mapped - // (::ffff:0:0/96) and IPv4-compatible (::/96) addresses, the same - // condition BIND-derived inet_ntop() and curl use. bestStart must be - // zero: a five or six field zero run elsewhere is not an IPv4 prefix. - $mixed = $bestStart === 0 - && ($bestLen === 6 || ($bestLen === 5 && $words[5] === 0xFFFF)); - - $groups = []; - for ($i = 0, $n = $mixed ? 6 : 8; $i < $n; ++$i) { - $groups[] = dechex($words[$i]); - } - if ($mixed) { - $groups[] = sprintf( - '%d.%d.%d.%d', - $words[6] >> 8, - $words[6] & 0xFF, - $words[7] >> 8, - $words[7] & 0xFF - ); - } - - if ($bestLen === 0) { - return implode(':', $groups); - } - - return implode(':', array_slice($groups, 0, $bestStart)).'::'.implode(':', array_slice($groups, $bestStart + $bestLen)); - } - - private static function hasValidHostPercentEncoding(string $host): bool - { - // Mirror of the raw reg-name policy above for percent-encoded octets: - // reject malformed sequences (RFC 3986 requires "%" HEXDIG HEXDIG) and - // octets that decode to bytes the raw grammar rejects - C0 controls, - // SP, DEL, the delimiters / ? # @ \ [ ], the port colon, and % itself. - // Octets decoding to any other byte (unreserved, sub-delims, and - // non-ASCII UTF-8 data) remain accepted. - $invalidEncoding = preg_match( - '/%(?!'.self::HEX_OCTET.')|%(?:[01][0-9A-Fa-f]|2[035F]|3[AF]|40|5[BCD]|7F)/i', - $host - ); - - return $invalidEncoding === 0; - } - - private static function isValidIpLiteralHost(string $host): bool - { - if (!str_starts_with($host, '[') || !str_ends_with($host, ']')) { - return false; - } - - $address = substr($host, 1, -1); - if (\filter_var($address, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6) !== false) { - return true; - } - - // RFC 6874 IPv6 zone identifiers are intentionally not supported here. - // Bracketed hosts are validated as IPv6 or IPvFuture only. - return preg_match('/^v[0-9a-f]+\.['.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.':]+$/iD', $address) === 1; - } - - /** - * Parses a textual IPv6 address into its eight 16-bit words, or null - * when the text is not a structurally valid address. - * - * The grammar enforced here is the RFC 3986 `IPv6address` rule: one to four - * hexadecimal digits per field, at most one `::` eliding one or more zero - * fields, and an optional dotted-decimal tail of four octets (0-255, no - * leading zeros) as the final 32 bits. FILTER_VALIDATE_IP accepts exactly - * this grammar, so the filter guard in tryCanonicalizeIpv6() and this - * parser always agree and the null paths here can only fail closed. - * - * @return list|null - */ - private static function parseIpv6Words(string $address): ?array - { - // A dotted-decimal tail is only valid as the final 32 bits, after the - // final colon. Rewrite it into its two hexadecimal fields so the - // remainder of the parse handles hexadecimal fields only. - $dot = strpos($address, '.'); - if ($dot !== false) { - $colon = strrpos($address, ':'); - if ($colon === false || $colon > $dot) { - return null; - } - $octets = explode('.', substr($address, $colon + 1)); - if (count($octets) !== 4) { - return null; - } - $bytes = []; - foreach ($octets as $octet) { - if ($octet === '' || strlen($octet) > 3 || !ctype_digit($octet)) { - return null; - } - if ($octet[0] === '0' && $octet !== '0') { - return null; - } - $byte = (int) $octet; - if ($byte > 255) { - return null; - } - $bytes[] = $byte; - } - $address = substr($address, 0, $colon + 1) - .dechex(($bytes[0] << 8) | $bytes[1]) - .':' - .dechex(($bytes[2] << 8) | $bytes[3]); - } - - $halves = explode('::', $address); - if (count($halves) > 2) { - return null; - } - - $head = self::parseHexFields($halves[0]); - if ($head === null) { - return null; - } - - if (count($halves) === 1) { - return count($head) === 8 ? $head : null; - } - - $tail = self::parseHexFields($halves[1]); - if ($tail === null) { - return null; - } - - // The "::" must elide at least one zero field. - $elided = 8 - count($head) - count($tail); - if ($elided < 1) { - return null; - } - - return array_merge($head, array_fill(0, $elided, 0), $tail); - } - - /** - * Parses a colon-separated run of 16-bit hexadecimal fields, or null - * when a field is empty, longer than four digits, or not hexadecimal. - * - * @return list|null - */ - private static function parseHexFields(string $fields): ?array - { - if ($fields === '') { - return []; - } - - $words = []; - foreach (explode(':', $fields) as $field) { - if ($field === '' || strlen($field) > 4 || !ctype_xdigit($field)) { - return null; - } - $words[] = intval($field, 16); - } - - return $words; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Rfc9110.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Rfc9110.php deleted file mode 100644 index c93b1b2fd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Rfc9110.php +++ /dev/null @@ -1,41 +0,0 @@ -@,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m"; - public const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)"; - - public static function isValidProtocolVersion(string $version): bool - { - return preg_match('/^'.self::PROTOCOL_VERSION_PATTERN.'$/D', $version) === 1; - } - - public static function isValidRequestTarget(string $target): bool - { - return preg_match('/^'.self::REQUEST_TARGET_PATTERN.'$/D', $target) === 1; - } - - public static function isValidReasonPhrase(string $reasonPhrase): bool - { - return Rfc9110::isFieldValue($reasonPhrase); - } - - /** - * @return array{0: string, 1: int|null}|null - */ - public static function parseHostHeader(string $authority): ?array - { - if ($authority === '') { - return null; - } - - $host = $authority; - $port = null; - - if (str_starts_with($authority, '[')) { - $closingBracket = strpos($authority, ']'); - if ($closingBracket === false) { - return null; - } - - $host = substr($authority, 0, $closingBracket + 1); - $remainder = substr($authority, $closingBracket + 1); - if ($remainder !== '') { - if (!str_starts_with($remainder, ':')) { - return null; - } - - $port = self::parsePort(substr($remainder, 1)); - if ($port === null) { - return null; - } - } - } elseif (false !== ($colon = strpos($authority, ':'))) { - $host = substr($authority, 0, $colon); - $port = self::parsePort(substr($authority, $colon + 1)); - if ($port === null) { - return null; - } - } - - if ($host === '' || !Rfc3986::isValidHost($host)) { - return null; - } - - return [$host, $port]; - } - - public static function isAbsoluteFormRequestTarget(string $target): bool - { - return preg_match('/^[A-Za-z][A-Za-z0-9+.-]*:\/\//D', $target) === 1; - } - - public static function isAsteriskFormRequestTarget(string $method, string $target): bool - { - return $method === 'OPTIONS' && $target === '*'; - } - - public static function isConnectAuthorityFormRequestTarget(string $method, string $target): bool - { - return $method === 'CONNECT' && strpbrk($target, '/?#') === false; - } - - public static function parsePort(string $port): ?int - { - if (!Rfc3986::isValidPort($port)) { - return null; - } - - // A zero port is valid per RFC 3986 but meaningless for an HTTP - // authority, so reject it on top of the generic syntax check. - $parsed = (int) ltrim($port, '0'); - - return $parsed === 0 ? null : $parsed; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/ServerRequest.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/ServerRequest.php deleted file mode 100644 index adf17627d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/ServerRequest.php +++ /dev/null @@ -1,234 +0,0 @@ -serverParams = $serverParams; - - parent::__construct($method, $uri, $headers, $body, $version); - } - - /** - * Return an UploadedFile instance array. - * - * @param array $files An array which respect $_FILES structure - * - * @throws InvalidArgumentException for unrecognized values - */ - public static function normalizeFiles(array $files): array - { - return UploadedFileNormalizer::normalize($files); - } - - /** - * Return a ServerRequest populated with superglobals: - * $_GET - * $_POST - * $_COOKIE - * $_FILES - * $_SERVER - */ - public static function fromGlobals(): ServerRequestInterface - { - return ServerRequestGlobalsFactory::fromArrays( - $_SERVER, - $_GET, - $_POST, - $_COOKIE, - $_FILES, - static function () { - if (!\function_exists('apache_request_headers')) { - return false; - } - - return \apache_request_headers(); - } - ); - } - - /** - * Get a Uri populated with values from $_SERVER. - */ - public static function getUriFromGlobals(): UriInterface - { - return ServerRequestGlobalsFactory::getUriFromServerParams($_SERVER); - } - - public function getServerParams(): array - { - return $this->serverParams; - } - - public function getUploadedFiles(): array - { - return $this->uploadedFiles; - } - - public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface - { - $stack = [$uploadedFiles]; - - for ($i = 0; $i < \count($stack); ++$i) { - foreach ($stack[$i] as $uploadedFile) { - if ($uploadedFile instanceof UploadedFileInterface) { - continue; - } - - if (\is_array($uploadedFile)) { - $stack[] = $uploadedFile; - continue; - } - - throw new InvalidArgumentException(sprintf( - 'Invalid uploaded file tree; expected UploadedFileInterface instances but %s provided.', - \get_debug_type($uploadedFile) - )); - } - } - - $new = clone $this; - $new->uploadedFiles = $uploadedFiles; - - return $new; - } - - public function getCookieParams(): array - { - return $this->cookieParams; - } - - public function withCookieParams( - #[\SensitiveParameter] - array $cookies - ): ServerRequestInterface { - $new = clone $this; - $new->cookieParams = $cookies; - - return $new; - } - - public function getQueryParams(): array - { - return $this->queryParams; - } - - public function withQueryParams(array $query): ServerRequestInterface - { - $new = clone $this; - $new->queryParams = $query; - - return $new; - } - - /** - * @return array|object|null - */ - public function getParsedBody() - { - return $this->parsedBody; - } - - public function withParsedBody($data): ServerRequestInterface - { - if ($data !== null && !\is_array($data) && !\is_object($data)) { - throw new InvalidArgumentException('Parsed body must be an array, object, or null.'); - } - - $new = clone $this; - $new->parsedBody = $data; - - return $new; - } - - public function getAttributes(): array - { - return $this->attributes; - } - - /** - * @return mixed - */ - public function getAttribute(string $name, $default = null) - { - if (false === array_key_exists($name, $this->attributes)) { - return $default; - } - - return $this->attributes[$name]; - } - - public function withAttribute(string $name, $value): ServerRequestInterface - { - $new = clone $this; - $new->attributes[$name] = $value; - - return $new; - } - - public function withoutAttribute(string $name): ServerRequestInterface - { - if (false === array_key_exists($name, $this->attributes)) { - return $this; - } - - $new = clone $this; - unset($new->attributes[$name]); - - return $new; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/ServerRequestGlobalsFactory.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/ServerRequestGlobalsFactory.php deleted file mode 100644 index 977420fca..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/ServerRequestGlobalsFactory.php +++ /dev/null @@ -1,504 +0,0 @@ - $server Typically the $_SERVER superglobal - * @param array $query Typically the $_GET superglobal - * @param array $post Typically the $_POST superglobal - * @param array $cookies Typically the $_COOKIE superglobal - * @param array $files Typically the $_FILES superglobal - * @param (callable(): mixed)|null $headerProvider - */ - public static function fromArrays( - #[\SensitiveParameter] - array $server, - array $query, - array $post, - #[\SensitiveParameter] - array $cookies, - array $files, - ?callable $headerProvider = null - ): ServerRequestInterface { - $method = self::getRequestMethodFromServer($server); - $headers = self::removeInvalidHostHeader(self::getAllHeaders($server, $headerProvider)); - [$uri, $requestTarget] = self::getUriAndRequestTargetFromServer($server, $method); - $body = new CachingStream(new LazyOpenStream('php://input', 'r+')); - - $serverRequest = new ServerRequest($method, $uri, $headers, $body, self::getProtocolFromServer($server), $server); - if ($requestTarget !== null) { - /** @var ServerRequestInterface $serverRequest */ - $serverRequest = $serverRequest->withRequestTarget($requestTarget); - } - - return $serverRequest - ->withCookieParams($cookies) - ->withQueryParams($query) - ->withParsedBody($post) - ->withUploadedFiles(UploadedFileNormalizer::normalize($files)); - } - - /** - * @param array $server Typically the $_SERVER superglobal - */ - public static function getUriFromServerParams( - #[\SensitiveParameter] - array $server - ): UriInterface { - $method = self::getRequestMethodFromServer($server); - - return self::getUriAndRequestTargetFromServer($server, $method)[0]; - } - - /** - * @param array $server - * @param (callable(): mixed)|null $headerProvider - * - * @return array - */ - private static function getAllHeaders( - #[\SensitiveParameter] - array $server, - ?callable $headerProvider - ): array { - $headers = $headerProvider !== null ? $headerProvider() : false; - - if (!is_array($headers)) { - $headers = self::getHeadersFromServer($server); - } - - return self::normalizeHeaderValues($headers); - } - - /** - * @param array $headers - * - * @return array - */ - private static function normalizeHeaderValues( - #[\SensitiveParameter] - array $headers - ): array { - $normalized = []; - - foreach ($headers as $name => $value) { - if (is_scalar($value) || (is_object($value) && method_exists($value, '__toString'))) { - $normalized[$name] = (string) $value; - } - } - - return $normalized; - } - - /** - * @param array $server Typically the $_SERVER superglobal - * - * @return array - */ - private static function getHeadersFromServer(array $server): array - { - $headers = []; - - $copyServer = [ - 'CONTENT_TYPE' => 'Content-Type', - 'CONTENT_LENGTH' => 'Content-Length', - 'CONTENT_MD5' => 'Content-Md5', - ]; - - foreach ($server as $key => $value) { - if (!is_string($key) || !is_string($value)) { - continue; - } - - if (str_starts_with($key, 'HTTP_')) { - $header = substr($key, 5); - - if (isset($copyServer[$header], $server[$header]) && is_string($server[$header])) { - continue; - } - - $parts = explode(' ', Utils::asciiToLower(str_replace('_', ' ', $header))); - foreach ($parts as $i => $part) { - $parts[$i] = Utils::asciiUcFirst($part); - } - $header = implode('-', $parts); - $headers[$header] = $value; - - continue; - } - - if (isset($copyServer[$key])) { - $headers[$copyServer[$key]] = $value; - } - } - - if (!isset($headers['Authorization'])) { - if (isset($server['REDIRECT_HTTP_AUTHORIZATION']) && is_string($server['REDIRECT_HTTP_AUTHORIZATION'])) { - $headers['Authorization'] = $server['REDIRECT_HTTP_AUTHORIZATION']; - } elseif (isset($server['PHP_AUTH_USER']) && is_string($server['PHP_AUTH_USER'])) { - $password = isset($server['PHP_AUTH_PW']) && is_string($server['PHP_AUTH_PW']) - ? $server['PHP_AUTH_PW'] - : ''; - - $headers['Authorization'] = 'Basic '.base64_encode($server['PHP_AUTH_USER'].':'.$password); - } elseif (isset($server['PHP_AUTH_DIGEST']) && is_string($server['PHP_AUTH_DIGEST'])) { - $headers['Authorization'] = $server['PHP_AUTH_DIGEST']; - } - } - - return $headers; - } - - /** - * @param array $headers - * - * @return array - */ - private static function removeInvalidHostHeader(array $headers): array - { - foreach ($headers as $name => $value) { - if (Utils::asciiToLower((string) $name) !== 'host') { - continue; - } - - [$host] = self::extractHostAndPortFromAuthority($value); - if ($host === null) { - unset($headers[$name]); - } - } - - return $headers; - } - - /** - * @param array $server - */ - private static function getServerParam(array $server, string $key): ?string - { - return isset($server[$key]) && is_string($server[$key]) ? $server[$key] : null; - } - - /** - * @param array $server - */ - private static function getRequestMethodFromServer(array $server): string - { - return Utils::asciiToUpper(self::getServerParam($server, 'REQUEST_METHOD') ?? 'GET'); - } - - /** - * @param array $server - */ - private static function getProtocolFromServer(array $server): string - { - $serverProtocol = self::getServerParam($server, 'SERVER_PROTOCOL'); - if ($serverProtocol === null) { - return '1.1'; - } - - return str_starts_with($serverProtocol, 'HTTP/') ? substr($serverProtocol, 5) : $serverProtocol; - } - - /** - * @return array{0: string|null, 1: int|null} - */ - private static function extractHostAndPortFromAuthority(string $authority): array - { - return Rfc9112::parseHostHeader($authority) ?? [null, null]; - } - - private static function parseServerPort(string $port): int - { - $parsed = Rfc9112::parsePort($port); - if ($parsed === null) { - throw new InvalidArgumentException('Invalid SERVER_PORT; expected an integer between 1 and 65535.'); - } - - return $parsed; - } - - private static function withHostFromServer(UriInterface $uri, ?string $host): ?UriInterface - { - if ($host === null) { - return null; - } - - try { - return $uri->withHost($host); - } catch (InvalidArgumentException $e) { - return null; - } - } - - /** - * @param array $server - */ - private static function getUriWithSchemeFromServer(array $server): UriInterface - { - $uri = new Uri(''); - - $https = self::getServerParam($server, 'HTTPS'); - - return $uri->withScheme(!empty($https) && $https !== 'off' ? 'https' : 'http'); - } - - /** - * @param array $server - */ - private static function getAuthorityUriFromServer( - #[\SensitiveParameter] - array $server - ): UriInterface { - $uri = self::getUriWithSchemeFromServer($server); - - $hasPort = false; - $hasHost = false; - $authority = self::getServerParam($server, 'HTTP_HOST'); - if ($authority !== null) { - [$host, $port] = self::extractHostAndPortFromAuthority($authority); - if ($host !== null) { - $hostUri = self::withHostFromServer($uri, $host); - if ($hostUri !== null) { - $uri = $hostUri; - $hasHost = true; - - if ($port !== null) { - $hasPort = true; - $uri = $uri->withPort($port); - } - } - } - } - - foreach (['SERVER_NAME', 'SERVER_ADDR'] as $serverParam) { - if ($hasHost) { - continue; - } - - $hostUri = self::withHostFromServer($uri, self::getServerParam($server, $serverParam)); - if ($hostUri !== null) { - $uri = $hostUri; - $hasHost = true; - } - } - - $serverPort = self::getServerParam($server, 'SERVER_PORT'); - if (!$hasPort && $serverPort !== null) { - $uri = $uri->withPort(self::parseServerPort($serverPort)); - } - - return $uri; - } - - /** - * @param array $server - * - * @return array{0: UriInterface, 1: string|null} - */ - private static function getUriAndRequestTargetFromServer( - #[\SensitiveParameter] - array $server, - string $method - ): array { - $requestUri = self::getServerParam($server, 'REQUEST_URI'); - $queryString = self::getServerParam($server, 'QUERY_STRING'); - - if ($requestUri !== null) { - $connectAuthority = self::parseConnectAuthorityFormRequestTarget($method, $requestUri); - if ($connectAuthority !== null) { - [$host, $port] = $connectAuthority; - $uri = self::getUriWithSchemeFromServer($server); - - return [ - $uri->withHost($host)->withPort($port)->withPath('')->withQuery(''), - $requestUri, - ]; - } - - $absoluteForm = self::getAbsoluteFormUriAndRequestTarget($requestUri, $queryString); - if ($absoluteForm !== null) { - return $absoluteForm; - } - } - - $uri = self::getAuthorityUriFromServer($server); - - if ($requestUri === null) { - if ($queryString !== null) { - $uri = $uri->withQuery($queryString); - } - - return [$uri, null]; - } - - if (Rfc9112::isAsteriskFormRequestTarget($method, $requestUri)) { - return [$uri->withPath('')->withQuery(''), '*']; - } - - [$path, $query, $hasQuery] = self::splitRequestTargetQuery($requestUri); - $uri = $uri->withPath(self::normalizeOriginFormPathFromServer($path)); - - if ($hasQuery) { - $uri = $uri->withQuery($query); - } elseif ($queryString !== null) { - $uri = $uri->withQuery($queryString); - } - - return [$uri, null]; - } - - /** - * @return array{0: UriInterface, 1: string}|null - */ - private static function getAbsoluteFormUriAndRequestTarget( - #[\SensitiveParameter] - string $requestUri, - ?string $queryString - ): ?array { - if (!Rfc9112::isAbsoluteFormRequestTarget($requestUri)) { - return null; - } - - try { - $targetUri = (new Uri($requestUri))->withFragment(''); - } catch (InvalidArgumentException $e) { - return null; - } - - if ($targetUri->getHost() === '') { - return null; - } - - $requestTarget = self::removeRequestTargetFragment($requestUri); - $requestTargetWithoutUserInfo = self::removeUserInfoFromAbsoluteFormRequestTarget($requestTarget); - if ($requestTargetWithoutUserInfo !== $requestTarget) { - $targetUri = $targetUri->withUserInfo(''); - $requestTarget = $requestTargetWithoutUserInfo; - } - - if (!str_contains($requestTarget, '?') && $queryString !== null && $queryString !== '') { - $targetUri = $targetUri->withQuery($queryString); - $requestTarget .= '?'.$queryString; - } - - // Preserve the received absolute-form target unless it cannot be used as - // a PSR-7 request target without normalization. - $normalizeRequestTarget = !Rfc9112::isValidRequestTarget($requestTarget) - || self::hasEmptyPortInAbsoluteFormRequestTarget($requestTarget); - - return [$targetUri, $normalizeRequestTarget ? (string) $targetUri : $requestTarget]; - } - - private static function removeUserInfoFromAbsoluteFormRequestTarget(string $target): string - { - $authorityStart = strpos($target, '://'); - if ($authorityStart === false) { - return $target; - } - - $authorityStart += 3; - $authorityLength = strcspn($target, '/?#', $authorityStart); - $authority = substr($target, $authorityStart, $authorityLength); - if ($authority === '') { - return $target; - } - - $lastAt = strrpos($authority, '@'); - if ($lastAt === false) { - return $target; - } - - $authorityEnd = $authorityStart + $authorityLength; - - return substr($target, 0, $authorityStart) - .substr($authority, $lastAt + 1) - .substr($target, $authorityEnd); - } - - private static function hasEmptyPortInAbsoluteFormRequestTarget(string $target): bool - { - $authorityStart = strpos($target, '://'); - if ($authorityStart === false) { - return false; - } - - $authorityStart += 3; - $authority = substr($target, $authorityStart, strcspn($target, '/?#', $authorityStart)); - if ($authority === '') { - return false; - } - - $lastAt = strrpos($authority, '@'); - if ($lastAt !== false) { - $authority = substr($authority, $lastAt + 1); - } - - if ($authority === '') { - return false; - } - - if (str_starts_with($authority, '[')) { - $closingBracket = strpos($authority, ']'); - - return $closingBracket !== false && substr($authority, $closingBracket + 1) === ':'; - } - - return str_ends_with($authority, ':'); - } - - /** - * @return array{0: string, 1: int}|null - */ - private static function parseConnectAuthorityFormRequestTarget(string $method, string $target): ?array - { - if (!Rfc9112::isConnectAuthorityFormRequestTarget($method, $target)) { - return null; - } - - [$host, $port] = self::extractHostAndPortFromAuthority($target); - if ($host === null || $port === null) { - return null; - } - - return [$host, $port]; - } - - private static function removeRequestTargetFragment(string $target): string - { - return explode('#', $target, 2)[0]; - } - - /** - * @return array{0: string, 1: string, 2: bool} - */ - private static function splitRequestTargetQuery(string $target): array - { - $parts = explode('?', $target, 2); - - return [$parts[0], $parts[1] ?? '', isset($parts[1])]; - } - - private static function normalizeOriginFormPathFromServer(string $path): string - { - if ($path === '' || str_starts_with($path, '/')) { - return $path; - } - - return '/'.$path; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Stream.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Stream.php deleted file mode 100644 index 4235993a1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Stream.php +++ /dev/null @@ -1,334 +0,0 @@ -size = Integers::assertOptionalNonNegativeSize($options['size'] ?? null, 'Stream size'); - - $this->customMetadata = $options['metadata'] ?? []; - $this->stream = $stream; - $meta = stream_get_meta_data($this->stream); - $this->seekable = $meta['seekable']; - $this->readable = self::isReadableMode($meta['mode']); - $this->writable = self::isWritableMode($meta['mode']); - $this->uri = $meta['uri'] ?? null; - } - - /** - * Closes the stream when the destructed - */ - public function __destruct() - { - $this->close(); - } - - public function __toString(): string - { - if ($this->isSeekable()) { - $this->seek(0); - } - - return $this->getContents(); - } - - public function getContents(): string - { - if (!isset($this->stream)) { - throw new \RuntimeException('Stream is detached'); - } - - if (!$this->readable) { - throw new \RuntimeException('Cannot read from non-readable stream'); - } - - return Utils::tryGetContents($this->stream); - } - - public function close(): void - { - if (isset($this->stream)) { - if (is_resource($this->stream)) { - fclose($this->stream); - } - $this->detach(); - } - } - - public function detach() - { - if (!isset($this->stream)) { - return null; - } - - $result = $this->stream; - unset($this->stream); - $this->size = $this->uri = null; - $this->readable = $this->writable = $this->seekable = false; - - return $result; - } - - public function getSize(): ?int - { - if ($this->size !== null) { - return $this->size; - } - - if (!isset($this->stream)) { - return null; - } - - // Clear the stat cache if the stream has a URI - if ($this->uri) { - clearstatcache(true, $this->uri); - } - - $stats = fstat($this->stream); - if ($stats === false) { - return null; - } - - $this->size = Integers::assertEngineInteger($stats['size'], 'Stream size'); - - return $this->size; - } - - public function isReadable(): bool - { - return $this->readable; - } - - public function isWritable(): bool - { - return $this->writable; - } - - public function isSeekable(): bool - { - return $this->seekable; - } - - public function eof(): bool - { - if (!isset($this->stream)) { - throw new \RuntimeException('Stream is detached'); - } - - return feof($this->stream); - } - - public function tell(): int - { - if (!isset($this->stream)) { - throw new \RuntimeException('Stream is detached'); - } - - $result = ftell($this->stream); - if ($result === false) { - throw new \RuntimeException('Unable to determine stream position'); - } - - $position = Integers::assertEngineInteger($result, 'Stream position'); - if ($position === null) { - throw new \RuntimeException('Unable to determine stream position'); - } - - return $position; - } - - public function rewind(): void - { - $this->seek(0); - } - - public function seek(int $offset, int $whence = SEEK_SET): void - { - if (!isset($this->stream)) { - throw new \RuntimeException('Stream is detached'); - } - if (!$this->seekable) { - throw new \RuntimeException('Stream is not seekable'); - } - if (fseek($this->stream, $offset, $whence) === -1) { - throw new \RuntimeException('Unable to seek to stream position ' - .$offset.' with whence '.var_export($whence, true)); - } - } - - public function read(int $length): string - { - if (!isset($this->stream)) { - throw new \RuntimeException('Stream is detached'); - } - if (!$this->readable) { - throw new \RuntimeException('Cannot read from non-readable stream'); - } - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - if (0 === $length) { - return ''; - } - - try { - $string = fread($this->stream, $length); - } catch (TimeoutException $e) { - throw $e; - } catch (\Exception $e) { - if ($this->timedOut()) { - throw new TimeoutException('Unable to read from stream: timed out', 0, $e); - } - - throw new \RuntimeException('Unable to read from stream', 0, $e); - } - - if (false === $string) { - if ($this->timedOut()) { - throw new TimeoutException('Unable to read from stream: timed out'); - } - - throw new \RuntimeException('Unable to read from stream'); - } - - if ($string === '' && $this->timedOut()) { - throw new TimeoutException('Unable to read from stream: timed out'); - } - - return $string; - } - - public function write(string $string): int - { - if (!isset($this->stream)) { - throw new \RuntimeException('Stream is detached'); - } - if (!$this->writable) { - throw new \RuntimeException('Cannot write to a non-writable stream'); - } - - if ($string === '') { - return 0; - } - - // We can't know the size after writing anything - $this->size = null; - - try { - $result = fwrite($this->stream, $string); - } catch (TimeoutException $e) { - throw $e; - } catch (\Exception $e) { - if ($this->writeTimedOut()) { - throw new TimeoutException('Unable to write to stream: timed out', 0, $e); - } - - throw new \RuntimeException('Unable to write to stream', 0, $e); - } - - if ($result === false) { - if ($this->writeTimedOut()) { - throw new TimeoutException('Unable to write to stream: timed out'); - } - - throw new \RuntimeException('Unable to write to stream'); - } - - if ($result === 0 && $this->writeTimedOut()) { - throw new TimeoutException('Unable to write to stream: timed out'); - } - - return $result; - } - - /** - * @return mixed - */ - public function getMetadata(?string $key = null) - { - if (!isset($this->stream)) { - return $key === null ? [] : null; - } elseif ($key === null) { - return $this->customMetadata + stream_get_meta_data($this->stream); - } elseif (isset($this->customMetadata[$key])) { - return $this->customMetadata[$key]; - } - - $meta = stream_get_meta_data($this->stream); - - return $meta[$key] ?? null; - } - - /** - * @see https://www.php.net/manual/en/function.fopen.php - * @see https://www.php.net/manual/en/function.gzopen.php - */ - private static function isReadableMode(string $mode): bool - { - return str_starts_with($mode, 'r') || str_contains($mode, '+'); - } - - /** - * @see https://www.php.net/manual/en/function.fopen.php - * @see https://www.php.net/manual/en/function.gzopen.php - */ - private static function isWritableMode(string $mode): bool - { - return str_starts_with($mode, 'a') - || str_starts_with($mode, 'w') - || str_starts_with($mode, 'x') - || str_starts_with($mode, 'c') - || str_contains($mode, '+'); - } - - private function timedOut(): bool - { - return StreamTimeout::isResourceReadTimedOut($this->stream); - } - - private function writeTimedOut(): bool - { - return StreamTimeout::isResourceWriteTimedOut($this->stream); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php deleted file mode 100644 index 7b649a82a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php +++ /dev/null @@ -1,149 +0,0 @@ -stream = $stream; - } - - /** - * Magic method used to create a new stream if streams are not added in - * the constructor of a decorator (e.g., LazyOpenStream). - */ - public function __get(string $name): StreamInterface - { - if ($name === 'stream') { - $this->stream = $this->createStream(); - - return $this->stream; - } - - throw new \UnexpectedValueException(\sprintf('%s not found on class', DiagnosticValue::escape($name))); - } - - public function __toString(): string - { - if ($this->isSeekable()) { - $this->seek(0); - } - - return $this->getContents(); - } - - public function getContents(): string - { - return Utils::copyToString($this); - } - - /** - * Allow decorators to implement custom methods - * - * @return mixed - */ - public function __call(string $method, array $args) - { - /** @var callable $callable */ - $callable = [$this->stream, $method]; - $result = ($callable)(...$args); - - // Always return the wrapped object if the result is a return $this - return $result === $this->stream ? $this : $result; - } - - public function close(): void - { - $this->stream->close(); - } - - /** - * @return mixed - */ - public function getMetadata(?string $key = null) - { - return $this->stream->getMetadata($key); - } - - public function detach() - { - return $this->stream->detach(); - } - - public function getSize(): ?int - { - return $this->stream->getSize(); - } - - public function eof(): bool - { - return $this->stream->eof(); - } - - public function tell(): int - { - return $this->stream->tell(); - } - - public function isReadable(): bool - { - return $this->stream->isReadable(); - } - - public function isWritable(): bool - { - return $this->stream->isWritable(); - } - - public function isSeekable(): bool - { - return $this->stream->isSeekable(); - } - - public function rewind(): void - { - $this->seek(0); - } - - public function seek(int $offset, int $whence = SEEK_SET): void - { - $this->stream->seek($offset, $whence); - } - - public function read(int $length): string - { - if ($length < 0) { - throw new \RuntimeException('Length parameter cannot be negative'); - } - - return $this->stream->read($length); - } - - public function write(string $string): int - { - return $this->stream->write($string); - } - - /** - * Implement in subclasses to dynamically create streams when requested. - * - * @throws \BadMethodCallException - */ - protected function createStream(): StreamInterface - { - throw new \BadMethodCallException('Not implemented'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamTimeout.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamTimeout.php deleted file mode 100644 index 84a6b3645..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamTimeout.php +++ /dev/null @@ -1,106 +0,0 @@ -read($length); - } catch (TimeoutException $e) { - throw $e; - } catch (\RuntimeException $e) { - self::throwIfReadTimedOut($stream, $timeoutMessage, $e); - - throw $e; - } - - if ($buffer === '') { - self::throwIfReadTimedOut($stream, $timeoutMessage); - } - - return $buffer; - } - - public static function throwIfReadTimedOut( - StreamInterface $stream, - string $message, - ?\Throwable $previous = null - ): void { - if (self::isReadTimedOut($stream)) { - throw new TimeoutException($message, 0, $previous); - } - } - - public static function throwIfWriteTimedOut(StreamInterface $stream, ?\Throwable $previous = null): void - { - if (self::isWriteTimedOut($stream)) { - throw new TimeoutException('Unable to write to stream: timed out', 0, $previous); - } - } - - public static function isReadTimedOut(StreamInterface $stream): bool - { - try { - if ($stream->getMetadata('timed_out') !== true) { - return false; - } - - return !$stream->eof(); - } catch (\Throwable $e) { - return false; - } - } - - public static function isWriteTimedOut(StreamInterface $stream): bool - { - try { - return $stream->getMetadata('timed_out') === true; - } catch (\Throwable $e) { - return false; - } - } - - /** - * @param resource $resource - */ - public static function isResourceReadTimedOut($resource): bool - { - try { - /** @var array $metadata */ - $metadata = stream_get_meta_data($resource); - - return ($metadata['timed_out'] ?? false) === true && !feof($resource); - } catch (\Throwable $e) { - return false; - } - } - - /** - * @param resource $resource - */ - public static function isResourceWriteTimedOut($resource): bool - { - try { - /** @var array $metadata */ - $metadata = stream_get_meta_data($resource); - - return ($metadata['timed_out'] ?? false) === true; - } catch (\Throwable $e) { - return false; - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamWrapper.php deleted file mode 100644 index 0d6c9e1d2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/StreamWrapper.php +++ /dev/null @@ -1,249 +0,0 @@ -isReadable()) { - $mode = $stream->isWritable() ? 'r+' : 'r'; - } elseif ($stream->isWritable()) { - $mode = 'w'; - } else { - throw new \InvalidArgumentException('The stream must be readable, ' - .'writable, or both.'); - } - - $resource = @fopen('guzzle://stream', $mode, false, self::createStreamContext($stream)); - - if ($resource === false) { - throw new \RuntimeException('Unable to create stream resource'); - } - - return $resource; - } - - /** - * Creates a stream context that can be used to open a stream as a php stream resource. - * - * @return resource - */ - public static function createStreamContext(StreamInterface $stream) - { - return stream_context_create([ - 'guzzle' => ['stream' => $stream], - ]); - } - - /** - * Registers the stream wrapper if needed - */ - public static function register(): void - { - if (!in_array('guzzle', stream_get_wrappers())) { - stream_wrapper_register('guzzle', __CLASS__); - } - } - - public function stream_open(string $path, string $mode, int $options, ?string &$opened_path = null): bool - { - $options = stream_context_get_options($this->context); - $stream = $options['guzzle']['stream'] ?? null; - - if (!$stream instanceof StreamInterface) { - return false; - } - - $this->mode = $mode; - $this->stream = $stream; - - return true; - } - - /** - * @return string|false - */ - public function stream_read(int $count) - { - try { - return $this->stream->read($count); - } catch (\RuntimeException $e) { - return false; - } - } - - public function stream_write(string $data): int - { - try { - return $this->stream->write($data); - } catch (\RuntimeException $e) { - return -1; - } - } - - /** - * @return int|false - */ - public function stream_tell() - { - try { - return $this->stream->tell(); - } catch (\RuntimeException $e) { - return false; - } - } - - public function stream_eof(): bool - { - try { - return $this->stream->eof(); - } catch (\RuntimeException $e) { - return true; - } - } - - public function stream_seek(int $offset, int $whence): bool - { - try { - $this->stream->seek($offset, $whence); - } catch (\RuntimeException $e) { - return false; - } - - return true; - } - - /** - * @return resource|false - */ - public function stream_cast(int $cast_as) - { - try { - $stream = clone $this->stream; - $resource = $stream->detach(); - } catch (\RuntimeException $e) { - return false; - } - - return $resource ?? false; - } - - /** - * @return array{ - * dev: int, - * ino: int, - * mode: int, - * nlink: int, - * uid: int, - * gid: int, - * rdev: int, - * size: int, - * atime: int, - * mtime: int, - * ctime: int, - * blksize: int, - * blocks: int - * }|false - */ - public function stream_stat() - { - try { - $size = $this->stream->getSize(); - } catch (\RuntimeException $e) { - return false; - } - - if ($size === null) { - return false; - } - - static $modeMap = [ - 'r' => 33060, - 'rb' => 33060, - 'r+' => 33206, - 'w' => 33188, - 'wb' => 33188, - ]; - - return [ - 'dev' => 0, - 'ino' => 0, - 'mode' => $modeMap[$this->mode] ?? 0, - 'nlink' => 0, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => $size, - 'atime' => 0, - 'mtime' => 0, - 'ctime' => 0, - 'blksize' => 0, - 'blocks' => 0, - ]; - } - - /** - * @return array{ - * dev: int, - * ino: int, - * mode: int, - * nlink: int, - * uid: int, - * gid: int, - * rdev: int, - * size: int, - * atime: int, - * mtime: int, - * ctime: int, - * blksize: int, - * blocks: int - * } - */ - public function url_stat(string $path, int $flags): array - { - return [ - 'dev' => 0, - 'ino' => 0, - 'mode' => 0, - 'nlink' => 0, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => 0, - 'atime' => 0, - 'mtime' => 0, - 'ctime' => 0, - 'blksize' => 0, - 'blocks' => 0, - ]; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UploadedFile.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UploadedFile.php deleted file mode 100644 index 188bf52d3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UploadedFile.php +++ /dev/null @@ -1,188 +0,0 @@ - 'UPLOAD_ERR_OK', - UPLOAD_ERR_INI_SIZE => 'UPLOAD_ERR_INI_SIZE', - UPLOAD_ERR_FORM_SIZE => 'UPLOAD_ERR_FORM_SIZE', - UPLOAD_ERR_PARTIAL => 'UPLOAD_ERR_PARTIAL', - UPLOAD_ERR_NO_FILE => 'UPLOAD_ERR_NO_FILE', - UPLOAD_ERR_NO_TMP_DIR => 'UPLOAD_ERR_NO_TMP_DIR', - UPLOAD_ERR_CANT_WRITE => 'UPLOAD_ERR_CANT_WRITE', - UPLOAD_ERR_EXTENSION => 'UPLOAD_ERR_EXTENSION', - ]; - - private ?string $clientFilename; - - private ?string $clientMediaType; - - private int $error; - - private ?string $file = null; - - private bool $moved = false; - - private ?int $size; - - private ?StreamInterface $stream = null; - - /** - * @param StreamInterface|string|resource $streamOrFile - */ - public function __construct( - $streamOrFile, - ?int $size, - int $errorStatus, - ?string $clientFilename = null, - ?string $clientMediaType = null - ) { - $this->setError($errorStatus); - $this->size = Integers::assertOptionalNonNegativeSize($size, 'Uploaded file size'); - $this->clientFilename = $clientFilename; - $this->clientMediaType = $clientMediaType; - - if ($this->isOk()) { - $this->setStreamOrFile($streamOrFile); - } - } - - /** - * Depending on the value set file or stream variable - * - * @param StreamInterface|string|resource $streamOrFile - * - * @throws InvalidArgumentException - */ - private function setStreamOrFile($streamOrFile): void - { - if (is_string($streamOrFile)) { - $this->file = $streamOrFile; - } elseif (is_resource($streamOrFile)) { - $this->stream = new Stream($streamOrFile); - } elseif ($streamOrFile instanceof StreamInterface) { - $this->stream = $streamOrFile; - } else { - throw new InvalidArgumentException( - 'Invalid stream or file provided for UploadedFile' - ); - } - } - - /** - * @throws InvalidArgumentException - */ - private function setError(int $error): void - { - if (!isset(UploadedFile::ERROR_MAP[$error])) { - throw new InvalidArgumentException( - 'Invalid error status for UploadedFile' - ); - } - - $this->error = $error; - } - - /** - * Return true if there is no upload error - */ - private function isOk(): bool - { - return $this->error === UPLOAD_ERR_OK; - } - - public function isMoved(): bool - { - return $this->moved; - } - - /** - * @throws RuntimeException if is moved or not ok - */ - private function validateActive(): void - { - if (false === $this->isOk()) { - throw new RuntimeException(\sprintf('Cannot retrieve stream due to upload error (%s)', self::ERROR_MAP[$this->error])); - } - - if ($this->isMoved()) { - throw new RuntimeException('Cannot retrieve stream after it has already been moved'); - } - } - - public function getStream(): StreamInterface - { - $this->validateActive(); - - if ($this->stream instanceof StreamInterface) { - return $this->stream; - } - - /** @var string $file */ - $file = $this->file; - - return new LazyOpenStream($file, 'r+'); - } - - public function moveTo(string $targetPath): void - { - $this->validateActive(); - - if ($targetPath === '') { - throw new InvalidArgumentException( - 'Invalid path provided for move operation; must be a non-empty string' - ); - } - - if ($this->file) { - $this->moved = PHP_SAPI === 'cli' - ? rename($this->file, $targetPath) - : move_uploaded_file($this->file, $targetPath); - } else { - $stream = $this->getStream(); - if ($stream->isSeekable()) { - $stream->rewind(); - } - - Utils::copyToStream( - $stream, - new LazyOpenStream($targetPath, 'w') - ); - - $this->moved = true; - } - - if (false === $this->moved) { - throw new RuntimeException(sprintf('Uploaded file could not be moved to %s', DiagnosticValue::escape($targetPath))); - } - } - - public function getSize(): ?int - { - return $this->size; - } - - public function getError(): int - { - return $this->error; - } - - public function getClientFilename(): ?string - { - return $this->clientFilename; - } - - public function getClientMediaType(): ?string - { - return $this->clientMediaType; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UploadedFileNormalizer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UploadedFileNormalizer.php deleted file mode 100644 index 968e418a3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UploadedFileNormalizer.php +++ /dev/null @@ -1,130 +0,0 @@ - - */ -final class UploadedFileNormalizer -{ - private function __construct() - { - } - - /** - * Return an UploadedFile instance array. - * - * @param array $files An array which respect $_FILES structure - * - * @return UploadedFileTree - * - * @throws InvalidArgumentException for unrecognized values - */ - public static function normalize(array $files): array - { - $normalized = []; - - foreach ($files as $key => $value) { - if ($value instanceof UploadedFileInterface) { - $normalized[$key] = $value; - } elseif (is_array($value) && array_key_exists('tmp_name', $value)) { - $normalized[$key] = self::createUploadedFileFromSpec($value); - } elseif (is_array($value)) { - $normalized[$key] = self::normalize($value); - continue; - } else { - throw new InvalidArgumentException('Invalid value in files specification'); - } - } - - return $normalized; - } - - /** - * Create and return an UploadedFile instance from a $_FILES specification. - * - * If the specification represents an array of values, this method will - * delegate to normalizeNestedFileSpec() and return that return value. - * - * @param array $value $_FILES struct - * - * @return UploadedFileInterface|UploadedFileTree - */ - private static function createUploadedFileFromSpec(array $value) - { - self::assertFileSpec($value); - - if (is_array($value['tmp_name'])) { - return self::normalizeNestedFileSpec($value); - } - - return new UploadedFile( - $value['tmp_name'], - Integers::assertNonNegativeInteger($value['size'], 'Uploaded file size'), - Integers::assertNonNegativeInteger($value['error'], 'Uploaded file error'), - $value['name'] ?? null, - $value['type'] ?? null - ); - } - - private static function assertFileSpec(array $value): void - { - if (!isset($value['tmp_name'], $value['size'], $value['error'])) { - throw new InvalidArgumentException('Invalid file specification; expected keys "tmp_name", "size", and "error".'); - } - } - - /** - * Normalize an array of file specifications. - * - * Loops through all nested files and returns a normalized array of - * UploadedFileInterface instances. - * - * @return UploadedFileTree - */ - private static function normalizeNestedFileSpec(array $files = []): array - { - self::assertNestedFileSpec($files); - - $normalizedFiles = []; - - foreach (array_keys($files['tmp_name']) as $key) { - if (!array_key_exists($key, $files['size']) || !array_key_exists($key, $files['error'])) { - throw new InvalidArgumentException('Invalid nested file specification; expected "tmp_name", "size", and "error" arrays to have matching keys.'); - } - - $spec = [ - 'tmp_name' => $files['tmp_name'][$key], - 'size' => $files['size'][$key], - 'error' => $files['error'][$key], - 'name' => $files['name'][$key] ?? null, - 'type' => $files['type'][$key] ?? null, - ]; - $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec); - } - - return $normalizedFiles; - } - - private static function assertNestedFileSpec(array $files): void - { - foreach (['tmp_name', 'size', 'error'] as $key) { - if (!isset($files[$key]) || !is_array($files[$key])) { - throw new InvalidArgumentException('Invalid nested file specification; expected keys "tmp_name", "size", and "error" to be arrays.'); - } - } - - foreach (['name', 'type'] as $key) { - if (isset($files[$key]) && !is_array($files[$key])) { - throw new InvalidArgumentException(sprintf('Invalid nested file specification; expected key "%s" to be an array when present.', $key)); - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Uri.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Uri.php deleted file mode 100644 index e216c8175..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Uri.php +++ /dev/null @@ -1,851 +0,0 @@ - 80, - 'https' => 443, - 'ftp' => 21, - 'gopher' => 70, - 'nntp' => 119, - 'news' => 119, - 'telnet' => 23, - 'tn3270' => 23, - 'imap' => 143, - 'pop' => 110, - 'ldap' => 389, - 'ws' => 80, - 'wss' => 443, - ]; - - private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26', '+' => '%2B']; - - /** @var string Uri scheme. */ - private string $scheme = ''; - - /** @var string Uri user info. */ - private string $userInfo = ''; - - /** @var string Uri host. */ - private string $host = ''; - - /** @var int|null Uri port. */ - private ?int $port = null; - - /** @var string Uri path. */ - private string $path = ''; - - /** @var string Uri query string. */ - private string $query = ''; - - /** @var string Uri fragment. */ - private string $fragment = ''; - - public function __construct( - #[\SensitiveParameter] - string $uri = '' - ) { - if ($uri !== '') { - $parts = UriParser::parse($uri); - if ($parts === false) { - throw new MalformedUriException(\sprintf('Unable to parse URI: %s', DiagnosticValue::escape($uri))); - } - try { - $this->applyParts($parts); - } catch (MalformedUriException $e) { - throw $e; - } catch (\InvalidArgumentException $e) { - throw new MalformedUriException($e->getMessage(), 0, $e); - } - } - } - - public function __toString(): string - { - return self::composeComponents( - $this->scheme, - $this->getAuthority(), - $this->path, - $this->query, - $this->fragment - ); - } - - /** - * Composes a URI reference string from its various components according to - * RFC 3986 Section 5.3. - * - * Usually this method does not need to be called manually but instead is - * used indirectly via `Psr\Http\Message\UriInterface::__toString`. - * - * PSR-7 UriInterface treats an empty component the same as a missing - * component as `getQuery()`, `getFragment()` etc. always return a string. - * This explains the slight difference to RFC 3986 Section 5.3. - * - * Another adjustment is that the authority separator is added even when the - * authority is missing/empty for the "file" scheme. This is because PHP - * stream functions like `file_get_contents` only work with `file:///myfile` - * but not with `file:/myfile` although they are equivalent according to RFC - * 3986. But `file:///` is the more common syntax for the file scheme anyway - * (Chrome for example redirects to that format). The separator is omitted - * when such a URI has a rootless or empty path: adding it would turn the - * first path segment into the authority of the composed URI, or compose the - * string `file://`, which cannot be parsed back into a URI. - * - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.3 - */ - public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string - { - $uri = ''; - - // weak type checks to also accept null until we can add scalar type hints - if ($scheme != '') { - $uri .= $scheme.':'; - } - - if ($authority != '' || ($scheme === 'file' && str_starts_with($path, '/'))) { - $uri .= '//'.$authority; - } - - if ($authority != '' && $path != '' && !str_starts_with($path, '/')) { - $path = '/'.$path; - } - - $uri .= $path; - - if ($query != '') { - $uri .= '?'.$query; - } - - if ($fragment != '') { - $uri .= '#'.$fragment; - } - - return $uri; - } - - /** - * Whether the URI has the default port of the current scheme. - * - * `Psr\Http\Message\UriInterface::getPort` may return null or the standard - * port. This method can be used independently of the implementation. - */ - public static function isDefaultPort(UriInterface $uri): bool - { - return $uri->getPort() === null - || (isset(self::DEFAULT_PORTS[$uri->getScheme()]) && $uri->getPort() === self::DEFAULT_PORTS[$uri->getScheme()]); - } - - /** - * Whether the URI is absolute, i.e. it has a scheme. - * - * An instance of UriInterface can either be an absolute URI or a relative - * reference. An absolute URI has a scheme. A relative reference is used to - * express a URI relative to another URI, the base URI. Relative references - * can be divided into several forms according to RFC 3986 Section 4.2: - * - network-path references, e.g. `//example.com/path` - * - absolute-path references, e.g. `/path` - * - relative-path references, e.g. `subpath` - * - * @see Uri::isNetworkPathReference - * @see Uri::isAbsolutePathReference - * @see Uri::isRelativePathReference - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2 - */ - public static function isAbsolute(UriInterface $uri): bool - { - return $uri->getScheme() !== ''; - } - - /** - * Whether the URI is a network-path reference. - * - * A relative reference that begins with two slash characters is termed a - * network-path reference. - * - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2 - */ - public static function isNetworkPathReference(UriInterface $uri): bool - { - return $uri->getScheme() === '' && $uri->getAuthority() !== ''; - } - - /** - * Whether the URI is an absolute-path reference. - * - * A relative reference that begins with a single slash character is termed - * an absolute-path reference. - * - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2 - */ - public static function isAbsolutePathReference(UriInterface $uri): bool - { - return $uri->getScheme() === '' - && $uri->getAuthority() === '' - && isset($uri->getPath()[0]) - && $uri->getPath()[0] === '/'; - } - - /** - * Whether the URI is a relative-path reference. - * - * A relative reference that does not begin with a slash character is termed - * a relative-path reference. - * - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2 - */ - public static function isRelativePathReference(UriInterface $uri): bool - { - return $uri->getScheme() === '' - && $uri->getAuthority() === '' - && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/'); - } - - /** - * 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 (apart from its fragment) is considered a - * same-document reference. - * - * @param UriInterface $uri The URI to check - * @param UriInterface|null $base An optional base URI to compare against - * - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.4 - */ - public static function isSameDocumentReference(UriInterface $uri, ?UriInterface $base = null): bool - { - if ($base !== null) { - $uri = UriResolver::resolve($base, $uri); - - return ($uri->getScheme() === $base->getScheme()) - && ($uri->getAuthority() === $base->getAuthority()) - && (self::rawPath($uri) === self::rawPath($base)) - && ($uri->getQuery() === $base->getQuery()); - } - - return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === ''; - } - - /** - * Creates a new URI with a specific query string value removed. - * - * Any existing query string values that exactly match the provided key are - * removed. - * - * @param UriInterface $uri URI to use as a base. - * @param string $key Query string key to remove. - */ - public static function withoutQueryValue(UriInterface $uri, string $key): UriInterface - { - $result = self::getFilteredQueryString($uri, [$key]); - - return $uri->withQuery(implode('&', $result)); - } - - /** - * Creates a new URI with a specific query string value. - * - * Any existing query string values that exactly match the provided key are - * removed and replaced with the given key value pair. A value of null will - * set the query string key without a value, e.g. "key" instead of - * "key=value". - * - * @param UriInterface $uri URI to use as a base. - * @param string $key Key to set. - * @param string|null $value Value to set - */ - public static function withQueryValue(UriInterface $uri, string $key, ?string $value): UriInterface - { - $result = self::getFilteredQueryString($uri, [$key]); - - $result[] = self::generateQueryString($key, $value); - - return $uri->withQuery(implode('&', $result)); - } - - /** - * Creates a new URI with multiple query string values. - * - * It has the same behavior as `withQueryValue()` but for an associative - * array of key => value. - * - * @param UriInterface $uri URI to use as a base. - * @param (string|null)[] $keyValueArray Associative array of key and values - */ - public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface - { - $result = self::getFilteredQueryString($uri, array_keys($keyValueArray)); - - foreach ($keyValueArray as $key => $value) { - self::assertStringOrNullQueryValue($value); - $result[] = self::generateQueryString((string) $key, $value !== null ? (string) $value : null); - } - - return $uri->withQuery(implode('&', $result)); - } - - /** - * @param mixed $value - */ - private static function assertStringOrNullQueryValue($value): void - { - if ($value !== null && !is_string($value)) { - throw new \InvalidArgumentException(\sprintf( - 'Query string values must be a string or null, %s given.', - \get_debug_type($value) - )); - } - } - - /** - * Creates a URI from a hash of `parse_url` components. - * - * @see https://www.php.net/manual/en/function.parse-url.php - * - * @throws MalformedUriException If the components do not form a valid URI. - */ - public static function fromParts( - #[\SensitiveParameter] - array $parts - ): UriInterface { - $uri = new self(); - try { - $uri->applyParts($parts); - $uri->validateState(); - } catch (MalformedUriException $e) { - throw $e; - } catch (\InvalidArgumentException $e) { - throw new MalformedUriException($e->getMessage(), 0, $e); - } - - return $uri; - } - - /** - * @throws \InvalidArgumentException If the host is invalid. - * - * @internal - */ - public static function assertValidHost(string $host): void - { - if (!Rfc3986::isValidHost($host)) { - throw new \InvalidArgumentException(sprintf('Invalid host: %s', DiagnosticValue::escape($host))); - } - } - - public function getScheme(): string - { - return $this->scheme; - } - - public function getAuthority(): string - { - $authority = $this->host; - if ($this->userInfo !== '') { - $authority = $this->userInfo.'@'.$authority; - } - - if ($this->port !== null) { - $authority .= ':'.$this->port; - } - - return $authority; - } - - public function getUserInfo(): string - { - return $this->userInfo; - } - - public function getHost(): string - { - return $this->host; - } - - public function getPort(): ?int - { - return $this->port; - } - - public function getPath(): string - { - if (str_starts_with($this->path, '//')) { - return '/'.ltrim($this->path, '/'); - } - - return $this->path; - } - - /** - * Returns the path as it appears within a URI's string form. - * - * getPath() collapses multiple leading slashes so that a path used in - * isolation cannot be mistaken for a protocol-relative URL. Whole-URI - * operations like reference resolution and normalization (RFC 3986 - * Sections 5 and 6) are defined on the URI string form, where the path - * stays verbatim, so they must read the path through this method instead. - * For direct instances of this class the path is derived from the stored - * components, including the leading slash the string form adds to a - * rootless path when an authority is present; for subclasses and other - * implementations the path is split from the string form per RFC 3986 - * Appendix B, without validating or decoding any other component. - * - * @throws \RuntimeException If the path cannot be split from the string form. - * - * @internal - */ - public static function rawPath(UriInterface $uri): string - { - if (get_class($uri) === self::class) { - if ($uri->path !== '' && !str_starts_with($uri->path, '/') && $uri->getAuthority() !== '') { - // composeComponents() prepends a slash to a rootless path when - // an authority is present, so the string form uses this path. - return '/'.$uri->path; - } - - return $uri->path; - } - - $count = preg_match('%^(?:[^:/?#]+:)?(?://[^/?#]*)?([^?#]*)%', (string) $uri, $matches); - - if ($count === false) { - throw new \RuntimeException('Unable to read the URI path: '.preg_last_error_msg()); - } - - return $matches[1] ?? ''; - } - - public function getQuery(): string - { - return $this->query; - } - - public function getFragment(): string - { - return $this->fragment; - } - - public function withScheme(string $scheme): UriInterface - { - $scheme = $this->filterScheme($scheme); - - if ($this->scheme === $scheme) { - return $this; - } - - $new = clone $this; - $new->scheme = $scheme; - $new->removeDefaultPort(); - $new->validateState(); - - return $new; - } - - public function withUserInfo( - string $user, - #[\SensitiveParameter] - ?string $password = null - ): UriInterface { - $info = $this->filterUserInfoComponent($user); - if ($password !== null) { - $info .= ':'.$this->filterUserInfoComponent($password); - } - - if ($this->userInfo === $info) { - return $this; - } - - $new = clone $this; - $new->userInfo = $info; - $new->validateState(); - - return $new; - } - - public function withHost(string $host): UriInterface - { - $host = $this->filterHost($host); - - if ($this->host === $host) { - return $this; - } - - $new = clone $this; - $new->host = $host; - $new->validateState(); - - return $new; - } - - public function withPort(?int $port): UriInterface - { - $port = $this->filterPort($port); - - if ($this->port === $port) { - return $this; - } - - $new = clone $this; - $new->port = $port; - $new->removeDefaultPort(); - $new->validateState(); - - return $new; - } - - public function withPath(string $path): UriInterface - { - $path = $this->filterPath($path); - - if ($this->path === $path) { - return $this; - } - - $new = clone $this; - $new->path = $path; - $new->validateState(); - - return $new; - } - - public function withQuery(string $query): UriInterface - { - $query = $this->filterQueryAndFragment($query); - - if ($this->query === $query) { - return $this; - } - - $new = clone $this; - $new->query = $query; - - return $new; - } - - public function withFragment(string $fragment): UriInterface - { - $fragment = $this->filterQueryAndFragment($fragment); - - if ($this->fragment === $fragment) { - return $this; - } - - $new = clone $this; - $new->fragment = $fragment; - - return $new; - } - - public function jsonSerialize(): string - { - return $this->__toString(); - } - - /** - * Apply parse_url parts to a URI. - * - * @param array $parts Array of parse_url parts to apply. - */ - private function applyParts( - #[\SensitiveParameter] - array $parts - ): void { - $this->scheme = isset($parts['scheme']) - ? $this->filterScheme($parts['scheme']) - : ''; - $this->userInfo = isset($parts['user']) - ? $this->filterUserInfoComponent($parts['user']) - : ''; - $this->host = isset($parts['host']) - ? $this->filterHost($parts['host']) - : ''; - $this->port = isset($parts['port']) - ? $this->filterPortPart($parts['port']) - : null; - $this->path = isset($parts['path']) - ? $this->filterPath($parts['path']) - : ''; - $this->query = isset($parts['query']) - ? $this->filterQueryAndFragment($parts['query']) - : ''; - $this->fragment = isset($parts['fragment']) - ? $this->filterQueryAndFragment($parts['fragment']) - : ''; - if (isset($parts['pass'])) { - $this->userInfo .= ':'.$this->filterUserInfoComponent($parts['pass']); - } - - $this->removeDefaultPort(); - } - - /** - * @throws \InvalidArgumentException If the scheme is invalid. - */ - private function filterScheme(string $scheme): string - { - $scheme = Utils::asciiToLower($scheme); - - if (!Rfc3986::isValidScheme($scheme)) { - throw new \InvalidArgumentException(sprintf('Invalid scheme: %s', DiagnosticValue::escape($scheme))); - } - - return $scheme; - } - - /** - * @throws \InvalidArgumentException If the user info is invalid. - */ - private function filterUserInfoComponent( - #[\SensitiveParameter] - string $component - ): string { - return $this->filterComponent( - '/(?:[^%'.Rfc3986::CHAR_UNRESERVED.Rfc3986::CHAR_SUB_DELIMS.']++|%(?!'.Rfc3986::HEX_OCTET.'))/', - $component, - 'Unable to filter URI user info' - ); - } - - /** - * @throws \InvalidArgumentException If the host is invalid. - */ - private function filterHost(string $host): string - { - $host = Utils::asciiToLower($host); - $filtered = \preg_replace_callback('/%'.Rfc3986::HEX_OCTET.'/', static function (array $m): string { - return Utils::asciiToUpper($m[0]); - }, $host); - if ($filtered === null) { - throw new \RuntimeException('Unable to normalize URI host percent-encoding: '.\preg_last_error_msg()); - } - self::assertValidHost($filtered); - - if (str_starts_with($filtered, '[') && !str_starts_with($filtered, '[v')) { - // assertValidHost() accepted this bracketed value with the same - // filter_var() predicate tryCanonicalizeIpv6() validates with, and - // its pure-PHP parse cannot fail on filter-accepted text, so the - // null guard is defense in depth only. - $canonical = Rfc3986::tryCanonicalizeIpv6(substr($filtered, 1, -1)); - if ($canonical !== null) { - $filtered = '['.$canonical.']'; - } - } - - return $filtered; - } - - /** - * @throws \InvalidArgumentException If the port is invalid. - */ - private function filterPort(?int $port): ?int - { - if ($port === null) { - return null; - } - - if (0 > $port || 0xFFFF < $port) { - throw new \InvalidArgumentException( - sprintf('Invalid port: %d. Must be between 0 and 65535', $port) - ); - } - - return $port; - } - - /** - * @param mixed $port - * - * @throws \InvalidArgumentException If the port is invalid. - */ - private function filterPortPart($port): ?int - { - if (\is_int($port)) { - return $this->filterPort($port); - } - - if (\is_string($port) && \ctype_digit($port)) { - // A zero port is accepted here; only Rfc9112::parsePort() rejects - // it for HTTP Host/authority parsing. - if (Rfc3986::isValidPort($port)) { - return (int) \ltrim($port, '0'); - } - - throw new \InvalidArgumentException(sprintf( - 'Invalid port: %s. Must be between 0 and 65535', - \ltrim($port, '0') - )); - } - - throw new \InvalidArgumentException(sprintf( - 'Invalid port: %s. Must be between 0 and 65535', - self::describeInvalidPort($port) - )); - } - - /** - * @param mixed $port - */ - private static function describeInvalidPort($port): string - { - if (\is_string($port)) { - return DiagnosticValue::escape($port); - } - - if (\is_int($port)) { - return (string) $port; - } - - if (\is_bool($port)) { - return $port ? 'true' : 'false'; - } - - if ($port === null) { - return 'null'; - } - - if (\is_float($port)) { - if (\is_nan($port)) { - return 'NAN'; - } - - if (\is_infinite($port)) { - return $port > 0 ? 'INF' : '-INF'; - } - - return \sprintf('%.14G', $port); - } - - return \get_debug_type($port); - } - - /** - * @param (string|int)[] $keys - * - * @return string[] - */ - private static function getFilteredQueryString(UriInterface $uri, array $keys): array - { - $current = $uri->getQuery(); - - if ($current === '') { - return []; - } - - $decodedKeys = array_map(function ($k): string { - return rawurldecode((string) $k); - }, $keys); - - return array_filter(explode('&', $current), static function (string $part) use ($decodedKeys): bool { - return !in_array(rawurldecode(explode('=', $part)[0]), $decodedKeys, true); - }); - } - - private static function generateQueryString(string $key, ?string $value): string - { - // Query string separators ("=", "&") and literal plus signs ("+") within the - // key or value need to be encoded - // (while preventing double-encoding) before setting the query string. All other - // chars that need percent-encoding will be encoded by withQuery(). - $queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT); - - if ($value !== null) { - $queryString .= '='.strtr($value, self::QUERY_SEPARATORS_REPLACEMENT); - } - - return $queryString; - } - - private function removeDefaultPort(): void - { - if ($this->port !== null && self::isDefaultPort($this)) { - $this->port = null; - } - } - - /** - * Filters the path of a URI - * - * @throws \InvalidArgumentException If the path is invalid. - */ - private function filterPath(string $path): string - { - return $this->filterComponent( - '/(?:[^'.Rfc3986::CHAR_UNRESERVED.Rfc3986::CHAR_SUB_DELIMS.'%:@\/]++|%(?!'.Rfc3986::HEX_OCTET.'))/', - $path, - 'Unable to filter URI path' - ); - } - - /** - * Filters the query string or fragment of a URI. - * - * @throws \InvalidArgumentException If the query or fragment is invalid. - */ - private function filterQueryAndFragment(string $str): string - { - return $this->filterComponent( - '/(?:[^'.Rfc3986::CHAR_UNRESERVED.Rfc3986::CHAR_SUB_DELIMS.'%:@\/\?]++|%(?!'.Rfc3986::HEX_OCTET.'))/', - $str, - 'Unable to filter URI query or fragment' - ); - } - - private function filterComponent( - string $pattern, - #[\SensitiveParameter] - string $component, - string $context - ): string { - $filtered = preg_replace_callback($pattern, [$this, 'rawurlencodeMatchZero'], $component); - - if ($filtered === null) { - throw new \RuntimeException($context.': '.preg_last_error_msg()); - } - - return $filtered; - } - - private function rawurlencodeMatchZero(array $match): string - { - return rawurlencode($match[0]); - } - - private function validateState(): void - { - if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) { - $this->host = self::HTTP_DEFAULT_HOST; - } - - if ($this->getAuthority() === '') { - if (str_starts_with($this->path, '//')) { - throw new MalformedUriException('The path of a URI without an authority must not start with two slashes "//"'); - } - if ($this->scheme === '' && str_contains(explode('/', $this->path, 2)[0], ':')) { - throw new MalformedUriException('A relative URI must not have a path beginning with a segment containing a colon'); - } - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriComparator.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriComparator.php deleted file mode 100644 index 8bd27bff0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriComparator.php +++ /dev/null @@ -1,96 +0,0 @@ -getScheme() !== $modified->getScheme()) { - return true; - } - - if (self::computePort($original) !== self::computePort($modified)) { - return true; - } - - return false; - } - - private static function normalizeHost(UriInterface $uri): string - { - $host = $uri->getHost(); - if (!str_starts_with($host, '[') || !str_ends_with($host, ']')) { - return $host; - } - - // Foreign UriInterface implementations may carry non-canonical IPv6 - // spellings; canonicalize what is unambiguously an IPv6 address so - // equivalent literals compare as same-origin, and leave IPvFuture, - // zone-identifier, and invalid text to the caseless textual - // comparison. Validation is platform-independent, so a spelling only - // some OS parsers accept, such as zero-padded dotted octets, is - // cross-origin everywhere instead of same-origin on some systems. - $canonical = Rfc3986::tryCanonicalizeIpv6(substr($host, 1, -1)); - if ($canonical === null) { - return $host; - } - - return '['.$canonical.']'; - } - - private static function computePort(UriInterface $uri): ?int - { - $port = $uri->getPort(); - - if (null !== $port) { - return $port; - } - - if (\in_array($uri->getScheme(), ['http', 'ws'], true)) { - return 80; - } - - if (\in_array($uri->getScheme(), ['https', 'wss'], true)) { - return 443; - } - - return null; - } - - private function __construct() - { - // cannot be instantiated - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriNormalizer.php deleted file mode 100644 index d7150c292..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriNormalizer.php +++ /dev/null @@ -1,426 +0,0 @@ -getPath() === '' - && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https') - ) { - $uri = $uri->withPath('/'); - } - - if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') { - $uri = $uri->withHost(''); - } - - if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) { - $uri = $uri->withPort(null); - } - - $removeDotSegments = ($flags & self::REMOVE_DOT_SEGMENTS) && !Uri::isRelativePathReference($uri); - - if ($removeDotSegments || $flags & self::REMOVE_DUPLICATE_SLASHES) { - $path = Uri::rawPath($uri); - - if ($removeDotSegments) { - $path = UriResolver::removeDotSegments($path); - } - - if ($flags & self::REMOVE_DUPLICATE_SLASHES) { - $path = preg_replace('#//++#', '/', $path); - - if ($path === null) { - throw new \RuntimeException('Unable to remove duplicate slashes from URI path: '.preg_last_error_msg()); - } - } - - $uri = $uri->withPath(UriResolver::guardedPath($uri, $path)); - } - - if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') { - $queryKeyValues = explode('&', $uri->getQuery()); - sort($queryKeyValues); - $uri = $uri->withQuery(implode('&', $queryKeyValues)); - } - - if ($flags & self::CANONICALIZE_IPV6_HOST) { - $uri = self::canonicalizeIpv6Host($uri); - } - - return $uri; - } - - /** - * Whether two URIs can be considered equivalent. - * - * Both URIs are normalized automatically before comparison with the given - * `$normalizations` bitmask. The method also accepts relative URI - * references and returns true when they are equivalent. This of course - * assumes they will be resolved against the same base URI. If this is not - * the case, determination of equivalence or difference of relative - * references does not mean anything. - * - * @param UriInterface $uri1 An URI to compare - * @param UriInterface $uri2 An URI to compare - * @param int $normalizations A bitmask of normalizations to apply, see constants - * - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6.1 - */ - public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool - { - return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations); - } - - private static function capitalizePercentEncoding(UriInterface $uri): UriInterface - { - $regex = '/(?:%'.Rfc3986::HEX_OCTET.')++/'; - - $callback = function (array $match): string { - return Utils::asciiToUpper($match[0]); - }; - - $uri = self::withNormalizedUserInfo($uri, $regex, $callback); - $uri = self::withNormalizedHost($uri, $regex, $callback); - - return $uri - ->withPath(self::normalizePercentEncodingInComponent(Uri::rawPath($uri), $regex, $callback)) - ->withQuery(self::normalizePercentEncodingInComponent($uri->getQuery(), $regex, $callback)) - ->withFragment(self::normalizePercentEncodingInComponent($uri->getFragment(), $regex, $callback)); - } - - private static function decodeUnreservedCharacters(UriInterface $uri): UriInterface - { - $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i'; - - $callback = function (array $match): string { - return rawurldecode($match[0]); - }; - - // The host is case-insensitive and PSR-7 requires it to be lowercase, - // so decoded ALPHA octets (e.g. "%41") must land lowercase even for - // implementations whose withHost() does not normalize the case. - $hostCallback = function (array $match): string { - return Utils::asciiToLower(rawurldecode($match[0])); - }; - - $uri = self::withNormalizedUserInfo($uri, $regex, $callback); - $uri = self::withNormalizedHost($uri, $regex, $hostCallback); - - return $uri - ->withPath(self::normalizePercentEncodingInComponent(Uri::rawPath($uri), $regex, $callback)) - ->withQuery(self::normalizePercentEncodingInComponent($uri->getQuery(), $regex, $callback)) - ->withFragment(self::normalizePercentEncodingInComponent($uri->getFragment(), $regex, $callback)); - } - - /** - * @param callable(array): string $callback - */ - private static function withNormalizedUserInfo(UriInterface $uri, string $regex, callable $callback): UriInterface - { - $userInfo = $uri->getUserInfo(); - - if (!str_contains($userInfo, '%')) { - return $uri; - } - - $normalized = self::normalizePercentEncodingInComponent($userInfo, $regex, $callback); - - if ($normalized === $userInfo) { - return $uri; - } - - // Normalization cannot create a colon: decoding is confined to - // unreserved characters and capitalization keeps octets encoded. So - // splitting on the first colon preserves the user/password boundary. - $parts = explode(':', $normalized, 2); - - // PSR-7 defines withUserInfo('') as removing the userinfo, so a - // userinfo with an empty user segment (e.g. ":pass") cannot be - // expressed through the setter and is preserved as-is instead. - if ($parts[0] === '') { - return $uri; - } - - $candidate = $uri->withUserInfo($parts[0], $parts[1] ?? null); - - // Normalization must never lose or corrupt information, so verify the - // representation the setter returned and leave the component untouched - // when the implementation cannot represent the normalized form. - if ($candidate->getUserInfo() !== $normalized) { - return $uri; - } - - return $candidate; - } - - /** - * @param callable(array): string $callback - */ - private static function withNormalizedHost(UriInterface $uri, string $regex, callable $callback): UriInterface - { - $host = $uri->getHost(); - - // Bracketed IP-literal hosts are skipped as a legacy tolerance for - // nonstandard values other implementations may carry, such as a zone - // identifier in "[fe80::1%25eth0]"; that text was briefly valid URI - // syntax under RFC 6874, which RFC 9844 obsoleted and reverted. - if (str_starts_with($host, '[') || !str_contains($host, '%')) { - return $uri; - } - - $normalized = self::normalizePercentEncodingInComponent($host, $regex, $callback); - - if ($normalized === $host) { - return $uri; - } - - $candidate = $uri->withHost($normalized); - - // Normalization must never lose or corrupt information, so verify the - // representation the setter returned and leave the component untouched - // when the implementation cannot represent the normalized form. - if ($candidate->getHost() !== $normalized) { - return $uri; - } - - return $candidate; - } - - /** - * @param callable(array): string $callback - */ - private static function normalizePercentEncodingInComponent(string $component, string $regex, callable $callback): string - { - // Decoding a valid triplet that follows a dangling "%" would complete - // the malformed sequence into a new valid triplet ("example%6%31com" - // becomes "example%61com"), turning malformed text valid and breaking - // idempotence, so a component containing malformed percent syntax is - // returned unchanged. - $malformed = preg_match('/%(?!'.Rfc3986::HEX_OCTET.')/', $component); - - if ($malformed === false) { - throw new \RuntimeException('Unable to scan URI component percent-encoding: '.preg_last_error_msg()); - } - - if ($malformed === 1) { - return $component; - } - - $normalized = preg_replace_callback($regex, $callback, $component); - - if ($normalized === null) { - throw new \RuntimeException('Unable to normalize URI component percent-encoding: '.preg_last_error_msg()); - } - - return $normalized; - } - - private static function canonicalizeIpv6Host(UriInterface $uri): UriInterface - { - $host = $uri->getHost(); - if (!str_starts_with($host, '[') || !str_ends_with($host, ']')) { - return $uri; - } - - // Foreign UriInterface implementations may carry IPvFuture literals, - // IPv6 zone identifiers, uppercase text, or invalid spellings; - // tryCanonicalizeIpv6() canonicalizes only what is unambiguously an - // IPv6 address and leaves everything else untouched. - $canonical = Rfc3986::tryCanonicalizeIpv6(substr($host, 1, -1)); - if ($canonical === null || '['.$canonical.']' === $host) { - return $uri; - } - - $candidate = $uri->withHost('['.$canonical.']'); - // Normalization must never corrupt a component, so keep the original - // host when the implementation does not retain the canonical form. - if ($candidate->getHost() !== '['.$canonical.']') { - return $uri; - } - - return $candidate; - } - - private function __construct() - { - // cannot be instantiated - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriParser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriParser.php deleted file mode 100644 index bedcdbffa..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/UriParser.php +++ /dev/null @@ -1,145 +0,0 @@ - $floor) { - array_pop($results); - } - } elseif ($segment !== '.') { - $results[] = $segment; - } - } - - $newPath = implode('/', $results); - - if (str_starts_with($path, '/') && !str_starts_with($newPath, '/')) { - // Re-add the leading slash if necessary for cases like "/.." - $newPath = '/'.$newPath; - } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) { - // Add the trailing slash if necessary - // If newPath is not empty, then $segment must be set and is the last segment from the foreach - $newPath .= '/'; - } - - return $newPath; - } - - /** - * Returns the path, prefixed with "/." when it would otherwise start the - * URI's string form with an authority-like "//". - * - * A URI without an authority cannot hold a path beginning with "//" (RFC - * 3986 Section 3.3), but removeDotSegments() can produce one. The "/." - * prefix serializes such a path unambiguously, the same way the WHATWG URL - * Standard does, and resolves back to the same path. Hostless http and - * https Uri instances gain the default localhost host when the path is - * written, so the path cannot be mistaken for an authority and the prefix - * is not added. - * - * @see https://url.spec.whatwg.org/#url-serializing - * - * @internal - */ - public static function guardedPath(UriInterface $uri, string $path): string - { - if (!str_starts_with($path, '//') || $uri->getAuthority() !== '') { - return $path; - } - - if ($uri instanceof Uri && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')) { - return $path; - } - - return '/.'.$path; - } - - /** - * Converts the relative URI into a new URI that is resolved against the - * base URI. - * - * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2 - */ - public static function resolve(UriInterface $base, UriInterface $rel): UriInterface - { - if ((string) $rel === '') { - // we can simply return the same base URI instance for this same-document reference - return $base; - } - - if ($rel->getScheme() != '') { - return $rel->withPath(self::guardedPath($rel, self::removeDotSegments(Uri::rawPath($rel)))); - } - - if ($rel->getAuthority() != '') { - return $rel - ->withScheme($base->getScheme()) - ->withPath(self::removeDotSegments(Uri::rawPath($rel))); - } - - $relPath = Uri::rawPath($rel); - - if ($relPath === '') { - // the base path is used as-is per RFC 3986 Section 5.2.2, so it must not be - // rewritten through a getPath()/withPath() round-trip - return $base - ->withQuery($rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery()) - ->withFragment($rel->getFragment()); - } - - if (str_starts_with($relPath, '/')) { - $targetPath = $relPath; - } else { - $basePath = Uri::rawPath($base); - if ($base->getAuthority() != '' && $basePath === '') { - $targetPath = '/'.$relPath; - } else { - $lastSlashPos = strrpos($basePath, '/'); - if ($lastSlashPos === false) { - $targetPath = $relPath; - } else { - $targetPath = substr($basePath, 0, $lastSlashPos + 1).$relPath; - } - } - } - $targetPath = self::removeDotSegments($targetPath); - - return $base - ->withPath(self::guardedPath($base, $targetPath)) - ->withQuery($rel->getQuery()) - ->withFragment($rel->getFragment()); - } - - /** - * Returns the target URI as a relative reference from the base URI. - * - * This method is the counterpart to `resolve()`: - * - * (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target)) - * - * One use case is to use the current request URI as the base URI and then - * generate relative links in your documents to reduce the document size or - * offer self-contained downloadable document archives. - * - * $base = new Uri('http://example.com/a/b/'); - * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'. - * echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'. - * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'. - * echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'. - * echo UriResolver::relativize($base, new Uri('http://example.com')); // prints '//example.com'. - * - * This method also accepts a target that is already relative and will try - * to relativize it further. Only a relative-path reference will be returned - * as-is. - * - * echo UriResolver::relativize($base, new Uri('/a/b/c')); // prints 'c' as well - */ - public static function relativize(UriInterface $base, UriInterface $target): UriInterface - { - if ($target->getScheme() !== '' - && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') - ) { - return $target; - } - - if (Uri::isRelativePathReference($target)) { - // As the target is already highly relative we return it as-is. It would be possible to resolve - // the target with `$target = self::resolve($base, $target);` and then try make it more relative - // by removing a duplicate query. But let's not do that automatically. - return $target; - } - - if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) { - return $target->withScheme(''); - } - - // A same-authority target with an empty path can only be expressed by a - // network-path reference (RFC 3986 Section 5.2.2). - if (self::needsNetworkPathReference($base, $target)) { - return $target->withScheme(''); - } - - // We must remove the path before removing the authority because if the path starts with two slashes, the URI - // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also - // invalid. - $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost(''); - - if (Uri::rawPath($base) !== Uri::rawPath($target)) { - return $emptyPathUri->withPath(self::getRelativePath($base, $target)); - } - - if ($base->getQuery() === $target->getQuery() && ($target->getFragment() !== '' || $base->getFragment() === '')) { - // Only the target fragment is left. And it must be returned even if base and target fragment are the same. - return $emptyPathUri->withQuery(''); - } - - // If the base URI has a query or fragment that the target lacks, we cannot return an empty path - // reference as it would inherit that base component when resolving. - if ($target->getQuery() === '') { - $segments = explode('/', Uri::rawPath($target)); - /** @var string $lastSegment */ - $lastSegment = end($segments); - - // A reference to an empty last segment must be prefixed with "./". The same applies - // to a segment with a colon character, which would be mistaken for a scheme name. - if ($lastSegment === '' || str_contains($lastSegment, ':')) { - $lastSegment = "./$lastSegment"; - } - - return $emptyPathUri->withPath($lastSegment); - } - - return $emptyPathUri; - } - - /** - * Whether relativizing to $target requires a network-path reference. - * - * A same-authority target with an empty path is expressible by a shorter - * relative reference unless resolving one would inherit a base component - * the target lacks: the base path (kept by any empty-path reference), or - * the base query or fragment (inherited by the empty reference). - */ - private static function needsNetworkPathReference(UriInterface $base, UriInterface $target): bool - { - if ($target->getAuthority() === '' || Uri::rawPath($target) !== '') { - return false; - } - - return Uri::rawPath($base) !== '' - || ($base->getQuery() !== '' && $target->getQuery() === '') - || ($base->getFragment() !== '' && $target->getFragment() === '' && $base->getQuery() === $target->getQuery()); - } - - private static function getRelativePath(UriInterface $base, UriInterface $target): string - { - $sourceSegments = explode('/', Uri::rawPath($base)); - $targetSegments = explode('/', Uri::rawPath($target)); - array_pop($sourceSegments); - $targetLastSegment = array_pop($targetSegments); - foreach ($sourceSegments as $i => $segment) { - if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) { - unset($sourceSegments[$i], $targetSegments[$i]); - } else { - break; - } - } - $targetSegments[] = $targetLastSegment; - $relativePath = str_repeat('../', count($sourceSegments)).implode('/', $targetSegments); - - // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./". - // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used - // as the first segment of a relative-path reference, as it would be mistaken for a scheme name. - if ($relativePath === '' || str_contains(explode('/', $relativePath, 2)[0], ':')) { - $relativePath = "./$relativePath"; - } elseif (str_starts_with($relativePath, '/')) { - if ($base->getAuthority() != '' && Uri::rawPath($base) === '') { - // In this case an extra slash is added by resolve() automatically. So we must not add one here. - $relativePath = ".$relativePath"; - } else { - $relativePath = "./$relativePath"; - } - } - - return $relativePath; - } - - private function __construct() - { - // cannot be instantiated - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Utils.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Utils.php deleted file mode 100644 index 35e418ffa..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/guzzlehttp/psr7/src/Utils.php +++ /dev/null @@ -1,823 +0,0 @@ - $keys - */ - public static function caselessRemove(array $keys, array $data): array - { - $result = []; - - foreach ($keys as &$key) { - $key = self::asciiToLower((string) $key); - } - - foreach ($data as $k => $v) { - if (!in_array(self::asciiToLower((string) $k), $keys)) { - $result[$k] = $v; - } - } - - return $result; - } - - /** - * Copy the contents of a stream into another stream until the given number - * of bytes have been read, returning the number of bytes copied as an - * `int`. On 32-bit PHP, an unbounded copy larger than `PHP_INT_MAX` bytes - * cannot be represented by that return type. 64-bit PHP is not affected. - * - * The destination must accept writes that make positive progress. Streams - * that return 0 as a backpressure or drop signal (a `BufferStream` at its - * high water mark, or a full `DroppingStream`) will cause this method to - * throw. For full copies, use a normal writable stream such as a file or - * `php://temp` stream. - * - * Throws `TimeoutException` when PHP-style timeout metadata can be detected - * after a source read or destination write cannot make progress. - * - * @param StreamInterface $source Stream to read from - * @param StreamInterface $dest Stream to write to - * @param int $maxLen Maximum number of bytes to read. Pass -1 - * to read the entire stream. - * - * @throws \RuntimeException on error. - */ - public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): int - { - $bufferSize = 8192; - $copied = 0; - - if ($maxLen === -1) { - while (!$source->eof()) { - $buf = StreamTimeout::read($source, $bufferSize, 'Unable to read from stream: timed out'); - if ($buf === '') { - break; - } - - self::writeAll($dest, $buf); - $copied = Integers::add($copied, strlen($buf)); - } - } else { - $remaining = $maxLen; - while ($remaining > 0 && !$source->eof()) { - $buf = StreamTimeout::read($source, min($bufferSize, $remaining), 'Unable to read from stream: timed out'); - $len = strlen($buf); - if (!$len) { - break; - } - $remaining -= $len; - self::writeAll($dest, $buf); - $copied = Integers::add($copied, $len); - } - } - - return $copied; - } - - private static function writeAll(StreamInterface $dest, string $buf): void - { - $written = 0; - $len = strlen($buf); - - while ($written < $len) { - try { - $result = $dest->write(substr($buf, $written)); - } catch (TimeoutException $e) { - throw $e; - } catch (\RuntimeException $e) { - StreamTimeout::throwIfWriteTimedOut($dest, $e); - - throw $e; - } - - if ($result <= 0) { - StreamTimeout::throwIfWriteTimedOut($dest); - - throw new \RuntimeException('Unable to write to stream'); - } - - $written += $result; - } - } - - /** - * Copy the contents of a stream into a string until the given number of - * bytes have been read. - * - * Throws `TimeoutException` when PHP-style timeout metadata can be detected - * after a stream read cannot make progress. - * - * @param StreamInterface $stream Stream to read - * @param int $maxLen Maximum number of bytes to read. Pass -1 - * to read the entire stream. - * - * @throws \RuntimeException on error. - */ - public static function copyToString(StreamInterface $stream, int $maxLen = -1): string - { - $buffer = ''; - - if ($maxLen === -1) { - while (!$stream->eof()) { - $buf = StreamTimeout::read($stream, 1048576, 'Unable to read from stream: timed out'); - if ($buf === '') { - break; - } - $buffer .= $buf; - } - - return $buffer; - } - - $len = 0; - while (!$stream->eof() && $len < $maxLen) { - $buf = StreamTimeout::read($stream, $maxLen - $len, 'Unable to read from stream: timed out'); - if ($buf === '') { - break; - } - $buffer .= $buf; - $len = strlen($buffer); - } - - return $buffer; - } - - /** - * Calculate a hash of a stream. - * - * This method reads the entire stream to calculate a rolling hash, based on - * PHP's `hash_init` functions. - * - * Throws `TimeoutException` when PHP-style timeout metadata can be detected - * after a stream read cannot make progress. - * - * @param StreamInterface $stream Stream to calculate the hash for - * @param string $algo Hash algorithm (e.g. md5, crc32, etc) - * @param bool $rawOutput Whether or not to use raw output - * - * @throws \RuntimeException on error. - */ - public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string - { - $pos = $stream->tell(); - - if ($pos > 0) { - $stream->rewind(); - } - - $ctx = hash_init($algo); - while (!$stream->eof()) { - $buf = StreamTimeout::read($stream, 1048576, 'Unable to calculate stream hash: timed out'); - if ($buf === '') { - break; - } - - hash_update($ctx, $buf); - } - - $out = hash_final($ctx, $rawOutput); - $stream->seek($pos); - - return $out; - } - - /** - * Clone and modify a request with the given changes. - * - * This method is useful for reducing the number of clones needed to mutate - * a message. - * - * The changes can be one of: - * - method: (string) Changes the HTTP method. - * - set_headers: (array) Sets the given headers. Values must be strings - * or non-empty arrays of strings. - * - remove_headers: (array) Remove the given headers. Values may be - * strings or integers. - * - body: (mixed) Sets the given body. Present non-null values are - * converted with self::streamFor(), including resources, streams, - * iterators, callable arrays, closures, invokable objects, and stringable - * objects. String inputs remain literal bodies. - * - uri: (UriInterface) Set the URI. When the URI contains a host, the - * Host header is updated from it, and combining this with an explicit - * Host entry in set_headers throws an InvalidArgumentException. Apply - * an intentional Host override separately with withHeader() afterwards. - * - query: (string) Set the query string value of the URI. - * - version: (string) Set the protocol version. - * - * @param RequestInterface $request Request to clone and modify. - * @param array{ - * method?: string, - * set_headers?: array>, - * remove_headers?: array, - * body?: resource|string|StreamInterface|callable|\Iterator|\Stringable, - * uri?: UriInterface, - * query?: string, - * version?: string - * } $changes Changes to apply. - */ - public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface - { - if (!$changes) { - return $request; - } - - self::assertValidModifyRequestChanges($changes); - - $headers = $request->getHeaders(); - - if (!isset($changes['uri'])) { - $uri = $request->getUri(); - } else { - /** @var UriInterface */ - $uri = $changes['uri']; - - $host = $uri->getHost(); - if ($host !== '') { - Uri::assertValidHost($host); - - if (isset($changes['set_headers']) && is_array($changes['set_headers'])) { - foreach (array_keys($changes['set_headers']) as $header) { - if (self::asciiToLower((string) $header) === 'host') { - throw new \InvalidArgumentException( - 'Cannot modify request with both a URI containing a host and an explicit Host header.' - ); - } - } - } - - $changes['set_headers']['Host'] = $host; - - $port = $uri->getPort(); - if ($port !== null) { - $standardPorts = ['http' => 80, 'https' => 443]; - $scheme = $uri->getScheme(); - if (!isset($standardPorts[$scheme]) || $port != $standardPorts[$scheme]) { - $changes['set_headers']['Host'] .= ':'.$port; - } - } - } - } - - if (!empty($changes['remove_headers'])) { - $headers = self::caselessRemove($changes['remove_headers'], $headers); - } - - if (!empty($changes['set_headers'])) { - $headers = self::caselessRemove(array_keys($changes['set_headers']), $headers); - $headers = $changes['set_headers'] + $headers; - } - - if (isset($changes['query'])) { - $uri = $uri->withQuery($changes['query']); - } - - $hasHost = false; - foreach (array_keys($headers) as $header) { - if (self::asciiToLower((string) $header) === 'host') { - $hasHost = true; - break; - } - } - - // Match Request::__construct() by adding a Host header when one is not provided. - if (!$hasHost && $uri->getHost() !== '') { - $host = $uri->getHost(); - Uri::assertValidHost($host); - - if (($port = $uri->getPort()) !== null) { - $host .= ':'.$port; - } - - $headers = ['Host' => [$host]] + $headers; - } - - $new = $request; - - if (isset($changes['method'])) { - $new = $new->withMethod($changes['method']); - } - - if (isset($changes['uri']) || isset($changes['query'])) { - $new = $new->withUri($uri, true); - } - - if ($headers !== $new->getHeaders()) { - foreach (array_keys($new->getHeaders()) as $header) { - /** @var RequestInterface */ - $new = $new->withoutHeader((string) $header); - } - - $addedHeaders = []; - foreach ($headers as $header => $value) { - $header = (string) $header; - $normalized = self::asciiToLower($header); - - if (isset($addedHeaders[$normalized])) { - /** @var RequestInterface */ - $new = $new->withAddedHeader($addedHeaders[$normalized], $value); - } else { - /** @var RequestInterface */ - $new = $new->withHeader($header, $value); - $addedHeaders[$normalized] = $header; - } - } - } - - if (isset($changes['body'])) { - /** @var RequestInterface */ - $new = $new->withBody(self::streamFor($changes['body'])); - } - - if (isset($changes['version'])) { - /** @var RequestInterface */ - $new = $new->withProtocolVersion($changes['version']); - } - - return $new; - } - - /** - * @param array $changes - */ - private static function assertValidModifyRequestChanges(array $changes): void - { - foreach (['method', 'query', 'version'] as $key) { - if (\array_key_exists($key, $changes) && !\is_string($changes[$key])) { - self::assertValidModifyRequestChange($key, 'string', $changes[$key]); - } - } - - if (\array_key_exists('uri', $changes) && !$changes['uri'] instanceof UriInterface) { - self::assertValidModifyRequestChange('uri', 'UriInterface', $changes['uri']); - } - - if (\array_key_exists('body', $changes) && $changes['body'] === null) { - self::assertValidModifyRequestChange('body', 'resource|string|StreamInterface|callable|\Iterator|\Stringable', $changes['body']); - } - - if (\array_key_exists('set_headers', $changes)) { - if (!\is_array($changes['set_headers'])) { - self::assertValidModifyRequestChange('set_headers', 'array>', $changes['set_headers']); - } else { - foreach ($changes['set_headers'] as $header => $value) { - $headerPath = \sprintf('set_headers.%s', (string) $header); - - if (\is_array($value)) { - if ($value === []) { - self::assertValidModifyRequestChange($headerPath, 'string|non-empty-array', $value); - - break; - } - - foreach ($value as $index => $item) { - if (!\is_string($item)) { - self::assertValidModifyRequestChange(\sprintf('%s.%s', $headerPath, (string) $index), 'string', $item); - - break 2; - } - } - } elseif (!\is_string($value)) { - self::assertValidModifyRequestChange($headerPath, 'string|non-empty-array', $value); - - break; - } - } - } - } - - if (!\array_key_exists('remove_headers', $changes)) { - return; - } - - if (!\is_array($changes['remove_headers'])) { - self::assertValidModifyRequestChange('remove_headers', 'array', $changes['remove_headers']); - - return; - } - - foreach ($changes['remove_headers'] as $index => $header) { - if (!\is_string($header) && !\is_int($header)) { - self::assertValidModifyRequestChange(\sprintf('remove_headers.%s', (string) $index), 'string|int', $header); - - return; - } - } - } - - /** - * @param mixed $value - */ - private static function assertValidModifyRequestChange(string $key, string $expected, $value): void - { - throw new \InvalidArgumentException(\sprintf('Utils::modifyRequest() change "%s" must be %s; %s provided.', DiagnosticValue::escape($key), $expected, \get_debug_type($value))); - } - - /** - * Read a line from the stream up to the maximum allowed buffer length. - * - * Throws `TimeoutException` when PHP-style timeout metadata can be detected - * after a stream read cannot make progress. - * - * @param StreamInterface $stream Stream to read from - * @param int|null $maxLength Maximum buffer length - */ - public static function readLine(StreamInterface $stream, ?int $maxLength = null): string - { - $buffer = ''; - $size = 0; - - while (!$stream->eof()) { - if ('' === ($byte = StreamTimeout::read($stream, 1, 'Unable to read line from stream: timed out'))) { - return $buffer; - } - $buffer .= $byte; - // Break when a new line is found or the max length - 1 is reached - if ($byte === "\n" || ++$size === $maxLength - 1) { - break; - } - } - - return $buffer; - } - - /** - * Redact the user info part of a URI. - * - * Returns the URI with the whole userinfo component replaced by "***" - * when one is present, so neither the username nor the password survives - * into logs and diagnostics. A URI without userinfo is returned - * unchanged. - */ - public static function redactUserInfo( - #[\SensitiveParameter] - UriInterface $uri - ): UriInterface { - return $uri->getUserInfo() === '' ? $uri : $uri->withUserInfo('***'); - } - - /** - * Redacts the userinfo of a raw URI string wherever it appears in a - * subject string. - * - * The needle is taken verbatim from the raw URI rather than from parsed - * components, so credentials that URI normalization would rewrite, such - * as raw control bytes or unencoded reserved characters, are still found - * in text that embeds the URI exactly as given, for example transport - * error messages. A URI without "://" is treated as authority-form: a - * host and port with optional userinfo. - * - * A URI that does not parse has no trustworthy authority boundary, so - * everything between any scheme and its last "@" is redacted as a safe-side - * fallback. - * - * @param string $subject Text that may embed the URI - * @param string $uri Raw URI whose userinfo is redacted in the text - */ - public static function redactUserInfoInString(string $subject, string $uri): string - { - if (\strpos($uri, '@') === false) { - return $subject; - } - - $schemePosition = \strpos($uri, '://'); - $remainder = $schemePosition === false ? $uri : \substr($uri, $schemePosition + 3); - - if (\parse_url($schemePosition === false ? 'http://'.$uri : $uri) === false) { - // Raw '/', '?', or '#' separators may sit inside the credentials - // of a URI that defeats parse_url(), so the redaction cannot stop - // at the apparent authority. - $atPosition = \strrpos($remainder, '@'); - - if ($atPosition === false || $atPosition === 0) { - return $subject; - } - - return \str_replace(\substr($remainder, 0, $atPosition).'@', '***@', $subject); - } - - $authority = \substr($remainder, 0, \strcspn($remainder, '/?#')); - $atPosition = \strrpos($authority, '@'); - - if ($atPosition === false || $atPosition === 0) { - // A parseable URI with '@' only past its authority, or with an - // empty userinfo, carries no credentials to redact. - return $subject; - } - - return \str_replace(\substr($authority, 0, $atPosition).'@', '***@', $subject); - } - - /** - * Create a new stream based on the input type. - * - * Options are provided as an associative array that can contain the - * following keys: - * - metadata: Array of custom metadata. - * - size: Size of the stream. - * - * This method accepts the following `$resource` types: - * - `Psr\Http\Message\StreamInterface`: Returns the value as-is. - * - `string`: Creates a stream object that uses the given string as the - * contents. - * - `resource`: Creates a stream object that wraps the given PHP stream - * resource. - * - `Iterator`: If the provided value implements `Iterator`, then a - * read-only stream object will be created that wraps the given iterable. - * Each time the stream is read from, data from the iterator will fill a - * buffer and will be continuously called until the buffer is equal to the - * requested read size. Yielded strings, integers, finite floats, - * booleans, `null`, and stringable objects are converted to string - * chunks; non-finite floats and other values throw - * `UnexpectedValueException` when the stream is read. Values that - * stringify to an empty string are skipped while the iterator advances. - * Subsequent read calls will first read from the buffer and then call - * `next` on the underlying iterator until it is exhausted. - * - `object` with `__toString()`: If the object has the `__toString()` - * method, the object will be cast to a string and then a stream will be - * returned that uses the string value. - * - `NULL`: When `null` is passed, an empty stream object is returned. - * - `callable`: When a callable array, closure, or invokable object is - * passed and no earlier resource or object rule applies, a read-only - * stream object will be created that invokes the given callable. The - * callable is invoked with the suggested number of bytes to read. The - * callable can return fewer or more bytes than requested, but MUST return - * a non-empty string to provide data and MUST return `false` or `null` - * when there is no more data to return. Any additional bytes will be - * buffered and used in subsequent reads. String inputs are always treated - * as string bodies, even when they name callable functions. - * - * @param resource|string|StreamInterface|callable|\Iterator|\Stringable|null $resource Entity body data - * @param array{size?: int, metadata?: array} $options Additional options - * - * @throws \InvalidArgumentException if the $resource arg is not valid. - */ - public static function streamFor($resource = '', array $options = []): StreamInterface - { - if (is_scalar($resource)) { - if (!is_string($resource)) { - throw new \InvalidArgumentException(\sprintf( - 'Cannot create a stream from %s; pass a string, resource, StreamInterface, Stringable, Iterator, callable, or null.', - \get_debug_type($resource) - )); - } - - $stream = self::tryFopen('php://temp', 'r+'); - if ($resource !== '') { - fwrite($stream, $resource); - fseek($stream, 0); - } - - return new Stream($stream, $options); - } - - switch (gettype($resource)) { - case 'resource': - /* - * The 'php://input' is a special stream with quirks and inconsistencies. - * We avoid using that stream by reading it into php://temp - */ - - /** @var resource $resource */ - if ((\stream_get_meta_data($resource)['uri'] ?? '') === 'php://input') { - $stream = self::tryFopen('php://temp', 'w+'); - stream_copy_to_stream($resource, $stream); - fseek($stream, 0); - $resource = $stream; - } - - return new Stream($resource, $options); - case 'object': - /** @var object $resource */ - if ($resource instanceof StreamInterface) { - return $resource; - } elseif ($resource instanceof \Iterator) { - return new PumpStream(function (int $length) use ($resource) { - while ($resource->valid()) { - $result = $resource->current(); - $resource->next(); - - if (is_float($result) && !is_finite($result)) { - throw new \UnexpectedValueException('Iterator must not yield non-finite float values'); - } - - if ($result === null || is_scalar($result)) { - $data = (string) $result; - } elseif (is_object($result) && method_exists($result, '__toString')) { - $data = (string) $result; - } else { - throw new \UnexpectedValueException('Iterator must yield scalar, null, or stringable values'); - } - - if ($data !== '') { - return $data; - } - } - - return false; - }, $options); - } elseif (method_exists($resource, '__toString')) { - return self::streamFor((string) $resource, $options); - } - break; - case 'NULL': - return new Stream(self::tryFopen('php://temp', 'r+'), $options); - } - - if (is_callable($resource)) { - return new PumpStream($resource, $options); - } - - throw new \InvalidArgumentException('Invalid resource type: '.\get_debug_type($resource)); - } - - /** - * Safely opens a PHP stream resource using a filename. - * - * When `fopen()` fails, PHP normally raises a warning. This function adds - * an error handler that checks for errors and throws an exception instead. - * - * @param string $filename File to open - * @param string $mode Mode used to open the file - * - * @return resource - * - * @throws \RuntimeException if the file cannot be opened - */ - public static function tryFopen(string $filename, string $mode) - { - $ex = null; - set_error_handler(static function (int $errno, string $errstr) use ($filename, $mode, &$ex): bool { - $ex = new \RuntimeException(sprintf('Unable to open %s using mode %s: %s', DiagnosticValue::escape($filename), DiagnosticValue::escape($mode), DiagnosticValue::escape($errstr))); - - return true; - }); - - try { - /** @var resource $handle */ - $handle = fopen($filename, $mode); - } catch (\Throwable $e) { - $ex = new \RuntimeException(sprintf('Unable to open %s using mode %s: %s', DiagnosticValue::escape($filename), DiagnosticValue::escape($mode), $e->getMessage()), 0, $e); - } - - restore_error_handler(); - - if ($ex) { - /** @var \RuntimeException $ex */ - throw $ex; - } - - return $handle; - } - - /** - * Safely gets the contents of a given stream. - * - * When `stream_get_contents()` fails, PHP normally raises a warning. This - * function adds an error handler that checks for errors and throws an - * exception instead. - * - * Throws `TimeoutException` when PHP-style timeout metadata can be detected - * after a stream read cannot make progress. - * - * @param resource $stream - * - * @throws \RuntimeException if the stream cannot be read - */ - public static function tryGetContents($stream): string - { - $ex = null; - set_error_handler(static function (int $errno, string $errstr) use (&$ex): bool { - $ex = new \RuntimeException(sprintf('Unable to read stream contents: %s', DiagnosticValue::escape($errstr))); - - return true; - }); - - try { - /** @var string|false $contents */ - $contents = stream_get_contents($stream); - - if ($contents === false) { - $ex = StreamTimeout::isResourceReadTimedOut($stream) - ? new TimeoutException('Unable to read stream contents: timed out') - : new \RuntimeException('Unable to read stream contents'); - } elseif (StreamTimeout::isResourceReadTimedOut($stream)) { - $ex = new TimeoutException('Unable to read stream contents: timed out'); - } - } catch (TimeoutException $e) { - $ex = $e; - } catch (\Throwable $e) { - $ex = StreamTimeout::isResourceReadTimedOut($stream) - ? new TimeoutException('Unable to read stream contents: timed out', 0, $e) - : new \RuntimeException(sprintf('Unable to read stream contents: %s', $e->getMessage()), 0, $e); - } - - restore_error_handler(); - - if ($ex) { - /** @var \RuntimeException $ex */ - throw $ex; - } - - return $contents; - } - - /** - * Returns a `UriInterface` for the given value. - * - * This function accepts a string or `UriInterface` and returns a - * `UriInterface` for the given value. If the value is already a - * `UriInterface`, it is returned as-is. - * - * @param string|UriInterface $uri - * - * @throws \InvalidArgumentException - */ - public static function uriFor($uri): UriInterface - { - if ($uri instanceof UriInterface) { - return $uri; - } - - if (is_string($uri)) { - return new Uri($uri); - } - - throw new \InvalidArgumentException('URI must be a string or UriInterface'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/CHANGELOG.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/CHANGELOG.md deleted file mode 100644 index 5335f6202..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/CHANGELOG.md +++ /dev/null @@ -1,102 +0,0 @@ -# CHANGELOG - -## 2.9.2 - 2026-07-06 - -* Pass explicit trim characters ahead of the PHP 8.6 trim default change. - -## 2.9.1 - 2026-06-11 - -* Fixed the compiled runtime to emit function names as string literals, preventing arbitrary code execution. -* Fixed the parser to reject non-identifier function callees, such as literal and raw string callees. - -## 2.9.0 - 2026-06-10 - -* Added PHP 8.5 support. -* Fixed to_number() to parse number strings using the JSON number grammar. -* Fixed reverse() and string slicing to operate on UTF-8 characters rather than bytes. -* Fixed slicing of array-like (ArrayAccess + Countable) values. -* Fixed equality and contains() to use JSON semantics, e.g. 1 == 1.0 is now true. -* Fixed multi-select hashes to end projections, so following tokens apply to the projected list. -* Fixed sort() and sort_by() to compare numbers numerically. -* Changed sort(), sort_by(), max(), min(), max_by() and min_by() to order strings by code point. -* Fixed max_by() and min_by() to error on mixed-type keys instead of returning arbitrary elements. -* Fixed max() returning null or erroring when the first array element is falsy, e.g. max([0, 1]). -* Fixed sum() and join() to return 0 and an empty string respectively for empty arrays. -* Fixed 0.0 to be truthy in filters and logical operators, like every other number. -* Fixed the compiled runtime to apply JMESPath truthiness to || and &&. -* Fixed @(foo), foo[-] and oversized index literals to throw syntax errors. -* Fixed PHP warnings emitted while parsing certain invalid expressions. -* Fixed the caret position in syntax error messages for errors at the end of an expression. -* Fixed map() to error on non-array second arguments instead of returning []. -* Fixed Env::cleanCompileDir() when JP_PHP_COMPILE=on. - -## 2.8.0 - 2024-09-04 - -* Add support for PHP 8.4. - -## 2.7.0 - 2023-08-15 - -* Fixed flattening in arrays starting with null. -* Drop support for HHVM and PHP earlier than 7.2.5. -* Add support for PHP 8.1, 8.2, and 8.3. - -## 2.6.0 - 2020-07-31 - -* Support for PHP 8.0. - -## 2.5.0 - 2019-12-30 - -* Full support for PHP 7.0-7.4. -* Fixed autoloading when run from within vendor folder. -* Full multibyte (UTF-8) string support. - -## 2.4.0 - 2016-12-03 - -* Added support for floats when interpreting data. -* Added a function_exists check to work around redeclaration issues. - -## 2.3.0 - 2016-01-05 - -* Added support for [JEP-9](https://github.com/jmespath/jmespath.site/blob/master/docs/proposals/improved-filters.rst), - including unary filter expressions, and `&&` filter expressions. -* Fixed various parsing issues, including not removing escaped single quotes - from raw string literals. -* Added support for the `map` function. -* Fixed several issues with code generation. - -## 2.2.0 - 2015-05-27 - -* Added support for [JEP-12](https://github.com/jmespath/jmespath.site/blob/master/docs/proposals/raw-string-literals.rst) - and raw string literals (e.g., `'foo'`). - -## 2.1.0 - 2014-01-13 - -* Added `JmesPath\Env::cleanCompileDir()` to delete any previously compiled - JMESPath expressions. - -## 2.0.0 - 2014-01-11 - -* Moving to a flattened namespace structure. -* Runtimes are now only PHP callables. -* Fixed an error in the way empty JSON literals are parsed so that they now - return an empty string to match the Python and JavaScript implementations. -* Removed functions from runtimes. Instead there is now a function dispatcher - class, FnDispatcher, that provides function implementations behind a single - dispatch function. -* Removed ExprNode in lieu of just using a PHP callable with bound variables. -* Removed debug methods from runtimes and instead into a new Debugger class. -* Heavily cleaned up function argument validation. -* Slice syntax is now properly validated (i.e., colons are followed by the - appropriate value). -* Lots of code cleanup and performance improvements. -* Added a convenient `JmesPath\search()` function. -* **IMPORTANT**: Relocating the project to https://github.com/jmespath/jmespath.php - -## 1.1.1 - 2014-10-08 - -* Added support for using ArrayAccess and Countable as arrays and objects. - -## 1.1.0 - 2014-08-06 - -* Added the ability to search data returned from json_decode() where JSON - objects are returned as stdClass objects. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/LICENSE deleted file mode 100644 index 5c970a421..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/README.md deleted file mode 100644 index 23b89bccc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/README.md +++ /dev/null @@ -1,125 +0,0 @@ -# jmespath.php - -JMESPath (pronounced "jaymz path") allows you to declaratively specify how to -extract elements from a JSON document. *jmespath.php* allows you to use JMESPath -in PHP applications with PHP data structures. It requires PHP 7.2.5 or greater -and can be installed through [Composer](https://getcomposer.org/doc/00-intro.md) -using the `mtdowling/jmespath.php` package. - -```php -require 'vendor/autoload.php'; - -$expression = 'foo.*.baz'; - -$data = [ - 'foo' => [ - 'bar' => ['baz' => 1], - 'bam' => ['baz' => 2], - 'boo' => ['baz' => 3] - ] -]; - -JmesPath\search($expression, $data); -// Returns: [1, 2, 3] -``` - -- [JMESPath Tutorial](https://jmespath.org/tutorial.html) -- [JMESPath Grammar](https://jmespath.org/specification.html#grammar) -- [JMESPath Python library](https://github.com/jmespath/jmespath.py) - -## PHP Usage - -The `JmesPath\search` function can be used in most cases when using the library. -This function utilizes a JMESPath runtime based on your environment. The runtime -utilized can be configured using environment variables. - -```php -$result = JmesPath\search($expression, $data); - -// or, if you require PSR-4 compliance. -$result = JmesPath\Env::search($expression, $data); -``` - -### Runtimes - -jmespath.php utilizes *runtimes*. There are currently two runtimes: AstRuntime -and CompilerRuntime. - -AstRuntime is utilized by `JmesPath\search()` and `JmesPath\Env::search()` by -default. - -#### AstRuntime - -The AstRuntime will parse an expression, cache the resulting AST in memory, and -interpret the AST using an external tree visitor. AstRuntime provides a good -general approach for interpreting JMESPath expressions that have a low to -moderate level of reuse. - -```php -$runtime = new JmesPath\AstRuntime(); -$runtime('foo.bar', ['foo' => ['bar' => 'baz']]); -// > 'baz' -``` - -#### CompilerRuntime - -`JmesPath\CompilerRuntime` provides the most performance for applications that -have a moderate to high level of reuse of JMESPath expressions. The -CompilerRuntime will walk a JMESPath AST and emit PHP source code, resulting in -anywhere from 7x to 60x speed improvements. - -Compiling JMESPath expressions to source code is a slower process than just -walking and interpreting a JMESPath AST (via the AstRuntime). However, running -the compiled JMESPath code results in much better performance than walking an -AST. This essentially means that there is a warm-up period when using the -`CompilerRuntime`, but after the warm-up period, it will provide much better -performance. - -Use the CompilerRuntime if you know that you will be executing JMESPath -expressions more than once or if you can pre-compile JMESPath expressions before -executing them (for example, server-side applications). - -```php -// Note: The cache directory argument is optional. -$runtime = new JmesPath\CompilerRuntime('/path/to/compile/folder'); -$runtime('foo.bar', ['foo' => ['bar' => 'baz']]); -// > 'baz' -``` - -##### Environment Variables - -You can utilize the CompilerRuntime in `JmesPath\search()` by setting the -`JP_PHP_COMPILE` environment variable to "on" or to a directory on disk used to -store cached expressions. - -## Testing - -A comprehensive list of test cases can be found at -https://github.com/jmespath/jmespath.php/tree/master/tests/compliance. These -compliance tests are utilized by jmespath.php to ensure consistency with other -implementations, and can serve as examples of the language. - -jmespath.php is tested using PHPUnit. In order to run the tests, you need to -first install the dependencies using Composer, then you just need to run the -tests via make: - -```bash -make test -``` - -You can run a suite of performance tests as well: - -```bash -make perf -``` - -## Security - -If you discover a security vulnerability within this package, follow the -reporting process from our -[Security Policy](https://github.com/jmespath/jmespath.php/security/policy). - -## License - -jmespath.php is made available under the MIT License (MIT). Please see -[License File](LICENSE) for more information. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/SECURITY.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/SECURITY.md deleted file mode 100644 index f6acd412b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/SECURITY.md +++ /dev/null @@ -1,14 +0,0 @@ -# SECURITY POLICY - -## Supported Versions - -After each new major release, the previous release will be supported for no -less than 24 months, unless explicitly stated otherwise. This may mean that -there are multiple supported versions at any given time. - -## Reporting a Vulnerability - -If you discover a security vulnerability within this package, please send an -email to security@gjcampbell.co.uk. All security vulnerabilities will be -promptly addressed. Please do not disclose security-related issues publicly -until a fix has been announced. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/bin/jp.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/bin/jp.php deleted file mode 100755 index c11a71cc7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/bin/jp.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -check(); -unset($xdebug); - -$dir = isset($argv[1]) ? $argv[1] : __DIR__ . '/../tests/compliance/perf'; -is_dir($dir) or die('Dir not found: ' . $dir); -// Warm up the runner -\JmesPath\Env::search('foo', []); - -$total = 0; -foreach (glob($dir . '/*.json') as $file) { - $total += runSuite($file); -} -echo "\nTotal time: {$total}\n"; - -function runSuite($file) -{ - $contents = file_get_contents($file); - $json = json_decode($contents, true); - $total = 0; - foreach ($json as $suite) { - foreach ($suite['cases'] as $case) { - $total += runCase( - $suite['given'], - $case['expression'], - $case['name'] - ); - } - } - return $total; -} - -function runCase($given, $expression, $name) -{ - $best = 99999; - $runtime = \JmesPath\Env::createRuntime(); - - for ($i = 0; $i < 100; $i++) { - $t = microtime(true); - $runtime($expression, $given); - $tryTime = (microtime(true) - $t) * 1000; - if ($tryTime < $best) { - $best = $tryTime; - } - if (!getenv('CACHE')) { - $runtime = \JmesPath\Env::createRuntime(); - // Delete compiled scripts if not caching. - if ($runtime instanceof \JmesPath\CompilerRuntime) { - array_map('unlink', glob(sys_get_temp_dir() . '/jmespath_*.php')); - } - } - } - - printf("time: %07.4fms name: %s\n", $best, $name); - - return $best; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/composer.json deleted file mode 100644 index f787a4c5b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "mtdowling/jmespath.php", - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": ["json", "jsonpath"], - "license": "MIT", - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^3.0.3", - "phpunit/phpunit": "^8.5.52" - }, - "autoload": { - "psr-4": { - "JmesPath\\": "src/" - }, - "files": ["src/JmesPath.php"] - }, - "bin": ["bin/jp.php"], - "extra": { - "branch-alias": { - "dev-master": "2.9-dev" - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/AstRuntime.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/AstRuntime.php deleted file mode 100644 index 3b345ddff..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/AstRuntime.php +++ /dev/null @@ -1,45 +0,0 @@ -interpreter = new TreeInterpreter($fnDispatcher); - $this->parser = $parser ?: new Parser(); - } - - /** - * Returns data from the provided input that matches a given JMESPath - * expression. - * - * @param string $expression JMESPath expression to evaluate - * @param mixed $data Data to search. This data should be data that - * is similar to data returned from json_decode - * using associative arrays rather than objects. - * - * @return mixed Returns the matching data or null - */ - public function __invoke($expression, $data) - { - if (!isset($this->cache[$expression])) { - // Clear the AST cache when it already holds 1024 entries. - if (count($this->cache) >= 1024) { - $this->cache = []; - } - $this->cache[$expression] = $this->parser->parse($expression); - } - - return $this->interpreter->visit($this->cache[$expression], $data); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/CompilerRuntime.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/CompilerRuntime.php deleted file mode 100644 index 3edab38bc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/CompilerRuntime.php +++ /dev/null @@ -1,117 +0,0 @@ -parser = $parser ?: new Parser(); - $this->compiler = new TreeCompiler(); - $dir = $dir ?: sys_get_temp_dir(); - - if (!is_dir($dir) && !mkdir($dir, 0755, true)) { - throw new \RuntimeException("Unable to create cache directory: $dir"); - } - - $this->cacheDir = realpath($dir); - $this->interpreter = new TreeInterpreter(); - } - - /** - * Returns data from the provided input that matches a given JMESPath - * expression. - * - * @param string $expression JMESPath expression to evaluate - * @param mixed $data Data to search. This data should be data that - * is similar to data returned from json_decode - * using associative arrays rather than objects. - * - * @return mixed Returns the matching data or null - * @throws \RuntimeException - */ - public function __invoke($expression, $data) - { - $functionName = self::functionName($expression); - - if (!function_exists($functionName)) { - $filename = "{$this->cacheDir}/{$functionName}.php"; - if (!file_exists($filename)) { - $this->compile($filename, $expression, $functionName); - } - require $filename; - } - - return $functionName($this->interpreter, $data); - } - - /** - * @internal Shared with DebugRuntime so cache naming cannot drift. - */ - public static function functionName($expression) - { - return 'jmespath_' . md5( - 'jmespath:' . PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION - . ':' . self::CACHE_VERSION . ':' . $expression - ); - } - - /** @internal */ - public function getCacheDir() - { - return $this->cacheDir; - } - - private function compile($filename, $expression, $functionName) - { - $code = $this->compiler->visit( - $this->parser->parse($expression), - $functionName, - $expression - ); - - $tempFile = $filename . '.' . bin2hex(random_bytes(12)) . '.tmp'; - - if (!file_put_contents($tempFile, $code)) { - throw new \RuntimeException(sprintf( - 'Unable to write the compiled PHP code to: %s (%s)', - $tempFile, - var_export(error_get_last(), true) - )); - } - - if (!rename($tempFile, $filename)) { - @unlink($tempFile); - if (!file_exists($filename)) { - throw new \RuntimeException( - "Unable to move the compiled PHP code to: {$filename}" - ); - } - // Another process won the race; its file is equivalent. - } elseif (function_exists('opcache_invalidate')) { - opcache_invalidate($filename, true); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/DebugRuntime.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/DebugRuntime.php deleted file mode 100644 index 5c9fd33f5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/DebugRuntime.php +++ /dev/null @@ -1,109 +0,0 @@ -runtime = $runtime; - $this->out = $output ?: STDOUT; - $this->lexer = new Lexer(); - $this->parser = new Parser($this->lexer); - } - - public function __invoke($expression, $data) - { - if ($this->runtime instanceof CompilerRuntime) { - return $this->debugCompiled($expression, $data); - } - - return $this->debugInterpreted($expression, $data); - } - - private function debugInterpreted($expression, $data) - { - return $this->debugCallback( - function () use ($expression, $data) { - $runtime = $this->runtime; - return $runtime($expression, $data); - }, - $expression, - $data - ); - } - - private function debugCompiled($expression, $data) - { - $result = $this->debugCallback( - function () use ($expression, $data) { - $runtime = $this->runtime; - return $runtime($expression, $data); - }, - $expression, - $data - ); - $this->dumpCompiledCode($expression); - - return $result; - } - - private function dumpTokens($expression) - { - $lexer = new Lexer(); - fwrite($this->out, "Tokens\n======\n\n"); - $tokens = $lexer->tokenize($expression); - - foreach ($tokens as $t) { - fprintf( - $this->out, - "%3d %-13s %s\n", $t['pos'], $t['type'], - json_encode($t['value']) - ); - } - - fwrite($this->out, "\n"); - } - - private function dumpAst($expression) - { - $parser = new Parser(); - $ast = $parser->parse($expression); - fwrite($this->out, "AST\n========\n\n"); - fwrite($this->out, json_encode($ast, JSON_PRETTY_PRINT) . "\n"); - } - - private function dumpCompiledCode($expression) - { - fwrite($this->out, "Code\n========\n\n"); - $functionName = CompilerRuntime::functionName($expression); - $filename = $this->runtime->getCacheDir() . '/' . $functionName . '.php'; - fwrite($this->out, "File: {$filename}\n\n"); - fwrite($this->out, is_file($filename) - ? file_get_contents($filename) - : "(not present: {$functionName} was already loaded in this process, likely from another cache directory)\n"); - } - - private function debugCallback(callable $debugFn, $expression, $data) - { - fprintf($this->out, "Expression\n==========\n\n%s\n\n", $expression); - $this->dumpTokens($expression); - $this->dumpAst($expression); - fprintf($this->out, "\nData\n====\n\n%s\n\n", json_encode($data, JSON_PRETTY_PRINT)); - $startTime = microtime(true); - $result = $debugFn(); - $total = microtime(true) - $startTime; - fprintf($this->out, "\nResult\n======\n\n%s\n\n", json_encode($result, JSON_PRETTY_PRINT)); - fwrite($this->out, "Time\n====\n\n"); - fprintf($this->out, "Total time: %f ms\n\n", $total); - - return $result; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Env.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Env.php deleted file mode 100644 index b894b804f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Env.php +++ /dev/null @@ -1,94 +0,0 @@ -{'fn_' . $fn}($args); - } - - private function fn_abs(array $args) - { - $this->validate('abs', $args, [['number']]); - return abs($args[0]); - } - - private function fn_avg(array $args) - { - $this->validate('avg', $args, [['array']]); - $sum = $this->reduce('avg:0', $args[0], ['number'], function ($a, $b) { - return Utils::add($a, $b); - }); - return $args[0] ? ($sum / count($args[0])) : null; - } - - private function fn_ceil(array $args) - { - $this->validate('ceil', $args, [['number']]); - return ceil($args[0]); - } - - private function fn_contains(array $args) - { - $this->validate('contains', $args, [['string', 'array'], ['any']]); - if (is_array($args[0])) { - foreach ($args[0] as $value) { - if (Utils::isEqual($value, $args[1])) { - return true; - } - } - - return false; - } - - return is_string($args[1]) - ? mb_strpos($args[0], $args[1], 0, 'UTF-8') !== false - : false; - } - - private function fn_ends_with(array $args) - { - $this->validate('ends_with', $args, [['string'], ['string']]); - list($search, $suffix) = $args; - return $suffix === '' || mb_substr($search, -mb_strlen($suffix, 'UTF-8'), null, 'UTF-8') === $suffix; - } - - private function fn_floor(array $args) - { - $this->validate('floor', $args, [['number']]); - return floor($args[0]); - } - - private function fn_not_null(array $args) - { - if (!$args) { - throw new \RuntimeException( - "not_null() expects 1 or more arguments, 0 were provided" - ); - } - - return array_reduce($args, function ($carry, $item) { - return $carry !== null ? $carry : $item; - }); - } - - private function fn_join(array $args) - { - $this->validate('join', $args, [['string'], ['array']]); - $fn = function ($a, $b, $i) use ($args) { - return $i ? ($a . $args[0] . $b) : $b; - }; - return $args[1] ? $this->reduce('join:0', $args[1], ['string'], $fn) : ''; - } - - private function fn_keys(array $args) - { - $this->validate('keys', $args, [['object']]); - return array_keys((array) $args[0]); - } - - private function fn_length(array $args) - { - $this->validate('length', $args, [['string', 'array', 'object']]); - return is_string($args[0]) ? mb_strlen($args[0], 'UTF-8') : count((array) $args[0]); - } - - private function fn_max(array $args) - { - $this->validate('max', $args, [['array']]); - $fn = function ($a, $b, $i) { - return $i && self::compareValues($a, $b) >= 0 ? $a : $b; - }; - return $this->reduce('max:0', $args[0], ['number', 'string'], $fn); - } - - private function fn_max_by(array $args) - { - $this->validate('max_by', $args, [['array'], ['expression']]); - $expr = $this->wrapExpression('max_by:1', $args[1], ['number', 'string']); - $carryKey = null; - $fn = function ($carry, $item, $index) use ($expr, &$carryKey) { - if (!$index) { - return $item; - } - if ($index === 1) { - $carryKey = $expr($carry); - } - $itemKey = $expr($item); - $this->validateSeq('max_by:0', ['number', 'string'], $carryKey, $itemKey); - if (self::compareValues($carryKey, $itemKey) >= 0) { - return $carry; - } - $carryKey = $itemKey; - return $item; - }; - return $this->reduce('max_by:1', $args[0], ['any'], $fn); - } - - private function fn_min(array $args) - { - $this->validate('min', $args, [['array']]); - $fn = function ($a, $b, $i) { - return $i && self::compareValues($a, $b) <= 0 ? $a : $b; - }; - return $this->reduce('min:0', $args[0], ['number', 'string'], $fn); - } - - private function fn_min_by(array $args) - { - $this->validate('min_by', $args, [['array'], ['expression']]); - $expr = $this->wrapExpression('min_by:1', $args[1], ['number', 'string']); - $carryKey = null; - $fn = function ($carry, $item, $index) use ($expr, &$carryKey) { - if (!$index) { - return $item; - } - if ($index === 1) { - $carryKey = $expr($carry); - } - $itemKey = $expr($item); - $this->validateSeq('min_by:0', ['number', 'string'], $carryKey, $itemKey); - if (self::compareValues($carryKey, $itemKey) <= 0) { - return $carry; - } - $carryKey = $itemKey; - return $item; - }; - return $this->reduce('min_by:1', $args[0], ['any'], $fn); - } - - private function fn_reverse(array $args) - { - $this->validate('reverse', $args, [['array', 'string']]); - if (is_array($args[0])) { - return array_reverse($args[0]); - } elseif (is_string($args[0])) { - return implode('', array_reverse(mb_str_split($args[0], 1, 'UTF-8'))); - } else { - throw new \RuntimeException('Cannot reverse provided argument'); - } - } - - private function fn_sum(array $args) - { - $this->validate('sum', $args, [['array']]); - $fn = function ($a, $b) { - return Utils::add($a, $b); - }; - return $args[0] ? $this->reduce('sum:0', $args[0], ['number'], $fn) : 0; - } - - private function fn_sort(array $args) - { - $this->validate('sort', $args, [['array']]); - $valid = ['string', 'number']; - return Utils::stableSort($args[0], function ($a, $b) use ($valid) { - $this->validateSeq('sort:0', $valid, $a, $b); - return self::compareValues($a, $b); - }); - } - - private function fn_sort_by(array $args) - { - $this->validate('sort_by', $args, [['array'], ['expression']]); - $expr = $args[1]; - $valid = ['string', 'number']; - return Utils::stableSort( - $args[0], - function ($a, $b) use ($expr, $valid) { - $va = $expr($a); - $vb = $expr($b); - $this->validateSeq('sort_by:0', $valid, $va, $vb); - return self::compareValues($va, $vb); - } - ); - } - - private function fn_starts_with(array $args) - { - $this->validate('starts_with', $args, [['string'], ['string']]); - list($search, $prefix) = $args; - return $prefix === '' || mb_strpos($search, $prefix, 0, 'UTF-8') === 0; - } - - private function fn_type(array $args) - { - $this->validateArity('type', count($args), 1); - return Utils::type($args[0]); - } - - private function fn_to_string(array $args) - { - $this->validateArity('to_string', count($args), 1); - $v = $args[0]; - if (is_string($v)) { - return $v; - } elseif (is_object($v) - && !($v instanceof \JsonSerializable) - && method_exists($v, '__toString') - ) { - return (string) $v; - } - - return json_encode($v); - } - - private function fn_to_number(array $args) - { - $this->validateArity('to_number', count($args), 1); - $value = $args[0]; - - if (Utils::type($value) == 'number') { - return $value; - } - - if (!is_string($value)) { - return null; - } - - return $this->parseJsonNumber($value); - } - - /** - * Parses a string conforming to the JSON number grammar (RFC 8259) into - * an int when exactly representable, otherwise a float. Returns null for - * non-conforming or non-finite input. - */ - private function parseJsonNumber($value) - { - if (!preg_match('/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/D', $value)) { - return null; - } - - if (preg_match('/^-?(?:0|[1-9][0-9]*)$/D', $value)) { - return $this->parseJsonInteger($value); - } - - $number = (float) $value; - - return is_finite($number) ? $number : null; - } - - private function parseJsonInteger($value) - { - $negative = $value[0] === '-'; - $digits = $negative ? substr($value, 1) : $value; - $limit = $negative ? substr((string) PHP_INT_MIN, 1) : (string) PHP_INT_MAX; - - if (strlen($digits) < strlen($limit) - || (strlen($digits) === strlen($limit) && strcmp($digits, $limit) <= 0) - ) { - return (int) $value; - } - - $number = (float) $value; - - return is_finite($number) ? $number : null; - } - - private function fn_values(array $args) - { - $this->validate('values', $args, [['array', 'object']]); - return array_values((array) $args[0]); - } - - private function fn_merge(array $args) - { - if (!$args) { - throw new \RuntimeException( - "merge() expects 1 or more arguments, 0 were provided" - ); - } - - return call_user_func_array('array_replace', $args); - } - - private function fn_to_array(array $args) - { - $this->validate('to_array', $args, [['any']]); - - return Utils::isArray($args[0]) ? $args[0] : [$args[0]]; - } - - private function fn_map(array $args) - { - $this->validate('map', $args, [['expression'], ['array']]); - $result = []; - foreach ($args[1] as $a) { - $result[] = $args[0]($a); - } - return $result; - } - - private function typeError($from, $msg) - { - if (mb_strpos($from, ':', 0, 'UTF-8')) { - list($fn, $pos) = explode(':', $from); - throw new \RuntimeException( - sprintf('Argument %d of %s %s', $pos, $fn, $msg) - ); - } else { - throw new \RuntimeException( - sprintf('Type error: %s %s', $from, $msg) - ); - } - } - - private function validateArity($from, $given, $expected) - { - if ($given != $expected) { - $err = "%s() expects {$expected} arguments, {$given} were provided"; - throw new \RuntimeException(sprintf($err, $from)); - } - } - - private function validate($from, $args, $types = []) - { - $this->validateArity($from, count($args), count($types)); - foreach ($args as $index => $value) { - if (!isset($types[$index]) || !$types[$index]) { - continue; - } - $this->validateType("{$from}:{$index}", $value, $types[$index]); - } - } - - private function validateType($from, $value, array $types) - { - if ($types[0] == 'any' - || in_array(Utils::type($value), $types) - || ($value === [] && in_array('object', $types)) - ) { - return; - } - $msg = 'must be one of the following types: ' . implode(', ', $types) - . '. ' . Utils::type($value) . ' found'; - $this->typeError($from, $msg); - } - - /** - * Validates value A and B, ensures they both are correctly typed, and of - * the same type. - * - * @param string $from String of function:argument_position - * @param array $types Array of valid value types. - * @param mixed $a Value A - * @param mixed $b Value B - */ - private function validateSeq($from, array $types, $a, $b) - { - $ta = Utils::type($a); - $tb = Utils::type($b); - - if ($ta !== $tb) { - $msg = "encountered a type mismatch in sequence: {$ta}, {$tb}"; - $this->typeError($from, $msg); - } - - $typeMatch = ($types && $types[0] == 'any') || in_array($ta, $types); - if (!$typeMatch) { - $msg = 'encountered a type error in sequence. The argument must be ' - . 'an array of ' . implode('|', $types) . ' types. ' - . "Found {$ta}, {$tb}."; - $this->typeError($from, $msg); - } - } - - /** - * Compares two values of the same JMESPath type. - * - * @param mixed $a Value A - * @param mixed $b Value B - * - * @return int Negative if $a < $b, zero if equal, positive if $a > $b. - */ - private static function compareValues($a, $b) - { - return Utils::type($a) === 'string' - ? strcmp((string) $a, (string) $b) - : ($a <=> $b); - } - - /** - * Reduces and validates an array of values to a single value using a fn. - * - * @param string $from String of function:argument_position - * @param array $values Values to reduce. - * @param array $types Array of valid value types. - * @param callable $reduce Reduce function that accepts ($carry, $item). - * - * @return mixed - */ - private function reduce($from, array $values, array $types, callable $reduce) - { - $i = -1; - return array_reduce( - $values, - function ($carry, $item) use ($from, $types, $reduce, &$i) { - if (++$i > 0) { - $this->validateSeq($from, $types, $carry, $item); - } - return $reduce($carry, $item, $i); - } - ); - } - - /** - * Validates the return values of expressions as they are applied. - * - * @param string $from Function name : position - * @param callable $expr Expression function to validate. - * @param array $types Array of acceptable return type values. - * - * @return callable Returns a wrapped function - */ - private function wrapExpression($from, callable $expr, array $types) - { - list($fn, $pos) = explode(':', $from); - $from = "The expression return value of argument {$pos} of {$fn}"; - return function ($value) use ($from, $expr, $types) { - $value = $expr($value); - $this->validateType($from, $value, $types); - return $value; - }; - } - - /** @internal Pass function name validation off to runtime */ - public function __call($name, $args) - { - $name = str_replace('fn_', '', $name); - throw new \RuntimeException("Call to undefined function {$name}"); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/JmesPath.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/JmesPath.php deleted file mode 100644 index d24e5160d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/JmesPath.php +++ /dev/null @@ -1,17 +0,0 @@ - self::STATE_LT, - '>' => self::STATE_GT, - '=' => self::STATE_EQ, - '!' => self::STATE_NOT, - '[' => self::STATE_LBRACKET, - '|' => self::STATE_PIPE, - '&' => self::STATE_AND, - '`' => self::STATE_JSON_LITERAL, - '"' => self::STATE_QUOTED_STRING, - "'" => self::STATE_STRING_LITERAL, - '-' => self::STATE_NUMBER, - '0' => self::STATE_NUMBER, - '1' => self::STATE_NUMBER, - '2' => self::STATE_NUMBER, - '3' => self::STATE_NUMBER, - '4' => self::STATE_NUMBER, - '5' => self::STATE_NUMBER, - '6' => self::STATE_NUMBER, - '7' => self::STATE_NUMBER, - '8' => self::STATE_NUMBER, - '9' => self::STATE_NUMBER, - ' ' => self::STATE_WHITESPACE, - "\t" => self::STATE_WHITESPACE, - "\n" => self::STATE_WHITESPACE, - "\r" => self::STATE_WHITESPACE, - '.' => self::STATE_SINGLE_CHAR, - '*' => self::STATE_SINGLE_CHAR, - ']' => self::STATE_SINGLE_CHAR, - ',' => self::STATE_SINGLE_CHAR, - ':' => self::STATE_SINGLE_CHAR, - '@' => self::STATE_SINGLE_CHAR, - '(' => self::STATE_SINGLE_CHAR, - ')' => self::STATE_SINGLE_CHAR, - '{' => self::STATE_SINGLE_CHAR, - '}' => self::STATE_SINGLE_CHAR, - '_' => self::STATE_IDENTIFIER, - 'A' => self::STATE_IDENTIFIER, - 'B' => self::STATE_IDENTIFIER, - 'C' => self::STATE_IDENTIFIER, - 'D' => self::STATE_IDENTIFIER, - 'E' => self::STATE_IDENTIFIER, - 'F' => self::STATE_IDENTIFIER, - 'G' => self::STATE_IDENTIFIER, - 'H' => self::STATE_IDENTIFIER, - 'I' => self::STATE_IDENTIFIER, - 'J' => self::STATE_IDENTIFIER, - 'K' => self::STATE_IDENTIFIER, - 'L' => self::STATE_IDENTIFIER, - 'M' => self::STATE_IDENTIFIER, - 'N' => self::STATE_IDENTIFIER, - 'O' => self::STATE_IDENTIFIER, - 'P' => self::STATE_IDENTIFIER, - 'Q' => self::STATE_IDENTIFIER, - 'R' => self::STATE_IDENTIFIER, - 'S' => self::STATE_IDENTIFIER, - 'T' => self::STATE_IDENTIFIER, - 'U' => self::STATE_IDENTIFIER, - 'V' => self::STATE_IDENTIFIER, - 'W' => self::STATE_IDENTIFIER, - 'X' => self::STATE_IDENTIFIER, - 'Y' => self::STATE_IDENTIFIER, - 'Z' => self::STATE_IDENTIFIER, - 'a' => self::STATE_IDENTIFIER, - 'b' => self::STATE_IDENTIFIER, - 'c' => self::STATE_IDENTIFIER, - 'd' => self::STATE_IDENTIFIER, - 'e' => self::STATE_IDENTIFIER, - 'f' => self::STATE_IDENTIFIER, - 'g' => self::STATE_IDENTIFIER, - 'h' => self::STATE_IDENTIFIER, - 'i' => self::STATE_IDENTIFIER, - 'j' => self::STATE_IDENTIFIER, - 'k' => self::STATE_IDENTIFIER, - 'l' => self::STATE_IDENTIFIER, - 'm' => self::STATE_IDENTIFIER, - 'n' => self::STATE_IDENTIFIER, - 'o' => self::STATE_IDENTIFIER, - 'p' => self::STATE_IDENTIFIER, - 'q' => self::STATE_IDENTIFIER, - 'r' => self::STATE_IDENTIFIER, - 's' => self::STATE_IDENTIFIER, - 't' => self::STATE_IDENTIFIER, - 'u' => self::STATE_IDENTIFIER, - 'v' => self::STATE_IDENTIFIER, - 'w' => self::STATE_IDENTIFIER, - 'x' => self::STATE_IDENTIFIER, - 'y' => self::STATE_IDENTIFIER, - 'z' => self::STATE_IDENTIFIER, - ]; - - /** @var array Valid identifier characters after first character */ - private $validIdentifier = [ - 'A' => true, 'B' => true, 'C' => true, 'D' => true, 'E' => true, - 'F' => true, 'G' => true, 'H' => true, 'I' => true, 'J' => true, - 'K' => true, 'L' => true, 'M' => true, 'N' => true, 'O' => true, - 'P' => true, 'Q' => true, 'R' => true, 'S' => true, 'T' => true, - 'U' => true, 'V' => true, 'W' => true, 'X' => true, 'Y' => true, - 'Z' => true, 'a' => true, 'b' => true, 'c' => true, 'd' => true, - 'e' => true, 'f' => true, 'g' => true, 'h' => true, 'i' => true, - 'j' => true, 'k' => true, 'l' => true, 'm' => true, 'n' => true, - 'o' => true, 'p' => true, 'q' => true, 'r' => true, 's' => true, - 't' => true, 'u' => true, 'v' => true, 'w' => true, 'x' => true, - 'y' => true, 'z' => true, '_' => true, '0' => true, '1' => true, - '2' => true, '3' => true, '4' => true, '5' => true, '6' => true, - '7' => true, '8' => true, '9' => true, - ]; - - /** @var array Valid number characters after the first character */ - private $numbers = [ - '0' => true, '1' => true, '2' => true, '3' => true, '4' => true, - '5' => true, '6' => true, '7' => true, '8' => true, '9' => true - ]; - - /** @var array Map of simple single character tokens */ - private $simpleTokens = [ - '.' => self::T_DOT, - '*' => self::T_STAR, - ']' => self::T_RBRACKET, - ',' => self::T_COMMA, - ':' => self::T_COLON, - '@' => self::T_CURRENT, - '(' => self::T_LPAREN, - ')' => self::T_RPAREN, - '{' => self::T_LBRACE, - '}' => self::T_RBRACE, - ]; - - /** - * Tokenize the JMESPath expression into an array of tokens hashes that - * contain a 'type', 'value', and 'key'. - * - * @param string $input JMESPath input - * - * @return array - * @throws SyntaxErrorException - */ - public function tokenize($input) - { - $tokens = []; - - if ($input === '') { - goto eof; - } - - $chars = str_split($input); - - while (false !== ($current = current($chars))) { - - // Every character must be in the transition character table. - if (!isset(self::$transitionTable[$current])) { - $tokens[] = [ - 'type' => self::T_UNKNOWN, - 'pos' => key($chars), - 'value' => $current - ]; - next($chars); - continue; - } - - $state = self::$transitionTable[$current]; - - if ($state === self::STATE_SINGLE_CHAR) { - - // Consume simple tokens like ".", ",", "@", etc. - $tokens[] = [ - 'type' => $this->simpleTokens[$current], - 'pos' => key($chars), - 'value' => $current - ]; - next($chars); - - } elseif ($state === self::STATE_IDENTIFIER) { - - // Consume identifiers - $start = key($chars); - $buffer = ''; - do { - $buffer .= $current; - $current = next($chars); - } while ($current !== false && isset($this->validIdentifier[$current])); - $tokens[] = [ - 'type' => self::T_IDENTIFIER, - 'value' => $buffer, - 'pos' => $start - ]; - - } elseif ($state === self::STATE_WHITESPACE) { - - // Skip whitespace - next($chars); - - } elseif ($state === self::STATE_LBRACKET) { - - // Consume "[", "[?", and "[]" - $position = key($chars); - $actual = next($chars); - if ($actual === ']') { - next($chars); - $tokens[] = [ - 'type' => self::T_FLATTEN, - 'pos' => $position, - 'value' => '[]' - ]; - } elseif ($actual === '?') { - next($chars); - $tokens[] = [ - 'type' => self::T_FILTER, - 'pos' => $position, - 'value' => '[?' - ]; - } else { - $tokens[] = [ - 'type' => self::T_LBRACKET, - 'pos' => $position, - 'value' => '[' - ]; - } - - } elseif ($state === self::STATE_STRING_LITERAL) { - - // Consume raw string literals - $t = $this->inside($chars, "'", self::T_LITERAL); - $t['value'] = str_replace("\\'", "'", $t['value']); - $tokens[] = $t; - - } elseif ($state === self::STATE_PIPE) { - - // Consume pipe and OR - $tokens[] = $this->matchOr($chars, '|', '|', self::T_OR, self::T_PIPE); - - } elseif ($state == self::STATE_JSON_LITERAL) { - - // Consume JSON literals - $token = $this->inside($chars, '`', self::T_LITERAL); - if ($token['type'] === self::T_LITERAL) { - $token['value'] = str_replace('\\`', '`', $token['value']); - $token = $this->parseJson($token); - } - $tokens[] = $token; - - } elseif ($state == self::STATE_NUMBER) { - - // Consume numbers - $start = key($chars); - $buffer = ''; - do { - $buffer .= $current; - $current = next($chars); - } while ($current !== false && isset($this->numbers[$current])); - $value = $this->parseIndexNumber($buffer); - $tokens[] = [ - 'type' => $value === null ? self::T_UNKNOWN : self::T_NUMBER, - 'value' => $value === null ? $buffer : $value, - 'pos' => $start - ]; - - } elseif ($state === self::STATE_QUOTED_STRING) { - - // Consume quoted identifiers - $token = $this->inside($chars, '"', self::T_QUOTED_IDENTIFIER); - if ($token['type'] === self::T_QUOTED_IDENTIFIER) { - $token['value'] = '"' . $token['value'] . '"'; - $token = $this->parseJson($token); - } - $tokens[] = $token; - - } elseif ($state === self::STATE_EQ) { - - // Consume equals - $tokens[] = $this->matchOr($chars, '=', '=', self::T_COMPARATOR, self::T_UNKNOWN); - - } elseif ($state == self::STATE_AND) { - - $tokens[] = $this->matchOr($chars, '&', '&', self::T_AND, self::T_EXPREF); - - } elseif ($state === self::STATE_NOT) { - - // Consume not equal - $tokens[] = $this->matchOr($chars, '!', '=', self::T_COMPARATOR, self::T_NOT); - - } else { - - // either '<' or '>' - // Consume less than and greater than - $tokens[] = $this->matchOr($chars, $current, '=', self::T_COMPARATOR, self::T_COMPARATOR); - - } - } - - eof: - $tokens[] = [ - 'type' => self::T_EOF, - 'pos' => mb_strlen($input, 'UTF-8'), - 'value' => null - ]; - - return $tokens; - } - - /** - * Returns a token based on whether or not the next token matches the - * expected value. If it does, a token of "$type" is returned. Otherwise, - * a token of "$orElse" type is returned. - * - * @param array $chars Array of characters by reference. - * @param string $current The current character. - * @param string $expected Expected character. - * @param string $type Expected result type. - * @param string $orElse Otherwise return a token of this type. - * - * @return array Returns a conditional token. - */ - private function matchOr(array &$chars, $current, $expected, $type, $orElse) - { - if (next($chars) === $expected) { - next($chars); - return [ - 'type' => $type, - 'pos' => key($chars) - 1, - 'value' => $current . $expected - ]; - } - - return [ - 'type' => $orElse, - 'pos' => key($chars) - 1, - 'value' => $current - ]; - } - - /** - * Returns a token the is the result of consuming inside of delimiter - * characters. Escaped delimiters will be adjusted before returning a - * value. If the token is not closed, "unknown" is returned. - * - * @param array $chars Array of characters by reference. - * @param string $delim The delimiter character. - * @param string $type Token type. - * - * @return array Returns the consumed token. - */ - private function inside(array &$chars, $delim, $type) - { - $position = key($chars); - $current = next($chars); - $buffer = ''; - - while ($current !== $delim) { - if ($current === '\\') { - $buffer .= '\\'; - $current = next($chars); - } - if ($current === false) { - // Unclosed delimiter - return [ - 'type' => self::T_UNKNOWN, - 'value' => $buffer, - 'pos' => $position - ]; - } - $buffer .= $current; - $current = next($chars); - } - - next($chars); - - return ['type' => $type, 'value' => $buffer, 'pos' => $position]; - } - - /** - * Parses a bare index/slice integer token ("-"? digit+). Returns null - * when the buffer is a lone "-" or the value cannot be represented as a - * PHP integer. - */ - private function parseIndexNumber($buffer) - { - if ($buffer === '-') { - return null; - } - - $negative = $buffer[0] === '-'; - $digits = ltrim($negative ? substr($buffer, 1) : $buffer, '0') ?: '0'; - $limit = $negative ? substr((string) PHP_INT_MIN, 1) : (string) PHP_INT_MAX; - - if (strlen($digits) > strlen($limit) - || (strlen($digits) === strlen($limit) && strcmp($digits, $limit) > 0) - ) { - return null; - } - - return (int) $buffer; - } - - /** - * Parses a JSON token or sets the token type to "unknown" on error. - * - * @param array $token Token that needs parsing. - * - * @return array Returns a token with a parsed value. - */ - private function parseJson(array $token) - { - $value = json_decode($token['value'], true); - - if ($error = json_last_error()) { - // Legacy support for elided quotes. Try to parse again by adding - // quotes around the bad input value. - $value = json_decode('"' . $token['value'] . '"', true); - if ($error = json_last_error()) { - $token['type'] = self::T_UNKNOWN; - return $token; - } - } - - $token['value'] = $value; - return $token; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Parser.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Parser.php deleted file mode 100644 index f458b2abf..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Parser.php +++ /dev/null @@ -1,529 +0,0 @@ - T::T_EOF]; - private static $currentNode = ['type' => T::T_CURRENT]; - - private static $bp = [ - T::T_EOF => 0, - T::T_QUOTED_IDENTIFIER => 0, - T::T_IDENTIFIER => 0, - T::T_UNKNOWN => 0, - T::T_LITERAL => 0, - T::T_RBRACKET => 0, - T::T_RPAREN => 0, - T::T_COMMA => 0, - T::T_RBRACE => 0, - T::T_NUMBER => 0, - T::T_CURRENT => 0, - T::T_EXPREF => 0, - T::T_COLON => 0, - T::T_PIPE => 1, - T::T_OR => 2, - T::T_AND => 3, - T::T_COMPARATOR => 5, - T::T_FLATTEN => 9, - T::T_STAR => 20, - T::T_FILTER => 21, - T::T_DOT => 40, - T::T_NOT => 45, - T::T_LBRACE => 50, - T::T_LBRACKET => 55, - T::T_LPAREN => 60, - ]; - - /** @var array Acceptable tokens after a dot token */ - private static $afterDot = [ - T::T_IDENTIFIER => true, // foo.bar - T::T_QUOTED_IDENTIFIER => true, // foo."bar" - T::T_STAR => true, // foo.* - T::T_LBRACE => true, // foo[1] - T::T_LBRACKET => true, // foo{a: 0} - T::T_FILTER => true, // foo.[?bar==10] - ]; - - /** - * @param Lexer|null $lexer Lexer used to tokenize expressions - */ - public function __construct(?Lexer $lexer = null) - { - $this->lexer = $lexer ?: new Lexer(); - } - - /** - * Parses a JMESPath expression into an AST - * - * @param string $expression JMESPath expression to compile - * - * @return array Returns an array based AST - * @throws SyntaxErrorException - */ - public function parse($expression) - { - $this->expression = $expression; - $this->tokens = $this->lexer->tokenize($expression); - $this->tpos = -1; - $this->next(); - $result = $this->expr(); - - if ($this->token['type'] === T::T_EOF) { - return $result; - } - - throw $this->syntax('Did not reach the end of the token stream'); - } - - /** - * Parses an expression while rbp < lbp. - * - * @param int $rbp Right bound precedence - * - * @return array - */ - private function expr($rbp = 0) - { - $left = $this->{"nud_{$this->token['type']}"}(); - while ($rbp < self::$bp[$this->token['type']]) { - $left = $this->{"led_{$this->token['type']}"}($left); - } - - return $left; - } - - private function nud_identifier() - { - $token = $this->token; - $this->next(); - return ['type' => 'field', 'value' => $token['value']]; - } - - private function nud_quoted_identifier() - { - $token = $this->token; - $this->next(); - $this->assertNotToken(T::T_LPAREN); - return ['type' => 'field', 'value' => $token['value']]; - } - - private function nud_current() - { - $this->next(); - return self::$currentNode; - } - - private function nud_literal() - { - $token = $this->token; - $this->next(); - return ['type' => 'literal', 'value' => $token['value']]; - } - - private function nud_expref() - { - $this->next(); - return ['type' => T::T_EXPREF, 'children' => [$this->expr(self::$bp[T::T_EXPREF])]]; - } - - private function nud_not() - { - $this->next(); - return ['type' => T::T_NOT, 'children' => [$this->expr(self::$bp[T::T_NOT])]]; - } - - private function nud_lparen() - { - $this->next(); - $result = $this->expr(0); - if ($this->token['type'] !== T::T_RPAREN) { - throw $this->syntax('Unclosed `(`'); - } - $this->next(); - return $result; - } - - private function nud_lbrace() - { - static $validKeys = [T::T_QUOTED_IDENTIFIER => true, T::T_IDENTIFIER => true]; - $this->next($validKeys); - $pairs = []; - - do { - $pairs[] = $this->parseKeyValuePair(); - if ($this->token['type'] == T::T_COMMA) { - $this->next($validKeys); - } - } while ($this->token['type'] !== T::T_RBRACE); - - $this->next(); - - return['type' => 'multi_select_hash', 'children' => $pairs]; - } - - private function nud_flatten() - { - return $this->led_flatten(self::$currentNode); - } - - private function nud_filter() - { - return $this->led_filter(self::$currentNode); - } - - private function nud_star() - { - return $this->parseWildcardObject(self::$currentNode); - } - - private function nud_lbracket() - { - $this->next(); - $type = $this->token['type']; - if ($type == T::T_NUMBER || $type == T::T_COLON) { - return $this->parseArrayIndexExpression(); - } elseif ($type == T::T_STAR && $this->lookahead() == T::T_RBRACKET) { - return $this->parseWildcardArray(); - } else { - return $this->parseMultiSelectList(); - } - } - - private function led_lbracket(array $left) - { - static $nextTypes = [T::T_NUMBER => true, T::T_COLON => true, T::T_STAR => true]; - $this->next($nextTypes); - switch ($this->token['type']) { - case T::T_NUMBER: - case T::T_COLON: - return [ - 'type' => 'subexpression', - 'children' => [$left, $this->parseArrayIndexExpression()] - ]; - default: - return $this->parseWildcardArray($left); - } - } - - private function led_flatten(array $left) - { - $this->next(); - - return [ - 'type' => 'projection', - 'from' => 'array', - 'children' => [ - ['type' => T::T_FLATTEN, 'children' => [$left]], - $this->parseProjection(self::$bp[T::T_FLATTEN]) - ] - ]; - } - - private function led_dot(array $left) - { - $this->next(self::$afterDot); - - if ($this->token['type'] == T::T_STAR) { - return $this->parseWildcardObject($left); - } - - return [ - 'type' => 'subexpression', - 'children' => [$left, $this->parseDot(self::$bp[T::T_DOT])] - ]; - } - - private function led_or(array $left) - { - $this->next(); - return [ - 'type' => T::T_OR, - 'children' => [$left, $this->expr(self::$bp[T::T_OR])] - ]; - } - - private function led_and(array $left) - { - $this->next(); - return [ - 'type' => T::T_AND, - 'children' => [$left, $this->expr(self::$bp[T::T_AND])] - ]; - } - - private function led_pipe(array $left) - { - $this->next(); - return [ - 'type' => T::T_PIPE, - 'children' => [$left, $this->expr(self::$bp[T::T_PIPE])] - ]; - } - - private function led_lparen(array $left) - { - if (!isset($left['type'], $left['value']) || $left['type'] !== 'field') { - throw $this->syntax('Invalid function name'); - } - - $args = []; - $this->next(); - - while ($this->token['type'] != T::T_RPAREN) { - $args[] = $this->expr(0); - if ($this->token['type'] == T::T_COMMA) { - $this->next(); - } - } - - $this->next(); - - return [ - 'type' => 'function', - 'value' => $left['value'], - 'children' => $args - ]; - } - - private function led_filter(array $left) - { - $this->next(); - $expression = $this->expr(); - if ($this->token['type'] != T::T_RBRACKET) { - throw $this->syntax('Expected a closing rbracket for the filter'); - } - - $this->next(); - $rhs = $this->parseProjection(self::$bp[T::T_FILTER]); - - return [ - 'type' => 'projection', - 'from' => 'array', - 'children' => [ - $left ?: self::$currentNode, - [ - 'type' => 'condition', - 'children' => [$expression, $rhs] - ] - ] - ]; - } - - private function led_comparator(array $left) - { - $token = $this->token; - $this->next(); - - return [ - 'type' => T::T_COMPARATOR, - 'value' => $token['value'], - 'children' => [$left, $this->expr(self::$bp[T::T_COMPARATOR])] - ]; - } - - private function parseProjection($bp) - { - $type = $this->token['type']; - if (self::$bp[$type] < 10) { - return self::$currentNode; - } elseif ($type == T::T_DOT) { - $this->next(self::$afterDot); - return $this->parseDot($bp); - } elseif ($type == T::T_LBRACKET || $type == T::T_FILTER) { - return $this->expr($bp); - } - - throw $this->syntax('Syntax error after projection'); - } - - private function parseDot($bp) - { - if ($this->token['type'] == T::T_LBRACKET) { - $this->next(); - return $this->parseMultiSelectList(); - } elseif ($this->token['type'] == T::T_LBRACE) { - // Like the multi-select list above, a multi-select hash ends any - // projection: tokens that follow apply to the projected list. - return $this->nud_lbrace(); - } - - return $this->expr($bp); - } - - private function parseKeyValuePair() - { - static $validColon = [T::T_COLON => true]; - $key = $this->token['value']; - $this->next($validColon); - $this->next(); - - return [ - 'type' => 'key_val_pair', - 'value' => $key, - 'children' => [$this->expr()] - ]; - } - - private function parseWildcardObject(?array $left = null) - { - $this->next(); - - return [ - 'type' => 'projection', - 'from' => 'object', - 'children' => [ - $left ?: self::$currentNode, - $this->parseProjection(self::$bp[T::T_STAR]) - ] - ]; - } - - private function parseWildcardArray(?array $left = null) - { - static $getRbracket = [T::T_RBRACKET => true]; - $this->next($getRbracket); - $this->next(); - - return [ - 'type' => 'projection', - 'from' => 'array', - 'children' => [ - $left ?: self::$currentNode, - $this->parseProjection(self::$bp[T::T_STAR]) - ] - ]; - } - - /** - * Parses an array index expression (e.g., [0], [1:2:3] - */ - private function parseArrayIndexExpression() - { - static $matchNext = [ - T::T_NUMBER => true, - T::T_COLON => true, - T::T_RBRACKET => true - ]; - - $pos = 0; - $parts = [null, null, null]; - $expected = $matchNext; - - do { - if ($this->token['type'] == T::T_COLON) { - $pos++; - $expected = $matchNext; - } elseif ($this->token['type'] == T::T_NUMBER) { - $parts[$pos] = $this->token['value']; - $expected = [T::T_COLON => true, T::T_RBRACKET => true]; - } - $this->next($expected); - } while ($this->token['type'] != T::T_RBRACKET); - - // Consume the closing bracket - $this->next(); - - if ($pos === 0) { - // No colons were found so this is a simple index extraction - return ['type' => 'index', 'value' => $parts[0]]; - } - - if ($pos > 2) { - throw $this->syntax('Invalid array slice syntax: too many colons'); - } - - // Sliced array from start (e.g., [2:]) - return [ - 'type' => 'projection', - 'from' => 'array', - 'children' => [ - ['type' => 'slice', 'value' => $parts], - $this->parseProjection(self::$bp[T::T_STAR]) - ] - ]; - } - - private function parseMultiSelectList() - { - $nodes = []; - - do { - $nodes[] = $this->expr(); - if ($this->token['type'] == T::T_COMMA) { - $this->next(); - $this->assertNotToken(T::T_RBRACKET); - } - } while ($this->token['type'] !== T::T_RBRACKET); - $this->next(); - - return ['type' => 'multi_select_list', 'children' => $nodes]; - } - - private function syntax($msg) - { - return new SyntaxErrorException($msg, $this->token, $this->expression); - } - - private function lookahead() - { - return (!isset($this->tokens[$this->tpos + 1])) - ? T::T_EOF - : $this->tokens[$this->tpos + 1]['type']; - } - - private function next(?array $match = null) - { - if (!isset($this->tokens[$this->tpos + 1])) { - $this->token = self::$nullToken; - } else { - $this->token = $this->tokens[++$this->tpos]; - } - - if ($match && !isset($match[$this->token['type']])) { - throw $this->syntax($match); - } - } - - private function assertNotToken($type) - { - if ($this->token['type'] == $type) { - throw $this->syntax("Token {$this->tpos} not allowed to be $type"); - } - } - - /** - * @internal Handles undefined tokens without paying the cost of validation - */ - public function __call($method, $args) - { - $prefix = substr($method, 0, 4); - if ($prefix == 'nud_' || $prefix == 'led_') { - $token = substr($method, 4); - $message = "Unexpected \"$token\" token ($method). Expected one of" - . " the following tokens: " - . implode(', ', array_map(function ($i) { - return '"' . substr($i, 4) . '"'; - }, array_filter( - get_class_methods($this), - function ($i) use ($prefix) { - return strpos($i, $prefix) === 0; - } - ))); - throw $this->syntax($message); - } - - throw new \BadMethodCallException("Call to undefined method $method"); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/SyntaxErrorException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/SyntaxErrorException.php deleted file mode 100644 index 9db928360..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/SyntaxErrorException.php +++ /dev/null @@ -1,37 +0,0 @@ - mb_strlen($expression, 'UTF-8'), 'value' => null]; - $message = sprintf("Syntax error at character %d\n", max($token['pos'], 0)) - . $expression . "\n" . str_repeat(' ', max($token['pos'], 0)) . "^\n"; - $message .= !is_array($expectedTypesOrMessage) - ? $expectedTypesOrMessage - : $this->createTokenMessage($token, $expectedTypesOrMessage); - parent::__construct($message); - } - - private function createTokenMessage(array $token, array $valid) - { - return sprintf( - 'Expected one of the following: %s; found %s "%s"', - implode(', ', array_keys($valid)), - $token['type'], - $token['value'] - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/TreeCompiler.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/TreeCompiler.php deleted file mode 100644 index 3c8d6b843..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/TreeCompiler.php +++ /dev/null @@ -1,419 +0,0 @@ -vars = []; - $this->source = $this->indentation = ''; - $this->write("write('use JmesPath\\TreeInterpreter as Ti;') - ->write('use JmesPath\\FnDispatcher as Fd;') - ->write('use JmesPath\\Utils;') - ->write('') - ->write('function %s(Ti $interpreter, $value) {', $fnName) - ->indent() - ->dispatch($ast) - ->write('') - ->write('return $value;') - ->outdent() - ->write('}'); - - return $this->source; - } - - /** - * @param array $node - * @return mixed - */ - private function dispatch(array $node) - { - return $this->{"visit_{$node['type']}"}($node); - } - - /** - * Creates a monotonically incrementing unique variable name by prefix. - * - * @param string $prefix Variable name prefix - * - * @return string - */ - private function makeVar($prefix) - { - if (!isset($this->vars[$prefix])) { - $this->vars[$prefix] = 0; - return '$' . $prefix; - } - - return '$' . $prefix . ++$this->vars[$prefix]; - } - - /** - * Writes the given line of source code. Pass positional arguments to write - * that match the format of sprintf. - * - * @param string $str String to write - * @return $this - */ - private function write($str) - { - $this->source .= $this->indentation; - if (func_num_args() == 1) { - $this->source .= $str . "\n"; - return $this; - } - $this->source .= vsprintf($str, array_slice(func_get_args(), 1)) . "\n"; - return $this; - } - - /** - * Decreases the indentation level of code being written - * @return $this - */ - private function outdent() - { - $this->indentation = substr($this->indentation, 0, -4); - return $this; - } - - /** - * Increases the indentation level of code being written - * @return $this - */ - private function indent() - { - $this->indentation .= ' '; - return $this; - } - - private function visit_or(array $node) - { - $a = $this->makeVar('beforeOr'); - return $this - ->write('%s = $value;', $a) - ->dispatch($node['children'][0]) - ->write('if (!Utils::isTruthy($value)) {') - ->indent() - ->write('$value = %s;', $a) - ->dispatch($node['children'][1]) - ->outdent() - ->write('}'); - } - - private function visit_and(array $node) - { - $a = $this->makeVar('beforeAnd'); - return $this - ->write('%s = $value;', $a) - ->dispatch($node['children'][0]) - ->write('if (Utils::isTruthy($value)) {') - ->indent() - ->write('$value = %s;', $a) - ->dispatch($node['children'][1]) - ->outdent() - ->write('}'); - } - - private function visit_not(array $node) - { - return $this - ->write('// Visiting not node') - ->dispatch($node['children'][0]) - ->write('// Applying boolean not to result of not node') - ->write('$value = !Utils::isTruthy($value);'); - } - - private function visit_subexpression(array $node) - { - return $this - ->dispatch($node['children'][0]) - ->write('if ($value !== null) {') - ->indent() - ->dispatch($node['children'][1]) - ->outdent() - ->write('}'); - } - - private function visit_field(array $node) - { - $arr = '$value[' . var_export($node['value'], true) . ']'; - $obj = '$value->{' . var_export($node['value'], true) . '}'; - $this->write('if (is_array($value) || $value instanceof \\ArrayAccess) {') - ->indent() - ->write('$value = isset(%s) ? %s : null;', $arr, $arr) - ->outdent() - ->write('} elseif ($value instanceof \\stdClass) {') - ->indent() - ->write('$value = isset(%s) ? %s : null;', $obj, $obj) - ->outdent() - ->write("} else {") - ->indent() - ->write('$value = null;') - ->outdent() - ->write("}"); - - return $this; - } - - private function visit_index(array $node) - { - if ($node['value'] >= 0) { - $check = '$value[' . $node['value'] . ']'; - return $this->write( - '$value = (is_array($value) || $value instanceof \\ArrayAccess)' - . ' && isset(%s) ? %s : null;', - $check, $check - ); - } - - $a = $this->makeVar('count'); - return $this - ->write('if (is_array($value) || ($value instanceof \\ArrayAccess && $value instanceof \\Countable)) {') - ->indent() - ->write('%s = count($value) + %s;', $a, $node['value']) - ->write('$value = isset($value[%s]) ? $value[%s] : null;', $a, $a) - ->outdent() - ->write('} else {') - ->indent() - ->write('$value = null;') - ->outdent() - ->write('}'); - } - - private function visit_literal(array $node) - { - return $this->write('$value = %s;', var_export($node['value'], true)); - } - - private function visit_pipe(array $node) - { - return $this - ->dispatch($node['children'][0]) - ->dispatch($node['children'][1]); - } - - private function visit_multi_select_list(array $node) - { - return $this->visit_multi_select_hash($node); - } - - private function visit_multi_select_hash(array $node) - { - $listVal = $this->makeVar('list'); - $value = $this->makeVar('prev'); - $this->write('if ($value !== null) {') - ->indent() - ->write('%s = [];', $listVal) - ->write('%s = $value;', $value); - - $first = true; - foreach ($node['children'] as $child) { - if (!$first) { - $this->write('$value = %s;', $value); - } - $first = false; - if ($node['type'] == 'multi_select_hash') { - $this->dispatch($child['children'][0]); - $key = var_export($child['value'], true); - $this->write('%s[%s] = $value;', $listVal, $key); - } else { - $this->dispatch($child); - $this->write('%s[] = $value;', $listVal); - } - } - - return $this - ->write('$value = %s;', $listVal) - ->outdent() - ->write('}'); - } - - private function visit_function(array $node) - { - $value = $this->makeVar('val'); - $args = $this->makeVar('args'); - $this->write('%s = $value;', $value) - ->write('%s = [];', $args); - - foreach ($node['children'] as $arg) { - $this->dispatch($arg); - $this->write('%s[] = $value;', $args) - ->write('$value = %s;', $value); - } - - return $this->write( - '$value = Fd::getInstance()->__invoke(%s, %s);', - var_export($node['value'], true), $args - ); - } - - private function visit_slice(array $node) - { - return $this - ->write('$value = !is_string($value) && !Utils::isArray($value)') - ->write(' ? null : Utils::slice($value, %s, %s, %s);', - var_export($node['value'][0], true), - var_export($node['value'][1], true), - var_export($node['value'][2], true) - ); - } - - private function visit_current(array $node) - { - return $this->write('// Visiting current node (no-op)'); - } - - private function visit_expref(array $node) - { - $child = var_export($node['children'][0], true); - return $this->write('$value = function ($value) use ($interpreter) {') - ->indent() - ->write('return $interpreter->visit(%s, $value);', $child) - ->outdent() - ->write('};'); - } - - private function visit_flatten(array $node) - { - $this->dispatch($node['children'][0]); - $merged = $this->makeVar('merged'); - $val = $this->makeVar('val'); - - $this - ->write('// Visiting merge node') - ->write('if (!Utils::isArray($value)) {') - ->indent() - ->write('$value = null;') - ->outdent() - ->write('} else {') - ->indent() - ->write('%s = [];', $merged) - ->write('foreach ($value as %s) {', $val) - ->indent() - ->write('if (is_array(%s) && array_key_exists(0, %s)) {', $val, $val) - ->indent() - ->write('%s = array_merge(%s, %s);', $merged, $merged, $val) - ->outdent() - ->write('} elseif (%s !== []) {', $val) - ->indent() - ->write('%s[] = %s;', $merged, $val) - ->outdent() - ->write('}') - ->outdent() - ->write('}') - ->write('$value = %s;', $merged) - ->outdent() - ->write('}'); - - return $this; - } - - private function visit_projection(array $node) - { - $val = $this->makeVar('val'); - $collected = $this->makeVar('collected'); - $this->write('// Visiting projection node') - ->dispatch($node['children'][0]) - ->write(''); - - if (!isset($node['from'])) { - $this->write('if (!is_array($value) && !($value instanceof \stdClass)) { $value = null; }'); - } elseif ($node['from'] == 'object') { - $this->write('if (!Utils::isObject($value)) { $value = null; }'); - } elseif ($node['from'] == 'array') { - $this->write('if (!Utils::isArray($value)) { $value = null; }'); - } - - $this->write('if ($value !== null) {') - ->indent() - ->write('%s = [];', $collected) - ->write('foreach ((array) $value as %s) {', $val) - ->indent() - ->write('$value = %s;', $val) - ->dispatch($node['children'][1]) - ->write('if ($value !== null) {') - ->indent() - ->write('%s[] = $value;', $collected) - ->outdent() - ->write('}') - ->outdent() - ->write('}') - ->write('$value = %s;', $collected) - ->outdent() - ->write('}'); - - return $this; - } - - private function visit_condition(array $node) - { - $value = $this->makeVar('beforeCondition'); - return $this - ->write('%s = $value;', $value) - ->write('// Visiting condition node') - ->dispatch($node['children'][0]) - ->write('// Checking result of condition node') - ->write('if (Utils::isTruthy($value)) {') - ->indent() - ->write('$value = %s;', $value) - ->dispatch($node['children'][1]) - ->outdent() - ->write('} else {') - ->indent() - ->write('$value = null;') - ->outdent() - ->write('}'); - } - - private function visit_comparator(array $node) - { - $value = $this->makeVar('val'); - $a = $this->makeVar('left'); - $b = $this->makeVar('right'); - - $this - ->write('// Visiting comparator node') - ->write('%s = $value;', $value) - ->dispatch($node['children'][0]) - ->write('%s = $value;', $a) - ->write('$value = %s;', $value) - ->dispatch($node['children'][1]) - ->write('%s = $value;', $b); - - if ($node['value'] == '==') { - $this->write('$value = Utils::isEqual(%s, %s);', $a, $b); - } elseif ($node['value'] == '!=') { - $this->write('$value = !Utils::isEqual(%s, %s);', $a, $b); - } else { - $this->write( - '$value = (is_int(%s) || is_float(%s)) && (is_int(%s) || is_float(%s)) && %s %s %s;', - $a, $a, $b, $b, $a, $node['value'], $b - ); - } - - return $this; - } - - /** @internal */ - public function __call($method, $args) - { - throw new \RuntimeException( - sprintf('Invalid node encountered: %s', json_encode($args[0])) - ); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/TreeInterpreter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/TreeInterpreter.php deleted file mode 100644 index b32753dc7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/TreeInterpreter.php +++ /dev/null @@ -1,236 +0,0 @@ -fnDispatcher = $fnDispatcher ?: FnDispatcher::getInstance(); - } - - /** - * Visits each node in a JMESPath AST and returns the evaluated result. - * - * @param array $node JMESPath AST node - * @param mixed $data Data to evaluate - * - * @return mixed - */ - public function visit(array $node, $data) - { - return $this->dispatch($node, $data); - } - - /** - * Recursively traverses an AST using depth-first, pre-order traversal. - * The evaluation logic for each node type is embedded into a large switch - * statement to avoid the cost of "double dispatch". - * @return mixed - */ - private function dispatch(array $node, $value) - { - $dispatcher = $this->fnDispatcher; - - switch ($node['type']) { - - case 'field': - if (is_array($value) || $value instanceof \ArrayAccess) { - return isset($value[$node['value']]) ? $value[$node['value']] : null; - } elseif ($value instanceof \stdClass) { - return isset($value->{$node['value']}) ? $value->{$node['value']} : null; - } - return null; - - case 'subexpression': - return $this->dispatch( - $node['children'][1], - $this->dispatch($node['children'][0], $value) - ); - - case 'index': - if (!Utils::isArray($value)) { - return null; - } - $idx = $node['value'] >= 0 - ? $node['value'] - : $node['value'] + count($value); - return isset($value[$idx]) ? $value[$idx] : null; - - case 'projection': - $left = $this->dispatch($node['children'][0], $value); - $from = isset($node['from']) ? $node['from'] : null; - switch ($from) { - case 'object': - if (!Utils::isObject($left)) { - return null; - } - break; - case 'array': - if (!Utils::isArray($left)) { - return null; - } - break; - default: - if (!is_array($left) && !($left instanceof \stdClass)) { - return null; - } - } - - $collected = []; - foreach ((array) $left as $val) { - $result = $this->dispatch($node['children'][1], $val); - if ($result !== null) { - $collected[] = $result; - } - } - - return $collected; - - case 'flatten': - static $skipElement = []; - $value = $this->dispatch($node['children'][0], $value); - - if (!Utils::isArray($value)) { - return null; - } - - $merged = []; - foreach ($value as $values) { - // Only merge up arrays lists and not hashes - if (is_array($values) && array_key_exists(0, $values)) { - $merged = array_merge($merged, $values); - } elseif ($values !== $skipElement) { - $merged[] = $values; - } - } - - return $merged; - - case 'literal': - return $node['value']; - - case 'current': - return $value; - - case 'or': - $result = $this->dispatch($node['children'][0], $value); - return Utils::isTruthy($result) - ? $result - : $this->dispatch($node['children'][1], $value); - - case 'and': - $result = $this->dispatch($node['children'][0], $value); - return Utils::isTruthy($result) - ? $this->dispatch($node['children'][1], $value) - : $result; - - case 'not': - return !Utils::isTruthy( - $this->dispatch($node['children'][0], $value) - ); - - case 'pipe': - return $this->dispatch( - $node['children'][1], - $this->dispatch($node['children'][0], $value) - ); - - case 'multi_select_list': - if ($value === null) { - return null; - } - - $collected = []; - foreach ($node['children'] as $node) { - $collected[] = $this->dispatch($node, $value); - } - - return $collected; - - case 'multi_select_hash': - if ($value === null) { - return null; - } - - $collected = []; - foreach ($node['children'] as $node) { - $collected[$node['value']] = $this->dispatch( - $node['children'][0], - $value - ); - } - - return $collected; - - case 'comparator': - $left = $this->dispatch($node['children'][0], $value); - $right = $this->dispatch($node['children'][1], $value); - if ($node['value'] == '==') { - return Utils::isEqual($left, $right); - } elseif ($node['value'] == '!=') { - return !Utils::isEqual($left, $right); - } else { - return self::relativeCmp($left, $right, $node['value']); - } - - case 'condition': - return Utils::isTruthy($this->dispatch($node['children'][0], $value)) - ? $this->dispatch($node['children'][1], $value) - : null; - - case 'function': - $args = []; - foreach ($node['children'] as $arg) { - $args[] = $this->dispatch($arg, $value); - } - return $dispatcher($node['value'], $args); - - case 'slice': - return is_string($value) || Utils::isArray($value) - ? Utils::slice( - $value, - $node['value'][0], - $node['value'][1], - $node['value'][2] - ) : null; - - case 'expref': - $apply = $node['children'][0]; - return function ($value) use ($apply) { - return $this->visit($apply, $value); - }; - - default: - throw new \RuntimeException("Unknown node type: {$node['type']}"); - } - } - - /** - * @return bool - */ - private static function relativeCmp($left, $right, $cmp) - { - if (!(is_int($left) || is_float($left)) || !(is_int($right) || is_float($right))) { - return false; - } - - switch ($cmp) { - case '>': return $left > $right; - case '>=': return $left >= $right; - case '<': return $left < $right; - case '<=': return $left <= $right; - default: throw new \RuntimeException("Invalid comparison: $cmp"); - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Utils.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Utils.php deleted file mode 100644 index 9ed386020..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/mtdowling/jmespath.php/src/Utils.php +++ /dev/null @@ -1,293 +0,0 @@ - 'boolean', - 'string' => 'string', - 'NULL' => 'null', - 'double' => 'number', - 'float' => 'number', - 'integer' => 'number' - ]; - - /** - * Returns true if the value is truthy - * - * @param mixed $value Value to check - * - * @return bool - */ - public static function isTruthy($value) - { - if (!$value) { - return $value === 0 || $value === 0.0 || $value === '0'; - } elseif ($value instanceof \stdClass) { - return (bool) get_object_vars($value); - } else { - return true; - } - } - - /** - * Gets the JMESPath type equivalent of a PHP variable. - * - * @param mixed $arg PHP variable - * @return string Returns the JSON data type - * @throws \InvalidArgumentException when an unknown type is given. - */ - public static function type($arg) - { - $type = gettype($arg); - if (isset(self::$typeMap[$type])) { - return self::$typeMap[$type]; - } elseif ($type === 'array') { - if (empty($arg)) { - return 'array'; - } - reset($arg); - return key($arg) === 0 ? 'array' : 'object'; - } elseif ($arg instanceof \stdClass) { - return 'object'; - } elseif ($arg instanceof \Closure) { - return 'expression'; - } elseif ($arg instanceof \ArrayAccess - && $arg instanceof \Countable - ) { - return count($arg) == 0 || $arg->offsetExists(0) - ? 'array' - : 'object'; - } elseif (is_object($arg)) { - if (method_exists($arg, '__toString')) { - return 'string'; - } - - throw new \InvalidArgumentException( - 'Unable to determine JMESPath type from ' . get_class($arg) - ); - } - - throw new \InvalidArgumentException( - 'Unable to determine JMESPath type from ' . gettype($arg) - ); - } - - /** - * Determine if the provided value is a JMESPath compatible object. - * - * @param mixed $value - * - * @return bool - */ - public static function isObject($value) - { - if (is_array($value)) { - return !$value || array_keys($value)[0] !== 0; - } - - // Handle array-like values. Must be empty or offset 0 does not exist - return $value instanceof \Countable && $value instanceof \ArrayAccess - ? count($value) == 0 || !$value->offsetExists(0) - : $value instanceof \stdClass; - } - - /** - * Determine if the provided value is a JMESPath compatible array. - * - * @param mixed $value - * - * @return bool - */ - public static function isArray($value) - { - if (is_array($value)) { - return !$value || array_keys($value)[0] === 0; - } - - // Handle array-like values. Must be empty or offset 0 exists. - return $value instanceof \Countable && $value instanceof \ArrayAccess - ? count($value) == 0 || $value->offsetExists(0) - : false; - } - - /** - * JSON-semantic equality: one number type, structural comparison for arrays - * and objects, and no object key-order sensitivity. - * Empty arrays and empty objects compare equal because PHP cannot represent - * that distinction after associative JSON decoding. - * - * @param mixed $a First value to compare - * @param mixed $b Second value to compare - * - * @return bool - */ - public static function isEqual($a, $b) - { - $typeA = self::type($a); - $typeB = self::type($b); - - if ($typeA !== $typeB) { - return ($typeA === 'array' || $typeA === 'object') - && ($typeB === 'array' || $typeB === 'object') - && (array) $a === [] - && (array) $b === []; - } - - if ($typeA === 'number') { - return $a == $b; - } - - if ($typeA === 'array' || $typeA === 'object') { - $a = (array) $a; - $b = (array) $b; - - if (count($a) !== count($b)) { - return false; - } - - foreach ($a as $key => $value) { - if (!array_key_exists($key, $b) || !self::isEqual($value, $b[$key])) { - return false; - } - } - - return true; - } - - return $a === $b; - } - - /** - * Safely add together two values. - * - * @param mixed $a First value to add - * @param mixed $b Second value to add - * - * @return int|float - */ - public static function add($a, $b) - { - if (is_numeric($a)) { - if (is_numeric($b)) { - return $a + $b; - } else { - return $a; - } - } else { - if (is_numeric($b)) { - return $b; - } else { - return 0; - } - } - } - - /** - * JMESPath requires a stable sorting algorithm, so here we'll implement - * a simple Schwartzian transform that uses array index positions as tie - * breakers. - * - * @param array $data List or map of data to sort - * @param callable $sortFn Callable used to sort values - * - * @return array Returns the sorted array - * @link https://en.wikipedia.org/wiki/Schwartzian_transform - */ - public static function stableSort(array $data, callable $sortFn) - { - // Decorate each item by creating an array of [value, index] - array_walk($data, function (&$v, $k) { - $v = [$v, $k]; - }); - // Sort by the sort function and use the index as a tie-breaker - uasort($data, function ($a, $b) use ($sortFn) { - return $sortFn($a[0], $b[0]) ?: ($a[1] < $b[1] ? -1 : 1); - }); - - // Undecorate each item and return the resulting sorted array - return array_map(function ($v) { - return $v[0]; - }, array_values($data)); - } - - /** - * Creates a Python-style slice of a string or array. - * - * @param array|string $value Value to slice - * @param int|null $start Starting position - * @param int|null $stop Stop position - * @param int $step Step (1, 2, -1, -2, etc.) - * - * @return array|string - * @throws \InvalidArgumentException - */ - public static function slice($value, $start = null, $stop = null, $step = 1) - { - if (!is_string($value) && !self::isArray($value)) { - throw new \InvalidArgumentException('Expects string or array'); - } - - return self::sliceIndices($value, $start, $stop, $step); - } - - private static function adjustEndpoint($length, $endpoint, $step) - { - if ($endpoint < 0) { - $endpoint += $length; - if ($endpoint < 0) { - $endpoint = $step < 0 ? -1 : 0; - } - } elseif ($endpoint >= $length) { - $endpoint = $step < 0 ? $length - 1 : $length; - } - - return $endpoint; - } - - private static function adjustSlice($length, $start, $stop, $step) - { - if ($step === null) { - $step = 1; - } elseif ($step === 0) { - throw new \RuntimeException('step cannot be 0'); - } - - if ($start === null) { - $start = $step < 0 ? $length - 1 : 0; - } else { - $start = self::adjustEndpoint($length, $start, $step); - } - - if ($stop === null) { - $stop = $step < 0 ? -1 : $length; - } else { - $stop = self::adjustEndpoint($length, $stop, $step); - } - - return [$start, $stop, $step]; - } - - private static function sliceIndices($subject, $start, $stop, $step) - { - $type = gettype($subject); - if ($type == 'string') { - $subject = mb_str_split($subject, 1, 'UTF-8'); - } - $len = count($subject); - list($start, $stop, $step) = self::adjustSlice($len, $start, $stop, $step); - - $result = []; - if ($step > 0) { - for ($i = $start; $i < $stop; $i += $step) { - $result[] = $subject[$i]; - } - } else { - for ($i = $start; $i > $stop; $i += $step) { - $result[] = $subject[$i]; - } - } - - return $type == 'string' ? implode('', $result) : $result; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/CHANGELOG.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/CHANGELOG.md deleted file mode 100644 index babba7c7b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 1.0.3 - -Add `source` link in composer.json. No code changes. - -## 1.0.2 - -Allow PSR-7 (psr/http-message) 2.0. No code changes. - -## 1.0.1 - -Allow installation with PHP 8. No code changes. - -## 1.0.0 - -First stable release. No changes since 0.3.0. - -## 0.3.0 - -Added Interface suffix on exceptions - -## 0.2.0 - -All exceptions are in `Psr\Http\Client` namespace - -## 0.1.0 - -First release diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/LICENSE deleted file mode 100644 index cd5e0020a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2017 PHP Framework Interoperability Group - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/README.md deleted file mode 100644 index 84af5c55d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/README.md +++ /dev/null @@ -1,12 +0,0 @@ -HTTP Client -=========== - -This repository holds all the common code related to [PSR-18 (HTTP Client)][psr-url]. - -Note that this is not a HTTP Client implementation of its own. It is merely abstractions that describe the components of a HTTP Client. - -The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. - -[psr-url]: https://www.php-fig.org/psr/psr-18 -[package-url]: https://packagist.org/packages/psr/http-client -[implementation-url]: https://packagist.org/providers/psr/http-client-implementation diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/composer.json deleted file mode 100644 index 6fed350be..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/composer.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "psr/http-client", - "description": "Common interface for HTTP clients", - "keywords": ["psr", "psr-18", "http", "http-client"], - "homepage": "https://github.com/php-fig/http-client", - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/src/ClientExceptionInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/src/ClientExceptionInterface.php deleted file mode 100644 index aa0b9cf14..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-client/src/ClientExceptionInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-factory/src/RequestFactoryInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-factory/src/RequestFactoryInterface.php deleted file mode 100644 index cb39a08bf..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-factory/src/RequestFactoryInterface.php +++ /dev/null @@ -1,18 +0,0 @@ - `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`. -> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered. - diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/docs/PSR7-Usage.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/docs/PSR7-Usage.md deleted file mode 100644 index b6d048a34..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/docs/PSR7-Usage.md +++ /dev/null @@ -1,159 +0,0 @@ -### PSR-7 Usage - -All PSR-7 applications comply with these interfaces -They were created to establish a standard between middleware implementations. - -> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`. -> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered. - - -The following examples will illustrate how basic operations are done in PSR-7. - -##### Examples - - -For this examples to work (at least) a PSR-7 implementation package is required. (eg: zendframework/zend-diactoros, guzzlehttp/psr7, slim/slim, etc) -All PSR-7 implementations should have the same behaviour. - -The following will be assumed: -`$request` is an object of `Psr\Http\Message\RequestInterface` and - -`$response` is an object implementing `Psr\Http\Message\RequestInterface` - - -### Working with HTTP Headers - -#### Adding headers to response: - -```php -$response->withHeader('My-Custom-Header', 'My Custom Message'); -``` - -#### Appending values to headers - -```php -$response->withAddedHeader('My-Custom-Header', 'The second message'); -``` - -#### Checking if header exists: - -```php -$request->hasHeader('My-Custom-Header'); // will return false -$response->hasHeader('My-Custom-Header'); // will return true -``` - -> Note: My-Custom-Header was only added in the Response - -#### Getting comma-separated values from a header (also applies to request) - -```php -// getting value from request headers -$request->getHeaderLine('Content-Type'); // will return: "text/html; charset=UTF-8" -// getting value from response headers -$response->getHeaderLine('My-Custom-Header'); // will return: "My Custom Message; The second message" -``` - -#### Getting array of value from a header (also applies to request) -```php -// getting value from request headers -$request->getHeader('Content-Type'); // will return: ["text/html", "charset=UTF-8"] -// getting value from response headers -$response->getHeader('My-Custom-Header'); // will return: ["My Custom Message", "The second message"] -``` - -#### Removing headers from HTTP Messages -```php -// removing a header from Request, removing deprecated "Content-MD5" header -$request->withoutHeader('Content-MD5'); - -// removing a header from Response -// effect: the browser won't know the size of the stream -// the browser will download the stream till it ends -$response->withoutHeader('Content-Length'); -``` - -### Working with HTTP Message Body - -When working with the PSR-7 there are two methods of implementation: -#### 1. Getting the body separately - -> This method makes the body handling easier to understand and is useful when repeatedly calling body methods. (You only call `getBody()` once). Using this method mistakes like `$response->write()` are also prevented. - -```php -$body = $response->getBody(); -// operations on body, eg. read, write, seek -// ... -// replacing the old body -$response->withBody($body); -// this last statement is optional as we working with objects -// in this case the "new" body is same with the "old" one -// the $body variable has the same value as the one in $request, only the reference is passed -``` - -#### 2. Working directly on response - -> This method is useful when only performing few operations as the `$request->getBody()` statement fragment is required - -```php -$response->getBody()->write('hello'); -``` - -### Getting the body contents - -The following snippet gets the contents of a stream contents. -> Note: Streams must be rewinded, if content was written into streams, it will be ignored when calling `getContents()` because the stream pointer is set to the last character, which is `\0` - meaning end of stream. -```php -$body = $response->getBody(); -$body->rewind(); // or $body->seek(0); -$bodyText = $body->getContents(); -``` -> Note: If `$body->seek(1)` is called before `$body->getContents()`, the first character will be ommited as the starting pointer is set to `1`, not `0`. This is why using `$body->rewind()` is recommended. - -### Append to body - -```php -$response->getBody()->write('Hello'); // writing directly -$body = $request->getBody(); // which is a `StreamInterface` -$body->write('xxxxx'); -``` - -### Prepend to body -Prepending is different when it comes to streams. The content must be copied before writing the content to be prepended. -The following example will explain the behaviour of streams. - -```php -// assuming our response is initially empty -$body = $repsonse->getBody(); -// writing the string "abcd" -$body->write('abcd'); - -// seeking to start of stream -$body->seek(0); -// writing 'ef' -$body->write('ef'); // at this point the stream contains "efcd" -``` - -#### Prepending by rewriting separately - -```php -// assuming our response body stream only contains: "abcd" -$body = $response->getBody(); -$body->rewind(); -$contents = $body->getContents(); // abcd -// seeking the stream to beginning -$body->rewind(); -$body->write('ef'); // stream contains "efcd" -$body->write($contents); // stream contains "efabcd" -``` - -> Note: `getContents()` seeks the stream while reading it, therefore if the second `rewind()` method call was not present the stream would have resulted in `abcdefabcd` because the `write()` method appends to stream if not preceeded by `rewind()` or `seek(0)`. - -#### Prepending by using contents as a string -```php -$body = $response->getBody(); -$body->rewind(); -$contents = $body->getContents(); // efabcd -$contents = 'ef'.$contents; -$body->rewind(); -$body->write($contents); -``` diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/MessageInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/MessageInterface.php deleted file mode 100644 index a83c98518..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/MessageInterface.php +++ /dev/null @@ -1,187 +0,0 @@ -getHeaders() as $name => $values) { - * echo $name . ": " . implode(", ", $values); - * } - * - * // Emit headers iteratively: - * foreach ($message->getHeaders() as $name => $values) { - * foreach ($values as $value) { - * header(sprintf('%s: %s', $name, $value), false); - * } - * } - * - * While header names are not case-sensitive, getHeaders() will preserve the - * exact case in which headers were originally specified. - * - * @return string[][] Returns an associative array of the message's headers. Each - * key MUST be a header name, and each value MUST be an array of strings - * for that header. - */ - public function getHeaders(): array; - - /** - * Checks if a header exists by the given case-insensitive name. - * - * @param string $name Case-insensitive header field name. - * @return bool Returns true if any header names match the given header - * name using a case-insensitive string comparison. Returns false if - * no matching header name is found in the message. - */ - public function hasHeader(string $name): bool; - - /** - * Retrieves a message header value by the given case-insensitive name. - * - * This method returns an array of all the header values of the given - * case-insensitive header name. - * - * If the header does not appear in the message, this method MUST return an - * empty array. - * - * @param string $name Case-insensitive header field name. - * @return string[] An array of string values as provided for the given - * header. If the header does not appear in the message, this method MUST - * return an empty array. - */ - public function getHeader(string $name): array; - - /** - * Retrieves a comma-separated string of the values for a single header. - * - * This method returns all of the header values of the given - * case-insensitive header name as a string concatenated together using - * a comma. - * - * NOTE: Not all header values may be appropriately represented using - * comma concatenation. For such headers, use getHeader() instead - * and supply your own delimiter when concatenating. - * - * If the header does not appear in the message, this method MUST return - * an empty string. - * - * @param string $name Case-insensitive header field name. - * @return string A string of values as provided for the given header - * concatenated together using a comma. If the header does not appear in - * the message, this method MUST return an empty string. - */ - public function getHeaderLine(string $name): string; - - /** - * Return an instance with the provided value replacing the specified header. - * - * While header names are case-insensitive, the casing of the header will - * be preserved by this function, and returned from getHeaders(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new and/or updated header and value. - * - * @param string $name Case-insensitive header field name. - * @param string|string[] $value Header value(s). - * @return static - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withHeader(string $name, $value): MessageInterface; - - /** - * Return an instance with the specified header appended with the given value. - * - * Existing values for the specified header will be maintained. The new - * value(s) will be appended to the existing list. If the header did not - * exist previously, it will be added. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * new header and/or value. - * - * @param string $name Case-insensitive header field name to add. - * @param string|string[] $value Header value(s). - * @return static - * @throws \InvalidArgumentException for invalid header names or values. - */ - public function withAddedHeader(string $name, $value): MessageInterface; - - /** - * Return an instance without the specified header. - * - * Header resolution MUST be done without case-sensitivity. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the named header. - * - * @param string $name Case-insensitive header field name to remove. - * @return static - */ - public function withoutHeader(string $name): MessageInterface; - - /** - * Gets the body of the message. - * - * @return StreamInterface Returns the body as a stream. - */ - public function getBody(): StreamInterface; - - /** - * Return an instance with the specified message body. - * - * The body MUST be a StreamInterface object. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return a new instance that has the - * new body stream. - * - * @param StreamInterface $body Body. - * @return static - * @throws \InvalidArgumentException When the body is not valid. - */ - public function withBody(StreamInterface $body): MessageInterface; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/RequestInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/RequestInterface.php deleted file mode 100644 index 33f85e559..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/RequestInterface.php +++ /dev/null @@ -1,130 +0,0 @@ -getQuery()` - * or from the `QUERY_STRING` server param. - * - * @return array - */ - public function getQueryParams(): array; - - /** - * Return an instance with the specified query string arguments. - * - * These values SHOULD remain immutable over the course of the incoming - * request. They MAY be injected during instantiation, such as from PHP's - * $_GET superglobal, or MAY be derived from some other value such as the - * URI. In cases where the arguments are parsed from the URI, the data - * MUST be compatible with what PHP's parse_str() would return for - * purposes of how duplicate query parameters are handled, and how nested - * sets are handled. - * - * Setting query string arguments MUST NOT change the URI stored by the - * request, nor the values in the server params. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated query string arguments. - * - * @param array $query Array of query string arguments, typically from - * $_GET. - * @return static - */ - public function withQueryParams(array $query): ServerRequestInterface; - - /** - * Retrieve normalized file upload data. - * - * This method returns upload metadata in a normalized tree, with each leaf - * an instance of Psr\Http\Message\UploadedFileInterface. - * - * These values MAY be prepared from $_FILES or the message body during - * instantiation, or MAY be injected via withUploadedFiles(). - * - * @return array An array tree of UploadedFileInterface instances; an empty - * array MUST be returned if no data is present. - */ - public function getUploadedFiles(): array; - - /** - * Create a new instance with the specified uploaded files. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param array $uploadedFiles An array tree of UploadedFileInterface instances. - * @return static - * @throws \InvalidArgumentException if an invalid structure is provided. - */ - public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface; - - /** - * Retrieve any parameters provided in the request body. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, this method MUST - * return the contents of $_POST. - * - * Otherwise, this method may return any results of deserializing - * the request body content; as parsing returns structured content, the - * potential types MUST be arrays or objects only. A null value indicates - * the absence of body content. - * - * @return null|array|object The deserialized body parameters, if any. - * These will typically be an array or object. - */ - public function getParsedBody(); - - /** - * Return an instance with the specified body parameters. - * - * These MAY be injected during instantiation. - * - * If the request Content-Type is either application/x-www-form-urlencoded - * or multipart/form-data, and the request method is POST, use this method - * ONLY to inject the contents of $_POST. - * - * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of - * deserializing the request body content. Deserialization/parsing returns - * structured data, and, as such, this method ONLY accepts arrays or objects, - * or a null value if nothing was available to parse. - * - * As an example, if content negotiation determines that the request data - * is a JSON payload, this method could be used to create a request - * instance with the deserialized parameters. - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated body parameters. - * - * @param null|array|object $data The deserialized body data. This will - * typically be in an array or object. - * @return static - * @throws \InvalidArgumentException if an unsupported argument type is - * provided. - */ - public function withParsedBody($data): ServerRequestInterface; - - /** - * Retrieve attributes derived from the request. - * - * The request "attributes" may be used to allow injection of any - * parameters derived from the request: e.g., the results of path - * match operations; the results of decrypting cookies; the results of - * deserializing non-form-encoded message bodies; etc. Attributes - * will be application and request specific, and CAN be mutable. - * - * @return array Attributes derived from the request. - */ - public function getAttributes(): array; - - /** - * Retrieve a single derived request attribute. - * - * Retrieves a single derived request attribute as described in - * getAttributes(). If the attribute has not been previously set, returns - * the default value as provided. - * - * This method obviates the need for a hasAttribute() method, as it allows - * specifying a default value to return if the attribute is not found. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $default Default value to return if the attribute does not exist. - * @return mixed - */ - public function getAttribute(string $name, $default = null); - - /** - * Return an instance with the specified derived request attribute. - * - * This method allows setting a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that has the - * updated attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @param mixed $value The value of the attribute. - * @return static - */ - public function withAttribute(string $name, $value): ServerRequestInterface; - - /** - * Return an instance that removes the specified derived request attribute. - * - * This method allows removing a single derived request attribute as - * described in getAttributes(). - * - * This method MUST be implemented in such a way as to retain the - * immutability of the message, and MUST return an instance that removes - * the attribute. - * - * @see getAttributes() - * @param string $name The attribute name. - * @return static - */ - public function withoutAttribute(string $name): ServerRequestInterface; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/StreamInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/StreamInterface.php deleted file mode 100644 index a62aabb82..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/psr/http-message/src/StreamInterface.php +++ /dev/null @@ -1,158 +0,0 @@ - - * [user-info@]host[:port] - * - * - * If the port component is not set or is the standard port for the current - * scheme, it SHOULD NOT be included. - * - * @see https://tools.ietf.org/html/rfc3986#section-3.2 - * @return string The URI authority, in "[user-info@]host[:port]" format. - */ - public function getAuthority(): string; - - /** - * Retrieve the user information component of the URI. - * - * If no user information is present, this method MUST return an empty - * string. - * - * If a user is present in the URI, this will return that value; - * additionally, if the password is also present, it will be appended to the - * user value, with a colon (":") separating the values. - * - * The trailing "@" character is not part of the user information and MUST - * NOT be added. - * - * @return string The URI user information, in "username[:password]" format. - */ - public function getUserInfo(): string; - - /** - * Retrieve the host component of the URI. - * - * If no host is present, this method MUST return an empty string. - * - * The value returned MUST be normalized to lowercase, per RFC 3986 - * Section 3.2.2. - * - * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 - * @return string The URI host. - */ - public function getHost(): string; - - /** - * Retrieve the port component of the URI. - * - * If a port is present, and it is non-standard for the current scheme, - * this method MUST return it as an integer. If the port is the standard port - * used with the current scheme, this method SHOULD return null. - * - * If no port is present, and no scheme is present, this method MUST return - * a null value. - * - * If no port is present, but a scheme is present, this method MAY return - * the standard port for that scheme, but SHOULD return null. - * - * @return null|int The URI port. - */ - public function getPort(): ?int; - - /** - * Retrieve the path component of the URI. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * Normally, the empty path "" and absolute path "/" are considered equal as - * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically - * do this normalization because in contexts with a trimmed base path, e.g. - * the front controller, this difference becomes significant. It's the task - * of the user to handle both "" and "/". - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.3. - * - * As an example, if the value should include a slash ("/") not intended as - * delimiter between path segments, that value MUST be passed in encoded - * form (e.g., "%2F") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.3 - * @return string The URI path. - */ - public function getPath(): string; - - /** - * Retrieve the query string of the URI. - * - * If no query string is present, this method MUST return an empty string. - * - * The leading "?" character is not part of the query and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.4. - * - * As an example, if a value in a key/value pair of the query string should - * include an ampersand ("&") not intended as a delimiter between values, - * that value MUST be passed in encoded form (e.g., "%26") to the instance. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.4 - * @return string The URI query string. - */ - public function getQuery(): string; - - /** - * Retrieve the fragment component of the URI. - * - * If no fragment is present, this method MUST return an empty string. - * - * The leading "#" character is not part of the fragment and MUST NOT be - * added. - * - * The value returned MUST be percent-encoded, but MUST NOT double-encode - * any characters. To determine what characters to encode, please refer to - * RFC 3986, Sections 2 and 3.5. - * - * @see https://tools.ietf.org/html/rfc3986#section-2 - * @see https://tools.ietf.org/html/rfc3986#section-3.5 - * @return string The URI fragment. - */ - public function getFragment(): string; - - /** - * Return an instance with the specified scheme. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified scheme. - * - * Implementations MUST support the schemes "http" and "https" case - * insensitively, and MAY accommodate other schemes if required. - * - * An empty scheme is equivalent to removing the scheme. - * - * @param string $scheme The scheme to use with the new instance. - * @return static A new instance with the specified scheme. - * @throws \InvalidArgumentException for invalid or unsupported schemes. - */ - public function withScheme(string $scheme): UriInterface; - - /** - * Return an instance with the specified user information. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified user information. - * - * Password is optional, but the user information MUST include the - * user; an empty string for the user is equivalent to removing user - * information. - * - * @param string $user The user name to use for authority. - * @param null|string $password The password associated with $user. - * @return static A new instance with the specified user information. - */ - public function withUserInfo(string $user, ?string $password = null): UriInterface; - - /** - * Return an instance with the specified host. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified host. - * - * An empty host value is equivalent to removing the host. - * - * @param string $host The hostname to use with the new instance. - * @return static A new instance with the specified host. - * @throws \InvalidArgumentException for invalid hostnames. - */ - public function withHost(string $host): UriInterface; - - /** - * Return an instance with the specified port. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified port. - * - * Implementations MUST raise an exception for ports outside the - * established TCP and UDP port ranges. - * - * A null value provided for the port is equivalent to removing the port - * information. - * - * @param null|int $port The port to use with the new instance; a null value - * removes the port information. - * @return static A new instance with the specified port. - * @throws \InvalidArgumentException for invalid ports. - */ - public function withPort(?int $port): UriInterface; - - /** - * Return an instance with the specified path. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified path. - * - * The path can either be empty or absolute (starting with a slash) or - * rootless (not starting with a slash). Implementations MUST support all - * three syntaxes. - * - * If the path is intended to be domain-relative rather than path relative then - * it must begin with a slash ("/"). Paths not starting with a slash ("/") - * are assumed to be relative to some base path known to the application or - * consumer. - * - * Users can provide both encoded and decoded path characters. - * Implementations ensure the correct encoding as outlined in getPath(). - * - * @param string $path The path to use with the new instance. - * @return static A new instance with the specified path. - * @throws \InvalidArgumentException for invalid paths. - */ - public function withPath(string $path): UriInterface; - - /** - * Return an instance with the specified query string. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified query string. - * - * Users can provide both encoded and decoded query characters. - * Implementations ensure the correct encoding as outlined in getQuery(). - * - * An empty query string value is equivalent to removing the query string. - * - * @param string $query The query string to use with the new instance. - * @return static A new instance with the specified query string. - * @throws \InvalidArgumentException for invalid query strings. - */ - public function withQuery(string $query): UriInterface; - - /** - * Return an instance with the specified URI fragment. - * - * This method MUST retain the state of the current instance, and return - * an instance that contains the specified URI fragment. - * - * Users can provide both encoded and decoded fragment characters. - * Implementations ensure the correct encoding as outlined in getFragment(). - * - * An empty fragment value is equivalent to removing the fragment. - * - * @param string $fragment The fragment to use with the new instance. - * @return static A new instance with the specified fragment. - */ - public function withFragment(string $fragment): UriInterface; - - /** - * Return the string representation as a URI reference. - * - * Depending on which components of the URI are present, the resulting - * string is either a full URI or relative reference according to RFC 3986, - * Section 4.1. The method concatenates the various components of the URI, - * using the appropriate delimiters: - * - * - If a scheme is present, it MUST be suffixed by ":". - * - If an authority is present, it MUST be prefixed by "//". - * - The path can be concatenated without delimiters. But there are two - * cases where the path has to be adjusted to make the URI reference - * valid as PHP does not allow to throw an exception in __toString(): - * - If the path is rootless and an authority is present, the path MUST - * be prefixed by "/". - * - If the path is starting with more than one "/" and no authority is - * present, the starting slashes MUST be reduced to one. - * - If a query is present, it MUST be prefixed by "?". - * - If a fragment is present, it MUST be prefixed by "#". - * - * @see http://tools.ietf.org/html/rfc3986#section-4.1 - * @return string - */ - public function __toString(): string; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/CHANGELOG.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/CHANGELOG.md deleted file mode 100644 index 80818d1b5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/CHANGELOG.md +++ /dev/null @@ -1,92 +0,0 @@ -CHANGELOG -========= - -7.1 ---- - - * Add the `Filesystem::readFile()` method - -7.0 ---- - - * Add argument `$lock` to `Filesystem::appendToFile()` - -5.4 ---- - - * Add `Path` class - * Add `$lock` argument to `Filesystem::appendToFile()` - -5.0.0 ------ - - * `Filesystem::dumpFile()` and `appendToFile()` don't accept arrays anymore - -4.4.0 ------ - - * support for passing a `null` value to `Filesystem::isAbsolutePath()` is deprecated and will be removed in 5.0 - * `tempnam()` now accepts a third argument `$suffix`. - -4.3.0 ------ - - * support for passing arrays to `Filesystem::dumpFile()` is deprecated and will be removed in 5.0 - * support for passing arrays to `Filesystem::appendToFile()` is deprecated and will be removed in 5.0 - -4.0.0 ------ - - * removed `LockHandler` - * Support for passing relative paths to `Filesystem::makePathRelative()` has been removed. - -3.4.0 ------ - - * support for passing relative paths to `Filesystem::makePathRelative()` is deprecated and will be removed in 4.0 - -3.3.0 ------ - - * added `appendToFile()` to append contents to existing files - -3.2.0 ------ - - * added `readlink()` as a platform independent method to read links - -3.0.0 ------ - - * removed `$mode` argument from `Filesystem::dumpFile()` - -2.8.0 ------ - - * added tempnam() a stream aware version of PHP's native tempnam() - -2.6.0 ------ - - * added LockHandler - -2.3.12 ------- - - * deprecated dumpFile() file mode argument. - -2.3.0 ------ - - * added the dumpFile() method to atomically write files - -2.2.0 ------ - - * added a delete option for the mirror() method - -2.1.0 ------ - - * 24eb396 : BC Break : mkdir() function now throws exception in case of failure instead of returning Boolean value - * created the component diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/ExceptionInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/ExceptionInterface.php deleted file mode 100644 index fc438d9f3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/ExceptionInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * Exception interface for all exceptions thrown by the component. - * - * @author Romain Neutron - */ -interface ExceptionInterface extends \Throwable -{ -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/FileNotFoundException.php deleted file mode 100644 index d0d27977d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/FileNotFoundException.php +++ /dev/null @@ -1,34 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * Exception class thrown when a file couldn't be found. - * - * @author Fabien Potencier - * @author Christian Gärtner - */ -class FileNotFoundException extends IOException -{ - public function __construct(?string $message = null, int $code = 0, ?\Throwable $previous = null, ?string $path = null) - { - if (null === $message) { - if (null === $path) { - $message = 'File could not be found.'; - } else { - $message = \sprintf('File "%s" could not be found.', $path); - } - } - - parent::__construct($message, $code, $previous, $path); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/IOException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/IOException.php deleted file mode 100644 index 46ab8b4a5..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/IOException.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * Exception class thrown when a filesystem operation failure happens. - * - * @author Romain Neutron - * @author Christian Gärtner - * @author Fabien Potencier - */ -class IOException extends \RuntimeException implements IOExceptionInterface -{ - public function __construct( - string $message, - int $code = 0, - ?\Throwable $previous = null, - private ?string $path = null, - ) { - parent::__construct($message, $code, $previous); - } - - public function getPath(): ?string - { - return $this->path; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/IOExceptionInterface.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/IOExceptionInterface.php deleted file mode 100644 index 90c71db88..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/IOExceptionInterface.php +++ /dev/null @@ -1,25 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * IOException interface for file and input/output stream related exceptions thrown by the component. - * - * @author Christian Gärtner - */ -interface IOExceptionInterface extends ExceptionInterface -{ - /** - * Returns the associated path for the exception. - */ - public function getPath(): ?string; -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/InvalidArgumentException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/InvalidArgumentException.php deleted file mode 100644 index abadc2002..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * @author Christian Flothmann - */ -class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface -{ -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/RuntimeException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/RuntimeException.php deleted file mode 100644 index a7512dca7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Exception/RuntimeException.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * @author Théo Fidry - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Filesystem.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Filesystem.php deleted file mode 100644 index 4a822691f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Filesystem.php +++ /dev/null @@ -1,776 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem; - -use Symfony\Component\Filesystem\Exception\FileNotFoundException; -use Symfony\Component\Filesystem\Exception\InvalidArgumentException; -use Symfony\Component\Filesystem\Exception\IOException; - -/** - * Provides basic utility to manipulate the file system. - * - * @author Fabien Potencier - */ -class Filesystem -{ - private static ?string $lastError = null; - - /** - * Copies a file. - * - * If the target file is older than the origin file, it's always overwritten. - * If the target file is newer, it is overwritten only when the - * $overwriteNewerFiles option is set to true. - * - * @throws FileNotFoundException When originFile doesn't exist - * @throws IOException When copy fails - */ - public function copy(string $originFile, string $targetFile, bool $overwriteNewerFiles = false): void - { - $originIsLocal = stream_is_local($originFile) || 0 === stripos($originFile, 'file://'); - if ($originIsLocal && !is_file($originFile)) { - throw new FileNotFoundException(\sprintf('Failed to copy "%s" because file does not exist.', $originFile), 0, null, $originFile); - } - - $this->mkdir(\dirname($targetFile)); - - $doCopy = true; - if (!$overwriteNewerFiles && !parse_url($originFile, \PHP_URL_HOST) && is_file($targetFile)) { - $doCopy = filemtime($originFile) > filemtime($targetFile); - } - - if ($doCopy) { - // https://bugs.php.net/64634 - if (!$source = self::box('fopen', $originFile, 'r')) { - throw new IOException(\sprintf('Failed to copy "%s" to "%s" because source file could not be opened for reading: ', $originFile, $targetFile).self::$lastError, 0, null, $originFile); - } - - // Stream context created to allow files overwrite when using FTP stream wrapper - disabled by default - if (!$target = self::box('fopen', $targetFile, 'w', false, stream_context_create(['ftp' => ['overwrite' => true]]))) { - throw new IOException(\sprintf('Failed to copy "%s" to "%s" because target file could not be opened for writing: ', $originFile, $targetFile).self::$lastError, 0, null, $originFile); - } - - $bytesCopied = stream_copy_to_stream($source, $target); - fclose($source); - fclose($target); - unset($source, $target); - - if (!is_file($targetFile)) { - throw new IOException(\sprintf('Failed to copy "%s" to "%s".', $originFile, $targetFile), 0, null, $originFile); - } - - if ($originIsLocal) { - // Like `cp`, preserve the source mode masked by the umask - self::box('chmod', $targetFile, fileperms($originFile) & 0o777 & ~umask()); - - // Like `cp`, preserve the file modification time - self::box('touch', $targetFile, filemtime($originFile)); - - if ($bytesCopied !== $bytesOrigin = filesize($originFile)) { - throw new IOException(\sprintf('Failed to copy the whole content of "%s" to "%s" (%g of %g bytes copied).', $originFile, $targetFile, $bytesCopied, $bytesOrigin), 0, null, $originFile); - } - } - } - } - - /** - * Creates a directory recursively. - * - * @throws IOException On any directory creation failure - */ - public function mkdir(string|iterable $dirs, int $mode = 0o777): void - { - foreach ($this->toIterable($dirs) as $dir) { - if (is_dir($dir)) { - continue; - } - - if (!self::box('mkdir', $dir, $mode, true) && !is_dir($dir)) { - throw new IOException(\sprintf('Failed to create "%s": ', $dir).self::$lastError, 0, null, $dir); - } - } - } - - /** - * Checks the existence of files or directories. - */ - public function exists(string|iterable $files): bool - { - $maxPathLength = \PHP_MAXPATHLEN - 2; - - foreach ($this->toIterable($files) as $file) { - if (\strlen($file) > $maxPathLength) { - throw new IOException(\sprintf('Could not check if file exist because path length exceeds %d characters.', $maxPathLength), 0, null, $file); - } - - if (!file_exists($file)) { - return false; - } - } - - return true; - } - - /** - * Sets access and modification time of file. - * - * @param int|null $time The touch time as a Unix timestamp, if not supplied the current system time is used - * @param int|null $atime The access time as a Unix timestamp, if not supplied the current system time is used - * - * @throws IOException When touch fails - */ - public function touch(string|iterable $files, ?int $time = null, ?int $atime = null): void - { - foreach ($this->toIterable($files) as $file) { - if (!($time ? self::box('touch', $file, $time, $atime) : self::box('touch', $file))) { - throw new IOException(\sprintf('Failed to touch "%s": ', $file).self::$lastError, 0, null, $file); - } - } - } - - /** - * Removes files or directories. - * - * @throws IOException When removal fails - */ - public function remove(string|iterable $files): void - { - if ($files instanceof \Traversable) { - $files = iterator_to_array($files, false); - } elseif (!\is_array($files)) { - $files = [$files]; - } - - self::doRemove($files, false); - } - - private static function doRemove(array $files, bool $isRecursive): void - { - $files = array_reverse($files); - foreach ($files as $file) { - if (is_link($file)) { - // See https://bugs.php.net/52176 - if (!(self::box('unlink', $file) || '\\' !== \DIRECTORY_SEPARATOR || self::box('rmdir', $file)) && file_exists($file)) { - throw new IOException(\sprintf('Failed to remove symlink "%s": ', $file).self::$lastError); - } - } elseif (is_dir($file)) { - if (!$isRecursive) { - $tmpName = \dirname(realpath($file)).'/.!'.strrev(strtr(base64_encode(random_bytes(2)), '/=', '-!')); - - if (file_exists($tmpName)) { - try { - self::doRemove([$tmpName], true); - } catch (IOException) { - } - } - - if (!file_exists($tmpName) && self::box('rename', $file, $tmpName)) { - $origFile = $file; - $file = $tmpName; - } else { - $origFile = null; - } - } - - $filesystemIterator = new \FilesystemIterator($file, \FilesystemIterator::CURRENT_AS_PATHNAME | \FilesystemIterator::SKIP_DOTS); - self::doRemove(iterator_to_array($filesystemIterator, true), true); - - if (!self::box('rmdir', $file) && file_exists($file) && !$isRecursive) { - $lastError = self::$lastError; - - if (null !== $origFile && self::box('rename', $file, $origFile)) { - $file = $origFile; - } - - throw new IOException(\sprintf('Failed to remove directory "%s": ', $file).$lastError); - } - } elseif (!self::box('unlink', $file) && ((self::$lastError && str_contains(self::$lastError, 'Permission denied')) || file_exists($file))) { - throw new IOException(\sprintf('Failed to remove file "%s": ', $file).self::$lastError); - } - } - } - - /** - * Change mode for an array of files or directories. - * - * @param int $mode The new mode (octal) - * @param int $umask The mode mask (octal) - * @param bool $recursive Whether change the mod recursively or not - * - * @throws IOException When the change fails - */ - public function chmod(string|iterable $files, int $mode, int $umask = 0o000, bool $recursive = false): void - { - foreach ($this->toIterable($files) as $file) { - if (!self::box('chmod', $file, $mode & ~$umask)) { - throw new IOException(\sprintf('Failed to chmod file "%s": ', $file).self::$lastError, 0, null, $file); - } - if ($recursive && is_dir($file) && !is_link($file)) { - $this->chmod(new \FilesystemIterator($file), $mode, $umask, true); - } - } - } - - /** - * Change the owner of an array of files or directories. - * - * This method always throws on Windows, as the underlying PHP function is not supported. - * - * @see https://php.net/chown - * - * @param string|int $user A user name or number - * @param bool $recursive Whether change the owner recursively or not - * - * @throws IOException When the change fails - */ - public function chown(string|iterable $files, string|int $user, bool $recursive = false): void - { - foreach ($this->toIterable($files) as $file) { - if ($recursive && is_dir($file) && !is_link($file)) { - $this->chown(new \FilesystemIterator($file), $user, true); - } - if (is_link($file) && \function_exists('lchown')) { - if (!self::box('lchown', $file, $user)) { - throw new IOException(\sprintf('Failed to chown file "%s": ', $file).self::$lastError, 0, null, $file); - } - } else { - if (!self::box('chown', $file, $user)) { - throw new IOException(\sprintf('Failed to chown file "%s": ', $file).self::$lastError, 0, null, $file); - } - } - } - } - - /** - * Change the group of an array of files or directories. - * - * This method always throws on Windows, as the underlying PHP function is not supported. - * - * @see https://php.net/chgrp - * - * @param string|int $group A group name or number - * @param bool $recursive Whether change the group recursively or not - * - * @throws IOException When the change fails - */ - public function chgrp(string|iterable $files, string|int $group, bool $recursive = false): void - { - foreach ($this->toIterable($files) as $file) { - if ($recursive && is_dir($file) && !is_link($file)) { - $this->chgrp(new \FilesystemIterator($file), $group, true); - } - if (is_link($file) && \function_exists('lchgrp')) { - if (!self::box('lchgrp', $file, $group)) { - throw new IOException(\sprintf('Failed to chgrp file "%s": ', $file).self::$lastError, 0, null, $file); - } - } else { - if (!self::box('chgrp', $file, $group)) { - throw new IOException(\sprintf('Failed to chgrp file "%s": ', $file).self::$lastError, 0, null, $file); - } - } - } - } - - /** - * Renames a file or a directory. - * - * @throws IOException When target file or directory already exists - * @throws IOException When origin cannot be renamed - */ - public function rename(string $origin, string $target, bool $overwrite = false): void - { - // we check that target does not exist - if (!$overwrite && $this->isReadable($target)) { - throw new IOException(\sprintf('Cannot rename because the target "%s" already exists.', $target), 0, null, $target); - } - - if (!self::box('rename', $origin, $target)) { - if (is_dir($origin)) { - // See https://bugs.php.net/54097 & https://php.net/rename#113943 - $this->mirror($origin, $target, null, ['override' => $overwrite, 'delete' => $overwrite]); - $this->remove($origin); - - return; - } - throw new IOException(\sprintf('Cannot rename "%s" to "%s": ', $origin, $target).self::$lastError, 0, null, $target); - } - } - - /** - * Tells whether a file exists and is readable. - * - * @throws IOException When windows path is longer than 258 characters - */ - private function isReadable(string $filename): bool - { - $maxPathLength = \PHP_MAXPATHLEN - 2; - - if (\strlen($filename) > $maxPathLength) { - throw new IOException(\sprintf('Could not check if file is readable because path length exceeds %d characters.', $maxPathLength), 0, null, $filename); - } - - return is_readable($filename); - } - - /** - * Creates a symbolic link or copy a directory. - * - * @throws IOException When symlink fails - */ - public function symlink(string $originDir, string $targetDir, bool $copyOnWindows = false): void - { - self::assertFunctionExists('symlink'); - - if ('\\' === \DIRECTORY_SEPARATOR) { - $originDir = strtr($originDir, '/', '\\'); - $targetDir = strtr($targetDir, '/', '\\'); - - if ($copyOnWindows) { - $this->mirror($originDir, $targetDir); - - return; - } - } - - $this->mkdir(\dirname($targetDir)); - - if (is_link($targetDir)) { - if (readlink($targetDir) === $originDir) { - return; - } - $this->remove($targetDir); - } - - if (!self::box('symlink', $originDir, $targetDir)) { - $this->linkException($originDir, $targetDir, 'symbolic'); - } - } - - /** - * Creates a hard link, or several hard links to a file. - * - * @param string|string[] $targetFiles The target file(s) - * - * @throws FileNotFoundException When original file is missing or not a file - * @throws IOException When link fails, including if link already exists - */ - public function hardlink(string $originFile, string|iterable $targetFiles): void - { - self::assertFunctionExists('link'); - - if (!$this->exists($originFile)) { - throw new FileNotFoundException(null, 0, null, $originFile); - } - - if (!is_file($originFile)) { - throw new FileNotFoundException(\sprintf('Origin file "%s" is not a file.', $originFile)); - } - - foreach ($this->toIterable($targetFiles) as $targetFile) { - if (is_file($targetFile)) { - if (fileinode($originFile) === fileinode($targetFile)) { - continue; - } - $this->remove($targetFile); - } - - if (!self::box('link', $originFile, $targetFile)) { - $this->linkException($originFile, $targetFile, 'hard'); - } - } - } - - /** - * @param string $linkType Name of the link type, typically 'symbolic' or 'hard' - */ - private function linkException(string $origin, string $target, string $linkType): never - { - if (self::$lastError) { - if ('\\' === \DIRECTORY_SEPARATOR && str_contains(self::$lastError, 'error code(1314)')) { - throw new IOException(\sprintf('Unable to create "%s" link due to error code 1314: \'A required privilege is not held by the client\'. Do you have the required Administrator-rights?', $linkType), 0, null, $target); - } - } - throw new IOException(\sprintf('Failed to create "%s" link from "%s" to "%s": ', $linkType, $origin, $target).self::$lastError, 0, null, $target); - } - - /** - * Resolves links in paths. - * - * With $canonicalize = false (default) - * - if $path does not exist or is not a link, returns null - * - if $path is a link, returns the next direct target of the link without considering the existence of the target - * - * With $canonicalize = true - * - if $path does not exist, returns null - * - if $path exists, returns its absolute fully resolved final version - */ - public function readlink(string $path, bool $canonicalize = false): ?string - { - if (!$canonicalize && !is_link($path)) { - return null; - } - - if ($canonicalize) { - if (!$this->exists($path)) { - return null; - } - - return realpath($path); - } - - return readlink($path); - } - - /** - * Given an existing path, convert it to a path relative to a given starting path. - */ - public function makePathRelative(string $endPath, string $startPath): string - { - if (!$this->isAbsolutePath($startPath)) { - throw new InvalidArgumentException(\sprintf('The start path "%s" is not absolute.', $startPath)); - } - - if (!$this->isAbsolutePath($endPath)) { - throw new InvalidArgumentException(\sprintf('The end path "%s" is not absolute.', $endPath)); - } - - $originalEndPath = $endPath; - - // Normalize separators on Windows - if ('\\' === \DIRECTORY_SEPARATOR) { - $endPath = str_replace('\\', '/', $endPath); - $startPath = str_replace('\\', '/', $startPath); - } - - $splitDriveLetter = static fn ($path) => (\strlen($path) > 2 && ':' === $path[1] && '/' === $path[2] && ctype_alpha($path[0])) - ? [substr($path, 2), strtoupper($path[0])] - : [$path, null]; - - $splitPath = static function ($path) { - $result = []; - - foreach (explode('/', trim($path, '/')) as $segment) { - if ('..' === $segment) { - array_pop($result); - } elseif ('.' !== $segment && '' !== $segment) { - $result[] = $segment; - } - } - - return $result; - }; - - [$endPath, $endDriveLetter] = $splitDriveLetter($endPath); - [$startPath, $startDriveLetter] = $splitDriveLetter($startPath); - - $startPathArr = $splitPath($startPath); - $endPathArr = $splitPath($endPath); - - if ($endDriveLetter && $startDriveLetter && $endDriveLetter != $startDriveLetter) { - // End path is on another drive, so no relative path exists - return $endDriveLetter.':/'.($endPathArr ? implode('/', $endPathArr).'/' : ''); - } - - // Find for which directory the common path stops - $index = 0; - while (isset($startPathArr[$index]) && isset($endPathArr[$index]) && $startPathArr[$index] === $endPathArr[$index]) { - ++$index; - } - - // Determine how deep the start path is relative to the common path (ie, "web/bundles" = 2 levels) - if (1 === \count($startPathArr) && '' === $startPathArr[0]) { - $depth = 0; - } else { - $depth = \count($startPathArr) - $index; - } - - // Repeated "../" for each level need to reach the common path - $traverser = str_repeat('../', $depth); - - $endPathRemainder = implode('/', \array_slice($endPathArr, $index)); - - // Construct $endPath from traversing to the common path, then to the remaining $endPath - $relativePath = $traverser.('' !== $endPathRemainder ? $endPathRemainder.'/' : ''); - - // Remove ending "/" if $endPath points to an existing file - if (str_ends_with($relativePath, '/') && is_file($originalEndPath)) { - $relativePath = substr($relativePath, 0, -1); - } - - return '' === $relativePath ? './' : $relativePath; - } - - /** - * Mirrors a directory to another. - * - * Copies files and directories from the origin directory into the target directory. By default: - * - * - existing files in the target directory will be overwritten, except if they are newer (see the `override` option) - * - files in the target directory that do not exist in the source directory will not be deleted (see the `delete` option) - * - * @param \Traversable|null $iterator Iterator that filters which files and directories to copy, if null a recursive iterator is created - * @param array $options An array of boolean options - * Valid options are: - * - $options['override'] If true, target files newer than origin files are overwritten (see copy(), defaults to false) - * - $options['copy_on_windows'] Whether to copy files instead of links on Windows (see symlink(), defaults to false) - * - $options['delete'] Whether to delete files that are not in the source directory (defaults to false) - * - * @throws IOException When file type is unknown - */ - public function mirror(string $originDir, string $targetDir, ?\Traversable $iterator = null, array $options = []): void - { - $targetDir = rtrim($targetDir, '/\\'); - $originDir = rtrim($originDir, '/\\'); - $originDirLen = \strlen($originDir); - - if (!$this->exists($originDir)) { - throw new IOException(\sprintf('The origin directory specified "%s" was not found.', $originDir), 0, null, $originDir); - } - - // Iterate in destination folder to remove obsolete entries - if ($this->exists($targetDir) && isset($options['delete']) && $options['delete']) { - $deleteIterator = $iterator; - if (null === $deleteIterator) { - $flags = \FilesystemIterator::SKIP_DOTS; - $deleteIterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($targetDir, $flags), \RecursiveIteratorIterator::CHILD_FIRST); - } - $targetDirLen = \strlen($targetDir); - foreach ($deleteIterator as $file) { - $origin = $originDir.substr($file->getPathname(), $targetDirLen); - if (!$this->exists($origin)) { - $this->remove($file); - } - } - } - - $copyOnWindows = $options['copy_on_windows'] ?? false; - - if (null === $iterator) { - $flags = $copyOnWindows ? \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS : \FilesystemIterator::SKIP_DOTS; - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($originDir, $flags), \RecursiveIteratorIterator::SELF_FIRST); - } - - $this->mkdir($targetDir); - $filesCreatedWhileMirroring = []; - - foreach ($iterator as $file) { - if ($file->getPathname() === $targetDir || $file->getRealPath() === $targetDir || isset($filesCreatedWhileMirroring[$file->getRealPath()])) { - continue; - } - - $target = $targetDir.substr($file->getPathname(), $originDirLen); - $filesCreatedWhileMirroring[$target] = true; - - if (!$copyOnWindows && is_link($file)) { - $this->symlink($file->getLinkTarget(), $target); - } elseif (is_dir($file)) { - $this->mkdir($target); - } elseif (is_file($file)) { - $this->copy($file, $target, $options['override'] ?? false); - } else { - throw new IOException(\sprintf('Unable to guess "%s" file type.', $file), 0, null, $file); - } - } - } - - /** - * Returns whether the given path is absolute. - */ - public function isAbsolutePath(string $file): bool - { - return Path::isAbsolute($file); - } - - /** - * Creates a temporary file with support for custom stream wrappers. - * - * @param string $prefix The prefix of the generated temporary filename - * Note: Windows uses only the first three characters of prefix - * @param string $suffix The suffix of the generated temporary filename - * - * @return string The new temporary filename (with path), or throw an exception on failure - */ - public function tempnam(string $dir, string $prefix, string $suffix = ''): string - { - [$scheme, $hierarchy] = $this->getSchemeAndHierarchy($dir); - - // If no scheme or scheme is "file" or "gs" (Google Cloud) create temp file in local filesystem - if ((null === $scheme || 'file' === $scheme || 'gs' === $scheme) && '' === $suffix) { - // PHP's tempnam() truncates the prefix to 63 characters; trim trailing whitespace - // from the truncated value, as a trailing space makes the file creation fail on Windows - // If tempnam failed or no scheme return the filename otherwise prepend the scheme - if ($tmpFile = self::box('tempnam', $hierarchy, rtrim(substr($prefix, 0, 63)))) { - if (null !== $scheme && 'gs' !== $scheme) { - return $scheme.'://'.$tmpFile; - } - - return $tmpFile; - } - - throw new IOException('A temporary file could not be created: '.self::$lastError); - } - - // Loop until we create a valid temp file or have reached 10 attempts - for ($i = 0; $i < 10; ++$i) { - // Create a unique filename - $tmpFile = $dir.'/'.$prefix.bin2hex(random_bytes(4)).$suffix; - - // Use fopen instead of file_exists as some streams do not support stat - // Use mode 'x+' to atomically check existence and create to avoid a TOCTOU vulnerability - if (!$handle = self::box('fopen', $tmpFile, 'x+')) { - continue; - } - - // Close the file if it was successfully opened - self::box('fclose', $handle); - - return $tmpFile; - } - - throw new IOException('A temporary file could not be created: '.self::$lastError); - } - - /** - * Atomically dumps content into a file. - * - * @param string|resource $content The data to write into the file - * - * @throws IOException if the file cannot be written to - */ - public function dumpFile(string $filename, $content): void - { - if (\is_array($content)) { - throw new \TypeError(\sprintf('Argument 2 passed to "%s()" must be string or resource, array given.', __METHOD__)); - } - - $dir = \dirname($filename); - - if (is_link($filename) && $linkTarget = $this->readlink($filename)) { - $this->dumpFile(Path::makeAbsolute($linkTarget, $dir), $content); - - return; - } - - if (!is_dir($dir)) { - $this->mkdir($dir); - } - - // Will create a temp file with 0600 access rights - // when the filesystem supports chmod. - $tmpFile = $this->tempnam($dir, basename($filename)); - - try { - if (false === self::box('file_put_contents', $tmpFile, $content)) { - throw new IOException(\sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); - } - - self::box('chmod', $tmpFile, self::box('fileperms', $filename) ?: 0o666 & ~umask()); - - $this->rename($tmpFile, $filename, true); - } finally { - if (file_exists($tmpFile)) { - if ('\\' === \DIRECTORY_SEPARATOR && !is_writable($tmpFile)) { - self::box('chmod', $tmpFile, self::box('fileperms', $tmpFile) | 0o200); - } - - self::box('unlink', $tmpFile); - } - } - } - - /** - * Appends content to an existing file. - * - * @param string|resource $content The content to append - * @param bool $lock Whether the file should be locked when writing to it - * - * @throws IOException If the file is not writable - */ - public function appendToFile(string $filename, $content, bool $lock = false): void - { - if (\is_array($content)) { - throw new \TypeError(\sprintf('Argument 2 passed to "%s()" must be string or resource, array given.', __METHOD__)); - } - - $dir = \dirname($filename); - - if (!is_dir($dir)) { - $this->mkdir($dir); - } - - if (false === self::box('file_put_contents', $filename, $content, \FILE_APPEND | ($lock ? \LOCK_EX : 0))) { - throw new IOException(\sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); - } - } - - /** - * Returns the content of a file as a string. - * - * @throws IOException If the file cannot be read - */ - public function readFile(string $filename): string - { - if (is_dir($filename)) { - throw new IOException(\sprintf('Failed to read file "%s": File is a directory.', $filename)); - } - - $content = self::box('file_get_contents', $filename); - if (false === $content) { - throw new IOException(\sprintf('Failed to read file "%s": ', $filename).self::$lastError, 0, null, $filename); - } - - return $content; - } - - private function toIterable(string|iterable $files): iterable - { - return is_iterable($files) ? $files : [$files]; - } - - /** - * Gets a 2-tuple of scheme (may be null) and hierarchical part of a filename (e.g. file:///tmp -> [file, tmp]). - */ - private function getSchemeAndHierarchy(string $filename): array - { - $components = explode('://', $filename, 2); - - return 2 === \count($components) ? [$components[0], $components[1]] : [null, $components[0]]; - } - - private static function assertFunctionExists(string $func): void - { - if (!\function_exists($func)) { - throw new IOException(\sprintf('Unable to perform filesystem operation because the "%s()" function has been disabled.', $func)); - } - } - - private static function box(string $func, mixed ...$args): mixed - { - self::assertFunctionExists($func); - - self::$lastError = null; - set_error_handler(self::handleError(...)); - try { - return $func(...$args); - } finally { - restore_error_handler(); - } - } - - /** - * @internal - */ - public static function handleError(int $type, string $msg): void - { - self::$lastError = $msg; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/LICENSE deleted file mode 100644 index 0138f8f07..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-present Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Path.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Path.php deleted file mode 100644 index 1015b7176..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/Path.php +++ /dev/null @@ -1,828 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem; - -use Symfony\Component\Filesystem\Exception\InvalidArgumentException; -use Symfony\Component\Filesystem\Exception\RuntimeException; - -/** - * Contains utility methods for handling path strings. - * - * The methods in this class are able to deal with both UNIX and Windows paths. - * On Windows, backward slashes are normalized to forward slashes. On UNIX, - * backward slashes are treated as valid filename characters and are not replaced. - * All methods return normalized parts with no excess "." and ".." segments. - * - * @author Bernhard Schussek - * @author Thomas Schulz - * @author Théo Fidry - */ -final class Path -{ - /** - * The number of buffer entries that triggers a cleanup operation. - */ - private const CLEANUP_THRESHOLD = 1250; - - /** - * The buffer size after the cleanup operation. - */ - private const CLEANUP_SIZE = 1000; - - /** - * Buffers input/output of {@link canonicalize()}. - * - * @var array - */ - private static array $buffer = []; - - private static int $bufferSize = 0; - - /** - * Canonicalizes the given path. - * - * During normalization, all "." and ".." segments are removed as far as - * possible. ".." segments at the beginning of relative paths are not removed. - * On Windows, backward slashes are replaced by forward slashes ("/"). - * - * ```php - * echo Path::canonicalize("../css/./style.css"); - * // => ../css/style.css - * ``` - * - * This method is able to deal with both UNIX and Windows paths. - */ - public static function canonicalize(string $path): string - { - if ('' === $path) { - return ''; - } - - // This method is called by many other methods in this class. Buffer - // the canonicalized paths to make up for the severe performance - // decrease. - if (isset(self::$buffer[$path])) { - return self::$buffer[$path]; - } - - // Replace "~" with user's home directory. - if ('~' === $path[0]) { - $path = self::getHomeDirectory().substr($path, 1); - } - - $path = self::normalize($path); - - [$root, $pathWithoutRoot] = self::split($path); - - $canonicalParts = self::findCanonicalParts($root, $pathWithoutRoot); - - // Add the root directory again - self::$buffer[$path] = $canonicalPath = $root.implode('/', $canonicalParts); - ++self::$bufferSize; - - // Clean up regularly to prevent memory leaks - if (self::$bufferSize > self::CLEANUP_THRESHOLD) { - self::$buffer = \array_slice(self::$buffer, -self::CLEANUP_SIZE, null, true); - self::$bufferSize = self::CLEANUP_SIZE; - } - - return $canonicalPath; - } - - /** - * Normalizes the given path. - * - * On Windows, backward slashes are replaced by forward slashes ("/"). - * On UNIX, backward slashes are preserved as they are valid filename characters. - * Contrary to {@link canonicalize()}, this method does not remove invalid - * or dot path segments. Consequently, it is much more efficient and should - * be used whenever the given path is known to be a valid, absolute system - * path. - */ - public static function normalize(string $path): string - { - return '\\' === \DIRECTORY_SEPARATOR ? str_replace('\\', '/', $path) : $path; - } - - /** - * Returns the directory part of the path. - * - * This method is similar to PHP's dirname(), but handles various cases - * where dirname() returns a weird result: - * - * - dirname() does not accept backslashes on UNIX - * - dirname("C:/symfony") returns "C:", not "C:/" - * - dirname("C:/") returns ".", not "C:/" - * - dirname("C:") returns ".", not "C:/" - * - dirname("symfony") returns ".", not "" - * - dirname() does not canonicalize the result - * - * This method fixes these shortcomings and behaves like dirname() - * otherwise. - * - * The result is a canonical path. - * - * @return string The canonical directory part. Returns the root directory - * if the root directory is passed. Returns an empty string - * if a relative path is passed that contains no slashes. - * Returns an empty string if an empty string is passed. - */ - public static function getDirectory(string $path): string - { - if ('' === $path) { - return ''; - } - - $path = self::canonicalize($path); - - // Maintain scheme - if (false !== $schemeSeparatorPosition = strpos($path, '://')) { - $scheme = substr($path, 0, $schemeSeparatorPosition + 3); - $path = substr($path, $schemeSeparatorPosition + 3); - } else { - $scheme = ''; - } - - if (false === $dirSeparatorPosition = strrpos($path, '/')) { - return ''; - } - - // Directory equals root directory "/" - if (0 === $dirSeparatorPosition) { - return $scheme.'/'; - } - - // Directory equals Windows root "C:/" - if (2 === $dirSeparatorPosition && ctype_alpha($path[0]) && ':' === $path[1]) { - return $scheme.substr($path, 0, 3); - } - - return $scheme.substr($path, 0, $dirSeparatorPosition); - } - - /** - * Returns canonical path of the user's home directory. - * - * Supported operating systems: - * - * - UNIX - * - Windows8 and upper - * - * If your operating system or environment isn't supported, an exception is thrown. - * - * The result is a canonical path. - * - * @throws RuntimeException If your operating system or environment isn't supported - */ - public static function getHomeDirectory(): string - { - // For UNIX support - if (getenv('HOME')) { - return self::canonicalize(getenv('HOME')); - } - - // For >= Windows8 support - if (getenv('HOMEDRIVE') && getenv('HOMEPATH')) { - return self::canonicalize(getenv('HOMEDRIVE').getenv('HOMEPATH')); - } - - throw new RuntimeException("Cannot find the home directory path: Your environment or operating system isn't supported."); - } - - /** - * Returns the root directory of a path. - * - * The result is a canonical path. - * - * @return string The canonical root directory. Returns an empty string if - * the given path is relative or empty. - */ - public static function getRoot(string $path): string - { - if ('' === $path) { - return ''; - } - - // Maintain scheme - if (false !== $schemeSeparatorPosition = strpos($path, '://')) { - $scheme = substr($path, 0, $schemeSeparatorPosition + 3); - $path = substr($path, $schemeSeparatorPosition + 3); - } else { - $scheme = ''; - } - - $firstCharacter = $path[0]; - - if ('/' === $firstCharacter) { - return $scheme.'/'; - } - - if ('\\' !== \DIRECTORY_SEPARATOR) { - return ''; - } - - if ('\\' === $firstCharacter) { - return $scheme.'/'; - } - - $length = \strlen($path); - - // Windows root - if ($length > 1 && ':' === $path[1] && ctype_alpha($firstCharacter)) { - // Special case: "C:" - if (2 === $length) { - return $scheme.$path.'/'; - } - - // Normal case: "C:/" or "C:\" - if ('/' === $path[2] || '\\' === $path[2]) { - return $scheme.$firstCharacter.$path[1].'/'; - } - } - - return ''; - } - - /** - * Returns the file name without the extension from a file path. - * - * @param string|null $extension if specified, only that extension is cut - * off (may contain leading dot) - */ - public static function getFilenameWithoutExtension(string $path, ?string $extension = null): string - { - if ('' === $path) { - return ''; - } - - if (null !== $extension) { - // remove extension and trailing dot - return rtrim(basename($path, $extension), '.'); - } - - return pathinfo($path, \PATHINFO_FILENAME); - } - - /** - * Returns the extension from a file path (without leading dot). - * - * @param bool $forceLowerCase forces the extension to be lower-case - */ - public static function getExtension(string $path, bool $forceLowerCase = false): string - { - if ('' === $path) { - return ''; - } - - $extension = pathinfo($path, \PATHINFO_EXTENSION); - - if ($forceLowerCase) { - $extension = self::toLower($extension); - } - - return $extension; - } - - /** - * Returns whether the path has an (or the specified) extension. - * - * @param string $path the path string - * @param string|string[]|null $extensions if null or not provided, checks if - * an extension exists, otherwise - * checks for the specified extension - * or array of extensions (with or - * without leading dot) - * @param bool $ignoreCase whether to ignore case-sensitivity - */ - public static function hasExtension(string $path, $extensions = null, bool $ignoreCase = false): bool - { - if ('' === $path) { - return false; - } - - $actualExtension = self::getExtension($path, $ignoreCase); - - // Only check if path has any extension - if ([] === $extensions || null === $extensions) { - return '' !== $actualExtension; - } - - if (\is_string($extensions)) { - $extensions = [$extensions]; - } - - foreach ($extensions as $key => $extension) { - if ($ignoreCase) { - $extension = self::toLower($extension); - } - - // remove leading '.' in extensions array - $extensions[$key] = ltrim($extension, '.'); - } - - return \in_array($actualExtension, $extensions, true); - } - - /** - * Changes the extension of a path string. - * - * @param string $path The path string with filename.ext to change. - * @param string $extension new extension (with or without leading dot) - * - * @return string the path string with new file extension - */ - public static function changeExtension(string $path, string $extension): string - { - if ('' === $path) { - return ''; - } - - $actualExtension = self::getExtension($path); - $extension = ltrim($extension, '.'); - - // No extension for paths - if (str_ends_with($path, '/')) { - return $path; - } - - // No actual extension in path - if (!$actualExtension) { - return $path.(str_ends_with($path, '.') ? '' : '.').$extension; - } - - return substr($path, 0, -\strlen($actualExtension)).$extension; - } - - /** - * Returns whether the given path is absolute. - */ - public static function isAbsolute(string $path): bool - { - if ('' === $path) { - return false; - } - - // URLs and stream wrappers are considered absolute - if (str_contains($path, '://') && null !== parse_url($path, \PHP_URL_SCHEME)) { - return true; - } - - if ('/' === $path[0]) { - return true; - } - - if ('\\' !== \DIRECTORY_SEPARATOR) { - return false; - } - - if ('\\' === $path[0]) { - return true; - } - - // Windows root - if (\strlen($path) > 1 && ctype_alpha($path[0]) && ':' === $path[1]) { - // Special case: "C:" - if (2 === \strlen($path)) { - return true; - } - - // Normal case: "C:/" or "C:\" - if ('/' === $path[2] || '\\' === $path[2]) { - return true; - } - } - - return false; - } - - public static function isRelative(string $path): bool - { - return !self::isAbsolute($path); - } - - /** - * Turns a relative path into an absolute path in canonical form. - * - * Usually, the relative path is appended to the given base path. Dot - * segments ("." and "..") are removed/collapsed and all slashes turned - * into forward slashes. - * - * ```php - * echo Path::makeAbsolute("../style.css", "/symfony/puli/css"); - * // => /symfony/puli/style.css - * ``` - * - * If an absolute path is passed, that path is returned unless its root - * directory is different than the one of the base path. In that case, an - * exception is thrown. - * - * ```php - * Path::makeAbsolute("/style.css", "/symfony/puli/css"); - * // => /style.css - * - * Path::makeAbsolute("C:/style.css", "C:/symfony/puli/css"); - * // => C:/style.css - * - * Path::makeAbsolute("C:/style.css", "/symfony/puli/css"); - * // InvalidArgumentException - * ``` - * - * If the base path is not an absolute path, an exception is thrown. - * - * The result is a canonical path. - * - * @param string $basePath an absolute base path - * - * @throws InvalidArgumentException if the base path is not absolute or if - * the given path is an absolute path with - * a different root than the base path - */ - public static function makeAbsolute(string $path, string $basePath): string - { - if ('' === $basePath) { - throw new InvalidArgumentException(\sprintf('The base path must be a non-empty string. Got: "%s".', $basePath)); - } - - if (!self::isAbsolute($basePath)) { - throw new InvalidArgumentException(\sprintf('The base path "%s" is not an absolute path.', $basePath)); - } - - if (self::isAbsolute($path)) { - return self::canonicalize($path); - } - - if (false !== $schemeSeparatorPosition = strpos($basePath, '://')) { - $scheme = substr($basePath, 0, $schemeSeparatorPosition + 3); - $basePath = substr($basePath, $schemeSeparatorPosition + 3); - } else { - $scheme = ''; - } - - return $scheme.self::canonicalize(rtrim($basePath, '/'.\DIRECTORY_SEPARATOR).'/'.$path); - } - - /** - * Turns a path into a relative path. - * - * The relative path is created relative to the given base path: - * - * ```php - * echo Path::makeRelative("/symfony/style.css", "/symfony/puli"); - * // => ../style.css - * ``` - * - * If a relative path is passed and the base path is absolute, the relative - * path is returned unchanged: - * - * ```php - * Path::makeRelative("style.css", "/symfony/puli/css"); - * // => style.css - * ``` - * - * If both paths are relative, the relative path is created with the - * assumption that both paths are relative to the same directory: - * - * ```php - * Path::makeRelative("style.css", "symfony/puli/css"); - * // => ../../../style.css - * ``` - * - * If both paths are absolute, their root directory must be the same, - * otherwise an exception is thrown: - * - * ```php - * Path::makeRelative("C:/symfony/style.css", "/symfony/puli"); - * // InvalidArgumentException - * ``` - * - * If the passed path is absolute, but the base path is not, an exception - * is thrown as well: - * - * ```php - * Path::makeRelative("/symfony/style.css", "symfony/puli"); - * // InvalidArgumentException - * ``` - * - * If the base path is not an absolute path, an exception is thrown. - * - * The result is a canonical path. - * - * @throws InvalidArgumentException if the base path is not absolute or if - * the given path has a different root - * than the base path - */ - public static function makeRelative(string $path, string $basePath): string - { - $path = self::canonicalize($path); - $basePath = self::canonicalize($basePath); - - [$root, $relativePath] = self::split($path); - [$baseRoot, $relativeBasePath] = self::split($basePath); - - // If the base path is given as absolute path and the path is already - // relative, consider it to be relative to the given absolute path - // already - if ('' === $root && '' !== $baseRoot) { - // If base path is already in its root - if ('' === $relativeBasePath) { - $relativePath = ltrim($relativePath, './'.\DIRECTORY_SEPARATOR); - } - - return $relativePath; - } - - // If the passed path is absolute, but the base path is not, we - // cannot generate a relative path - if ('' !== $root && '' === $baseRoot) { - throw new InvalidArgumentException(\sprintf('The absolute path "%s" cannot be made relative to the relative path "%s". You should provide an absolute base path instead.', $path, $basePath)); - } - - // Fail if the roots of the two paths are different - if ($baseRoot && $root !== $baseRoot) { - throw new InvalidArgumentException(\sprintf('The path "%s" cannot be made relative to "%s", because they have different roots ("%s" and "%s").', $path, $basePath, $root, $baseRoot)); - } - - if ('' === $relativeBasePath) { - return $relativePath; - } - - // Build a "../../" prefix with as many "../" parts as necessary - $parts = explode('/', $relativePath); - $baseParts = explode('/', $relativeBasePath); - $dotDotPrefix = ''; - - // Once we found a non-matching part in the prefix, we need to add - // "../" parts for all remaining parts - $match = true; - - foreach ($baseParts as $index => $basePart) { - if ($match && isset($parts[$index]) && $basePart === $parts[$index]) { - unset($parts[$index]); - - continue; - } - - $match = false; - $dotDotPrefix .= '../'; - } - - return rtrim($dotDotPrefix.implode('/', $parts), '/'); - } - - /** - * Returns whether the given path is on the local filesystem. - */ - public static function isLocal(string $path): bool - { - return '' !== $path && !str_contains($path, '://'); - } - - /** - * Returns the longest common base path in canonical form of a set of paths or - * `null` if the paths are on different Windows partitions. - * - * Dot segments ("." and "..") are removed/collapsed and all slashes turned - * into forward slashes. - * - * ```php - * $basePath = Path::getLongestCommonBasePath( - * '/symfony/css/style.css', - * '/symfony/css/..' - * ); - * // => /symfony - * ``` - * - * The root is returned if no common base path can be found: - * - * ```php - * $basePath = Path::getLongestCommonBasePath( - * '/symfony/css/style.css', - * '/puli/css/..' - * ); - * // => / - * ``` - * - * If the paths are located on different Windows partitions, `null` is - * returned. - * - * ```php - * $basePath = Path::getLongestCommonBasePath( - * 'C:/symfony/css/style.css', - * 'D:/symfony/css/..' - * ); - * // => null - * ``` - */ - public static function getLongestCommonBasePath(string ...$paths): ?string - { - [$bpRoot, $basePath] = self::split(self::canonicalize(reset($paths))); - - for (next($paths); null !== key($paths) && '' !== $basePath; next($paths)) { - [$root, $path] = self::split(self::canonicalize(current($paths))); - - // If we deal with different roots (e.g. C:/ vs. D:/), it's time - // to quit - if ($root !== $bpRoot) { - return null; - } - - // Make the base path shorter until it fits into path - while (true) { - if ('.' === $basePath) { - // No more base paths - $basePath = ''; - - // next path - continue 2; - } - - // Prevent false positives for common prefixes - // see isBasePath() - if (str_starts_with($path.'/', $basePath.'/')) { - // next path - continue 2; - } - - $basePath = \dirname($basePath); - } - } - - return $bpRoot.$basePath; - } - - /** - * Joins two or more path strings into a canonical path. - */ - public static function join(string ...$paths): string - { - $finalPath = null; - $wasScheme = false; - - foreach ($paths as $path) { - if ('' === $path) { - continue; - } - - if (null === $finalPath) { - // For first part we keep slashes, like '/top', 'C:\' or 'phar://' - $finalPath = $path; - $wasScheme = str_contains($path, '://'); - continue; - } - - // Only add slash if previous part didn't end with '/' or '\' (Windows) - if ('/' !== substr($finalPath, -1) && \DIRECTORY_SEPARATOR !== substr($finalPath, -1)) { - $finalPath .= '/'; - } - - // If first part included a scheme like 'phar://' we allow \current part to start with '/', otherwise trim - $finalPath .= $wasScheme ? $path : ltrim($path, '/'); - $wasScheme = false; - } - - if (null === $finalPath) { - return ''; - } - - return self::canonicalize($finalPath); - } - - /** - * Returns whether a path is a base path of another path. - * - * Dot segments ("." and "..") are removed/collapsed and all slashes turned - * into forward slashes. - * - * ```php - * Path::isBasePath('/symfony', '/symfony/css'); - * // => true - * - * Path::isBasePath('/symfony', '/symfony'); - * // => true - * - * Path::isBasePath('/symfony', '/symfony/..'); - * // => false - * - * Path::isBasePath('/symfony', '/puli'); - * // => false - * ``` - */ - public static function isBasePath(string $basePath, string $ofPath): bool - { - $basePath = self::canonicalize($basePath); - $ofPath = self::canonicalize($ofPath); - - // Append slashes to prevent false positives when two paths have - // a common prefix, for example /base/foo and /base/foobar. - // Don't append a slash for the root "/", because then that root - // won't be discovered as common prefix ("//" is not a prefix of - // "/foobar/"). - return str_starts_with($ofPath.'/', rtrim($basePath, '/').'/'); - } - - /** - * @return string[] - */ - private static function findCanonicalParts(string $root, string $pathWithoutRoot): array - { - $parts = explode('/', $pathWithoutRoot); - - $canonicalParts = []; - - // Collapse "." and "..", if possible - foreach ($parts as $part) { - if ('.' === $part || '' === $part) { - continue; - } - - // Collapse ".." with the previous part, if one exists - // Don't collapse ".." if the previous part is also ".." - if ('..' === $part && \count($canonicalParts) > 0 && '..' !== $canonicalParts[\count($canonicalParts) - 1]) { - array_pop($canonicalParts); - - continue; - } - - // Only add ".." prefixes for relative paths - if ('..' !== $part || '' === $root) { - $canonicalParts[] = $part; - } - } - - return $canonicalParts; - } - - /** - * Splits a canonical path into its root directory and the remainder. - * - * If the path has no root directory, an empty root directory will be - * returned. - * - * If the root directory is a Windows style partition, the resulting root - * will always contain a trailing slash. - * - * list ($root, $path) = Path::split("C:/symfony") - * // => ["C:/", "symfony"] - * - * list ($root, $path) = Path::split("C:") - * // => ["C:/", ""] - * - * @return array{string, string} an array with the root directory and the remaining relative path - */ - private static function split(string $path): array - { - if ('' === $path) { - return ['', '']; - } - - // Remember scheme as part of the root, if any - if (false !== $schemeSeparatorPosition = strpos($path, '://')) { - $root = substr($path, 0, $schemeSeparatorPosition + 3); - $path = substr($path, $schemeSeparatorPosition + 3); - } else { - $root = ''; - } - - $length = \strlen($path); - - // Remove and remember root directory - if (str_starts_with($path, '/')) { - $root .= '/'; - $path = $length > 1 ? substr($path, 1) : ''; - } elseif ('\\' === \DIRECTORY_SEPARATOR && $length > 1 && ctype_alpha($path[0]) && ':' === $path[1]) { - if (2 === $length) { - // Windows special case: "C:" - $root .= $path.'/'; - $path = ''; - } elseif ('/' === $path[2]) { - // Windows normal case: "C:/".. - $root .= substr($path, 0, 3); - $path = $length > 3 ? substr($path, 3) : ''; - } - } - - return [$root, $path]; - } - - private static function toLower(string $string): string - { - if (false !== $encoding = mb_detect_encoding($string, null, true)) { - return mb_strtolower($string, $encoding); - } - - return strtolower($string); - } - - private function __construct() - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/README.md deleted file mode 100644 index f2f6d45f7..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Filesystem Component -==================== - -The Filesystem component provides basic utilities for the filesystem. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/filesystem.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/composer.json deleted file mode 100644 index 42bbfa08a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/filesystem/composer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "symfony/filesystem", - "type": "library", - "description": "Provides basic utilities for the filesystem", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Filesystem\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/Ctype.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/Ctype.php deleted file mode 100644 index e26cc0221..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/Ctype.php +++ /dev/null @@ -1,232 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Ctype; - -/** - * Ctype implementation through regex. - * - * @internal - * - * @author Gert de Pagter - */ -final class Ctype -{ - /** - * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. - * - * @see https://php.net/ctype-alnum - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_alnum($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); - } - - /** - * Returns TRUE if every character in text is a letter, FALSE otherwise. - * - * @see https://php.net/ctype-alpha - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_alpha($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); - } - - /** - * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. - * - * @see https://php.net/ctype-cntrl - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_cntrl($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); - } - - /** - * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. - * - * @see https://php.net/ctype-digit - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_digit($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); - } - - /** - * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. - * - * @see https://php.net/ctype-graph - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_graph($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); - } - - /** - * Returns TRUE if every character in text is a lowercase letter. - * - * @see https://php.net/ctype-lower - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_lower($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); - } - - /** - * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. - * - * @see https://php.net/ctype-print - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_print($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); - } - - /** - * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. - * - * @see https://php.net/ctype-punct - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_punct($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); - } - - /** - * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. - * - * @see https://php.net/ctype-space - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_space($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); - } - - /** - * Returns TRUE if every character in text is an uppercase letter. - * - * @see https://php.net/ctype-upper - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_upper($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); - } - - /** - * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. - * - * @see https://php.net/ctype-xdigit - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_xdigit($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); - } - - /** - * Converts integers to their char versions according to normal ctype behaviour, if needed. - * - * If an integer between -128 and 255 inclusive is provided, - * it is interpreted as the ASCII value of a single character - * (negative values have 256 added in order to allow characters in the Extended ASCII range). - * Any other integer is interpreted as a string containing the decimal digits of the integer. - * - * @param mixed $int - * @param string $function - * - * @return mixed - */ - private static function convert_int_to_char_for_ctype($int, $function) - { - if (\PHP_VERSION_ID >= 80100 && !\is_string($int)) { - @trigger_error($function.'(): Argument of type '.get_debug_type($int).' will be interpreted as string in the future', \E_USER_DEPRECATED); - } - - if (!\is_int($int)) { - return $int; - } - - if ($int < -128 || $int > 255) { - return (string) $int; - } - - if ($int < 0) { - $int += 256; - } - - return \chr($int); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/LICENSE deleted file mode 100644 index 7536caeae..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-present Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/README.md deleted file mode 100644 index b144d03c3..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Symfony Polyfill / Ctype -======================== - -This component provides `ctype_*` functions to users who run php versions without the ctype extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/bootstrap.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/bootstrap.php deleted file mode 100644 index d54524b31..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/bootstrap.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Ctype as p; - -if (\PHP_VERSION_ID >= 80000) { - return require __DIR__.'/bootstrap80.php'; -} - -if (!function_exists('ctype_alnum')) { - function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } -} -if (!function_exists('ctype_alpha')) { - function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } -} -if (!function_exists('ctype_cntrl')) { - function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } -} -if (!function_exists('ctype_digit')) { - function ctype_digit($text) { return p\Ctype::ctype_digit($text); } -} -if (!function_exists('ctype_graph')) { - function ctype_graph($text) { return p\Ctype::ctype_graph($text); } -} -if (!function_exists('ctype_lower')) { - function ctype_lower($text) { return p\Ctype::ctype_lower($text); } -} -if (!function_exists('ctype_print')) { - function ctype_print($text) { return p\Ctype::ctype_print($text); } -} -if (!function_exists('ctype_punct')) { - function ctype_punct($text) { return p\Ctype::ctype_punct($text); } -} -if (!function_exists('ctype_space')) { - function ctype_space($text) { return p\Ctype::ctype_space($text); } -} -if (!function_exists('ctype_upper')) { - function ctype_upper($text) { return p\Ctype::ctype_upper($text); } -} -if (!function_exists('ctype_xdigit')) { - function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/bootstrap80.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/bootstrap80.php deleted file mode 100644 index ab2f8611d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/bootstrap80.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Ctype as p; - -if (!function_exists('ctype_alnum')) { - function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } -} -if (!function_exists('ctype_alpha')) { - function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } -} -if (!function_exists('ctype_cntrl')) { - function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } -} -if (!function_exists('ctype_digit')) { - function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } -} -if (!function_exists('ctype_graph')) { - function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } -} -if (!function_exists('ctype_lower')) { - function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } -} -if (!function_exists('ctype_print')) { - function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } -} -if (!function_exists('ctype_punct')) { - function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } -} -if (!function_exists('ctype_space')) { - function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } -} -if (!function_exists('ctype_upper')) { - function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } -} -if (!function_exists('ctype_xdigit')) { - function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/composer.json deleted file mode 100644 index 131ca7adb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-ctype/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "symfony/polyfill-ctype", - "type": "library", - "description": "Symfony polyfill for ctype functions", - "keywords": ["polyfill", "compatibility", "portable", "ctype"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/LICENSE deleted file mode 100644 index 6e3afce69..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-present Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Mbstring.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Mbstring.php deleted file mode 100644 index e3d1f965f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Mbstring.php +++ /dev/null @@ -1,1138 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Mbstring; - -/** - * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. - * - * Implemented: - * - mb_chr - Returns a specific character from its Unicode code point - * - mb_convert_encoding - Convert character encoding - * - mb_convert_variables - Convert character code in variable(s) - * - mb_decode_mimeheader - Decode string in MIME header field - * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED - * - mb_decode_numericentity - Decode HTML numeric string reference to character - * - mb_encode_numericentity - Encode character to HTML numeric string reference - * - mb_convert_case - Perform case folding on a string - * - mb_detect_encoding - Detect character encoding - * - mb_get_info - Get internal settings of mbstring - * - mb_http_input - Detect HTTP input character encoding - * - mb_http_output - Set/Get HTTP output character encoding - * - mb_internal_encoding - Set/Get internal character encoding - * - mb_list_encodings - Returns an array of all supported encodings - * - mb_ord - Returns the Unicode code point of a character - * - mb_output_handler - Callback function converts character encoding in output buffer - * - mb_scrub - Replaces ill-formed byte sequences with substitute characters - * - mb_strlen - Get string length - * - mb_strpos - Find position of first occurrence of string in a string - * - mb_strrpos - Find position of last occurrence of a string in a string - * - mb_str_split - Convert a string to an array - * - mb_strtolower - Make a string lowercase - * - mb_strtoupper - Make a string uppercase - * - mb_substitute_character - Set/Get substitution character - * - mb_substr - Get part of string - * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive - * - mb_stristr - Finds first occurrence of a string within another, case insensitive - * - mb_strrchr - Finds the last occurrence of a character in a string within another - * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive - * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive - * - mb_strstr - Finds first occurrence of a string within another - * - mb_strwidth - Return width of string - * - mb_substr_count - Count the number of substring occurrences - * - mb_ucfirst - Make a string's first character uppercase - * - mb_lcfirst - Make a string's first character lowercase - * - mb_trim - Strip whitespace (or other characters) from the beginning and end of a string - * - mb_ltrim - Strip whitespace (or other characters) from the beginning of a string - * - mb_rtrim - Strip whitespace (or other characters) from the end of a string - * - * Not implemented: - * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) - * - mb_ereg_* - Regular expression with multibyte support - * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable - * - mb_preferred_mime_name - Get MIME charset string - * - mb_regex_encoding - Returns current encoding for multibyte regex as string - * - mb_regex_set_options - Set/Get the default options for mbregex functions - * - mb_send_mail - Send encoded mail - * - mb_split - Split multibyte string using regular expression - * - mb_strcut - Get part of string - * - mb_strimwidth - Get truncated string with specified width - * - * @author Nicolas Grekas - * - * @internal - */ -final class Mbstring -{ - public const MB_CASE_FOLD = \PHP_INT_MAX; - - private const SIMPLE_CASE_FOLD = [ - ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], - ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], - ]; - - private static $encodingList = ['ASCII', 'UTF-8']; - private static $language = 'neutral'; - private static $internalEncoding = 'UTF-8'; - private static $iconvSupportsIgnore; - - public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) - { - if (\is_array($s)) { - $r = []; - foreach ($s as $str) { - $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding); - } - - return $r; - } - - if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) { - $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); - } else { - $fromEncoding = self::getEncoding($fromEncoding); - } - - $toEncoding = self::getEncoding($toEncoding); - - if ('BASE64' === $fromEncoding) { - $s = base64_decode($s); - $fromEncoding = $toEncoding; - } - - if ('BASE64' === $toEncoding) { - return base64_encode($s); - } - - if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { - if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { - $fromEncoding = 'Windows-1252'; - } - if ('UTF-8' !== $fromEncoding) { - $s = self::iconv($fromEncoding, 'UTF-8', $s); - } - - return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); - } - - if ('HTML-ENTITIES' === $fromEncoding) { - $decodeControlChars = static function ($m) { - $code = '' !== ($m[2] ?? '') ? hexdec($m[2]) : (int) $m[1]; - - if ($code < 32 || 127 === $code) { - return \chr($code); - } - if (128 <= $code && $code <= 159) { - return "\xC2".\chr(0x80 | ($code & 0x3F)); - } - - return $m[0]; - }; - - if (\PHP_VERSION_ID >= 70400) { - $s = html_entity_decode($s, \ENT_QUOTES, 'UTF-8'); - // html_entity_decode() leaves numeric entities for C0/C1 control - // characters as-is (HTML spec), but mb_convert_encoding() decodes - // them. Catch what html_entity_decode() missed. - if (false !== strpos($s, '&#')) { - $s = preg_replace_callback('/&#(?:0*([0-9]++)|[xX]0*([0-9a-fA-F]++));/', $decodeControlChars, $s); - } - } else { - // PHP < 7.4: html_entity_decode() truncates strings at NUL bytes, - // so decode the control character entities first then call - // html_entity_decode() on each NUL-delimited chunk independently. - $s = preg_replace_callback('/&#(?:0*([0-9]++)|[xX]0*([0-9a-fA-F]++));/', $decodeControlChars, $s); - $s = implode("\0", array_map(static function ($chunk) { - return html_entity_decode($chunk, \ENT_QUOTES, 'UTF-8'); - }, explode("\0", $s))); - } - $fromEncoding = 'UTF-8'; - } - - return self::iconv($fromEncoding, $toEncoding, $s); - } - - public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) - { - $ok = true; - array_walk_recursive($vars, static function (&$v) use (&$ok, $toEncoding, $fromEncoding) { - if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { - $ok = false; - } - }); - - return $ok ? $fromEncoding : false; - } - - public static function mb_decode_mimeheader($s) - { - return iconv_mime_decode($s, 2, self::$internalEncoding); - } - - public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) - { - trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING); - } - - public static function mb_decode_numericentity($s, $convmap, $encoding = null) - { - if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { - trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return null; - } - - if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { - return false; - } - - if (null !== $encoding && !\is_scalar($encoding)) { - trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return ''; // Instead of null (cf. mb_encode_numericentity). - } - - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @self::iconv('UTF-8', 'UTF-8', $s); - } - } else { - $s = self::iconv($encoding, 'UTF-8', $s); - } - - $cnt = floor(\count($convmap) / 4) * 4; - - for ($i = 0; $i < $cnt; $i += 4) { - // collector_decode_htmlnumericentity ignores $convmap[$i + 3] - $convmap[$i] += $convmap[$i + 2]; - $convmap[$i + 1] += $convmap[$i + 2]; - } - - $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))'.(\PHP_VERSION_ID >= 80200 ? '' : '(?!&)').';?/', static function (array $m) use ($cnt, $convmap) { - $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; - for ($i = 0; $i < $cnt; $i += 4) { - if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { - return self::mb_chr($c - $convmap[$i + 2]); - } - } - - return $m[0]; - }, $s); - - if (null === $encoding) { - return $s; - } - - return self::iconv('UTF-8', $encoding, $s); - } - - public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) - { - if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { - trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return null; - } - - if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { - return false; - } - - if (null !== $encoding && !\is_scalar($encoding)) { - trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return null; // Instead of '' (cf. mb_decode_numericentity). - } - - if (null !== $is_hex && !\is_scalar($is_hex)) { - trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); - - return null; - } - - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @self::iconv('UTF-8', 'UTF-8', $s); - } - } else { - $s = self::iconv($encoding, 'UTF-8', $s); - } - - static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; - - $cnt = floor(\count($convmap) / 4) * 4; - $i = 0; - $len = \strlen($s); - $result = ''; - - while ($i < $len) { - $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; - $uchr = substr($s, $i, $ulen); - $i += $ulen; - $c = self::mb_ord($uchr); - - for ($j = 0; $j < $cnt; $j += 4) { - if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { - $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; - $result .= $is_hex ? \sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; - continue 2; - } - } - $result .= $uchr; - } - - if (null === $encoding) { - return $result; - } - - return self::iconv('UTF-8', $encoding, $result); - } - - public static function mb_convert_case($s, $mode, $encoding = null) - { - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @self::iconv('UTF-8', 'UTF-8', $s); - } - } else { - $s = self::iconv($encoding, 'UTF-8', $s); - } - - if (\MB_CASE_TITLE == $mode) { - static $titleRegexp = null; - if (null === $titleRegexp) { - $titleRegexp = self::getData('titleCaseRegexp'); - } - $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s); - } else { - if (\MB_CASE_UPPER == $mode) { - static $upper = null; - if (null === $upper) { - $upper = self::getData('upperCase'); - } - $map = $upper; - } else { - if (self::MB_CASE_FOLD === $mode) { - static $caseFolding = null; - if (null === $caseFolding) { - $caseFolding = self::getData('caseFolding'); - } - $s = strtr($s, $caseFolding); - } - - static $lower = null; - if (null === $lower) { - $lower = self::getData('lowerCase'); - } - $map = $lower; - } - - static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; - - $i = 0; - $len = \strlen($s); - - while ($i < $len) { - $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; - $uchr = substr($s, $i, $ulen); - $i += $ulen; - - if (isset($map[$uchr])) { - $uchr = $map[$uchr]; - $nlen = \strlen($uchr); - - if ($nlen == $ulen) { - $nlen = $i; - do { - $s[--$nlen] = $uchr[--$ulen]; - } while ($ulen); - } else { - $s = substr_replace($s, $uchr, $i - $ulen, $ulen); - $len += $nlen - $ulen; - $i += $nlen - $ulen; - } - } - } - } - - if (null === $encoding) { - return $s; - } - - return self::iconv('UTF-8', $encoding, $s); - } - - public static function mb_internal_encoding($encoding = null) - { - if (null === $encoding) { - return self::$internalEncoding; - } - - $normalizedEncoding = self::getEncoding($encoding); - - if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) { - self::$internalEncoding = $normalizedEncoding; - - return true; - } - - if (80000 > \PHP_VERSION_ID) { - return false; - } - - throw new \ValueError(\sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding)); - } - - public static function mb_language($lang = null) - { - if (null === $lang) { - return self::$language; - } - - switch ($normalizedLang = strtolower($lang)) { - case 'uni': - case 'neutral': - self::$language = $normalizedLang; - - return true; - } - - if (80000 > \PHP_VERSION_ID) { - return false; - } - - throw new \ValueError(\sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang)); - } - - public static function mb_list_encodings() - { - return ['UTF-8']; - } - - public static function mb_encoding_aliases($encoding) - { - switch (strtoupper($encoding)) { - case 'UTF8': - case 'UTF-8': - return ['utf8']; - } - - return false; - } - - public static function mb_check_encoding($var = null, $encoding = null) - { - if (null === $encoding) { - if (null === $var) { - return false; - } - $encoding = self::$internalEncoding; - } - - if (!\is_array($var)) { - return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); - } - - foreach ($var as $key => $value) { - if (!self::mb_check_encoding($key, $encoding)) { - return false; - } - if (!self::mb_check_encoding($value, $encoding)) { - return false; - } - } - - return true; - } - - public static function mb_detect_encoding($str, $encodingList = null, $strict = false) - { - if (null === $encodingList) { - $encodingList = self::$encodingList; - } else { - if (!\is_array($encodingList)) { - $encodingList = array_map('trim', explode(',', $encodingList)); - } - $encodingList = array_map('strtoupper', $encodingList); - } - - foreach ($encodingList as $enc) { - switch ($enc) { - case 'ASCII': - if (!preg_match('/[\x80-\xFF]/', $str)) { - return $enc; - } - break; - - case 'UTF8': - case 'UTF-8': - if (preg_match('//u', $str)) { - return 'UTF-8'; - } - break; - - default: - if (0 === strncmp($enc, 'ISO-8859-', 9)) { - return $enc; - } - } - } - - return false; - } - - public static function mb_detect_order($encodingList = null) - { - if (null === $encodingList) { - return self::$encodingList; - } - - if (!\is_array($encodingList)) { - $encodingList = array_map('trim', explode(',', $encodingList)); - } - $encodingList = array_map('strtoupper', $encodingList); - - foreach ($encodingList as $enc) { - switch ($enc) { - default: - if (strncmp($enc, 'ISO-8859-', 9)) { - return false; - } - // no break - case 'ASCII': - case 'UTF8': - case 'UTF-8': - } - } - - self::$encodingList = $encodingList; - - return true; - } - - public static function mb_strlen($s, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return \strlen($s); - } - - if (false !== $len = @iconv_strlen($s, $encoding)) { - return $len; - } - - if ('UTF-8' !== $encoding) { - return $len; - } - - return preg_match_all('/[\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]?|[\xE0-\xEF][\x80-\xBF]{0,2}|[\xF0-\xF7][\x80-\xBF]{0,3}|[\xF8-\xFB][\x80-\xBF]{0,4}|[\xFC-\xFD][\x80-\xBF]{0,5}|[\x80-\xBF\xFE\xFF]/s', $s); - } - - public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return strpos($haystack, $needle, $offset); - } - - $needle = (string) $needle; - if ('' === $needle) { - if (80000 > \PHP_VERSION_ID) { - trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING); - - return false; - } - - return 0; - } - - return iconv_strpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return strrpos($haystack, $needle, $offset); - } - - if ($offset != (int) $offset) { - $offset = 0; - } elseif ($offset = (int) $offset) { - if ($offset < 0) { - if (0 > $offset += self::mb_strlen($needle)) { - $haystack = self::mb_substr($haystack, 0, $offset, $encoding); - } - $offset = 0; - } else { - $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); - } - } - - $pos = '' !== $needle || 80000 > \PHP_VERSION_ID - ? iconv_strrpos($haystack, $needle, $encoding) - : self::mb_strlen($haystack, $encoding); - - return false !== $pos ? $offset + $pos : false; - } - - public static function mb_str_split($string, $split_length = 1, $encoding = null) - { - if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { - trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); - - return null; - } - - if (1 > $split_length = (int) $split_length) { - if (80000 > \PHP_VERSION_ID) { - trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); - - return false; - } - - throw new \ValueError('Argument #2 ($length) must be greater than 0'); - } - - if (null === $encoding) { - $encoding = mb_internal_encoding(); - } - - if ('UTF-8' === $encoding = self::getEncoding($encoding)) { - $rx = '/('; - while (65535 < $split_length) { - $rx .= '.{65535}'; - $split_length -= 65535; - } - $rx .= '.{'.$split_length.'})/us'; - - return preg_split($rx, $string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); - } - - $result = []; - $length = mb_strlen($string, $encoding); - - for ($i = 0; $i < $length; $i += $split_length) { - $result[] = mb_substr($string, $i, $split_length, $encoding); - } - - return $result; - } - - public static function mb_strtolower($s, $encoding = null) - { - return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding); - } - - public static function mb_strtoupper($s, $encoding = null) - { - return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding); - } - - public static function mb_substitute_character($c = null) - { - if (null === $c) { - return 'none'; - } - if (0 === strcasecmp($c, 'none')) { - return true; - } - if (80000 > \PHP_VERSION_ID) { - return false; - } - if (\is_int($c) || 'long' === $c || 'entity' === $c) { - return false; - } - - throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint'); - } - - public static function mb_substr($s, $start, $length = null, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return (string) substr($s, $start, null === $length ? 2147483647 : $length); - } - - if ($start < 0) { - $start = iconv_strlen($s, $encoding) + $start; - if ($start < 0) { - $start = 0; - } - } - - if (null === $length) { - $length = 2147483647; - } elseif ($length < 0) { - $length = iconv_strlen($s, $encoding) + $length - $start; - if ($length < 0) { - return ''; - } - } - - return (string) iconv_substr($s, $start, $length, $encoding); - } - - public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) - { - [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [ - self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding), - self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding), - ]); - - return self::mb_strpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) - { - $pos = self::mb_stripos($haystack, $needle, 0, $encoding); - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - $pos = strrpos($haystack, $needle); - } else { - $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = iconv_strrpos($haystack, $needle, $encoding); - } - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) - { - $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = self::mb_strripos($haystack, $needle, $encoding); - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) - { - $haystack = self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding); - $needle = self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding); - - $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack); - $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle); - - return self::mb_strrpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) - { - $pos = strpos($haystack, $needle); - if (false === $pos) { - return false; - } - if ($part) { - return substr($haystack, 0, $pos); - } - - return substr($haystack, $pos); - } - - public static function mb_get_info($type = 'all') - { - $info = [ - 'internal_encoding' => self::$internalEncoding, - 'http_output' => 'pass', - 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', - 'func_overload' => 0, - 'func_overload_list' => 'no overload', - 'mail_charset' => 'UTF-8', - 'mail_header_encoding' => 'BASE64', - 'mail_body_encoding' => 'BASE64', - 'illegal_chars' => 0, - 'encoding_translation' => 'Off', - 'language' => self::$language, - 'detect_order' => self::$encodingList, - 'substitute_character' => 'none', - 'strict_detection' => 'Off', - ]; - - if ('all' === $type) { - return $info; - } - if (isset($info[$type])) { - return $info[$type]; - } - - return false; - } - - public static function mb_http_input($type = '') - { - return false; - } - - public static function mb_http_output($encoding = null) - { - return null !== $encoding ? 'pass' === $encoding : 'pass'; - } - - public static function mb_strwidth($s, $encoding = null) - { - $encoding = self::getEncoding($encoding); - - if ('UTF-8' !== $encoding) { - $s = self::iconv($encoding, 'UTF-8', $s); - } - - $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); - - return ($wide << 1) + iconv_strlen($s, 'UTF-8'); - } - - public static function mb_substr_count($haystack, $needle, $encoding = null) - { - return substr_count($haystack, $needle); - } - - public static function mb_output_handler($contents, $status) - { - return $contents; - } - - public static function mb_chr($code, $encoding = null) - { - if (0x80 > $code %= 0x200000) { - $s = \chr($code); - } elseif (0x800 > $code) { - $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); - } elseif (0x10000 > $code) { - $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } else { - $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } - - if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { - $s = mb_convert_encoding($s, $encoding, 'UTF-8'); - } - - return $s; - } - - public static function mb_ord($s, $encoding = null) - { - if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { - $s = mb_convert_encoding($s, 'UTF-8', $encoding); - } - - if (1 === \strlen($s)) { - return \ord($s); - } - - $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; - if (0xF0 <= $code) { - return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; - } - if (0xE0 <= $code) { - return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; - } - if (0xC0 <= $code) { - return (($code - 0xC0) << 6) + $s[2] - 0x80; - } - - return $code; - } - - /** @return string|false */ - public static function mb_scrub(?string $string, ?string $encoding = null): string - { - if (null === $encoding) { - $encoding = self::mb_internal_encoding(); - } elseif (!self::assertEncoding($encoding, 'mb_scrub(): Argument #2 ($encoding) must be a valid encoding, "%s" given')) { - return false; - } - - return self::mb_convert_encoding((string) $string, $encoding, $encoding); - } - - /** @return string|false */ - public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null) - { - if (null === $encoding) { - $encoding = self::mb_internal_encoding(); - } elseif (!self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given')) { - return false; - } - - if (self::mb_strlen($pad_string, $encoding) <= 0) { - if (\PHP_VERSION_ID < 80000) { - trigger_error('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', \E_USER_WARNING); - - return false; - } - - throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string'); - } - - if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) { - if (\PHP_VERSION_ID < 80000) { - trigger_error('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH', \E_USER_WARNING); - - return false; - } - - throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); - } - - $paddingRequired = $length - self::mb_strlen($string, $encoding); - - if ($paddingRequired < 1) { - return $string; - } - - switch ($pad_type) { - case \STR_PAD_LEFT: - return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string; - case \STR_PAD_RIGHT: - return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding); - default: - $leftPaddingLength = floor($paddingRequired / 2); - $rightPaddingLength = $paddingRequired - $leftPaddingLength; - - return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding); - } - } - - /** @return string|false */ - public static function mb_ucfirst(string $string, ?string $encoding = null) - { - if (null === $encoding) { - $encoding = self::mb_internal_encoding(); - } elseif (!self::assertEncoding($encoding, 'mb_ucfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given')) { - return false; - } - - $firstChar = mb_substr($string, 0, 1, $encoding); - $firstChar = mb_convert_case($firstChar, \MB_CASE_TITLE, $encoding); - - return $firstChar.mb_substr($string, 1, null, $encoding); - } - - /** @return string|false */ - public static function mb_lcfirst(string $string, ?string $encoding = null) - { - if (null === $encoding) { - $encoding = self::mb_internal_encoding(); - } elseif (!self::assertEncoding($encoding, 'mb_lcfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given')) { - return false; - } - - $firstChar = mb_substr($string, 0, 1, $encoding); - $firstChar = mb_convert_case($firstChar, \MB_CASE_LOWER, $encoding); - - return $firstChar.mb_substr($string, 1, null, $encoding); - } - - /** @return string|false */ - public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null) - { - return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__); - } - - /** @return string|false */ - public static function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null) - { - return self::mb_internal_trim('{^[%s]+}Du', $string, $characters, $encoding, __FUNCTION__); - } - - /** @return string|false */ - public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null) - { - return self::mb_internal_trim('{[%s]+$}Du', $string, $characters, $encoding, __FUNCTION__); - } - - private static function getSubpart($pos, $part, $haystack, $encoding) - { - if (false === $pos) { - return false; - } - if ($part) { - return self::mb_substr($haystack, 0, $pos, $encoding); - } - - return self::mb_substr($haystack, $pos, null, $encoding); - } - - private static function html_encoding_callback(array $m) - { - $i = 1; - $entities = ''; - $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8')); - - while (isset($m[$i])) { - if (0x80 > $m[$i]) { - $entities .= \chr($m[$i++]); - continue; - } - if (0xF0 <= $m[$i]) { - $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; - } elseif (0xE0 <= $m[$i]) { - $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; - } else { - $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; - } - - $entities .= '&#'.$c.';'; - } - - return $entities; - } - - private static function title_case(array $s) - { - return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8'); - } - - private static function getData($file) - { - if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { - return require $file; - } - - return false; - } - - private static function getEncoding($encoding) - { - if (null === $encoding) { - return self::$internalEncoding; - } - - if ('UTF-8' === $encoding) { - return 'UTF-8'; - } - - $encoding = strtoupper($encoding); - - if ('8BIT' === $encoding || 'BINARY' === $encoding) { - return 'CP850'; - } - - if ('UTF8' === $encoding) { - return 'UTF-8'; - } - - if ('UTF-32' === $encoding) { - return 'UTF-32BE'; - } - - if ('UTF-16' === $encoding) { - return 'UTF-16BE'; - } - - return $encoding; - } - - private static function iconv($fromEncoding, $toEncoding, $s) - { - if (null === self::$iconvSupportsIgnore) { - self::$iconvSupportsIgnore = false !== @iconv('UTF-8', 'UTF-8//IGNORE', ''); - } - - return self::$iconvSupportsIgnore - ? iconv($fromEncoding, $toEncoding.'//IGNORE', $s) - : iconv($fromEncoding, $toEncoding, $s); - } - - /** @return string|false */ - private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function) - { - if (null === $encoding) { - $encoding = self::mb_internal_encoding(); - } elseif (!self::assertEncoding($encoding, $function.'(): Argument #3 ($encoding) must be a valid encoding, "%s" given')) { - return false; - } - - if ('' === $characters) { - return null === $encoding ? $string : self::mb_convert_encoding($string, $encoding); - } - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $string)) { - $string = @self::iconv('UTF-8', 'UTF-8', $string); - } - if (null !== $characters && !preg_match('//u', $characters)) { - $characters = @self::iconv('UTF-8', 'UTF-8', $characters); - } - } else { - $string = self::iconv($encoding, 'UTF-8', $string); - - if (null !== $characters) { - $characters = self::iconv($encoding, 'UTF-8', $characters); - } - } - - if (null === $characters) { - $characters = "\\0 \f\n\r\t\v\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}"; - } else { - $characters = preg_quote($characters); - } - - $string = preg_replace(\sprintf($regex, $characters), '', $string); - - if (null === $encoding) { - return $string; - } - - return self::iconv('UTF-8', $encoding, $string); - } - - private static function assertEncoding(string $encoding, string $errorFormat): bool - { - try { - $validEncoding = @self::mb_check_encoding('', $encoding); - } catch (\ValueError $e) { - throw new \ValueError(\sprintf($errorFormat, $encoding)); - } - - if (!$validEncoding) { - if (80000 > \PHP_VERSION_ID) { - trigger_error(\sprintf($errorFormat, $encoding), \E_USER_WARNING); - } else { - throw new \ValueError(\sprintf($errorFormat, $encoding)); - } - } - - return $validEncoding; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/README.md deleted file mode 100644 index 478b40da2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Symfony Polyfill / Mbstring -=========================== - -This component provides a partial, native PHP implementation for the -[Mbstring](https://php.net/mbstring) extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php deleted file mode 100644 index 512bba0bf..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +++ /dev/null @@ -1,119 +0,0 @@ - 'i̇', - 'µ' => 'μ', - 'ſ' => 's', - 'ͅ' => 'ι', - 'ς' => 'σ', - 'ϐ' => 'β', - 'ϑ' => 'θ', - 'ϕ' => 'φ', - 'ϖ' => 'π', - 'ϰ' => 'κ', - 'ϱ' => 'ρ', - 'ϵ' => 'ε', - 'ẛ' => 'ṡ', - 'ι' => 'ι', - 'ß' => 'ss', - 'ʼn' => 'ʼn', - 'ǰ' => 'ǰ', - 'ΐ' => 'ΐ', - 'ΰ' => 'ΰ', - 'և' => 'եւ', - 'ẖ' => 'ẖ', - 'ẗ' => 'ẗ', - 'ẘ' => 'ẘ', - 'ẙ' => 'ẙ', - 'ẚ' => 'aʾ', - 'ẞ' => 'ss', - 'ὐ' => 'ὐ', - 'ὒ' => 'ὒ', - 'ὔ' => 'ὔ', - 'ὖ' => 'ὖ', - 'ᾀ' => 'ἀι', - 'ᾁ' => 'ἁι', - 'ᾂ' => 'ἂι', - 'ᾃ' => 'ἃι', - 'ᾄ' => 'ἄι', - 'ᾅ' => 'ἅι', - 'ᾆ' => 'ἆι', - 'ᾇ' => 'ἇι', - 'ᾈ' => 'ἀι', - 'ᾉ' => 'ἁι', - 'ᾊ' => 'ἂι', - 'ᾋ' => 'ἃι', - 'ᾌ' => 'ἄι', - 'ᾍ' => 'ἅι', - 'ᾎ' => 'ἆι', - 'ᾏ' => 'ἇι', - 'ᾐ' => 'ἠι', - 'ᾑ' => 'ἡι', - 'ᾒ' => 'ἢι', - 'ᾓ' => 'ἣι', - 'ᾔ' => 'ἤι', - 'ᾕ' => 'ἥι', - 'ᾖ' => 'ἦι', - 'ᾗ' => 'ἧι', - 'ᾘ' => 'ἠι', - 'ᾙ' => 'ἡι', - 'ᾚ' => 'ἢι', - 'ᾛ' => 'ἣι', - 'ᾜ' => 'ἤι', - 'ᾝ' => 'ἥι', - 'ᾞ' => 'ἦι', - 'ᾟ' => 'ἧι', - 'ᾠ' => 'ὠι', - 'ᾡ' => 'ὡι', - 'ᾢ' => 'ὢι', - 'ᾣ' => 'ὣι', - 'ᾤ' => 'ὤι', - 'ᾥ' => 'ὥι', - 'ᾦ' => 'ὦι', - 'ᾧ' => 'ὧι', - 'ᾨ' => 'ὠι', - 'ᾩ' => 'ὡι', - 'ᾪ' => 'ὢι', - 'ᾫ' => 'ὣι', - 'ᾬ' => 'ὤι', - 'ᾭ' => 'ὥι', - 'ᾮ' => 'ὦι', - 'ᾯ' => 'ὧι', - 'ᾲ' => 'ὰι', - 'ᾳ' => 'αι', - 'ᾴ' => 'άι', - 'ᾶ' => 'ᾶ', - 'ᾷ' => 'ᾶι', - 'ᾼ' => 'αι', - 'ῂ' => 'ὴι', - 'ῃ' => 'ηι', - 'ῄ' => 'ήι', - 'ῆ' => 'ῆ', - 'ῇ' => 'ῆι', - 'ῌ' => 'ηι', - 'ῒ' => 'ῒ', - 'ῖ' => 'ῖ', - 'ῗ' => 'ῗ', - 'ῢ' => 'ῢ', - 'ῤ' => 'ῤ', - 'ῦ' => 'ῦ', - 'ῧ' => 'ῧ', - 'ῲ' => 'ὼι', - 'ῳ' => 'ωι', - 'ῴ' => 'ώι', - 'ῶ' => 'ῶ', - 'ῷ' => 'ῶι', - 'ῼ' => 'ωι', - 'ff' => 'ff', - 'fi' => 'fi', - 'fl' => 'fl', - 'ffi' => 'ffi', - 'ffl' => 'ffl', - 'ſt' => 'st', - 'st' => 'st', - 'ﬓ' => 'մն', - 'ﬔ' => 'մե', - 'ﬕ' => 'մի', - 'ﬖ' => 'վն', - 'ﬗ' => 'մխ', -]; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php deleted file mode 100644 index fac60b081..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +++ /dev/null @@ -1,1397 +0,0 @@ - 'a', - 'B' => 'b', - 'C' => 'c', - 'D' => 'd', - 'E' => 'e', - 'F' => 'f', - 'G' => 'g', - 'H' => 'h', - 'I' => 'i', - 'J' => 'j', - 'K' => 'k', - 'L' => 'l', - 'M' => 'm', - 'N' => 'n', - 'O' => 'o', - 'P' => 'p', - 'Q' => 'q', - 'R' => 'r', - 'S' => 's', - 'T' => 't', - 'U' => 'u', - 'V' => 'v', - 'W' => 'w', - 'X' => 'x', - 'Y' => 'y', - 'Z' => 'z', - 'À' => 'à', - 'Á' => 'á', - 'Â' => 'â', - 'Ã' => 'ã', - 'Ä' => 'ä', - 'Å' => 'å', - 'Æ' => 'æ', - 'Ç' => 'ç', - 'È' => 'è', - 'É' => 'é', - 'Ê' => 'ê', - 'Ë' => 'ë', - 'Ì' => 'ì', - 'Í' => 'í', - 'Î' => 'î', - 'Ï' => 'ï', - 'Ð' => 'ð', - 'Ñ' => 'ñ', - 'Ò' => 'ò', - 'Ó' => 'ó', - 'Ô' => 'ô', - 'Õ' => 'õ', - 'Ö' => 'ö', - 'Ø' => 'ø', - 'Ù' => 'ù', - 'Ú' => 'ú', - 'Û' => 'û', - 'Ü' => 'ü', - 'Ý' => 'ý', - 'Þ' => 'þ', - 'Ā' => 'ā', - 'Ă' => 'ă', - 'Ą' => 'ą', - 'Ć' => 'ć', - 'Ĉ' => 'ĉ', - 'Ċ' => 'ċ', - 'Č' => 'č', - 'Ď' => 'ď', - 'Đ' => 'đ', - 'Ē' => 'ē', - 'Ĕ' => 'ĕ', - 'Ė' => 'ė', - 'Ę' => 'ę', - 'Ě' => 'ě', - 'Ĝ' => 'ĝ', - 'Ğ' => 'ğ', - 'Ġ' => 'ġ', - 'Ģ' => 'ģ', - 'Ĥ' => 'ĥ', - 'Ħ' => 'ħ', - 'Ĩ' => 'ĩ', - 'Ī' => 'ī', - 'Ĭ' => 'ĭ', - 'Į' => 'į', - 'İ' => 'i̇', - 'IJ' => 'ij', - 'Ĵ' => 'ĵ', - 'Ķ' => 'ķ', - 'Ĺ' => 'ĺ', - 'Ļ' => 'ļ', - 'Ľ' => 'ľ', - 'Ŀ' => 'ŀ', - 'Ł' => 'ł', - 'Ń' => 'ń', - 'Ņ' => 'ņ', - 'Ň' => 'ň', - 'Ŋ' => 'ŋ', - 'Ō' => 'ō', - 'Ŏ' => 'ŏ', - 'Ő' => 'ő', - 'Œ' => 'œ', - 'Ŕ' => 'ŕ', - 'Ŗ' => 'ŗ', - 'Ř' => 'ř', - 'Ś' => 'ś', - 'Ŝ' => 'ŝ', - 'Ş' => 'ş', - 'Š' => 'š', - 'Ţ' => 'ţ', - 'Ť' => 'ť', - 'Ŧ' => 'ŧ', - 'Ũ' => 'ũ', - 'Ū' => 'ū', - 'Ŭ' => 'ŭ', - 'Ů' => 'ů', - 'Ű' => 'ű', - 'Ų' => 'ų', - 'Ŵ' => 'ŵ', - 'Ŷ' => 'ŷ', - 'Ÿ' => 'ÿ', - 'Ź' => 'ź', - 'Ż' => 'ż', - 'Ž' => 'ž', - 'Ɓ' => 'ɓ', - 'Ƃ' => 'ƃ', - 'Ƅ' => 'ƅ', - 'Ɔ' => 'ɔ', - 'Ƈ' => 'ƈ', - 'Ɖ' => 'ɖ', - 'Ɗ' => 'ɗ', - 'Ƌ' => 'ƌ', - 'Ǝ' => 'ǝ', - 'Ə' => 'ə', - 'Ɛ' => 'ɛ', - 'Ƒ' => 'ƒ', - 'Ɠ' => 'ɠ', - 'Ɣ' => 'ɣ', - 'Ɩ' => 'ɩ', - 'Ɨ' => 'ɨ', - 'Ƙ' => 'ƙ', - 'Ɯ' => 'ɯ', - 'Ɲ' => 'ɲ', - 'Ɵ' => 'ɵ', - 'Ơ' => 'ơ', - 'Ƣ' => 'ƣ', - 'Ƥ' => 'ƥ', - 'Ʀ' => 'ʀ', - 'Ƨ' => 'ƨ', - 'Ʃ' => 'ʃ', - 'Ƭ' => 'ƭ', - 'Ʈ' => 'ʈ', - 'Ư' => 'ư', - 'Ʊ' => 'ʊ', - 'Ʋ' => 'ʋ', - 'Ƴ' => 'ƴ', - 'Ƶ' => 'ƶ', - 'Ʒ' => 'ʒ', - 'Ƹ' => 'ƹ', - 'Ƽ' => 'ƽ', - 'DŽ' => 'dž', - 'Dž' => 'dž', - 'LJ' => 'lj', - 'Lj' => 'lj', - 'NJ' => 'nj', - 'Nj' => 'nj', - 'Ǎ' => 'ǎ', - 'Ǐ' => 'ǐ', - 'Ǒ' => 'ǒ', - 'Ǔ' => 'ǔ', - 'Ǖ' => 'ǖ', - 'Ǘ' => 'ǘ', - 'Ǚ' => 'ǚ', - 'Ǜ' => 'ǜ', - 'Ǟ' => 'ǟ', - 'Ǡ' => 'ǡ', - 'Ǣ' => 'ǣ', - 'Ǥ' => 'ǥ', - 'Ǧ' => 'ǧ', - 'Ǩ' => 'ǩ', - 'Ǫ' => 'ǫ', - 'Ǭ' => 'ǭ', - 'Ǯ' => 'ǯ', - 'DZ' => 'dz', - 'Dz' => 'dz', - 'Ǵ' => 'ǵ', - 'Ƕ' => 'ƕ', - 'Ƿ' => 'ƿ', - 'Ǹ' => 'ǹ', - 'Ǻ' => 'ǻ', - 'Ǽ' => 'ǽ', - 'Ǿ' => 'ǿ', - 'Ȁ' => 'ȁ', - 'Ȃ' => 'ȃ', - 'Ȅ' => 'ȅ', - 'Ȇ' => 'ȇ', - 'Ȉ' => 'ȉ', - 'Ȋ' => 'ȋ', - 'Ȍ' => 'ȍ', - 'Ȏ' => 'ȏ', - 'Ȑ' => 'ȑ', - 'Ȓ' => 'ȓ', - 'Ȕ' => 'ȕ', - 'Ȗ' => 'ȗ', - 'Ș' => 'ș', - 'Ț' => 'ț', - 'Ȝ' => 'ȝ', - 'Ȟ' => 'ȟ', - 'Ƞ' => 'ƞ', - 'Ȣ' => 'ȣ', - 'Ȥ' => 'ȥ', - 'Ȧ' => 'ȧ', - 'Ȩ' => 'ȩ', - 'Ȫ' => 'ȫ', - 'Ȭ' => 'ȭ', - 'Ȯ' => 'ȯ', - 'Ȱ' => 'ȱ', - 'Ȳ' => 'ȳ', - 'Ⱥ' => 'ⱥ', - 'Ȼ' => 'ȼ', - 'Ƚ' => 'ƚ', - 'Ⱦ' => 'ⱦ', - 'Ɂ' => 'ɂ', - 'Ƀ' => 'ƀ', - 'Ʉ' => 'ʉ', - 'Ʌ' => 'ʌ', - 'Ɇ' => 'ɇ', - 'Ɉ' => 'ɉ', - 'Ɋ' => 'ɋ', - 'Ɍ' => 'ɍ', - 'Ɏ' => 'ɏ', - 'Ͱ' => 'ͱ', - 'Ͳ' => 'ͳ', - 'Ͷ' => 'ͷ', - 'Ϳ' => 'ϳ', - 'Ά' => 'ά', - 'Έ' => 'έ', - 'Ή' => 'ή', - 'Ί' => 'ί', - 'Ό' => 'ό', - 'Ύ' => 'ύ', - 'Ώ' => 'ώ', - 'Α' => 'α', - 'Β' => 'β', - 'Γ' => 'γ', - 'Δ' => 'δ', - 'Ε' => 'ε', - 'Ζ' => 'ζ', - 'Η' => 'η', - 'Θ' => 'θ', - 'Ι' => 'ι', - 'Κ' => 'κ', - 'Λ' => 'λ', - 'Μ' => 'μ', - 'Ν' => 'ν', - 'Ξ' => 'ξ', - 'Ο' => 'ο', - 'Π' => 'π', - 'Ρ' => 'ρ', - 'Σ' => 'σ', - 'Τ' => 'τ', - 'Υ' => 'υ', - 'Φ' => 'φ', - 'Χ' => 'χ', - 'Ψ' => 'ψ', - 'Ω' => 'ω', - 'Ϊ' => 'ϊ', - 'Ϋ' => 'ϋ', - 'Ϗ' => 'ϗ', - 'Ϙ' => 'ϙ', - 'Ϛ' => 'ϛ', - 'Ϝ' => 'ϝ', - 'Ϟ' => 'ϟ', - 'Ϡ' => 'ϡ', - 'Ϣ' => 'ϣ', - 'Ϥ' => 'ϥ', - 'Ϧ' => 'ϧ', - 'Ϩ' => 'ϩ', - 'Ϫ' => 'ϫ', - 'Ϭ' => 'ϭ', - 'Ϯ' => 'ϯ', - 'ϴ' => 'θ', - 'Ϸ' => 'ϸ', - 'Ϲ' => 'ϲ', - 'Ϻ' => 'ϻ', - 'Ͻ' => 'ͻ', - 'Ͼ' => 'ͼ', - 'Ͽ' => 'ͽ', - 'Ѐ' => 'ѐ', - 'Ё' => 'ё', - 'Ђ' => 'ђ', - 'Ѓ' => 'ѓ', - 'Є' => 'є', - 'Ѕ' => 'ѕ', - 'І' => 'і', - 'Ї' => 'ї', - 'Ј' => 'ј', - 'Љ' => 'љ', - 'Њ' => 'њ', - 'Ћ' => 'ћ', - 'Ќ' => 'ќ', - 'Ѝ' => 'ѝ', - 'Ў' => 'ў', - 'Џ' => 'џ', - 'А' => 'а', - 'Б' => 'б', - 'В' => 'в', - 'Г' => 'г', - 'Д' => 'д', - 'Е' => 'е', - 'Ж' => 'ж', - 'З' => 'з', - 'И' => 'и', - 'Й' => 'й', - 'К' => 'к', - 'Л' => 'л', - 'М' => 'м', - 'Н' => 'н', - 'О' => 'о', - 'П' => 'п', - 'Р' => 'р', - 'С' => 'с', - 'Т' => 'т', - 'У' => 'у', - 'Ф' => 'ф', - 'Х' => 'х', - 'Ц' => 'ц', - 'Ч' => 'ч', - 'Ш' => 'ш', - 'Щ' => 'щ', - 'Ъ' => 'ъ', - 'Ы' => 'ы', - 'Ь' => 'ь', - 'Э' => 'э', - 'Ю' => 'ю', - 'Я' => 'я', - 'Ѡ' => 'ѡ', - 'Ѣ' => 'ѣ', - 'Ѥ' => 'ѥ', - 'Ѧ' => 'ѧ', - 'Ѩ' => 'ѩ', - 'Ѫ' => 'ѫ', - 'Ѭ' => 'ѭ', - 'Ѯ' => 'ѯ', - 'Ѱ' => 'ѱ', - 'Ѳ' => 'ѳ', - 'Ѵ' => 'ѵ', - 'Ѷ' => 'ѷ', - 'Ѹ' => 'ѹ', - 'Ѻ' => 'ѻ', - 'Ѽ' => 'ѽ', - 'Ѿ' => 'ѿ', - 'Ҁ' => 'ҁ', - 'Ҋ' => 'ҋ', - 'Ҍ' => 'ҍ', - 'Ҏ' => 'ҏ', - 'Ґ' => 'ґ', - 'Ғ' => 'ғ', - 'Ҕ' => 'ҕ', - 'Җ' => 'җ', - 'Ҙ' => 'ҙ', - 'Қ' => 'қ', - 'Ҝ' => 'ҝ', - 'Ҟ' => 'ҟ', - 'Ҡ' => 'ҡ', - 'Ң' => 'ң', - 'Ҥ' => 'ҥ', - 'Ҧ' => 'ҧ', - 'Ҩ' => 'ҩ', - 'Ҫ' => 'ҫ', - 'Ҭ' => 'ҭ', - 'Ү' => 'ү', - 'Ұ' => 'ұ', - 'Ҳ' => 'ҳ', - 'Ҵ' => 'ҵ', - 'Ҷ' => 'ҷ', - 'Ҹ' => 'ҹ', - 'Һ' => 'һ', - 'Ҽ' => 'ҽ', - 'Ҿ' => 'ҿ', - 'Ӏ' => 'ӏ', - 'Ӂ' => 'ӂ', - 'Ӄ' => 'ӄ', - 'Ӆ' => 'ӆ', - 'Ӈ' => 'ӈ', - 'Ӊ' => 'ӊ', - 'Ӌ' => 'ӌ', - 'Ӎ' => 'ӎ', - 'Ӑ' => 'ӑ', - 'Ӓ' => 'ӓ', - 'Ӕ' => 'ӕ', - 'Ӗ' => 'ӗ', - 'Ә' => 'ә', - 'Ӛ' => 'ӛ', - 'Ӝ' => 'ӝ', - 'Ӟ' => 'ӟ', - 'Ӡ' => 'ӡ', - 'Ӣ' => 'ӣ', - 'Ӥ' => 'ӥ', - 'Ӧ' => 'ӧ', - 'Ө' => 'ө', - 'Ӫ' => 'ӫ', - 'Ӭ' => 'ӭ', - 'Ӯ' => 'ӯ', - 'Ӱ' => 'ӱ', - 'Ӳ' => 'ӳ', - 'Ӵ' => 'ӵ', - 'Ӷ' => 'ӷ', - 'Ӹ' => 'ӹ', - 'Ӻ' => 'ӻ', - 'Ӽ' => 'ӽ', - 'Ӿ' => 'ӿ', - 'Ԁ' => 'ԁ', - 'Ԃ' => 'ԃ', - 'Ԅ' => 'ԅ', - 'Ԇ' => 'ԇ', - 'Ԉ' => 'ԉ', - 'Ԋ' => 'ԋ', - 'Ԍ' => 'ԍ', - 'Ԏ' => 'ԏ', - 'Ԑ' => 'ԑ', - 'Ԓ' => 'ԓ', - 'Ԕ' => 'ԕ', - 'Ԗ' => 'ԗ', - 'Ԙ' => 'ԙ', - 'Ԛ' => 'ԛ', - 'Ԝ' => 'ԝ', - 'Ԟ' => 'ԟ', - 'Ԡ' => 'ԡ', - 'Ԣ' => 'ԣ', - 'Ԥ' => 'ԥ', - 'Ԧ' => 'ԧ', - 'Ԩ' => 'ԩ', - 'Ԫ' => 'ԫ', - 'Ԭ' => 'ԭ', - 'Ԯ' => 'ԯ', - 'Ա' => 'ա', - 'Բ' => 'բ', - 'Գ' => 'գ', - 'Դ' => 'դ', - 'Ե' => 'ե', - 'Զ' => 'զ', - 'Է' => 'է', - 'Ը' => 'ը', - 'Թ' => 'թ', - 'Ժ' => 'ժ', - 'Ի' => 'ի', - 'Լ' => 'լ', - 'Խ' => 'խ', - 'Ծ' => 'ծ', - 'Կ' => 'կ', - 'Հ' => 'հ', - 'Ձ' => 'ձ', - 'Ղ' => 'ղ', - 'Ճ' => 'ճ', - 'Մ' => 'մ', - 'Յ' => 'յ', - 'Ն' => 'ն', - 'Շ' => 'շ', - 'Ո' => 'ո', - 'Չ' => 'չ', - 'Պ' => 'պ', - 'Ջ' => 'ջ', - 'Ռ' => 'ռ', - 'Ս' => 'ս', - 'Վ' => 'վ', - 'Տ' => 'տ', - 'Ր' => 'ր', - 'Ց' => 'ց', - 'Ւ' => 'ւ', - 'Փ' => 'փ', - 'Ք' => 'ք', - 'Օ' => 'օ', - 'Ֆ' => 'ֆ', - 'Ⴀ' => 'ⴀ', - 'Ⴁ' => 'ⴁ', - 'Ⴂ' => 'ⴂ', - 'Ⴃ' => 'ⴃ', - 'Ⴄ' => 'ⴄ', - 'Ⴅ' => 'ⴅ', - 'Ⴆ' => 'ⴆ', - 'Ⴇ' => 'ⴇ', - 'Ⴈ' => 'ⴈ', - 'Ⴉ' => 'ⴉ', - 'Ⴊ' => 'ⴊ', - 'Ⴋ' => 'ⴋ', - 'Ⴌ' => 'ⴌ', - 'Ⴍ' => 'ⴍ', - 'Ⴎ' => 'ⴎ', - 'Ⴏ' => 'ⴏ', - 'Ⴐ' => 'ⴐ', - 'Ⴑ' => 'ⴑ', - 'Ⴒ' => 'ⴒ', - 'Ⴓ' => 'ⴓ', - 'Ⴔ' => 'ⴔ', - 'Ⴕ' => 'ⴕ', - 'Ⴖ' => 'ⴖ', - 'Ⴗ' => 'ⴗ', - 'Ⴘ' => 'ⴘ', - 'Ⴙ' => 'ⴙ', - 'Ⴚ' => 'ⴚ', - 'Ⴛ' => 'ⴛ', - 'Ⴜ' => 'ⴜ', - 'Ⴝ' => 'ⴝ', - 'Ⴞ' => 'ⴞ', - 'Ⴟ' => 'ⴟ', - 'Ⴠ' => 'ⴠ', - 'Ⴡ' => 'ⴡ', - 'Ⴢ' => 'ⴢ', - 'Ⴣ' => 'ⴣ', - 'Ⴤ' => 'ⴤ', - 'Ⴥ' => 'ⴥ', - 'Ⴧ' => 'ⴧ', - 'Ⴭ' => 'ⴭ', - 'Ꭰ' => 'ꭰ', - 'Ꭱ' => 'ꭱ', - 'Ꭲ' => 'ꭲ', - 'Ꭳ' => 'ꭳ', - 'Ꭴ' => 'ꭴ', - 'Ꭵ' => 'ꭵ', - 'Ꭶ' => 'ꭶ', - 'Ꭷ' => 'ꭷ', - 'Ꭸ' => 'ꭸ', - 'Ꭹ' => 'ꭹ', - 'Ꭺ' => 'ꭺ', - 'Ꭻ' => 'ꭻ', - 'Ꭼ' => 'ꭼ', - 'Ꭽ' => 'ꭽ', - 'Ꭾ' => 'ꭾ', - 'Ꭿ' => 'ꭿ', - 'Ꮀ' => 'ꮀ', - 'Ꮁ' => 'ꮁ', - 'Ꮂ' => 'ꮂ', - 'Ꮃ' => 'ꮃ', - 'Ꮄ' => 'ꮄ', - 'Ꮅ' => 'ꮅ', - 'Ꮆ' => 'ꮆ', - 'Ꮇ' => 'ꮇ', - 'Ꮈ' => 'ꮈ', - 'Ꮉ' => 'ꮉ', - 'Ꮊ' => 'ꮊ', - 'Ꮋ' => 'ꮋ', - 'Ꮌ' => 'ꮌ', - 'Ꮍ' => 'ꮍ', - 'Ꮎ' => 'ꮎ', - 'Ꮏ' => 'ꮏ', - 'Ꮐ' => 'ꮐ', - 'Ꮑ' => 'ꮑ', - 'Ꮒ' => 'ꮒ', - 'Ꮓ' => 'ꮓ', - 'Ꮔ' => 'ꮔ', - 'Ꮕ' => 'ꮕ', - 'Ꮖ' => 'ꮖ', - 'Ꮗ' => 'ꮗ', - 'Ꮘ' => 'ꮘ', - 'Ꮙ' => 'ꮙ', - 'Ꮚ' => 'ꮚ', - 'Ꮛ' => 'ꮛ', - 'Ꮜ' => 'ꮜ', - 'Ꮝ' => 'ꮝ', - 'Ꮞ' => 'ꮞ', - 'Ꮟ' => 'ꮟ', - 'Ꮠ' => 'ꮠ', - 'Ꮡ' => 'ꮡ', - 'Ꮢ' => 'ꮢ', - 'Ꮣ' => 'ꮣ', - 'Ꮤ' => 'ꮤ', - 'Ꮥ' => 'ꮥ', - 'Ꮦ' => 'ꮦ', - 'Ꮧ' => 'ꮧ', - 'Ꮨ' => 'ꮨ', - 'Ꮩ' => 'ꮩ', - 'Ꮪ' => 'ꮪ', - 'Ꮫ' => 'ꮫ', - 'Ꮬ' => 'ꮬ', - 'Ꮭ' => 'ꮭ', - 'Ꮮ' => 'ꮮ', - 'Ꮯ' => 'ꮯ', - 'Ꮰ' => 'ꮰ', - 'Ꮱ' => 'ꮱ', - 'Ꮲ' => 'ꮲ', - 'Ꮳ' => 'ꮳ', - 'Ꮴ' => 'ꮴ', - 'Ꮵ' => 'ꮵ', - 'Ꮶ' => 'ꮶ', - 'Ꮷ' => 'ꮷ', - 'Ꮸ' => 'ꮸ', - 'Ꮹ' => 'ꮹ', - 'Ꮺ' => 'ꮺ', - 'Ꮻ' => 'ꮻ', - 'Ꮼ' => 'ꮼ', - 'Ꮽ' => 'ꮽ', - 'Ꮾ' => 'ꮾ', - 'Ꮿ' => 'ꮿ', - 'Ᏸ' => 'ᏸ', - 'Ᏹ' => 'ᏹ', - 'Ᏺ' => 'ᏺ', - 'Ᏻ' => 'ᏻ', - 'Ᏼ' => 'ᏼ', - 'Ᏽ' => 'ᏽ', - 'Ა' => 'ა', - 'Ბ' => 'ბ', - 'Გ' => 'გ', - 'Დ' => 'დ', - 'Ე' => 'ე', - 'Ვ' => 'ვ', - 'Ზ' => 'ზ', - 'Თ' => 'თ', - 'Ი' => 'ი', - 'Კ' => 'კ', - 'Ლ' => 'ლ', - 'Მ' => 'მ', - 'Ნ' => 'ნ', - 'Ო' => 'ო', - 'Პ' => 'პ', - 'Ჟ' => 'ჟ', - 'Რ' => 'რ', - 'Ს' => 'ს', - 'Ტ' => 'ტ', - 'Უ' => 'უ', - 'Ფ' => 'ფ', - 'Ქ' => 'ქ', - 'Ღ' => 'ღ', - 'Ყ' => 'ყ', - 'Შ' => 'შ', - 'Ჩ' => 'ჩ', - 'Ც' => 'ც', - 'Ძ' => 'ძ', - 'Წ' => 'წ', - 'Ჭ' => 'ჭ', - 'Ხ' => 'ხ', - 'Ჯ' => 'ჯ', - 'Ჰ' => 'ჰ', - 'Ჱ' => 'ჱ', - 'Ჲ' => 'ჲ', - 'Ჳ' => 'ჳ', - 'Ჴ' => 'ჴ', - 'Ჵ' => 'ჵ', - 'Ჶ' => 'ჶ', - 'Ჷ' => 'ჷ', - 'Ჸ' => 'ჸ', - 'Ჹ' => 'ჹ', - 'Ჺ' => 'ჺ', - 'Ჽ' => 'ჽ', - 'Ჾ' => 'ჾ', - 'Ჿ' => 'ჿ', - 'Ḁ' => 'ḁ', - 'Ḃ' => 'ḃ', - 'Ḅ' => 'ḅ', - 'Ḇ' => 'ḇ', - 'Ḉ' => 'ḉ', - 'Ḋ' => 'ḋ', - 'Ḍ' => 'ḍ', - 'Ḏ' => 'ḏ', - 'Ḑ' => 'ḑ', - 'Ḓ' => 'ḓ', - 'Ḕ' => 'ḕ', - 'Ḗ' => 'ḗ', - 'Ḙ' => 'ḙ', - 'Ḛ' => 'ḛ', - 'Ḝ' => 'ḝ', - 'Ḟ' => 'ḟ', - 'Ḡ' => 'ḡ', - 'Ḣ' => 'ḣ', - 'Ḥ' => 'ḥ', - 'Ḧ' => 'ḧ', - 'Ḩ' => 'ḩ', - 'Ḫ' => 'ḫ', - 'Ḭ' => 'ḭ', - 'Ḯ' => 'ḯ', - 'Ḱ' => 'ḱ', - 'Ḳ' => 'ḳ', - 'Ḵ' => 'ḵ', - 'Ḷ' => 'ḷ', - 'Ḹ' => 'ḹ', - 'Ḻ' => 'ḻ', - 'Ḽ' => 'ḽ', - 'Ḿ' => 'ḿ', - 'Ṁ' => 'ṁ', - 'Ṃ' => 'ṃ', - 'Ṅ' => 'ṅ', - 'Ṇ' => 'ṇ', - 'Ṉ' => 'ṉ', - 'Ṋ' => 'ṋ', - 'Ṍ' => 'ṍ', - 'Ṏ' => 'ṏ', - 'Ṑ' => 'ṑ', - 'Ṓ' => 'ṓ', - 'Ṕ' => 'ṕ', - 'Ṗ' => 'ṗ', - 'Ṙ' => 'ṙ', - 'Ṛ' => 'ṛ', - 'Ṝ' => 'ṝ', - 'Ṟ' => 'ṟ', - 'Ṡ' => 'ṡ', - 'Ṣ' => 'ṣ', - 'Ṥ' => 'ṥ', - 'Ṧ' => 'ṧ', - 'Ṩ' => 'ṩ', - 'Ṫ' => 'ṫ', - 'Ṭ' => 'ṭ', - 'Ṯ' => 'ṯ', - 'Ṱ' => 'ṱ', - 'Ṳ' => 'ṳ', - 'Ṵ' => 'ṵ', - 'Ṷ' => 'ṷ', - 'Ṹ' => 'ṹ', - 'Ṻ' => 'ṻ', - 'Ṽ' => 'ṽ', - 'Ṿ' => 'ṿ', - 'Ẁ' => 'ẁ', - 'Ẃ' => 'ẃ', - 'Ẅ' => 'ẅ', - 'Ẇ' => 'ẇ', - 'Ẉ' => 'ẉ', - 'Ẋ' => 'ẋ', - 'Ẍ' => 'ẍ', - 'Ẏ' => 'ẏ', - 'Ẑ' => 'ẑ', - 'Ẓ' => 'ẓ', - 'Ẕ' => 'ẕ', - 'ẞ' => 'ß', - 'Ạ' => 'ạ', - 'Ả' => 'ả', - 'Ấ' => 'ấ', - 'Ầ' => 'ầ', - 'Ẩ' => 'ẩ', - 'Ẫ' => 'ẫ', - 'Ậ' => 'ậ', - 'Ắ' => 'ắ', - 'Ằ' => 'ằ', - 'Ẳ' => 'ẳ', - 'Ẵ' => 'ẵ', - 'Ặ' => 'ặ', - 'Ẹ' => 'ẹ', - 'Ẻ' => 'ẻ', - 'Ẽ' => 'ẽ', - 'Ế' => 'ế', - 'Ề' => 'ề', - 'Ể' => 'ể', - 'Ễ' => 'ễ', - 'Ệ' => 'ệ', - 'Ỉ' => 'ỉ', - 'Ị' => 'ị', - 'Ọ' => 'ọ', - 'Ỏ' => 'ỏ', - 'Ố' => 'ố', - 'Ồ' => 'ồ', - 'Ổ' => 'ổ', - 'Ỗ' => 'ỗ', - 'Ộ' => 'ộ', - 'Ớ' => 'ớ', - 'Ờ' => 'ờ', - 'Ở' => 'ở', - 'Ỡ' => 'ỡ', - 'Ợ' => 'ợ', - 'Ụ' => 'ụ', - 'Ủ' => 'ủ', - 'Ứ' => 'ứ', - 'Ừ' => 'ừ', - 'Ử' => 'ử', - 'Ữ' => 'ữ', - 'Ự' => 'ự', - 'Ỳ' => 'ỳ', - 'Ỵ' => 'ỵ', - 'Ỷ' => 'ỷ', - 'Ỹ' => 'ỹ', - 'Ỻ' => 'ỻ', - 'Ỽ' => 'ỽ', - 'Ỿ' => 'ỿ', - 'Ἀ' => 'ἀ', - 'Ἁ' => 'ἁ', - 'Ἂ' => 'ἂ', - 'Ἃ' => 'ἃ', - 'Ἄ' => 'ἄ', - 'Ἅ' => 'ἅ', - 'Ἆ' => 'ἆ', - 'Ἇ' => 'ἇ', - 'Ἐ' => 'ἐ', - 'Ἑ' => 'ἑ', - 'Ἒ' => 'ἒ', - 'Ἓ' => 'ἓ', - 'Ἔ' => 'ἔ', - 'Ἕ' => 'ἕ', - 'Ἠ' => 'ἠ', - 'Ἡ' => 'ἡ', - 'Ἢ' => 'ἢ', - 'Ἣ' => 'ἣ', - 'Ἤ' => 'ἤ', - 'Ἥ' => 'ἥ', - 'Ἦ' => 'ἦ', - 'Ἧ' => 'ἧ', - 'Ἰ' => 'ἰ', - 'Ἱ' => 'ἱ', - 'Ἲ' => 'ἲ', - 'Ἳ' => 'ἳ', - 'Ἴ' => 'ἴ', - 'Ἵ' => 'ἵ', - 'Ἶ' => 'ἶ', - 'Ἷ' => 'ἷ', - 'Ὀ' => 'ὀ', - 'Ὁ' => 'ὁ', - 'Ὂ' => 'ὂ', - 'Ὃ' => 'ὃ', - 'Ὄ' => 'ὄ', - 'Ὅ' => 'ὅ', - 'Ὑ' => 'ὑ', - 'Ὓ' => 'ὓ', - 'Ὕ' => 'ὕ', - 'Ὗ' => 'ὗ', - 'Ὠ' => 'ὠ', - 'Ὡ' => 'ὡ', - 'Ὢ' => 'ὢ', - 'Ὣ' => 'ὣ', - 'Ὤ' => 'ὤ', - 'Ὥ' => 'ὥ', - 'Ὦ' => 'ὦ', - 'Ὧ' => 'ὧ', - 'ᾈ' => 'ᾀ', - 'ᾉ' => 'ᾁ', - 'ᾊ' => 'ᾂ', - 'ᾋ' => 'ᾃ', - 'ᾌ' => 'ᾄ', - 'ᾍ' => 'ᾅ', - 'ᾎ' => 'ᾆ', - 'ᾏ' => 'ᾇ', - 'ᾘ' => 'ᾐ', - 'ᾙ' => 'ᾑ', - 'ᾚ' => 'ᾒ', - 'ᾛ' => 'ᾓ', - 'ᾜ' => 'ᾔ', - 'ᾝ' => 'ᾕ', - 'ᾞ' => 'ᾖ', - 'ᾟ' => 'ᾗ', - 'ᾨ' => 'ᾠ', - 'ᾩ' => 'ᾡ', - 'ᾪ' => 'ᾢ', - 'ᾫ' => 'ᾣ', - 'ᾬ' => 'ᾤ', - 'ᾭ' => 'ᾥ', - 'ᾮ' => 'ᾦ', - 'ᾯ' => 'ᾧ', - 'Ᾰ' => 'ᾰ', - 'Ᾱ' => 'ᾱ', - 'Ὰ' => 'ὰ', - 'Ά' => 'ά', - 'ᾼ' => 'ᾳ', - 'Ὲ' => 'ὲ', - 'Έ' => 'έ', - 'Ὴ' => 'ὴ', - 'Ή' => 'ή', - 'ῌ' => 'ῃ', - 'Ῐ' => 'ῐ', - 'Ῑ' => 'ῑ', - 'Ὶ' => 'ὶ', - 'Ί' => 'ί', - 'Ῠ' => 'ῠ', - 'Ῡ' => 'ῡ', - 'Ὺ' => 'ὺ', - 'Ύ' => 'ύ', - 'Ῥ' => 'ῥ', - 'Ὸ' => 'ὸ', - 'Ό' => 'ό', - 'Ὼ' => 'ὼ', - 'Ώ' => 'ώ', - 'ῼ' => 'ῳ', - 'Ω' => 'ω', - 'K' => 'k', - 'Å' => 'å', - 'Ⅎ' => 'ⅎ', - 'Ⅰ' => 'ⅰ', - 'Ⅱ' => 'ⅱ', - 'Ⅲ' => 'ⅲ', - 'Ⅳ' => 'ⅳ', - 'Ⅴ' => 'ⅴ', - 'Ⅵ' => 'ⅵ', - 'Ⅶ' => 'ⅶ', - 'Ⅷ' => 'ⅷ', - 'Ⅸ' => 'ⅸ', - 'Ⅹ' => 'ⅹ', - 'Ⅺ' => 'ⅺ', - 'Ⅻ' => 'ⅻ', - 'Ⅼ' => 'ⅼ', - 'Ⅽ' => 'ⅽ', - 'Ⅾ' => 'ⅾ', - 'Ⅿ' => 'ⅿ', - 'Ↄ' => 'ↄ', - 'Ⓐ' => 'ⓐ', - 'Ⓑ' => 'ⓑ', - 'Ⓒ' => 'ⓒ', - 'Ⓓ' => 'ⓓ', - 'Ⓔ' => 'ⓔ', - 'Ⓕ' => 'ⓕ', - 'Ⓖ' => 'ⓖ', - 'Ⓗ' => 'ⓗ', - 'Ⓘ' => 'ⓘ', - 'Ⓙ' => 'ⓙ', - 'Ⓚ' => 'ⓚ', - 'Ⓛ' => 'ⓛ', - 'Ⓜ' => 'ⓜ', - 'Ⓝ' => 'ⓝ', - 'Ⓞ' => 'ⓞ', - 'Ⓟ' => 'ⓟ', - 'Ⓠ' => 'ⓠ', - 'Ⓡ' => 'ⓡ', - 'Ⓢ' => 'ⓢ', - 'Ⓣ' => 'ⓣ', - 'Ⓤ' => 'ⓤ', - 'Ⓥ' => 'ⓥ', - 'Ⓦ' => 'ⓦ', - 'Ⓧ' => 'ⓧ', - 'Ⓨ' => 'ⓨ', - 'Ⓩ' => 'ⓩ', - 'Ⰰ' => 'ⰰ', - 'Ⰱ' => 'ⰱ', - 'Ⰲ' => 'ⰲ', - 'Ⰳ' => 'ⰳ', - 'Ⰴ' => 'ⰴ', - 'Ⰵ' => 'ⰵ', - 'Ⰶ' => 'ⰶ', - 'Ⰷ' => 'ⰷ', - 'Ⰸ' => 'ⰸ', - 'Ⰹ' => 'ⰹ', - 'Ⰺ' => 'ⰺ', - 'Ⰻ' => 'ⰻ', - 'Ⰼ' => 'ⰼ', - 'Ⰽ' => 'ⰽ', - 'Ⰾ' => 'ⰾ', - 'Ⰿ' => 'ⰿ', - 'Ⱀ' => 'ⱀ', - 'Ⱁ' => 'ⱁ', - 'Ⱂ' => 'ⱂ', - 'Ⱃ' => 'ⱃ', - 'Ⱄ' => 'ⱄ', - 'Ⱅ' => 'ⱅ', - 'Ⱆ' => 'ⱆ', - 'Ⱇ' => 'ⱇ', - 'Ⱈ' => 'ⱈ', - 'Ⱉ' => 'ⱉ', - 'Ⱊ' => 'ⱊ', - 'Ⱋ' => 'ⱋ', - 'Ⱌ' => 'ⱌ', - 'Ⱍ' => 'ⱍ', - 'Ⱎ' => 'ⱎ', - 'Ⱏ' => 'ⱏ', - 'Ⱐ' => 'ⱐ', - 'Ⱑ' => 'ⱑ', - 'Ⱒ' => 'ⱒ', - 'Ⱓ' => 'ⱓ', - 'Ⱔ' => 'ⱔ', - 'Ⱕ' => 'ⱕ', - 'Ⱖ' => 'ⱖ', - 'Ⱗ' => 'ⱗ', - 'Ⱘ' => 'ⱘ', - 'Ⱙ' => 'ⱙ', - 'Ⱚ' => 'ⱚ', - 'Ⱛ' => 'ⱛ', - 'Ⱜ' => 'ⱜ', - 'Ⱝ' => 'ⱝ', - 'Ⱞ' => 'ⱞ', - 'Ⱡ' => 'ⱡ', - 'Ɫ' => 'ɫ', - 'Ᵽ' => 'ᵽ', - 'Ɽ' => 'ɽ', - 'Ⱨ' => 'ⱨ', - 'Ⱪ' => 'ⱪ', - 'Ⱬ' => 'ⱬ', - 'Ɑ' => 'ɑ', - 'Ɱ' => 'ɱ', - 'Ɐ' => 'ɐ', - 'Ɒ' => 'ɒ', - 'Ⱳ' => 'ⱳ', - 'Ⱶ' => 'ⱶ', - 'Ȿ' => 'ȿ', - 'Ɀ' => 'ɀ', - 'Ⲁ' => 'ⲁ', - 'Ⲃ' => 'ⲃ', - 'Ⲅ' => 'ⲅ', - 'Ⲇ' => 'ⲇ', - 'Ⲉ' => 'ⲉ', - 'Ⲋ' => 'ⲋ', - 'Ⲍ' => 'ⲍ', - 'Ⲏ' => 'ⲏ', - 'Ⲑ' => 'ⲑ', - 'Ⲓ' => 'ⲓ', - 'Ⲕ' => 'ⲕ', - 'Ⲗ' => 'ⲗ', - 'Ⲙ' => 'ⲙ', - 'Ⲛ' => 'ⲛ', - 'Ⲝ' => 'ⲝ', - 'Ⲟ' => 'ⲟ', - 'Ⲡ' => 'ⲡ', - 'Ⲣ' => 'ⲣ', - 'Ⲥ' => 'ⲥ', - 'Ⲧ' => 'ⲧ', - 'Ⲩ' => 'ⲩ', - 'Ⲫ' => 'ⲫ', - 'Ⲭ' => 'ⲭ', - 'Ⲯ' => 'ⲯ', - 'Ⲱ' => 'ⲱ', - 'Ⲳ' => 'ⲳ', - 'Ⲵ' => 'ⲵ', - 'Ⲷ' => 'ⲷ', - 'Ⲹ' => 'ⲹ', - 'Ⲻ' => 'ⲻ', - 'Ⲽ' => 'ⲽ', - 'Ⲿ' => 'ⲿ', - 'Ⳁ' => 'ⳁ', - 'Ⳃ' => 'ⳃ', - 'Ⳅ' => 'ⳅ', - 'Ⳇ' => 'ⳇ', - 'Ⳉ' => 'ⳉ', - 'Ⳋ' => 'ⳋ', - 'Ⳍ' => 'ⳍ', - 'Ⳏ' => 'ⳏ', - 'Ⳑ' => 'ⳑ', - 'Ⳓ' => 'ⳓ', - 'Ⳕ' => 'ⳕ', - 'Ⳗ' => 'ⳗ', - 'Ⳙ' => 'ⳙ', - 'Ⳛ' => 'ⳛ', - 'Ⳝ' => 'ⳝ', - 'Ⳟ' => 'ⳟ', - 'Ⳡ' => 'ⳡ', - 'Ⳣ' => 'ⳣ', - 'Ⳬ' => 'ⳬ', - 'Ⳮ' => 'ⳮ', - 'Ⳳ' => 'ⳳ', - 'Ꙁ' => 'ꙁ', - 'Ꙃ' => 'ꙃ', - 'Ꙅ' => 'ꙅ', - 'Ꙇ' => 'ꙇ', - 'Ꙉ' => 'ꙉ', - 'Ꙋ' => 'ꙋ', - 'Ꙍ' => 'ꙍ', - 'Ꙏ' => 'ꙏ', - 'Ꙑ' => 'ꙑ', - 'Ꙓ' => 'ꙓ', - 'Ꙕ' => 'ꙕ', - 'Ꙗ' => 'ꙗ', - 'Ꙙ' => 'ꙙ', - 'Ꙛ' => 'ꙛ', - 'Ꙝ' => 'ꙝ', - 'Ꙟ' => 'ꙟ', - 'Ꙡ' => 'ꙡ', - 'Ꙣ' => 'ꙣ', - 'Ꙥ' => 'ꙥ', - 'Ꙧ' => 'ꙧ', - 'Ꙩ' => 'ꙩ', - 'Ꙫ' => 'ꙫ', - 'Ꙭ' => 'ꙭ', - 'Ꚁ' => 'ꚁ', - 'Ꚃ' => 'ꚃ', - 'Ꚅ' => 'ꚅ', - 'Ꚇ' => 'ꚇ', - 'Ꚉ' => 'ꚉ', - 'Ꚋ' => 'ꚋ', - 'Ꚍ' => 'ꚍ', - 'Ꚏ' => 'ꚏ', - 'Ꚑ' => 'ꚑ', - 'Ꚓ' => 'ꚓ', - 'Ꚕ' => 'ꚕ', - 'Ꚗ' => 'ꚗ', - 'Ꚙ' => 'ꚙ', - 'Ꚛ' => 'ꚛ', - 'Ꜣ' => 'ꜣ', - 'Ꜥ' => 'ꜥ', - 'Ꜧ' => 'ꜧ', - 'Ꜩ' => 'ꜩ', - 'Ꜫ' => 'ꜫ', - 'Ꜭ' => 'ꜭ', - 'Ꜯ' => 'ꜯ', - 'Ꜳ' => 'ꜳ', - 'Ꜵ' => 'ꜵ', - 'Ꜷ' => 'ꜷ', - 'Ꜹ' => 'ꜹ', - 'Ꜻ' => 'ꜻ', - 'Ꜽ' => 'ꜽ', - 'Ꜿ' => 'ꜿ', - 'Ꝁ' => 'ꝁ', - 'Ꝃ' => 'ꝃ', - 'Ꝅ' => 'ꝅ', - 'Ꝇ' => 'ꝇ', - 'Ꝉ' => 'ꝉ', - 'Ꝋ' => 'ꝋ', - 'Ꝍ' => 'ꝍ', - 'Ꝏ' => 'ꝏ', - 'Ꝑ' => 'ꝑ', - 'Ꝓ' => 'ꝓ', - 'Ꝕ' => 'ꝕ', - 'Ꝗ' => 'ꝗ', - 'Ꝙ' => 'ꝙ', - 'Ꝛ' => 'ꝛ', - 'Ꝝ' => 'ꝝ', - 'Ꝟ' => 'ꝟ', - 'Ꝡ' => 'ꝡ', - 'Ꝣ' => 'ꝣ', - 'Ꝥ' => 'ꝥ', - 'Ꝧ' => 'ꝧ', - 'Ꝩ' => 'ꝩ', - 'Ꝫ' => 'ꝫ', - 'Ꝭ' => 'ꝭ', - 'Ꝯ' => 'ꝯ', - 'Ꝺ' => 'ꝺ', - 'Ꝼ' => 'ꝼ', - 'Ᵹ' => 'ᵹ', - 'Ꝿ' => 'ꝿ', - 'Ꞁ' => 'ꞁ', - 'Ꞃ' => 'ꞃ', - 'Ꞅ' => 'ꞅ', - 'Ꞇ' => 'ꞇ', - 'Ꞌ' => 'ꞌ', - 'Ɥ' => 'ɥ', - 'Ꞑ' => 'ꞑ', - 'Ꞓ' => 'ꞓ', - 'Ꞗ' => 'ꞗ', - 'Ꞙ' => 'ꞙ', - 'Ꞛ' => 'ꞛ', - 'Ꞝ' => 'ꞝ', - 'Ꞟ' => 'ꞟ', - 'Ꞡ' => 'ꞡ', - 'Ꞣ' => 'ꞣ', - 'Ꞥ' => 'ꞥ', - 'Ꞧ' => 'ꞧ', - 'Ꞩ' => 'ꞩ', - 'Ɦ' => 'ɦ', - 'Ɜ' => 'ɜ', - 'Ɡ' => 'ɡ', - 'Ɬ' => 'ɬ', - 'Ɪ' => 'ɪ', - 'Ʞ' => 'ʞ', - 'Ʇ' => 'ʇ', - 'Ʝ' => 'ʝ', - 'Ꭓ' => 'ꭓ', - 'Ꞵ' => 'ꞵ', - 'Ꞷ' => 'ꞷ', - 'Ꞹ' => 'ꞹ', - 'Ꞻ' => 'ꞻ', - 'Ꞽ' => 'ꞽ', - 'Ꞿ' => 'ꞿ', - 'Ꟃ' => 'ꟃ', - 'Ꞔ' => 'ꞔ', - 'Ʂ' => 'ʂ', - 'Ᶎ' => 'ᶎ', - 'Ꟈ' => 'ꟈ', - 'Ꟊ' => 'ꟊ', - 'Ꟶ' => 'ꟶ', - 'A' => 'a', - 'B' => 'b', - 'C' => 'c', - 'D' => 'd', - 'E' => 'e', - 'F' => 'f', - 'G' => 'g', - 'H' => 'h', - 'I' => 'i', - 'J' => 'j', - 'K' => 'k', - 'L' => 'l', - 'M' => 'm', - 'N' => 'n', - 'O' => 'o', - 'P' => 'p', - 'Q' => 'q', - 'R' => 'r', - 'S' => 's', - 'T' => 't', - 'U' => 'u', - 'V' => 'v', - 'W' => 'w', - 'X' => 'x', - 'Y' => 'y', - 'Z' => 'z', - '𐐀' => '𐐨', - '𐐁' => '𐐩', - '𐐂' => '𐐪', - '𐐃' => '𐐫', - '𐐄' => '𐐬', - '𐐅' => '𐐭', - '𐐆' => '𐐮', - '𐐇' => '𐐯', - '𐐈' => '𐐰', - '𐐉' => '𐐱', - '𐐊' => '𐐲', - '𐐋' => '𐐳', - '𐐌' => '𐐴', - '𐐍' => '𐐵', - '𐐎' => '𐐶', - '𐐏' => '𐐷', - '𐐐' => '𐐸', - '𐐑' => '𐐹', - '𐐒' => '𐐺', - '𐐓' => '𐐻', - '𐐔' => '𐐼', - '𐐕' => '𐐽', - '𐐖' => '𐐾', - '𐐗' => '𐐿', - '𐐘' => '𐑀', - '𐐙' => '𐑁', - '𐐚' => '𐑂', - '𐐛' => '𐑃', - '𐐜' => '𐑄', - '𐐝' => '𐑅', - '𐐞' => '𐑆', - '𐐟' => '𐑇', - '𐐠' => '𐑈', - '𐐡' => '𐑉', - '𐐢' => '𐑊', - '𐐣' => '𐑋', - '𐐤' => '𐑌', - '𐐥' => '𐑍', - '𐐦' => '𐑎', - '𐐧' => '𐑏', - '𐒰' => '𐓘', - '𐒱' => '𐓙', - '𐒲' => '𐓚', - '𐒳' => '𐓛', - '𐒴' => '𐓜', - '𐒵' => '𐓝', - '𐒶' => '𐓞', - '𐒷' => '𐓟', - '𐒸' => '𐓠', - '𐒹' => '𐓡', - '𐒺' => '𐓢', - '𐒻' => '𐓣', - '𐒼' => '𐓤', - '𐒽' => '𐓥', - '𐒾' => '𐓦', - '𐒿' => '𐓧', - '𐓀' => '𐓨', - '𐓁' => '𐓩', - '𐓂' => '𐓪', - '𐓃' => '𐓫', - '𐓄' => '𐓬', - '𐓅' => '𐓭', - '𐓆' => '𐓮', - '𐓇' => '𐓯', - '𐓈' => '𐓰', - '𐓉' => '𐓱', - '𐓊' => '𐓲', - '𐓋' => '𐓳', - '𐓌' => '𐓴', - '𐓍' => '𐓵', - '𐓎' => '𐓶', - '𐓏' => '𐓷', - '𐓐' => '𐓸', - '𐓑' => '𐓹', - '𐓒' => '𐓺', - '𐓓' => '𐓻', - '𐲀' => '𐳀', - '𐲁' => '𐳁', - '𐲂' => '𐳂', - '𐲃' => '𐳃', - '𐲄' => '𐳄', - '𐲅' => '𐳅', - '𐲆' => '𐳆', - '𐲇' => '𐳇', - '𐲈' => '𐳈', - '𐲉' => '𐳉', - '𐲊' => '𐳊', - '𐲋' => '𐳋', - '𐲌' => '𐳌', - '𐲍' => '𐳍', - '𐲎' => '𐳎', - '𐲏' => '𐳏', - '𐲐' => '𐳐', - '𐲑' => '𐳑', - '𐲒' => '𐳒', - '𐲓' => '𐳓', - '𐲔' => '𐳔', - '𐲕' => '𐳕', - '𐲖' => '𐳖', - '𐲗' => '𐳗', - '𐲘' => '𐳘', - '𐲙' => '𐳙', - '𐲚' => '𐳚', - '𐲛' => '𐳛', - '𐲜' => '𐳜', - '𐲝' => '𐳝', - '𐲞' => '𐳞', - '𐲟' => '𐳟', - '𐲠' => '𐳠', - '𐲡' => '𐳡', - '𐲢' => '𐳢', - '𐲣' => '𐳣', - '𐲤' => '𐳤', - '𐲥' => '𐳥', - '𐲦' => '𐳦', - '𐲧' => '𐳧', - '𐲨' => '𐳨', - '𐲩' => '𐳩', - '𐲪' => '𐳪', - '𐲫' => '𐳫', - '𐲬' => '𐳬', - '𐲭' => '𐳭', - '𐲮' => '𐳮', - '𐲯' => '𐳯', - '𐲰' => '𐳰', - '𐲱' => '𐳱', - '𐲲' => '𐳲', - '𑢠' => '𑣀', - '𑢡' => '𑣁', - '𑢢' => '𑣂', - '𑢣' => '𑣃', - '𑢤' => '𑣄', - '𑢥' => '𑣅', - '𑢦' => '𑣆', - '𑢧' => '𑣇', - '𑢨' => '𑣈', - '𑢩' => '𑣉', - '𑢪' => '𑣊', - '𑢫' => '𑣋', - '𑢬' => '𑣌', - '𑢭' => '𑣍', - '𑢮' => '𑣎', - '𑢯' => '𑣏', - '𑢰' => '𑣐', - '𑢱' => '𑣑', - '𑢲' => '𑣒', - '𑢳' => '𑣓', - '𑢴' => '𑣔', - '𑢵' => '𑣕', - '𑢶' => '𑣖', - '𑢷' => '𑣗', - '𑢸' => '𑣘', - '𑢹' => '𑣙', - '𑢺' => '𑣚', - '𑢻' => '𑣛', - '𑢼' => '𑣜', - '𑢽' => '𑣝', - '𑢾' => '𑣞', - '𑢿' => '𑣟', - '𖹀' => '𖹠', - '𖹁' => '𖹡', - '𖹂' => '𖹢', - '𖹃' => '𖹣', - '𖹄' => '𖹤', - '𖹅' => '𖹥', - '𖹆' => '𖹦', - '𖹇' => '𖹧', - '𖹈' => '𖹨', - '𖹉' => '𖹩', - '𖹊' => '𖹪', - '𖹋' => '𖹫', - '𖹌' => '𖹬', - '𖹍' => '𖹭', - '𖹎' => '𖹮', - '𖹏' => '𖹯', - '𖹐' => '𖹰', - '𖹑' => '𖹱', - '𖹒' => '𖹲', - '𖹓' => '𖹳', - '𖹔' => '𖹴', - '𖹕' => '𖹵', - '𖹖' => '𖹶', - '𖹗' => '𖹷', - '𖹘' => '𖹸', - '𖹙' => '𖹹', - '𖹚' => '𖹺', - '𖹛' => '𖹻', - '𖹜' => '𖹼', - '𖹝' => '𖹽', - '𖹞' => '𖹾', - '𖹟' => '𖹿', - '𞤀' => '𞤢', - '𞤁' => '𞤣', - '𞤂' => '𞤤', - '𞤃' => '𞤥', - '𞤄' => '𞤦', - '𞤅' => '𞤧', - '𞤆' => '𞤨', - '𞤇' => '𞤩', - '𞤈' => '𞤪', - '𞤉' => '𞤫', - '𞤊' => '𞤬', - '𞤋' => '𞤭', - '𞤌' => '𞤮', - '𞤍' => '𞤯', - '𞤎' => '𞤰', - '𞤏' => '𞤱', - '𞤐' => '𞤲', - '𞤑' => '𞤳', - '𞤒' => '𞤴', - '𞤓' => '𞤵', - '𞤔' => '𞤶', - '𞤕' => '𞤷', - '𞤖' => '𞤸', - '𞤗' => '𞤹', - '𞤘' => '𞤺', - '𞤙' => '𞤻', - '𞤚' => '𞤼', - '𞤛' => '𞤽', - '𞤜' => '𞤾', - '𞤝' => '𞤿', - '𞤞' => '𞥀', - '𞤟' => '𞥁', - '𞤠' => '𞥂', - '𞤡' => '𞥃', -); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php deleted file mode 100644 index 2a8f6e73b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +++ /dev/null @@ -1,5 +0,0 @@ - 'A', - 'b' => 'B', - 'c' => 'C', - 'd' => 'D', - 'e' => 'E', - 'f' => 'F', - 'g' => 'G', - 'h' => 'H', - 'i' => 'I', - 'j' => 'J', - 'k' => 'K', - 'l' => 'L', - 'm' => 'M', - 'n' => 'N', - 'o' => 'O', - 'p' => 'P', - 'q' => 'Q', - 'r' => 'R', - 's' => 'S', - 't' => 'T', - 'u' => 'U', - 'v' => 'V', - 'w' => 'W', - 'x' => 'X', - 'y' => 'Y', - 'z' => 'Z', - 'µ' => 'Μ', - 'à' => 'À', - 'á' => 'Á', - 'â' => 'Â', - 'ã' => 'Ã', - 'ä' => 'Ä', - 'å' => 'Å', - 'æ' => 'Æ', - 'ç' => 'Ç', - 'è' => 'È', - 'é' => 'É', - 'ê' => 'Ê', - 'ë' => 'Ë', - 'ì' => 'Ì', - 'í' => 'Í', - 'î' => 'Î', - 'ï' => 'Ï', - 'ð' => 'Ð', - 'ñ' => 'Ñ', - 'ò' => 'Ò', - 'ó' => 'Ó', - 'ô' => 'Ô', - 'õ' => 'Õ', - 'ö' => 'Ö', - 'ø' => 'Ø', - 'ù' => 'Ù', - 'ú' => 'Ú', - 'û' => 'Û', - 'ü' => 'Ü', - 'ý' => 'Ý', - 'þ' => 'Þ', - 'ÿ' => 'Ÿ', - 'ā' => 'Ā', - 'ă' => 'Ă', - 'ą' => 'Ą', - 'ć' => 'Ć', - 'ĉ' => 'Ĉ', - 'ċ' => 'Ċ', - 'č' => 'Č', - 'ď' => 'Ď', - 'đ' => 'Đ', - 'ē' => 'Ē', - 'ĕ' => 'Ĕ', - 'ė' => 'Ė', - 'ę' => 'Ę', - 'ě' => 'Ě', - 'ĝ' => 'Ĝ', - 'ğ' => 'Ğ', - 'ġ' => 'Ġ', - 'ģ' => 'Ģ', - 'ĥ' => 'Ĥ', - 'ħ' => 'Ħ', - 'ĩ' => 'Ĩ', - 'ī' => 'Ī', - 'ĭ' => 'Ĭ', - 'į' => 'Į', - 'ı' => 'I', - 'ij' => 'IJ', - 'ĵ' => 'Ĵ', - 'ķ' => 'Ķ', - 'ĺ' => 'Ĺ', - 'ļ' => 'Ļ', - 'ľ' => 'Ľ', - 'ŀ' => 'Ŀ', - 'ł' => 'Ł', - 'ń' => 'Ń', - 'ņ' => 'Ņ', - 'ň' => 'Ň', - 'ŋ' => 'Ŋ', - 'ō' => 'Ō', - 'ŏ' => 'Ŏ', - 'ő' => 'Ő', - 'œ' => 'Œ', - 'ŕ' => 'Ŕ', - 'ŗ' => 'Ŗ', - 'ř' => 'Ř', - 'ś' => 'Ś', - 'ŝ' => 'Ŝ', - 'ş' => 'Ş', - 'š' => 'Š', - 'ţ' => 'Ţ', - 'ť' => 'Ť', - 'ŧ' => 'Ŧ', - 'ũ' => 'Ũ', - 'ū' => 'Ū', - 'ŭ' => 'Ŭ', - 'ů' => 'Ů', - 'ű' => 'Ű', - 'ų' => 'Ų', - 'ŵ' => 'Ŵ', - 'ŷ' => 'Ŷ', - 'ź' => 'Ź', - 'ż' => 'Ż', - 'ž' => 'Ž', - 'ſ' => 'S', - 'ƀ' => 'Ƀ', - 'ƃ' => 'Ƃ', - 'ƅ' => 'Ƅ', - 'ƈ' => 'Ƈ', - 'ƌ' => 'Ƌ', - 'ƒ' => 'Ƒ', - 'ƕ' => 'Ƕ', - 'ƙ' => 'Ƙ', - 'ƚ' => 'Ƚ', - 'ƞ' => 'Ƞ', - 'ơ' => 'Ơ', - 'ƣ' => 'Ƣ', - 'ƥ' => 'Ƥ', - 'ƨ' => 'Ƨ', - 'ƭ' => 'Ƭ', - 'ư' => 'Ư', - 'ƴ' => 'Ƴ', - 'ƶ' => 'Ƶ', - 'ƹ' => 'Ƹ', - 'ƽ' => 'Ƽ', - 'ƿ' => 'Ƿ', - 'Dž' => 'DŽ', - 'dž' => 'DŽ', - 'Lj' => 'LJ', - 'lj' => 'LJ', - 'Nj' => 'NJ', - 'nj' => 'NJ', - 'ǎ' => 'Ǎ', - 'ǐ' => 'Ǐ', - 'ǒ' => 'Ǒ', - 'ǔ' => 'Ǔ', - 'ǖ' => 'Ǖ', - 'ǘ' => 'Ǘ', - 'ǚ' => 'Ǚ', - 'ǜ' => 'Ǜ', - 'ǝ' => 'Ǝ', - 'ǟ' => 'Ǟ', - 'ǡ' => 'Ǡ', - 'ǣ' => 'Ǣ', - 'ǥ' => 'Ǥ', - 'ǧ' => 'Ǧ', - 'ǩ' => 'Ǩ', - 'ǫ' => 'Ǫ', - 'ǭ' => 'Ǭ', - 'ǯ' => 'Ǯ', - 'Dz' => 'DZ', - 'dz' => 'DZ', - 'ǵ' => 'Ǵ', - 'ǹ' => 'Ǹ', - 'ǻ' => 'Ǻ', - 'ǽ' => 'Ǽ', - 'ǿ' => 'Ǿ', - 'ȁ' => 'Ȁ', - 'ȃ' => 'Ȃ', - 'ȅ' => 'Ȅ', - 'ȇ' => 'Ȇ', - 'ȉ' => 'Ȉ', - 'ȋ' => 'Ȋ', - 'ȍ' => 'Ȍ', - 'ȏ' => 'Ȏ', - 'ȑ' => 'Ȑ', - 'ȓ' => 'Ȓ', - 'ȕ' => 'Ȕ', - 'ȗ' => 'Ȗ', - 'ș' => 'Ș', - 'ț' => 'Ț', - 'ȝ' => 'Ȝ', - 'ȟ' => 'Ȟ', - 'ȣ' => 'Ȣ', - 'ȥ' => 'Ȥ', - 'ȧ' => 'Ȧ', - 'ȩ' => 'Ȩ', - 'ȫ' => 'Ȫ', - 'ȭ' => 'Ȭ', - 'ȯ' => 'Ȯ', - 'ȱ' => 'Ȱ', - 'ȳ' => 'Ȳ', - 'ȼ' => 'Ȼ', - 'ȿ' => 'Ȿ', - 'ɀ' => 'Ɀ', - 'ɂ' => 'Ɂ', - 'ɇ' => 'Ɇ', - 'ɉ' => 'Ɉ', - 'ɋ' => 'Ɋ', - 'ɍ' => 'Ɍ', - 'ɏ' => 'Ɏ', - 'ɐ' => 'Ɐ', - 'ɑ' => 'Ɑ', - 'ɒ' => 'Ɒ', - 'ɓ' => 'Ɓ', - 'ɔ' => 'Ɔ', - 'ɖ' => 'Ɖ', - 'ɗ' => 'Ɗ', - 'ə' => 'Ə', - 'ɛ' => 'Ɛ', - 'ɜ' => 'Ɜ', - 'ɠ' => 'Ɠ', - 'ɡ' => 'Ɡ', - 'ɣ' => 'Ɣ', - 'ɥ' => 'Ɥ', - 'ɦ' => 'Ɦ', - 'ɨ' => 'Ɨ', - 'ɩ' => 'Ɩ', - 'ɪ' => 'Ɪ', - 'ɫ' => 'Ɫ', - 'ɬ' => 'Ɬ', - 'ɯ' => 'Ɯ', - 'ɱ' => 'Ɱ', - 'ɲ' => 'Ɲ', - 'ɵ' => 'Ɵ', - 'ɽ' => 'Ɽ', - 'ʀ' => 'Ʀ', - 'ʂ' => 'Ʂ', - 'ʃ' => 'Ʃ', - 'ʇ' => 'Ʇ', - 'ʈ' => 'Ʈ', - 'ʉ' => 'Ʉ', - 'ʊ' => 'Ʊ', - 'ʋ' => 'Ʋ', - 'ʌ' => 'Ʌ', - 'ʒ' => 'Ʒ', - 'ʝ' => 'Ʝ', - 'ʞ' => 'Ʞ', - 'ͅ' => 'Ι', - 'ͱ' => 'Ͱ', - 'ͳ' => 'Ͳ', - 'ͷ' => 'Ͷ', - 'ͻ' => 'Ͻ', - 'ͼ' => 'Ͼ', - 'ͽ' => 'Ͽ', - 'ά' => 'Ά', - 'έ' => 'Έ', - 'ή' => 'Ή', - 'ί' => 'Ί', - 'α' => 'Α', - 'β' => 'Β', - 'γ' => 'Γ', - 'δ' => 'Δ', - 'ε' => 'Ε', - 'ζ' => 'Ζ', - 'η' => 'Η', - 'θ' => 'Θ', - 'ι' => 'Ι', - 'κ' => 'Κ', - 'λ' => 'Λ', - 'μ' => 'Μ', - 'ν' => 'Ν', - 'ξ' => 'Ξ', - 'ο' => 'Ο', - 'π' => 'Π', - 'ρ' => 'Ρ', - 'ς' => 'Σ', - 'σ' => 'Σ', - 'τ' => 'Τ', - 'υ' => 'Υ', - 'φ' => 'Φ', - 'χ' => 'Χ', - 'ψ' => 'Ψ', - 'ω' => 'Ω', - 'ϊ' => 'Ϊ', - 'ϋ' => 'Ϋ', - 'ό' => 'Ό', - 'ύ' => 'Ύ', - 'ώ' => 'Ώ', - 'ϐ' => 'Β', - 'ϑ' => 'Θ', - 'ϕ' => 'Φ', - 'ϖ' => 'Π', - 'ϗ' => 'Ϗ', - 'ϙ' => 'Ϙ', - 'ϛ' => 'Ϛ', - 'ϝ' => 'Ϝ', - 'ϟ' => 'Ϟ', - 'ϡ' => 'Ϡ', - 'ϣ' => 'Ϣ', - 'ϥ' => 'Ϥ', - 'ϧ' => 'Ϧ', - 'ϩ' => 'Ϩ', - 'ϫ' => 'Ϫ', - 'ϭ' => 'Ϭ', - 'ϯ' => 'Ϯ', - 'ϰ' => 'Κ', - 'ϱ' => 'Ρ', - 'ϲ' => 'Ϲ', - 'ϳ' => 'Ϳ', - 'ϵ' => 'Ε', - 'ϸ' => 'Ϸ', - 'ϻ' => 'Ϻ', - 'а' => 'А', - 'б' => 'Б', - 'в' => 'В', - 'г' => 'Г', - 'д' => 'Д', - 'е' => 'Е', - 'ж' => 'Ж', - 'з' => 'З', - 'и' => 'И', - 'й' => 'Й', - 'к' => 'К', - 'л' => 'Л', - 'м' => 'М', - 'н' => 'Н', - 'о' => 'О', - 'п' => 'П', - 'р' => 'Р', - 'с' => 'С', - 'т' => 'Т', - 'у' => 'У', - 'ф' => 'Ф', - 'х' => 'Х', - 'ц' => 'Ц', - 'ч' => 'Ч', - 'ш' => 'Ш', - 'щ' => 'Щ', - 'ъ' => 'Ъ', - 'ы' => 'Ы', - 'ь' => 'Ь', - 'э' => 'Э', - 'ю' => 'Ю', - 'я' => 'Я', - 'ѐ' => 'Ѐ', - 'ё' => 'Ё', - 'ђ' => 'Ђ', - 'ѓ' => 'Ѓ', - 'є' => 'Є', - 'ѕ' => 'Ѕ', - 'і' => 'І', - 'ї' => 'Ї', - 'ј' => 'Ј', - 'љ' => 'Љ', - 'њ' => 'Њ', - 'ћ' => 'Ћ', - 'ќ' => 'Ќ', - 'ѝ' => 'Ѝ', - 'ў' => 'Ў', - 'џ' => 'Џ', - 'ѡ' => 'Ѡ', - 'ѣ' => 'Ѣ', - 'ѥ' => 'Ѥ', - 'ѧ' => 'Ѧ', - 'ѩ' => 'Ѩ', - 'ѫ' => 'Ѫ', - 'ѭ' => 'Ѭ', - 'ѯ' => 'Ѯ', - 'ѱ' => 'Ѱ', - 'ѳ' => 'Ѳ', - 'ѵ' => 'Ѵ', - 'ѷ' => 'Ѷ', - 'ѹ' => 'Ѹ', - 'ѻ' => 'Ѻ', - 'ѽ' => 'Ѽ', - 'ѿ' => 'Ѿ', - 'ҁ' => 'Ҁ', - 'ҋ' => 'Ҋ', - 'ҍ' => 'Ҍ', - 'ҏ' => 'Ҏ', - 'ґ' => 'Ґ', - 'ғ' => 'Ғ', - 'ҕ' => 'Ҕ', - 'җ' => 'Җ', - 'ҙ' => 'Ҙ', - 'қ' => 'Қ', - 'ҝ' => 'Ҝ', - 'ҟ' => 'Ҟ', - 'ҡ' => 'Ҡ', - 'ң' => 'Ң', - 'ҥ' => 'Ҥ', - 'ҧ' => 'Ҧ', - 'ҩ' => 'Ҩ', - 'ҫ' => 'Ҫ', - 'ҭ' => 'Ҭ', - 'ү' => 'Ү', - 'ұ' => 'Ұ', - 'ҳ' => 'Ҳ', - 'ҵ' => 'Ҵ', - 'ҷ' => 'Ҷ', - 'ҹ' => 'Ҹ', - 'һ' => 'Һ', - 'ҽ' => 'Ҽ', - 'ҿ' => 'Ҿ', - 'ӂ' => 'Ӂ', - 'ӄ' => 'Ӄ', - 'ӆ' => 'Ӆ', - 'ӈ' => 'Ӈ', - 'ӊ' => 'Ӊ', - 'ӌ' => 'Ӌ', - 'ӎ' => 'Ӎ', - 'ӏ' => 'Ӏ', - 'ӑ' => 'Ӑ', - 'ӓ' => 'Ӓ', - 'ӕ' => 'Ӕ', - 'ӗ' => 'Ӗ', - 'ә' => 'Ә', - 'ӛ' => 'Ӛ', - 'ӝ' => 'Ӝ', - 'ӟ' => 'Ӟ', - 'ӡ' => 'Ӡ', - 'ӣ' => 'Ӣ', - 'ӥ' => 'Ӥ', - 'ӧ' => 'Ӧ', - 'ө' => 'Ө', - 'ӫ' => 'Ӫ', - 'ӭ' => 'Ӭ', - 'ӯ' => 'Ӯ', - 'ӱ' => 'Ӱ', - 'ӳ' => 'Ӳ', - 'ӵ' => 'Ӵ', - 'ӷ' => 'Ӷ', - 'ӹ' => 'Ӹ', - 'ӻ' => 'Ӻ', - 'ӽ' => 'Ӽ', - 'ӿ' => 'Ӿ', - 'ԁ' => 'Ԁ', - 'ԃ' => 'Ԃ', - 'ԅ' => 'Ԅ', - 'ԇ' => 'Ԇ', - 'ԉ' => 'Ԉ', - 'ԋ' => 'Ԋ', - 'ԍ' => 'Ԍ', - 'ԏ' => 'Ԏ', - 'ԑ' => 'Ԑ', - 'ԓ' => 'Ԓ', - 'ԕ' => 'Ԕ', - 'ԗ' => 'Ԗ', - 'ԙ' => 'Ԙ', - 'ԛ' => 'Ԛ', - 'ԝ' => 'Ԝ', - 'ԟ' => 'Ԟ', - 'ԡ' => 'Ԡ', - 'ԣ' => 'Ԣ', - 'ԥ' => 'Ԥ', - 'ԧ' => 'Ԧ', - 'ԩ' => 'Ԩ', - 'ԫ' => 'Ԫ', - 'ԭ' => 'Ԭ', - 'ԯ' => 'Ԯ', - 'ա' => 'Ա', - 'բ' => 'Բ', - 'գ' => 'Գ', - 'դ' => 'Դ', - 'ե' => 'Ե', - 'զ' => 'Զ', - 'է' => 'Է', - 'ը' => 'Ը', - 'թ' => 'Թ', - 'ժ' => 'Ժ', - 'ի' => 'Ի', - 'լ' => 'Լ', - 'խ' => 'Խ', - 'ծ' => 'Ծ', - 'կ' => 'Կ', - 'հ' => 'Հ', - 'ձ' => 'Ձ', - 'ղ' => 'Ղ', - 'ճ' => 'Ճ', - 'մ' => 'Մ', - 'յ' => 'Յ', - 'ն' => 'Ն', - 'շ' => 'Շ', - 'ո' => 'Ո', - 'չ' => 'Չ', - 'պ' => 'Պ', - 'ջ' => 'Ջ', - 'ռ' => 'Ռ', - 'ս' => 'Ս', - 'վ' => 'Վ', - 'տ' => 'Տ', - 'ր' => 'Ր', - 'ց' => 'Ց', - 'ւ' => 'Ւ', - 'փ' => 'Փ', - 'ք' => 'Ք', - 'օ' => 'Օ', - 'ֆ' => 'Ֆ', - 'ა' => 'Ა', - 'ბ' => 'Ბ', - 'გ' => 'Გ', - 'დ' => 'Დ', - 'ე' => 'Ე', - 'ვ' => 'Ვ', - 'ზ' => 'Ზ', - 'თ' => 'Თ', - 'ი' => 'Ი', - 'კ' => 'Კ', - 'ლ' => 'Ლ', - 'მ' => 'Მ', - 'ნ' => 'Ნ', - 'ო' => 'Ო', - 'პ' => 'Პ', - 'ჟ' => 'Ჟ', - 'რ' => 'Რ', - 'ს' => 'Ს', - 'ტ' => 'Ტ', - 'უ' => 'Უ', - 'ფ' => 'Ფ', - 'ქ' => 'Ქ', - 'ღ' => 'Ღ', - 'ყ' => 'Ყ', - 'შ' => 'Შ', - 'ჩ' => 'Ჩ', - 'ც' => 'Ც', - 'ძ' => 'Ძ', - 'წ' => 'Წ', - 'ჭ' => 'Ჭ', - 'ხ' => 'Ხ', - 'ჯ' => 'Ჯ', - 'ჰ' => 'Ჰ', - 'ჱ' => 'Ჱ', - 'ჲ' => 'Ჲ', - 'ჳ' => 'Ჳ', - 'ჴ' => 'Ჴ', - 'ჵ' => 'Ჵ', - 'ჶ' => 'Ჶ', - 'ჷ' => 'Ჷ', - 'ჸ' => 'Ჸ', - 'ჹ' => 'Ჹ', - 'ჺ' => 'Ჺ', - 'ჽ' => 'Ჽ', - 'ჾ' => 'Ჾ', - 'ჿ' => 'Ჿ', - 'ᏸ' => 'Ᏸ', - 'ᏹ' => 'Ᏹ', - 'ᏺ' => 'Ᏺ', - 'ᏻ' => 'Ᏻ', - 'ᏼ' => 'Ᏼ', - 'ᏽ' => 'Ᏽ', - 'ᲀ' => 'В', - 'ᲁ' => 'Д', - 'ᲂ' => 'О', - 'ᲃ' => 'С', - 'ᲄ' => 'Т', - 'ᲅ' => 'Т', - 'ᲆ' => 'Ъ', - 'ᲇ' => 'Ѣ', - 'ᲈ' => 'Ꙋ', - 'ᵹ' => 'Ᵹ', - 'ᵽ' => 'Ᵽ', - 'ᶎ' => 'Ᶎ', - 'ḁ' => 'Ḁ', - 'ḃ' => 'Ḃ', - 'ḅ' => 'Ḅ', - 'ḇ' => 'Ḇ', - 'ḉ' => 'Ḉ', - 'ḋ' => 'Ḋ', - 'ḍ' => 'Ḍ', - 'ḏ' => 'Ḏ', - 'ḑ' => 'Ḑ', - 'ḓ' => 'Ḓ', - 'ḕ' => 'Ḕ', - 'ḗ' => 'Ḗ', - 'ḙ' => 'Ḙ', - 'ḛ' => 'Ḛ', - 'ḝ' => 'Ḝ', - 'ḟ' => 'Ḟ', - 'ḡ' => 'Ḡ', - 'ḣ' => 'Ḣ', - 'ḥ' => 'Ḥ', - 'ḧ' => 'Ḧ', - 'ḩ' => 'Ḩ', - 'ḫ' => 'Ḫ', - 'ḭ' => 'Ḭ', - 'ḯ' => 'Ḯ', - 'ḱ' => 'Ḱ', - 'ḳ' => 'Ḳ', - 'ḵ' => 'Ḵ', - 'ḷ' => 'Ḷ', - 'ḹ' => 'Ḹ', - 'ḻ' => 'Ḻ', - 'ḽ' => 'Ḽ', - 'ḿ' => 'Ḿ', - 'ṁ' => 'Ṁ', - 'ṃ' => 'Ṃ', - 'ṅ' => 'Ṅ', - 'ṇ' => 'Ṇ', - 'ṉ' => 'Ṉ', - 'ṋ' => 'Ṋ', - 'ṍ' => 'Ṍ', - 'ṏ' => 'Ṏ', - 'ṑ' => 'Ṑ', - 'ṓ' => 'Ṓ', - 'ṕ' => 'Ṕ', - 'ṗ' => 'Ṗ', - 'ṙ' => 'Ṙ', - 'ṛ' => 'Ṛ', - 'ṝ' => 'Ṝ', - 'ṟ' => 'Ṟ', - 'ṡ' => 'Ṡ', - 'ṣ' => 'Ṣ', - 'ṥ' => 'Ṥ', - 'ṧ' => 'Ṧ', - 'ṩ' => 'Ṩ', - 'ṫ' => 'Ṫ', - 'ṭ' => 'Ṭ', - 'ṯ' => 'Ṯ', - 'ṱ' => 'Ṱ', - 'ṳ' => 'Ṳ', - 'ṵ' => 'Ṵ', - 'ṷ' => 'Ṷ', - 'ṹ' => 'Ṹ', - 'ṻ' => 'Ṻ', - 'ṽ' => 'Ṽ', - 'ṿ' => 'Ṿ', - 'ẁ' => 'Ẁ', - 'ẃ' => 'Ẃ', - 'ẅ' => 'Ẅ', - 'ẇ' => 'Ẇ', - 'ẉ' => 'Ẉ', - 'ẋ' => 'Ẋ', - 'ẍ' => 'Ẍ', - 'ẏ' => 'Ẏ', - 'ẑ' => 'Ẑ', - 'ẓ' => 'Ẓ', - 'ẕ' => 'Ẕ', - 'ẛ' => 'Ṡ', - 'ạ' => 'Ạ', - 'ả' => 'Ả', - 'ấ' => 'Ấ', - 'ầ' => 'Ầ', - 'ẩ' => 'Ẩ', - 'ẫ' => 'Ẫ', - 'ậ' => 'Ậ', - 'ắ' => 'Ắ', - 'ằ' => 'Ằ', - 'ẳ' => 'Ẳ', - 'ẵ' => 'Ẵ', - 'ặ' => 'Ặ', - 'ẹ' => 'Ẹ', - 'ẻ' => 'Ẻ', - 'ẽ' => 'Ẽ', - 'ế' => 'Ế', - 'ề' => 'Ề', - 'ể' => 'Ể', - 'ễ' => 'Ễ', - 'ệ' => 'Ệ', - 'ỉ' => 'Ỉ', - 'ị' => 'Ị', - 'ọ' => 'Ọ', - 'ỏ' => 'Ỏ', - 'ố' => 'Ố', - 'ồ' => 'Ồ', - 'ổ' => 'Ổ', - 'ỗ' => 'Ỗ', - 'ộ' => 'Ộ', - 'ớ' => 'Ớ', - 'ờ' => 'Ờ', - 'ở' => 'Ở', - 'ỡ' => 'Ỡ', - 'ợ' => 'Ợ', - 'ụ' => 'Ụ', - 'ủ' => 'Ủ', - 'ứ' => 'Ứ', - 'ừ' => 'Ừ', - 'ử' => 'Ử', - 'ữ' => 'Ữ', - 'ự' => 'Ự', - 'ỳ' => 'Ỳ', - 'ỵ' => 'Ỵ', - 'ỷ' => 'Ỷ', - 'ỹ' => 'Ỹ', - 'ỻ' => 'Ỻ', - 'ỽ' => 'Ỽ', - 'ỿ' => 'Ỿ', - 'ἀ' => 'Ἀ', - 'ἁ' => 'Ἁ', - 'ἂ' => 'Ἂ', - 'ἃ' => 'Ἃ', - 'ἄ' => 'Ἄ', - 'ἅ' => 'Ἅ', - 'ἆ' => 'Ἆ', - 'ἇ' => 'Ἇ', - 'ἐ' => 'Ἐ', - 'ἑ' => 'Ἑ', - 'ἒ' => 'Ἒ', - 'ἓ' => 'Ἓ', - 'ἔ' => 'Ἔ', - 'ἕ' => 'Ἕ', - 'ἠ' => 'Ἠ', - 'ἡ' => 'Ἡ', - 'ἢ' => 'Ἢ', - 'ἣ' => 'Ἣ', - 'ἤ' => 'Ἤ', - 'ἥ' => 'Ἥ', - 'ἦ' => 'Ἦ', - 'ἧ' => 'Ἧ', - 'ἰ' => 'Ἰ', - 'ἱ' => 'Ἱ', - 'ἲ' => 'Ἲ', - 'ἳ' => 'Ἳ', - 'ἴ' => 'Ἴ', - 'ἵ' => 'Ἵ', - 'ἶ' => 'Ἶ', - 'ἷ' => 'Ἷ', - 'ὀ' => 'Ὀ', - 'ὁ' => 'Ὁ', - 'ὂ' => 'Ὂ', - 'ὃ' => 'Ὃ', - 'ὄ' => 'Ὄ', - 'ὅ' => 'Ὅ', - 'ὑ' => 'Ὑ', - 'ὓ' => 'Ὓ', - 'ὕ' => 'Ὕ', - 'ὗ' => 'Ὗ', - 'ὠ' => 'Ὠ', - 'ὡ' => 'Ὡ', - 'ὢ' => 'Ὢ', - 'ὣ' => 'Ὣ', - 'ὤ' => 'Ὤ', - 'ὥ' => 'Ὥ', - 'ὦ' => 'Ὦ', - 'ὧ' => 'Ὧ', - 'ὰ' => 'Ὰ', - 'ά' => 'Ά', - 'ὲ' => 'Ὲ', - 'έ' => 'Έ', - 'ὴ' => 'Ὴ', - 'ή' => 'Ή', - 'ὶ' => 'Ὶ', - 'ί' => 'Ί', - 'ὸ' => 'Ὸ', - 'ό' => 'Ό', - 'ὺ' => 'Ὺ', - 'ύ' => 'Ύ', - 'ὼ' => 'Ὼ', - 'ώ' => 'Ώ', - 'ᾀ' => 'ἈΙ', - 'ᾁ' => 'ἉΙ', - 'ᾂ' => 'ἊΙ', - 'ᾃ' => 'ἋΙ', - 'ᾄ' => 'ἌΙ', - 'ᾅ' => 'ἍΙ', - 'ᾆ' => 'ἎΙ', - 'ᾇ' => 'ἏΙ', - 'ᾐ' => 'ἨΙ', - 'ᾑ' => 'ἩΙ', - 'ᾒ' => 'ἪΙ', - 'ᾓ' => 'ἫΙ', - 'ᾔ' => 'ἬΙ', - 'ᾕ' => 'ἭΙ', - 'ᾖ' => 'ἮΙ', - 'ᾗ' => 'ἯΙ', - 'ᾠ' => 'ὨΙ', - 'ᾡ' => 'ὩΙ', - 'ᾢ' => 'ὪΙ', - 'ᾣ' => 'ὫΙ', - 'ᾤ' => 'ὬΙ', - 'ᾥ' => 'ὭΙ', - 'ᾦ' => 'ὮΙ', - 'ᾧ' => 'ὯΙ', - 'ᾰ' => 'Ᾰ', - 'ᾱ' => 'Ᾱ', - 'ᾳ' => 'ΑΙ', - 'ι' => 'Ι', - 'ῃ' => 'ΗΙ', - 'ῐ' => 'Ῐ', - 'ῑ' => 'Ῑ', - 'ῠ' => 'Ῠ', - 'ῡ' => 'Ῡ', - 'ῥ' => 'Ῥ', - 'ῳ' => 'ΩΙ', - 'ⅎ' => 'Ⅎ', - 'ⅰ' => 'Ⅰ', - 'ⅱ' => 'Ⅱ', - 'ⅲ' => 'Ⅲ', - 'ⅳ' => 'Ⅳ', - 'ⅴ' => 'Ⅴ', - 'ⅵ' => 'Ⅵ', - 'ⅶ' => 'Ⅶ', - 'ⅷ' => 'Ⅷ', - 'ⅸ' => 'Ⅸ', - 'ⅹ' => 'Ⅹ', - 'ⅺ' => 'Ⅺ', - 'ⅻ' => 'Ⅻ', - 'ⅼ' => 'Ⅼ', - 'ⅽ' => 'Ⅽ', - 'ⅾ' => 'Ⅾ', - 'ⅿ' => 'Ⅿ', - 'ↄ' => 'Ↄ', - 'ⓐ' => 'Ⓐ', - 'ⓑ' => 'Ⓑ', - 'ⓒ' => 'Ⓒ', - 'ⓓ' => 'Ⓓ', - 'ⓔ' => 'Ⓔ', - 'ⓕ' => 'Ⓕ', - 'ⓖ' => 'Ⓖ', - 'ⓗ' => 'Ⓗ', - 'ⓘ' => 'Ⓘ', - 'ⓙ' => 'Ⓙ', - 'ⓚ' => 'Ⓚ', - 'ⓛ' => 'Ⓛ', - 'ⓜ' => 'Ⓜ', - 'ⓝ' => 'Ⓝ', - 'ⓞ' => 'Ⓞ', - 'ⓟ' => 'Ⓟ', - 'ⓠ' => 'Ⓠ', - 'ⓡ' => 'Ⓡ', - 'ⓢ' => 'Ⓢ', - 'ⓣ' => 'Ⓣ', - 'ⓤ' => 'Ⓤ', - 'ⓥ' => 'Ⓥ', - 'ⓦ' => 'Ⓦ', - 'ⓧ' => 'Ⓧ', - 'ⓨ' => 'Ⓨ', - 'ⓩ' => 'Ⓩ', - 'ⰰ' => 'Ⰰ', - 'ⰱ' => 'Ⰱ', - 'ⰲ' => 'Ⰲ', - 'ⰳ' => 'Ⰳ', - 'ⰴ' => 'Ⰴ', - 'ⰵ' => 'Ⰵ', - 'ⰶ' => 'Ⰶ', - 'ⰷ' => 'Ⰷ', - 'ⰸ' => 'Ⰸ', - 'ⰹ' => 'Ⰹ', - 'ⰺ' => 'Ⰺ', - 'ⰻ' => 'Ⰻ', - 'ⰼ' => 'Ⰼ', - 'ⰽ' => 'Ⰽ', - 'ⰾ' => 'Ⰾ', - 'ⰿ' => 'Ⰿ', - 'ⱀ' => 'Ⱀ', - 'ⱁ' => 'Ⱁ', - 'ⱂ' => 'Ⱂ', - 'ⱃ' => 'Ⱃ', - 'ⱄ' => 'Ⱄ', - 'ⱅ' => 'Ⱅ', - 'ⱆ' => 'Ⱆ', - 'ⱇ' => 'Ⱇ', - 'ⱈ' => 'Ⱈ', - 'ⱉ' => 'Ⱉ', - 'ⱊ' => 'Ⱊ', - 'ⱋ' => 'Ⱋ', - 'ⱌ' => 'Ⱌ', - 'ⱍ' => 'Ⱍ', - 'ⱎ' => 'Ⱎ', - 'ⱏ' => 'Ⱏ', - 'ⱐ' => 'Ⱐ', - 'ⱑ' => 'Ⱑ', - 'ⱒ' => 'Ⱒ', - 'ⱓ' => 'Ⱓ', - 'ⱔ' => 'Ⱔ', - 'ⱕ' => 'Ⱕ', - 'ⱖ' => 'Ⱖ', - 'ⱗ' => 'Ⱗ', - 'ⱘ' => 'Ⱘ', - 'ⱙ' => 'Ⱙ', - 'ⱚ' => 'Ⱚ', - 'ⱛ' => 'Ⱛ', - 'ⱜ' => 'Ⱜ', - 'ⱝ' => 'Ⱝ', - 'ⱞ' => 'Ⱞ', - 'ⱡ' => 'Ⱡ', - 'ⱥ' => 'Ⱥ', - 'ⱦ' => 'Ⱦ', - 'ⱨ' => 'Ⱨ', - 'ⱪ' => 'Ⱪ', - 'ⱬ' => 'Ⱬ', - 'ⱳ' => 'Ⱳ', - 'ⱶ' => 'Ⱶ', - 'ⲁ' => 'Ⲁ', - 'ⲃ' => 'Ⲃ', - 'ⲅ' => 'Ⲅ', - 'ⲇ' => 'Ⲇ', - 'ⲉ' => 'Ⲉ', - 'ⲋ' => 'Ⲋ', - 'ⲍ' => 'Ⲍ', - 'ⲏ' => 'Ⲏ', - 'ⲑ' => 'Ⲑ', - 'ⲓ' => 'Ⲓ', - 'ⲕ' => 'Ⲕ', - 'ⲗ' => 'Ⲗ', - 'ⲙ' => 'Ⲙ', - 'ⲛ' => 'Ⲛ', - 'ⲝ' => 'Ⲝ', - 'ⲟ' => 'Ⲟ', - 'ⲡ' => 'Ⲡ', - 'ⲣ' => 'Ⲣ', - 'ⲥ' => 'Ⲥ', - 'ⲧ' => 'Ⲧ', - 'ⲩ' => 'Ⲩ', - 'ⲫ' => 'Ⲫ', - 'ⲭ' => 'Ⲭ', - 'ⲯ' => 'Ⲯ', - 'ⲱ' => 'Ⲱ', - 'ⲳ' => 'Ⲳ', - 'ⲵ' => 'Ⲵ', - 'ⲷ' => 'Ⲷ', - 'ⲹ' => 'Ⲹ', - 'ⲻ' => 'Ⲻ', - 'ⲽ' => 'Ⲽ', - 'ⲿ' => 'Ⲿ', - 'ⳁ' => 'Ⳁ', - 'ⳃ' => 'Ⳃ', - 'ⳅ' => 'Ⳅ', - 'ⳇ' => 'Ⳇ', - 'ⳉ' => 'Ⳉ', - 'ⳋ' => 'Ⳋ', - 'ⳍ' => 'Ⳍ', - 'ⳏ' => 'Ⳏ', - 'ⳑ' => 'Ⳑ', - 'ⳓ' => 'Ⳓ', - 'ⳕ' => 'Ⳕ', - 'ⳗ' => 'Ⳗ', - 'ⳙ' => 'Ⳙ', - 'ⳛ' => 'Ⳛ', - 'ⳝ' => 'Ⳝ', - 'ⳟ' => 'Ⳟ', - 'ⳡ' => 'Ⳡ', - 'ⳣ' => 'Ⳣ', - 'ⳬ' => 'Ⳬ', - 'ⳮ' => 'Ⳮ', - 'ⳳ' => 'Ⳳ', - 'ⴀ' => 'Ⴀ', - 'ⴁ' => 'Ⴁ', - 'ⴂ' => 'Ⴂ', - 'ⴃ' => 'Ⴃ', - 'ⴄ' => 'Ⴄ', - 'ⴅ' => 'Ⴅ', - 'ⴆ' => 'Ⴆ', - 'ⴇ' => 'Ⴇ', - 'ⴈ' => 'Ⴈ', - 'ⴉ' => 'Ⴉ', - 'ⴊ' => 'Ⴊ', - 'ⴋ' => 'Ⴋ', - 'ⴌ' => 'Ⴌ', - 'ⴍ' => 'Ⴍ', - 'ⴎ' => 'Ⴎ', - 'ⴏ' => 'Ⴏ', - 'ⴐ' => 'Ⴐ', - 'ⴑ' => 'Ⴑ', - 'ⴒ' => 'Ⴒ', - 'ⴓ' => 'Ⴓ', - 'ⴔ' => 'Ⴔ', - 'ⴕ' => 'Ⴕ', - 'ⴖ' => 'Ⴖ', - 'ⴗ' => 'Ⴗ', - 'ⴘ' => 'Ⴘ', - 'ⴙ' => 'Ⴙ', - 'ⴚ' => 'Ⴚ', - 'ⴛ' => 'Ⴛ', - 'ⴜ' => 'Ⴜ', - 'ⴝ' => 'Ⴝ', - 'ⴞ' => 'Ⴞ', - 'ⴟ' => 'Ⴟ', - 'ⴠ' => 'Ⴠ', - 'ⴡ' => 'Ⴡ', - 'ⴢ' => 'Ⴢ', - 'ⴣ' => 'Ⴣ', - 'ⴤ' => 'Ⴤ', - 'ⴥ' => 'Ⴥ', - 'ⴧ' => 'Ⴧ', - 'ⴭ' => 'Ⴭ', - 'ꙁ' => 'Ꙁ', - 'ꙃ' => 'Ꙃ', - 'ꙅ' => 'Ꙅ', - 'ꙇ' => 'Ꙇ', - 'ꙉ' => 'Ꙉ', - 'ꙋ' => 'Ꙋ', - 'ꙍ' => 'Ꙍ', - 'ꙏ' => 'Ꙏ', - 'ꙑ' => 'Ꙑ', - 'ꙓ' => 'Ꙓ', - 'ꙕ' => 'Ꙕ', - 'ꙗ' => 'Ꙗ', - 'ꙙ' => 'Ꙙ', - 'ꙛ' => 'Ꙛ', - 'ꙝ' => 'Ꙝ', - 'ꙟ' => 'Ꙟ', - 'ꙡ' => 'Ꙡ', - 'ꙣ' => 'Ꙣ', - 'ꙥ' => 'Ꙥ', - 'ꙧ' => 'Ꙧ', - 'ꙩ' => 'Ꙩ', - 'ꙫ' => 'Ꙫ', - 'ꙭ' => 'Ꙭ', - 'ꚁ' => 'Ꚁ', - 'ꚃ' => 'Ꚃ', - 'ꚅ' => 'Ꚅ', - 'ꚇ' => 'Ꚇ', - 'ꚉ' => 'Ꚉ', - 'ꚋ' => 'Ꚋ', - 'ꚍ' => 'Ꚍ', - 'ꚏ' => 'Ꚏ', - 'ꚑ' => 'Ꚑ', - 'ꚓ' => 'Ꚓ', - 'ꚕ' => 'Ꚕ', - 'ꚗ' => 'Ꚗ', - 'ꚙ' => 'Ꚙ', - 'ꚛ' => 'Ꚛ', - 'ꜣ' => 'Ꜣ', - 'ꜥ' => 'Ꜥ', - 'ꜧ' => 'Ꜧ', - 'ꜩ' => 'Ꜩ', - 'ꜫ' => 'Ꜫ', - 'ꜭ' => 'Ꜭ', - 'ꜯ' => 'Ꜯ', - 'ꜳ' => 'Ꜳ', - 'ꜵ' => 'Ꜵ', - 'ꜷ' => 'Ꜷ', - 'ꜹ' => 'Ꜹ', - 'ꜻ' => 'Ꜻ', - 'ꜽ' => 'Ꜽ', - 'ꜿ' => 'Ꜿ', - 'ꝁ' => 'Ꝁ', - 'ꝃ' => 'Ꝃ', - 'ꝅ' => 'Ꝅ', - 'ꝇ' => 'Ꝇ', - 'ꝉ' => 'Ꝉ', - 'ꝋ' => 'Ꝋ', - 'ꝍ' => 'Ꝍ', - 'ꝏ' => 'Ꝏ', - 'ꝑ' => 'Ꝑ', - 'ꝓ' => 'Ꝓ', - 'ꝕ' => 'Ꝕ', - 'ꝗ' => 'Ꝗ', - 'ꝙ' => 'Ꝙ', - 'ꝛ' => 'Ꝛ', - 'ꝝ' => 'Ꝝ', - 'ꝟ' => 'Ꝟ', - 'ꝡ' => 'Ꝡ', - 'ꝣ' => 'Ꝣ', - 'ꝥ' => 'Ꝥ', - 'ꝧ' => 'Ꝧ', - 'ꝩ' => 'Ꝩ', - 'ꝫ' => 'Ꝫ', - 'ꝭ' => 'Ꝭ', - 'ꝯ' => 'Ꝯ', - 'ꝺ' => 'Ꝺ', - 'ꝼ' => 'Ꝼ', - 'ꝿ' => 'Ꝿ', - 'ꞁ' => 'Ꞁ', - 'ꞃ' => 'Ꞃ', - 'ꞅ' => 'Ꞅ', - 'ꞇ' => 'Ꞇ', - 'ꞌ' => 'Ꞌ', - 'ꞑ' => 'Ꞑ', - 'ꞓ' => 'Ꞓ', - 'ꞔ' => 'Ꞔ', - 'ꞗ' => 'Ꞗ', - 'ꞙ' => 'Ꞙ', - 'ꞛ' => 'Ꞛ', - 'ꞝ' => 'Ꞝ', - 'ꞟ' => 'Ꞟ', - 'ꞡ' => 'Ꞡ', - 'ꞣ' => 'Ꞣ', - 'ꞥ' => 'Ꞥ', - 'ꞧ' => 'Ꞧ', - 'ꞩ' => 'Ꞩ', - 'ꞵ' => 'Ꞵ', - 'ꞷ' => 'Ꞷ', - 'ꞹ' => 'Ꞹ', - 'ꞻ' => 'Ꞻ', - 'ꞽ' => 'Ꞽ', - 'ꞿ' => 'Ꞿ', - 'ꟃ' => 'Ꟃ', - 'ꟈ' => 'Ꟈ', - 'ꟊ' => 'Ꟊ', - 'ꟶ' => 'Ꟶ', - 'ꭓ' => 'Ꭓ', - 'ꭰ' => 'Ꭰ', - 'ꭱ' => 'Ꭱ', - 'ꭲ' => 'Ꭲ', - 'ꭳ' => 'Ꭳ', - 'ꭴ' => 'Ꭴ', - 'ꭵ' => 'Ꭵ', - 'ꭶ' => 'Ꭶ', - 'ꭷ' => 'Ꭷ', - 'ꭸ' => 'Ꭸ', - 'ꭹ' => 'Ꭹ', - 'ꭺ' => 'Ꭺ', - 'ꭻ' => 'Ꭻ', - 'ꭼ' => 'Ꭼ', - 'ꭽ' => 'Ꭽ', - 'ꭾ' => 'Ꭾ', - 'ꭿ' => 'Ꭿ', - 'ꮀ' => 'Ꮀ', - 'ꮁ' => 'Ꮁ', - 'ꮂ' => 'Ꮂ', - 'ꮃ' => 'Ꮃ', - 'ꮄ' => 'Ꮄ', - 'ꮅ' => 'Ꮅ', - 'ꮆ' => 'Ꮆ', - 'ꮇ' => 'Ꮇ', - 'ꮈ' => 'Ꮈ', - 'ꮉ' => 'Ꮉ', - 'ꮊ' => 'Ꮊ', - 'ꮋ' => 'Ꮋ', - 'ꮌ' => 'Ꮌ', - 'ꮍ' => 'Ꮍ', - 'ꮎ' => 'Ꮎ', - 'ꮏ' => 'Ꮏ', - 'ꮐ' => 'Ꮐ', - 'ꮑ' => 'Ꮑ', - 'ꮒ' => 'Ꮒ', - 'ꮓ' => 'Ꮓ', - 'ꮔ' => 'Ꮔ', - 'ꮕ' => 'Ꮕ', - 'ꮖ' => 'Ꮖ', - 'ꮗ' => 'Ꮗ', - 'ꮘ' => 'Ꮘ', - 'ꮙ' => 'Ꮙ', - 'ꮚ' => 'Ꮚ', - 'ꮛ' => 'Ꮛ', - 'ꮜ' => 'Ꮜ', - 'ꮝ' => 'Ꮝ', - 'ꮞ' => 'Ꮞ', - 'ꮟ' => 'Ꮟ', - 'ꮠ' => 'Ꮠ', - 'ꮡ' => 'Ꮡ', - 'ꮢ' => 'Ꮢ', - 'ꮣ' => 'Ꮣ', - 'ꮤ' => 'Ꮤ', - 'ꮥ' => 'Ꮥ', - 'ꮦ' => 'Ꮦ', - 'ꮧ' => 'Ꮧ', - 'ꮨ' => 'Ꮨ', - 'ꮩ' => 'Ꮩ', - 'ꮪ' => 'Ꮪ', - 'ꮫ' => 'Ꮫ', - 'ꮬ' => 'Ꮬ', - 'ꮭ' => 'Ꮭ', - 'ꮮ' => 'Ꮮ', - 'ꮯ' => 'Ꮯ', - 'ꮰ' => 'Ꮰ', - 'ꮱ' => 'Ꮱ', - 'ꮲ' => 'Ꮲ', - 'ꮳ' => 'Ꮳ', - 'ꮴ' => 'Ꮴ', - 'ꮵ' => 'Ꮵ', - 'ꮶ' => 'Ꮶ', - 'ꮷ' => 'Ꮷ', - 'ꮸ' => 'Ꮸ', - 'ꮹ' => 'Ꮹ', - 'ꮺ' => 'Ꮺ', - 'ꮻ' => 'Ꮻ', - 'ꮼ' => 'Ꮼ', - 'ꮽ' => 'Ꮽ', - 'ꮾ' => 'Ꮾ', - 'ꮿ' => 'Ꮿ', - 'a' => 'A', - 'b' => 'B', - 'c' => 'C', - 'd' => 'D', - 'e' => 'E', - 'f' => 'F', - 'g' => 'G', - 'h' => 'H', - 'i' => 'I', - 'j' => 'J', - 'k' => 'K', - 'l' => 'L', - 'm' => 'M', - 'n' => 'N', - 'o' => 'O', - 'p' => 'P', - 'q' => 'Q', - 'r' => 'R', - 's' => 'S', - 't' => 'T', - 'u' => 'U', - 'v' => 'V', - 'w' => 'W', - 'x' => 'X', - 'y' => 'Y', - 'z' => 'Z', - '𐐨' => '𐐀', - '𐐩' => '𐐁', - '𐐪' => '𐐂', - '𐐫' => '𐐃', - '𐐬' => '𐐄', - '𐐭' => '𐐅', - '𐐮' => '𐐆', - '𐐯' => '𐐇', - '𐐰' => '𐐈', - '𐐱' => '𐐉', - '𐐲' => '𐐊', - '𐐳' => '𐐋', - '𐐴' => '𐐌', - '𐐵' => '𐐍', - '𐐶' => '𐐎', - '𐐷' => '𐐏', - '𐐸' => '𐐐', - '𐐹' => '𐐑', - '𐐺' => '𐐒', - '𐐻' => '𐐓', - '𐐼' => '𐐔', - '𐐽' => '𐐕', - '𐐾' => '𐐖', - '𐐿' => '𐐗', - '𐑀' => '𐐘', - '𐑁' => '𐐙', - '𐑂' => '𐐚', - '𐑃' => '𐐛', - '𐑄' => '𐐜', - '𐑅' => '𐐝', - '𐑆' => '𐐞', - '𐑇' => '𐐟', - '𐑈' => '𐐠', - '𐑉' => '𐐡', - '𐑊' => '𐐢', - '𐑋' => '𐐣', - '𐑌' => '𐐤', - '𐑍' => '𐐥', - '𐑎' => '𐐦', - '𐑏' => '𐐧', - '𐓘' => '𐒰', - '𐓙' => '𐒱', - '𐓚' => '𐒲', - '𐓛' => '𐒳', - '𐓜' => '𐒴', - '𐓝' => '𐒵', - '𐓞' => '𐒶', - '𐓟' => '𐒷', - '𐓠' => '𐒸', - '𐓡' => '𐒹', - '𐓢' => '𐒺', - '𐓣' => '𐒻', - '𐓤' => '𐒼', - '𐓥' => '𐒽', - '𐓦' => '𐒾', - '𐓧' => '𐒿', - '𐓨' => '𐓀', - '𐓩' => '𐓁', - '𐓪' => '𐓂', - '𐓫' => '𐓃', - '𐓬' => '𐓄', - '𐓭' => '𐓅', - '𐓮' => '𐓆', - '𐓯' => '𐓇', - '𐓰' => '𐓈', - '𐓱' => '𐓉', - '𐓲' => '𐓊', - '𐓳' => '𐓋', - '𐓴' => '𐓌', - '𐓵' => '𐓍', - '𐓶' => '𐓎', - '𐓷' => '𐓏', - '𐓸' => '𐓐', - '𐓹' => '𐓑', - '𐓺' => '𐓒', - '𐓻' => '𐓓', - '𐳀' => '𐲀', - '𐳁' => '𐲁', - '𐳂' => '𐲂', - '𐳃' => '𐲃', - '𐳄' => '𐲄', - '𐳅' => '𐲅', - '𐳆' => '𐲆', - '𐳇' => '𐲇', - '𐳈' => '𐲈', - '𐳉' => '𐲉', - '𐳊' => '𐲊', - '𐳋' => '𐲋', - '𐳌' => '𐲌', - '𐳍' => '𐲍', - '𐳎' => '𐲎', - '𐳏' => '𐲏', - '𐳐' => '𐲐', - '𐳑' => '𐲑', - '𐳒' => '𐲒', - '𐳓' => '𐲓', - '𐳔' => '𐲔', - '𐳕' => '𐲕', - '𐳖' => '𐲖', - '𐳗' => '𐲗', - '𐳘' => '𐲘', - '𐳙' => '𐲙', - '𐳚' => '𐲚', - '𐳛' => '𐲛', - '𐳜' => '𐲜', - '𐳝' => '𐲝', - '𐳞' => '𐲞', - '𐳟' => '𐲟', - '𐳠' => '𐲠', - '𐳡' => '𐲡', - '𐳢' => '𐲢', - '𐳣' => '𐲣', - '𐳤' => '𐲤', - '𐳥' => '𐲥', - '𐳦' => '𐲦', - '𐳧' => '𐲧', - '𐳨' => '𐲨', - '𐳩' => '𐲩', - '𐳪' => '𐲪', - '𐳫' => '𐲫', - '𐳬' => '𐲬', - '𐳭' => '𐲭', - '𐳮' => '𐲮', - '𐳯' => '𐲯', - '𐳰' => '𐲰', - '𐳱' => '𐲱', - '𐳲' => '𐲲', - '𑣀' => '𑢠', - '𑣁' => '𑢡', - '𑣂' => '𑢢', - '𑣃' => '𑢣', - '𑣄' => '𑢤', - '𑣅' => '𑢥', - '𑣆' => '𑢦', - '𑣇' => '𑢧', - '𑣈' => '𑢨', - '𑣉' => '𑢩', - '𑣊' => '𑢪', - '𑣋' => '𑢫', - '𑣌' => '𑢬', - '𑣍' => '𑢭', - '𑣎' => '𑢮', - '𑣏' => '𑢯', - '𑣐' => '𑢰', - '𑣑' => '𑢱', - '𑣒' => '𑢲', - '𑣓' => '𑢳', - '𑣔' => '𑢴', - '𑣕' => '𑢵', - '𑣖' => '𑢶', - '𑣗' => '𑢷', - '𑣘' => '𑢸', - '𑣙' => '𑢹', - '𑣚' => '𑢺', - '𑣛' => '𑢻', - '𑣜' => '𑢼', - '𑣝' => '𑢽', - '𑣞' => '𑢾', - '𑣟' => '𑢿', - '𖹠' => '𖹀', - '𖹡' => '𖹁', - '𖹢' => '𖹂', - '𖹣' => '𖹃', - '𖹤' => '𖹄', - '𖹥' => '𖹅', - '𖹦' => '𖹆', - '𖹧' => '𖹇', - '𖹨' => '𖹈', - '𖹩' => '𖹉', - '𖹪' => '𖹊', - '𖹫' => '𖹋', - '𖹬' => '𖹌', - '𖹭' => '𖹍', - '𖹮' => '𖹎', - '𖹯' => '𖹏', - '𖹰' => '𖹐', - '𖹱' => '𖹑', - '𖹲' => '𖹒', - '𖹳' => '𖹓', - '𖹴' => '𖹔', - '𖹵' => '𖹕', - '𖹶' => '𖹖', - '𖹷' => '𖹗', - '𖹸' => '𖹘', - '𖹹' => '𖹙', - '𖹺' => '𖹚', - '𖹻' => '𖹛', - '𖹼' => '𖹜', - '𖹽' => '𖹝', - '𖹾' => '𖹞', - '𖹿' => '𖹟', - '𞤢' => '𞤀', - '𞤣' => '𞤁', - '𞤤' => '𞤂', - '𞤥' => '𞤃', - '𞤦' => '𞤄', - '𞤧' => '𞤅', - '𞤨' => '𞤆', - '𞤩' => '𞤇', - '𞤪' => '𞤈', - '𞤫' => '𞤉', - '𞤬' => '𞤊', - '𞤭' => '𞤋', - '𞤮' => '𞤌', - '𞤯' => '𞤍', - '𞤰' => '𞤎', - '𞤱' => '𞤏', - '𞤲' => '𞤐', - '𞤳' => '𞤑', - '𞤴' => '𞤒', - '𞤵' => '𞤓', - '𞤶' => '𞤔', - '𞤷' => '𞤕', - '𞤸' => '𞤖', - '𞤹' => '𞤗', - '𞤺' => '𞤘', - '𞤻' => '𞤙', - '𞤼' => '𞤚', - '𞤽' => '𞤛', - '𞤾' => '𞤜', - '𞤿' => '𞤝', - '𞥀' => '𞤞', - '𞥁' => '𞤟', - '𞥂' => '𞤠', - '𞥃' => '𞤡', - 'ß' => 'SS', - 'ff' => 'FF', - 'fi' => 'FI', - 'fl' => 'FL', - 'ffi' => 'FFI', - 'ffl' => 'FFL', - 'ſt' => 'ST', - 'st' => 'ST', - 'և' => 'ԵՒ', - 'ﬓ' => 'ՄՆ', - 'ﬔ' => 'ՄԵ', - 'ﬕ' => 'ՄԻ', - 'ﬖ' => 'ՎՆ', - 'ﬗ' => 'ՄԽ', - 'ʼn' => 'ʼN', - 'ΐ' => 'Ϊ́', - 'ΰ' => 'Ϋ́', - 'ǰ' => 'J̌', - 'ẖ' => 'H̱', - 'ẗ' => 'T̈', - 'ẘ' => 'W̊', - 'ẙ' => 'Y̊', - 'ẚ' => 'Aʾ', - 'ὐ' => 'Υ̓', - 'ὒ' => 'Υ̓̀', - 'ὔ' => 'Υ̓́', - 'ὖ' => 'Υ̓͂', - 'ᾶ' => 'Α͂', - 'ῆ' => 'Η͂', - 'ῒ' => 'Ϊ̀', - 'ΐ' => 'Ϊ́', - 'ῖ' => 'Ι͂', - 'ῗ' => 'Ϊ͂', - 'ῢ' => 'Ϋ̀', - 'ΰ' => 'Ϋ́', - 'ῤ' => 'Ρ̓', - 'ῦ' => 'Υ͂', - 'ῧ' => 'Ϋ͂', - 'ῶ' => 'Ω͂', - 'ᾈ' => 'ἈΙ', - 'ᾉ' => 'ἉΙ', - 'ᾊ' => 'ἊΙ', - 'ᾋ' => 'ἋΙ', - 'ᾌ' => 'ἌΙ', - 'ᾍ' => 'ἍΙ', - 'ᾎ' => 'ἎΙ', - 'ᾏ' => 'ἏΙ', - 'ᾘ' => 'ἨΙ', - 'ᾙ' => 'ἩΙ', - 'ᾚ' => 'ἪΙ', - 'ᾛ' => 'ἫΙ', - 'ᾜ' => 'ἬΙ', - 'ᾝ' => 'ἭΙ', - 'ᾞ' => 'ἮΙ', - 'ᾟ' => 'ἯΙ', - 'ᾨ' => 'ὨΙ', - 'ᾩ' => 'ὩΙ', - 'ᾪ' => 'ὪΙ', - 'ᾫ' => 'ὫΙ', - 'ᾬ' => 'ὬΙ', - 'ᾭ' => 'ὭΙ', - 'ᾮ' => 'ὮΙ', - 'ᾯ' => 'ὯΙ', - 'ᾼ' => 'ΑΙ', - 'ῌ' => 'ΗΙ', - 'ῼ' => 'ΩΙ', - 'ᾲ' => 'ᾺΙ', - 'ᾴ' => 'ΆΙ', - 'ῂ' => 'ῊΙ', - 'ῄ' => 'ΉΙ', - 'ῲ' => 'ῺΙ', - 'ῴ' => 'ΏΙ', - 'ᾷ' => 'Α͂Ι', - 'ῇ' => 'Η͂Ι', - 'ῷ' => 'Ω͂Ι', -); diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap.php deleted file mode 100644 index 0e934d7af..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID >= 80000) { - return require __DIR__.'/bootstrap80.php'; -} - -return require __DIR__.'/bootstrap72.php'; diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap72.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap72.php deleted file mode 100644 index 2e3a06def..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap72.php +++ /dev/null @@ -1,173 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Mbstring as p; - -if (!function_exists('mb_convert_encoding')) { - function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); } -} -if (!function_exists('mb_decode_mimeheader')) { - function mb_decode_mimeheader($string) { return p\Mbstring::mb_decode_mimeheader($string); } -} -if (!function_exists('mb_encode_mimeheader')) { - function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = "\r\n", $indent = 0) { return p\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); } -} -if (!function_exists('mb_decode_numericentity')) { - function mb_decode_numericentity($string, $map, $encoding = null) { return p\Mbstring::mb_decode_numericentity($string, $map, $encoding); } -} -if (!function_exists('mb_encode_numericentity')) { - function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); } -} -if (!function_exists('mb_convert_case')) { - function mb_convert_case($string, $mode, $encoding = null) { return p\Mbstring::mb_convert_case($string, $mode, $encoding); } -} -if (!function_exists('mb_internal_encoding')) { - function mb_internal_encoding($encoding = null) { return p\Mbstring::mb_internal_encoding($encoding); } -} -if (!function_exists('mb_language')) { - function mb_language($language = null) { return p\Mbstring::mb_language($language); } -} -if (!function_exists('mb_list_encodings')) { - function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } -} -if (!function_exists('mb_encoding_aliases')) { - function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } -} -if (!function_exists('mb_check_encoding')) { - function mb_check_encoding($value = null, $encoding = null) { return p\Mbstring::mb_check_encoding($value, $encoding); } -} -if (!function_exists('mb_detect_encoding')) { - function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\Mbstring::mb_detect_encoding($string, $encodings, $strict); } -} -if (!function_exists('mb_detect_order')) { - function mb_detect_order($encoding = null) { return p\Mbstring::mb_detect_order($encoding); } -} -if (!function_exists('mb_parse_str')) { - function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; } -} -if (!function_exists('mb_strlen')) { - function mb_strlen($string, $encoding = null) { return p\Mbstring::mb_strlen($string, $encoding); } -} -if (!function_exists('mb_strpos')) { - function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); } -} -if (!function_exists('mb_strtolower')) { - function mb_strtolower($string, $encoding = null) { return p\Mbstring::mb_strtolower($string, $encoding); } -} -if (!function_exists('mb_strtoupper')) { - function mb_strtoupper($string, $encoding = null) { return p\Mbstring::mb_strtoupper($string, $encoding); } -} -if (!function_exists('mb_substitute_character')) { - function mb_substitute_character($substitute_character = null) { return p\Mbstring::mb_substitute_character($substitute_character); } -} -if (!function_exists('mb_substr')) { - function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\Mbstring::mb_substr($string, $start, $length, $encoding); } -} -if (!function_exists('mb_stripos')) { - function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); } -} -if (!function_exists('mb_stristr')) { - function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); } -} -if (!function_exists('mb_strrchr')) { - function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); } -} -if (!function_exists('mb_strrichr')) { - function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); } -} -if (!function_exists('mb_strripos')) { - function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); } -} -if (!function_exists('mb_strrpos')) { - function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); } -} -if (!function_exists('mb_strstr')) { - function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); } -} -if (!function_exists('mb_get_info')) { - function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } -} -if (!function_exists('mb_http_output')) { - function mb_http_output($encoding = null) { return p\Mbstring::mb_http_output($encoding); } -} -if (!function_exists('mb_strwidth')) { - function mb_strwidth($string, $encoding = null) { return p\Mbstring::mb_strwidth($string, $encoding); } -} -if (!function_exists('mb_substr_count')) { - function mb_substr_count($haystack, $needle, $encoding = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $encoding); } -} -if (!function_exists('mb_output_handler')) { - function mb_output_handler($string, $status) { return p\Mbstring::mb_output_handler($string, $status); } -} -if (!function_exists('mb_http_input')) { - function mb_http_input($type = null) { return p\Mbstring::mb_http_input($type); } -} - -if (!function_exists('mb_convert_variables')) { - function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); } -} - -if (!function_exists('mb_ord')) { - function mb_ord($string, $encoding = null) { return p\Mbstring::mb_ord($string, $encoding); } -} -if (!function_exists('mb_chr')) { - function mb_chr($codepoint, $encoding = null) { return p\Mbstring::mb_chr($codepoint, $encoding); } -} -if (!function_exists('mb_scrub')) { - function mb_scrub($string, $encoding = null) { return p\Mbstring::mb_scrub($string, $encoding); } -} -if (!function_exists('mb_str_split')) { - function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); } -} - -if (!function_exists('mb_str_pad')) { - /** @return string|false */ - function mb_str_pad(?string $string, ?int $length, ?string $pad_string = ' ', ?int $pad_type = STR_PAD_RIGHT, ?string $encoding = null) { return p\Mbstring::mb_str_pad((string) $string, (int) $length, (string) $pad_string, (int) $pad_type, $encoding); } -} - -if (!function_exists('mb_ucfirst')) { - /** @return string|false */ - function mb_ucfirst(?string $string, ?string $encoding = null) { return p\Mbstring::mb_ucfirst((string) $string, $encoding); } -} - -if (!function_exists('mb_lcfirst')) { - /** @return string|false */ - function mb_lcfirst(?string $string, ?string $encoding = null) { return p\Mbstring::mb_lcfirst((string) $string, $encoding); } -} - -if (!function_exists('mb_trim')) { - /** @return string|false */ - function mb_trim(?string $string, ?string $characters = null, ?string $encoding = null) { return p\Mbstring::mb_trim((string) $string, $characters, $encoding); } -} - -if (!function_exists('mb_ltrim')) { - /** @return string|false */ - function mb_ltrim(?string $string, ?string $characters = null, ?string $encoding = null) { return p\Mbstring::mb_ltrim((string) $string, $characters, $encoding); } -} - -if (!function_exists('mb_rtrim')) { - /** @return string|false */ - function mb_rtrim(?string $string, ?string $characters = null, ?string $encoding = null) { return p\Mbstring::mb_rtrim((string) $string, $characters, $encoding); } -} - -if (extension_loaded('mbstring')) { - return; -} - -if (!defined('MB_CASE_UPPER')) { - define('MB_CASE_UPPER', 0); -} -if (!defined('MB_CASE_LOWER')) { - define('MB_CASE_LOWER', 1); -} -if (!defined('MB_CASE_TITLE')) { - define('MB_CASE_TITLE', 2); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap80.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap80.php deleted file mode 100644 index 5fde10e83..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/bootstrap80.php +++ /dev/null @@ -1,167 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Mbstring as p; - -if (!function_exists('mb_convert_encoding')) { - function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); } -} -if (!function_exists('mb_decode_mimeheader')) { - function mb_decode_mimeheader(?string $string): string { return p\Mbstring::mb_decode_mimeheader((string) $string); } -} -if (!function_exists('mb_encode_mimeheader')) { - function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = "\r\n", ?int $indent = 0): string { return p\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); } -} -if (!function_exists('mb_decode_numericentity')) { - function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); } -} -if (!function_exists('mb_encode_numericentity')) { - function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); } -} -if (!function_exists('mb_convert_case')) { - function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); } -} -if (!function_exists('mb_internal_encoding')) { - function mb_internal_encoding(?string $encoding = null): string|bool { return p\Mbstring::mb_internal_encoding($encoding); } -} -if (!function_exists('mb_language')) { - function mb_language(?string $language = null): string|bool { return p\Mbstring::mb_language($language); } -} -if (!function_exists('mb_list_encodings')) { - function mb_list_encodings(): array { return p\Mbstring::mb_list_encodings(); } -} -if (!function_exists('mb_encoding_aliases')) { - function mb_encoding_aliases(?string $encoding): array { return p\Mbstring::mb_encoding_aliases((string) $encoding); } -} -if (!function_exists('mb_check_encoding')) { - function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\Mbstring::mb_check_encoding($value, $encoding); } -} -if (!function_exists('mb_detect_encoding')) { - function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); } -} -if (!function_exists('mb_detect_order')) { - function mb_detect_order(array|string|null $encoding = null): array|bool { return p\Mbstring::mb_detect_order($encoding); } -} -if (!function_exists('mb_parse_str')) { - function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; } -} -if (!function_exists('mb_strlen')) { - function mb_strlen(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strlen((string) $string, $encoding); } -} -if (!function_exists('mb_strpos')) { - function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } -} -if (!function_exists('mb_strtolower')) { - function mb_strtolower(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtolower((string) $string, $encoding); } -} -if (!function_exists('mb_strtoupper')) { - function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtoupper((string) $string, $encoding); } -} -if (!function_exists('mb_substitute_character')) { - function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\Mbstring::mb_substitute_character($substitute_character); } -} -if (!function_exists('mb_substr')) { - function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); } -} -if (!function_exists('mb_stripos')) { - function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } -} -if (!function_exists('mb_stristr')) { - function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } -} -if (!function_exists('mb_strrchr')) { - function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } -} -if (!function_exists('mb_strrichr')) { - function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } -} -if (!function_exists('mb_strripos')) { - function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } -} -if (!function_exists('mb_strrpos')) { - function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } -} -if (!function_exists('mb_strstr')) { - function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } -} -if (!function_exists('mb_get_info')) { - function mb_get_info(?string $type = 'all'): array|string|int|false|null { return p\Mbstring::mb_get_info((string) $type); } -} -if (!function_exists('mb_http_output')) { - function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); } -} -if (!function_exists('mb_strwidth')) { - function mb_strwidth(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strwidth((string) $string, $encoding); } -} -if (!function_exists('mb_substr_count')) { - function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); } -} -if (!function_exists('mb_output_handler')) { - function mb_output_handler(?string $string, ?int $status): string { return p\Mbstring::mb_output_handler((string) $string, (int) $status); } -} -if (!function_exists('mb_http_input')) { - function mb_http_input(?string $type = null): array|string|false { return p\Mbstring::mb_http_input($type); } -} - -if (!function_exists('mb_convert_variables')) { - function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); } -} - -if (!function_exists('mb_ord')) { - function mb_ord(?string $string, ?string $encoding = null): int|false { return p\Mbstring::mb_ord((string) $string, $encoding); } -} -if (!function_exists('mb_chr')) { - function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\Mbstring::mb_chr((int) $codepoint, $encoding); } -} -if (!function_exists('mb_scrub')) { - function mb_scrub(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_scrub($string, $encoding); } -} -if (!function_exists('mb_str_split')) { - function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); } -} - -if (!function_exists('mb_str_pad')) { - function mb_str_pad(?string $string, ?int $length, ?string $pad_string = ' ', ?int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad((string) $string, (int) $length, (string) $pad_string, (int) $pad_type, $encoding); } -} - -if (!function_exists('mb_ucfirst')) { - function mb_ucfirst(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst((string) $string, $encoding); } -} - -if (!function_exists('mb_lcfirst')) { - function mb_lcfirst(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst((string) $string, $encoding); } -} - -if (!function_exists('mb_trim')) { - function mb_trim(?string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim((string) $string, $characters, $encoding); } -} - -if (!function_exists('mb_ltrim')) { - function mb_ltrim(?string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim((string) $string, $characters, $encoding); } -} - -if (!function_exists('mb_rtrim')) { - function mb_rtrim(?string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim((string) $string, $characters, $encoding); } -} - -if (extension_loaded('mbstring')) { - return; -} - -if (!defined('MB_CASE_UPPER')) { - define('MB_CASE_UPPER', 0); -} -if (!defined('MB_CASE_LOWER')) { - define('MB_CASE_LOWER', 1); -} -if (!defined('MB_CASE_TITLE')) { - define('MB_CASE_TITLE', 2); -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/composer.json deleted file mode 100644 index daa07f86b..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-mbstring/composer.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "symfony/polyfill-mbstring", - "type": "library", - "description": "Symfony polyfill for the Mbstring extension", - "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2", - "ext-iconv": "*" - }, - "provide": { - "ext-mbstring": "*" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/LICENSE deleted file mode 100644 index 0ed3a2465..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2020-present Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Php80.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Php80.php deleted file mode 100644 index 68fac391e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Php80.php +++ /dev/null @@ -1,115 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php80; - -/** - * @author Ion Bazan - * @author Nico Oelgart - * @author Nicolas Grekas - * - * @internal - */ -final class Php80 -{ - public static function fdiv(float $dividend, float $divisor): float - { - return @($dividend / $divisor); - } - - public static function get_debug_type($value): string - { - switch (true) { - case null === $value: return 'null'; - case \is_bool($value): return 'bool'; - case \is_string($value): return 'string'; - case \is_array($value): return 'array'; - case \is_int($value): return 'int'; - case \is_float($value): return 'float'; - case \is_object($value): break; - case $value instanceof \__PHP_Incomplete_Class: return '__PHP_Incomplete_Class'; - default: - if (null === $type = @get_resource_type($value)) { - return 'unknown'; - } - - if ('Unknown' === $type) { - $type = 'closed'; - } - - return "resource ($type)"; - } - - $class = \get_class($value); - - if (false === strpos($class, '@')) { - return $class; - } - - return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous'; - } - - public static function get_resource_id($res): int - { - if (!\is_resource($res) && null === @get_resource_type($res)) { - throw new \TypeError(\sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res))); - } - - return (int) $res; - } - - public static function preg_last_error_msg(): string - { - switch (preg_last_error()) { - case \PREG_INTERNAL_ERROR: - return 'Internal error'; - case \PREG_BAD_UTF8_ERROR: - return 'Malformed UTF-8 characters, possibly incorrectly encoded'; - case \PREG_BAD_UTF8_OFFSET_ERROR: - return 'The offset did not correspond to the beginning of a valid UTF-8 code point'; - case \PREG_BACKTRACK_LIMIT_ERROR: - return 'Backtrack limit exhausted'; - case \PREG_RECURSION_LIMIT_ERROR: - return 'Recursion limit exhausted'; - case \PREG_JIT_STACKLIMIT_ERROR: - return 'JIT stack limit exhausted'; - case \PREG_NO_ERROR: - return 'No error'; - default: - return 'Unknown error'; - } - } - - public static function str_contains(string $haystack, string $needle): bool - { - return '' === $needle || false !== strpos($haystack, $needle); - } - - public static function str_starts_with(string $haystack, string $needle): bool - { - return 0 === strncmp($haystack, $needle, \strlen($needle)); - } - - public static function str_ends_with(string $haystack, string $needle): bool - { - if ('' === $needle || $needle === $haystack) { - return true; - } - - if ('' === $haystack) { - return false; - } - - $needleLength = \strlen($needle); - - return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/PhpToken.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/PhpToken.php deleted file mode 100644 index cd78c4ccc..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/PhpToken.php +++ /dev/null @@ -1,106 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php80; - -/** - * @author Fedonyuk Anton - * - * @internal - */ -class PhpToken implements \Stringable -{ - /** - * @var int - */ - public $id; - - /** - * @var string - */ - public $text; - - /** - * @var -1|positive-int - */ - public $line; - - /** - * @var int - */ - public $pos; - - /** - * @param -1|positive-int $line - */ - public function __construct(int $id, string $text, int $line = -1, int $position = -1) - { - $this->id = $id; - $this->text = $text; - $this->line = $line; - $this->pos = $position; - } - - public function getTokenName(): ?string - { - if ('UNKNOWN' === $name = token_name($this->id)) { - $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; - } - - return $name; - } - - /** - * @param int|string|array $kind - */ - public function is($kind): bool - { - foreach ((array) $kind as $value) { - if (\in_array($value, [$this->id, $this->text], true)) { - return true; - } - } - - return false; - } - - public function isIgnorable(): bool - { - return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); - } - - public function __toString(): string - { - return (string) $this->text; - } - - /** - * @return list - */ - public static function tokenize(string $code, int $flags = 0): array - { - $line = 1; - $position = 0; - $tokens = token_get_all($code, $flags); - foreach ($tokens as $index => $token) { - if (\is_string($token)) { - $id = \ord($token); - $text = $token; - } else { - [$id, $text, $line] = $token; - } - $tokens[$index] = new static($id, $text, $line, $position); - $position += \strlen($text); - } - - return $tokens; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/README.md deleted file mode 100644 index 3816c559d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/README.md +++ /dev/null @@ -1,25 +0,0 @@ -Symfony Polyfill / Php80 -======================== - -This component provides features added to PHP 8.0 core: - -- [`Stringable`](https://php.net/stringable) interface -- [`fdiv`](https://php.net/fdiv) -- [`ValueError`](https://php.net/valueerror) class -- [`UnhandledMatchError`](https://php.net/unhandledmatcherror) class -- `FILTER_VALIDATE_BOOL` constant -- [`get_debug_type`](https://php.net/get_debug_type) -- [`PhpToken`](https://php.net/phptoken) class -- [`preg_last_error_msg`](https://php.net/preg_last_error_msg) -- [`str_contains`](https://php.net/str_contains) -- [`str_starts_with`](https://php.net/str_starts_with) -- [`str_ends_with`](https://php.net/str_ends_with) -- [`get_resource_id`](https://php.net/get_resource_id) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php deleted file mode 100644 index 2b955423f..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +++ /dev/null @@ -1,31 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#[Attribute(Attribute::TARGET_CLASS)] -final class Attribute -{ - public const TARGET_CLASS = 1; - public const TARGET_FUNCTION = 2; - public const TARGET_METHOD = 4; - public const TARGET_PROPERTY = 8; - public const TARGET_CLASS_CONSTANT = 16; - public const TARGET_PARAMETER = 32; - public const TARGET_ALL = 63; - public const IS_REPEATABLE = 64; - - /** @var int */ - public $flags; - - public function __construct(int $flags = self::TARGET_ALL) - { - $this->flags = $flags; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php deleted file mode 100644 index bd1212f6e..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) { - class PhpToken extends Symfony\Polyfill\Php80\PhpToken - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php deleted file mode 100644 index 7c62d7508..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 80000) { - interface Stringable - { - /** - * @return string - */ - public function __toString(); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php deleted file mode 100644 index 01c6c6c8a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 80000) { - class UnhandledMatchError extends Error - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php deleted file mode 100644 index 783dbc28c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 80000) { - class ValueError extends Error - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/bootstrap.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/bootstrap.php deleted file mode 100644 index e5f7dbc1a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/bootstrap.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Php80 as p; - -if (\PHP_VERSION_ID >= 80000) { - return; -} - -if (!defined('FILTER_VALIDATE_BOOL') && defined('FILTER_VALIDATE_BOOLEAN')) { - define('FILTER_VALIDATE_BOOL', \FILTER_VALIDATE_BOOLEAN); -} - -if (!function_exists('fdiv')) { - function fdiv(float $num1, float $num2): float { return p\Php80::fdiv($num1, $num2); } -} -if (!function_exists('preg_last_error_msg')) { - function preg_last_error_msg(): string { return p\Php80::preg_last_error_msg(); } -} -if (!function_exists('str_contains')) { - function str_contains(?string $haystack, ?string $needle): bool { return p\Php80::str_contains($haystack ?? '', $needle ?? ''); } -} -if (!function_exists('str_starts_with')) { - function str_starts_with(?string $haystack, ?string $needle): bool { return p\Php80::str_starts_with($haystack ?? '', $needle ?? ''); } -} -if (!function_exists('str_ends_with')) { - function str_ends_with(?string $haystack, ?string $needle): bool { return p\Php80::str_ends_with($haystack ?? '', $needle ?? ''); } -} -if (!function_exists('get_debug_type')) { - function get_debug_type($value): string { return p\Php80::get_debug_type($value); } -} -if (!function_exists('get_resource_id')) { - function get_resource_id($resource): int { return p\Php80::get_resource_id($resource); } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/composer.json deleted file mode 100644 index a503b039a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php80/composer.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "symfony/polyfill-php80", - "type": "library", - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/LICENSE b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/LICENSE deleted file mode 100644 index 733c826eb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2022-present Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/NoDynamicProperties.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/NoDynamicProperties.php deleted file mode 100644 index 450deff45..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/NoDynamicProperties.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php82; - -/** - * @internal - */ -trait NoDynamicProperties -{ - public function __set(string $name, $value): void - { - throw new \Error('Cannot create dynamic property '.self::class.'::$'.$name); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Php82.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Php82.php deleted file mode 100644 index 64b4fad9c..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Php82.php +++ /dev/null @@ -1,394 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php82; - -/** - * @author Alexander M. Turek - * @author Greg Roach - * - * @internal - */ -class Php82 -{ - /** - * Determines if a string matches the ODBC quoting rules. - * - * A valid quoted string begins with a '{', ends with a '}', and has no '}' - * inside of the string that aren't repeated (as to be escaped). - * - * These rules are what .NET also follows. - * - * @see https://github.com/php/php-src/blob/838f6bffff6363a204a2597cbfbaad1d7ee3f2b6/main/php_odbc_utils.c#L31-L57 - */ - public static function odbc_connection_string_is_quoted(string $str): bool - { - if ('' === $str || '{' !== $str[0]) { - return false; - } - - /* Check for } that aren't doubled up or at the end of the string */ - $length = \strlen($str) - 1; - for ($i = 0; $i < $length; ++$i) { - if ('}' !== $str[$i]) { - continue; - } - - if ('}' !== $str[++$i]) { - return $i === $length; - } - } - - return true; - } - - /** - * Determines if a value for a connection string should be quoted. - * - * The ODBC specification mentions: - * "Because of connection string and initialization file grammar, keywords and - * attribute values that contain the characters []{}(),;?*=!@ not enclosed - * with braces should be avoided." - * - * Note that it assumes that the string is *not* already quoted. You should - * check beforehand. - * - * @see https://github.com/php/php-src/blob/838f6bffff6363a204a2597cbfbaad1d7ee3f2b6/main/php_odbc_utils.c#L59-L73 - */ - public static function odbc_connection_string_should_quote(string $str): bool - { - return false !== strpbrk($str, '[]{}(),;?*=!@'); - } - - public static function odbc_connection_string_quote(string $str): string - { - return '{'.str_replace('}', '}}', $str).'}'; - } - - /** - * Implementation closely based on the original C code - including the GOTOs - * and pointer-style string access. - * - * @see https://github.com/php/php-src/blob/master/Zend/zend_ini.c - */ - public static function ini_parse_quantity(string $value): int - { - // Avoid dependency on ctype_space() - $ctype_space = " \t\v\r\n\f"; - - $str = 0; - $str_end = \strlen($value); - $digits = $str; - $overflow = false; - - /* Ignore leading whitespace, but keep it for error messages. */ - while ($digits < $str_end && false !== strpos($ctype_space, $value[$digits])) { - ++$digits; - } - - /* Ignore trailing whitespace, but keep it for error messages. */ - while ($digits < $str_end && false !== strpos($ctype_space, $value[$str_end - 1])) { - --$str_end; - } - - if ($digits === $str_end) { - return 0; - } - - $is_negative = false; - - if ('+' === $value[$digits]) { - ++$digits; - } elseif ('-' === $value[$digits]) { - $is_negative = true; - ++$digits; - } - - if ($value[$digits] < '0' || $value[$digits] > 9) { - $message = \sprintf( - 'Invalid quantity "%s": no valid leading digits, interpreting as "0" for backwards compatibility', - self::escapeString($value) - ); - - trigger_error($message, \E_USER_WARNING); - - return 0; - } - - $base = 10; - $allowed_digits = '0123456789'; - - if ('0' === $value[$digits] && ($digits + 1 === $str_end || false === strpos($allowed_digits, $value[$digits + 1]))) { - if ($digits + 1 === $str_end) { - return 0; - } - - switch ($value[$digits + 1]) { - case 'g': - case 'G': - case 'm': - case 'M': - case 'k': - case 'K': - goto evaluation; - case 'x': - case 'X': - $base = 16; - $allowed_digits = '0123456789abcdefABCDEF'; - break; - case 'o': - case 'O': - $base = 8; - $allowed_digits = '01234567'; - break; - case 'b': - case 'B': - $base = 2; - $allowed_digits = '01'; - break; - default: - $message = \sprintf( - 'Invalid prefix "0%s", interpreting as "0" for backwards compatibility', - $value[$digits + 1] - ); - trigger_error($message, \E_USER_WARNING); - - return 0; - } - - $digits += 2; - if ($digits === $str_end) { - $message = \sprintf( - 'Invalid quantity "%s": no digits after base prefix, interpreting as "0" for backwards compatibility', - self::escapeString($value) - ); - trigger_error($message, \E_USER_WARNING); - - return 0; - } - - $digits_consumed = $digits; - /* Ignore leading whitespace. */ - while ($digits_consumed < $str_end && false !== strpos($ctype_space, $value[$digits_consumed])) { - ++$digits_consumed; - } - if ($digits_consumed !== $str_end && ('+' === $value[$digits_consumed] || '-' === $value[$digits_consumed])) { - ++$digits_consumed; - } - - if ('0' === $value[$digits_consumed]) { - /* Value is just 0 */ - if ($digits_consumed + 1 === $str_end) { - goto evaluation; - } - switch ($value[$digits_consumed + 1]) { - case 'x': - case 'X': - case 'o': - case 'O': - case 'b': - case 'B': - $digits_consumed += 2; - break; - } - } - - if ($digits !== $digits_consumed) { - $message = \sprintf( - 'Invalid quantity "%s": no digits after base prefix, interpreting as "0" for backwards compatibility', - self::escapeString($value) - ); - trigger_error($message, \E_USER_WARNING); - - return 0; - } - } - - evaluation: - - if (10 === $base && '0' === $value[$digits]) { - $base = 8; - $allowed_digits = '01234567'; - } - - while ($digits < $str_end && ' ' === $value[$digits]) { - ++$digits; - } - - if ($digits < $str_end && '+' === $value[$digits]) { - ++$digits; - } elseif ($digits < $str_end && '-' === $value[$digits]) { - $is_negative = true; - $overflow = true; - ++$digits; - } - - $digits_end = $digits; - - while ($digits_end < $str_end && false !== strpos($allowed_digits, $value[$digits_end])) { - ++$digits_end; - } - - $retval = base_convert(substr($value, $digits, $digits_end - $digits), $base, 10); - - if ($is_negative && '0' === $retval) { - $is_negative = false; - $overflow = false; - } - - // Check for overflow - remember that -PHP_INT_MIN = 1 + PHP_INT_MAX - if ($is_negative) { - $signed_max = strtr((string) \PHP_INT_MIN, ['-' => '']); - } else { - $signed_max = (string) \PHP_INT_MAX; - } - - $max_length = max(\strlen($retval), \strlen($signed_max)); - - $tmp1 = str_pad($retval, $max_length, '0', \STR_PAD_LEFT); - $tmp2 = str_pad($signed_max, $max_length, '0', \STR_PAD_LEFT); - - if ($tmp1 > $tmp2) { - $retval = -1; - $overflow = true; - } elseif ($is_negative) { - $retval = '-'.$retval; - } - - $retval = (int) $retval; - - if ($digits_end === $digits) { - $message = \sprintf( - 'Invalid quantity "%s": no valid leading digits, interpreting as "0" for backwards compatibility', - self::escapeString($value) - ); - trigger_error($message, \E_USER_WARNING); - - return 0; - } - - /* Allow for whitespace between integer portion and any suffix character */ - while ($digits_end < $str_end && false !== strpos($ctype_space, $value[$digits_end])) { - ++$digits_end; - } - - /* No exponent suffix. */ - if ($digits_end === $str_end) { - goto end; - } - - switch ($value[$str_end - 1]) { - case 'g': - case 'G': - $shift = 30; - break; - case 'm': - case 'M': - $shift = 20; - break; - case 'k': - case 'K': - $shift = 10; - break; - default: - /* Unknown suffix */ - $invalid = self::escapeString($value); - $interpreted = self::escapeString(substr($value, $str, $digits_end - $str)); - $chr = self::escapeString($value[$str_end - 1]); - - $message = \sprintf( - 'Invalid quantity "%s": unknown multiplier "%s", interpreting as "%s" for backwards compatibility', - $invalid, - $chr, - $interpreted - ); - - trigger_error($message, \E_USER_WARNING); - - return $retval; - } - - $factor = 1 << $shift; - - if (!$overflow) { - if ($retval > 0) { - $overflow = $retval > \PHP_INT_MAX / $factor; - } else { - $overflow = $retval < \PHP_INT_MIN / $factor; - } - } - - if (\is_float($retval * $factor)) { - $overflow = true; - $retval <<= $shift; - } else { - $retval *= $factor; - } - - if ($digits_end !== $str_end - 1) { - /* More than one character in suffix */ - $message = \sprintf( - 'Invalid quantity "%s", interpreting as "%s%s" for backwards compatibility', - self::escapeString($value), - self::escapeString(substr($value, $str, $digits_end - $str)), - self::escapeString($value[$str_end - 1]) - ); - trigger_error($message, \E_USER_WARNING); - - return $retval; - } - - end: - - if ($overflow) { - /* Not specifying the resulting value here because the caller may make - * additional conversions. Not specifying the allowed range - * because the caller may do narrower range checks. */ - $message = \sprintf( - 'Invalid quantity "%s": value is out of range, using overflow result for backwards compatibility', - self::escapeString($value) - ); - trigger_error($message, \E_USER_WARNING); - } - - return $retval; - } - - /** - * Escape the string to avoid null bytes and to make non-printable chars visible. - */ - private static function escapeString(string $string): string - { - $escaped = ''; - - for ($n = 0, $len = \strlen($string); $n < $len; ++$n) { - $c = \ord($string[$n]); - - if ($c < 32 || '\\' === $string[$n] || $c > 126) { - switch ($string[$n]) { - case "\n": $escaped .= '\\n'; break; - case "\r": $escaped .= '\\r'; break; - case "\t": $escaped .= '\\t'; break; - case "\f": $escaped .= '\\f'; break; - case "\v": $escaped .= '\\v'; break; - case '\\': $escaped .= '\\\\'; break; - case "\x1B": $escaped .= '\\e'; break; - default: - $escaped .= '\\x'.strtoupper(\sprintf('%02x', $c)); - } - } else { - $escaped .= $string[$n]; - } - } - - return $escaped; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/README.md b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/README.md deleted file mode 100644 index b3191557a..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/README.md +++ /dev/null @@ -1,23 +0,0 @@ -Symfony Polyfill / Php82 -======================== - -This component provides features added to PHP 8.2 core: - -- [`AllowDynamicProperties`](https://wiki.php.net/rfc/deprecate_dynamic_properties) -- [`SensitiveParameter`](https://wiki.php.net/rfc/redact_parameters_in_back_traces) -- [`SensitiveParameterValue`](https://wiki.php.net/rfc/redact_parameters_in_back_traces) -- [`Random\Engine`](https://wiki.php.net/rfc/rng_extension) -- [`Random\Engine\CryptoSafeEngine`](https://wiki.php.net/rfc/rng_extension) -- [`Random\Engine\Secure`](https://wiki.php.net/rfc/rng_extension) (check [arokettu/random-polyfill](https://packagist.org/packages/arokettu/random-polyfill) for more engines) -- [`odbc_connection_string_is_quoted()`](https://php.net/odbc_connection_string_is_quoted) -- [`odbc_connection_string_should_quote()`](https://php.net/odbc_connection_string_should_quote) -- [`odbc_connection_string_quote()`](https://php.net/odbc_connection_string_quote) -- [`ini_parse_quantity()`](https://php.net/ini_parse_quantity) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Random/Engine/Secure.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Random/Engine/Secure.php deleted file mode 100644 index 5565386c2..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Random/Engine/Secure.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php82\Random\Engine; - -use Random\RandomException; -use Symfony\Polyfill\Php82\NoDynamicProperties; - -/** - * @author Tim Düsterhus - * @author Anton Smirnov - * - * @internal - */ -class Secure -{ - use NoDynamicProperties; - - public function generate(): string - { - try { - return random_bytes(\PHP_INT_SIZE); - } catch (\Exception $e) { - throw new RandomException($e->getMessage(), $e->getCode(), $e->getPrevious()); - } - } - - public function __sleep(): array - { - throw new \Exception("Serialization of 'Random\Engine\Secure' is not allowed"); - } - - public function __wakeup(): void - { - throw new \Exception("Unserialization of 'Random\Engine\Secure' is not allowed"); - } - - public function __clone() - { - throw new \Error('Trying to clone an uncloneable object of class Random\Engine\Secure'); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/AllowDynamicProperties.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/AllowDynamicProperties.php deleted file mode 100644 index d216e0ade..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/AllowDynamicProperties.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 80200) { - #[Attribute(Attribute::TARGET_CLASS)] - final class AllowDynamicProperties - { - public function __construct() - { - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/BrokenRandomEngineError.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/BrokenRandomEngineError.php deleted file mode 100644 index 971ed570d..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/BrokenRandomEngineError.php +++ /dev/null @@ -1,18 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Random; - -if (\PHP_VERSION_ID < 80200) { - class BrokenRandomEngineError extends RandomError - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/CryptoSafeEngine.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/CryptoSafeEngine.php deleted file mode 100644 index fb32496f1..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/CryptoSafeEngine.php +++ /dev/null @@ -1,18 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Random; - -if (\PHP_VERSION_ID < 80200) { - interface CryptoSafeEngine extends Engine - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine.php deleted file mode 100644 index 4fc78c8fb..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Random; - -if (\PHP_VERSION_ID < 80200) { - interface Engine - { - public function generate(): string; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine/Secure.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine/Secure.php deleted file mode 100644 index e779b5445..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine/Secure.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Random\Engine; - -use Symfony\Polyfill\Php82 as p; - -if (\PHP_VERSION_ID < 80200) { - final class Secure extends p\Random\Engine\Secure implements \Random\CryptoSafeEngine - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomError.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomError.php deleted file mode 100644 index bf5e89e01..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomError.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Random; - -use Symfony\Polyfill\Php82\NoDynamicProperties; - -if (\PHP_VERSION_ID < 80200) { - class RandomError extends \Error - { - use NoDynamicProperties; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomException.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomException.php deleted file mode 100644 index 3b9aae140..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Random; - -use Symfony\Polyfill\Php82\NoDynamicProperties; - -if (\PHP_VERSION_ID < 80200) { - class RandomException extends \Exception - { - use NoDynamicProperties; - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameter.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameter.php deleted file mode 100644 index aea4dfbdd..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameter.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 80200) { - #[Attribute(Attribute::TARGET_PARAMETER)] - final class SensitiveParameter - { - public function __construct() - { - } - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameterValue.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameterValue.php deleted file mode 100644 index 8349170b6..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameterValue.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 80200) { - final class SensitiveParameterValue extends Symfony\Polyfill\Php82\SensitiveParameterValue - { - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/SensitiveParameterValue.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/SensitiveParameterValue.php deleted file mode 100644 index 944c0a659..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/SensitiveParameterValue.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php82; - -/** - * @author Tim Düsterhus - * - * @internal - */ -class SensitiveParameterValue -{ - private $value; - - public function __construct($value) - { - $this->value = $value; - } - - public function getValue() - { - return $this->value; - } - - public function __debugInfo(): array - { - return []; - } - - public function __sleep(): array - { - throw new \Exception("Serialization of 'SensitiveParameterValue' is not allowed"); - } - - public function __wakeup(): void - { - throw new \Exception("Unserialization of 'SensitiveParameterValue' is not allowed"); - } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/bootstrap.php b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/bootstrap.php deleted file mode 100644 index b8da6f083..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/bootstrap.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Php82 as p; - -if (\PHP_VERSION_ID >= 80200) { - return; -} - -if (\extension_loaded('curl') && !defined('CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256') && curl_version()['version_number'] >= 0x075000) { - define('CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256', 10311); -} - -if (extension_loaded('odbc')) { - if (!function_exists('odbc_connection_string_is_quoted')) { - function odbc_connection_string_is_quoted(string $str): bool { return p\Php82::odbc_connection_string_is_quoted($str); } - } - - if (!function_exists('odbc_connection_string_should_quote')) { - function odbc_connection_string_should_quote(string $str): bool { return p\Php82::odbc_connection_string_should_quote($str); } - } - - if (!function_exists('odbc_connection_string_quote')) { - function odbc_connection_string_quote(string $str): string { return p\Php82::odbc_connection_string_quote($str); } - } -} - -if (!function_exists('ini_parse_quantity')) { - function ini_parse_quantity(string $shorthand): int { return p\Php82::ini_parse_quantity($shorthand); } -} diff --git a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/composer.json b/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/composer.json deleted file mode 100644 index 2031ae8d0..000000000 --- a/wp/wp-content/mu-plugins/serverlesswp-stream-wrapper/vendor/symfony/polyfill-php82/composer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "symfony/polyfill-php82", - "type": "library", - "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php82\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/wp/wp-content/plugins/sqlite-database-integration/load.php b/wp/wp-content/plugins/sqlite-database-integration/load.php index 49eb3089d..d8acddedf 100644 --- a/wp/wp-content/plugins/sqlite-database-integration/load.php +++ b/wp/wp-content/plugins/sqlite-database-integration/load.php @@ -3,9 +3,11 @@ * Plugin Name: SQLite Database Integration * Description: SQLite database driver drop-in. * Author: The WordPress Team - * Version: 3.0.0 + * Version: 3.0.1 * Requires PHP: 7.2 * Network: true + * License: GPL-2.0-or-later + * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Textdomain: sqlite-database-integration * * This feature plugin allows WordPress to use SQLite instead of MySQL as its database. diff --git a/wp/wp-content/plugins/sqlite-database-integration/readme.txt b/wp/wp-content/plugins/sqlite-database-integration/readme.txt index 378f5713b..9fe541522 100644 --- a/wp/wp-content/plugins/sqlite-database-integration/readme.txt +++ b/wp/wp-content/plugins/sqlite-database-integration/readme.txt @@ -2,9 +2,9 @@ Contributors: wordpressdotorg, aristath, janjakes, zieladam, berislav.grgicak, bpayton, zaerl Requires at least: 6.4 -Tested up to: 7.0 +Tested up to: 7.1 Requires PHP: 7.2 -Stable tag: 3.0.0 +Stable tag: 3.0.1 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Tags: sqlite, database @@ -66,6 +66,11 @@ Yes. The plugin replaces the default MySQL-based database layer with an SQLite-b == Changelog == += 3.0.1 = + +* Mark the plugin as compatible with WordPress 7.1 ([#497](https://github.com/WordPress/sqlite-database-integration/pull/497)) +* Fix fresh multisite database setup ([#492](https://github.com/WordPress/sqlite-database-integration/pull/492)) + = 3.0.0 = **SQLite Database Integration 3 is here! 🎉** diff --git a/wp/wp-content/plugins/sqlite-database-integration/wp-includes/database/version.php b/wp/wp-content/plugins/sqlite-database-integration/wp-includes/database/version.php index 505b4eadd..87a3a5ff4 100644 --- a/wp/wp-content/plugins/sqlite-database-integration/wp-includes/database/version.php +++ b/wp/wp-content/plugins/sqlite-database-integration/wp-includes/database/version.php @@ -9,4 +9,4 @@ * * This constant needs to be updated on plugin release! */ -define( 'SQLITE_DRIVER_VERSION', '3.0.0' ); +define( 'SQLITE_DRIVER_VERSION', '3.0.1' );