diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 45bfe22..27d2a93 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -12,7 +12,7 @@ on:
jobs:
codestyle:
- name: "Code Style"
+ name: "Rector + Code Style"
runs-on: ubuntu-latest
steps:
@@ -22,11 +22,14 @@ jobs:
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
- php-version: "8.1"
+ php-version: "8.2"
- name: Install dependencies
uses: ramsey/composer-install@v4
+ - name: "Run Rector"
+ run: "vendor/bin/rector --dry-run"
+
- name: "Run PHP-CS-Fixer"
run: "vendor/bin/php-cs-fixer fix --ansi --verbose --dry-run"
@@ -62,10 +65,10 @@ jobs:
strategy:
matrix:
php-version:
- - "8.1"
- "8.2"
- "8.3"
- "8.4"
+ - "8.5"
deps:
- "highest"
codestyle:
@@ -74,7 +77,7 @@ jobs:
- php-version: "8.4"
deps: "locked"
codestyle: "true"
- - php-version: "8.1"
+ - php-version: "8.2"
deps: "lowest"
codestyle: "false"
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index 6c80af3..63276ff 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -5,45 +5,9 @@
* These rules will be added to default rules or will override them if the same key already exists.
*/
-$additionalRules = [
- '@PHP74Migration' => true,
- '@PHP74Migration:risky' => true,
- 'visibility_required' => true,
- 'heredoc_indentation' => true,
- 'heredoc_to_nowdoc' => true,
- 'no_null_property_initialization' => true,
- 'no_useless_else' => true,
- 'no_useless_return' => true,
- 'global_namespace_import' => [
- 'import_classes' => true,
- 'import_constants' => true,
- 'import_functions' => true,
- ],
- 'constant_case' => true,
- 'declare_strict_types' => true,
- 'indentation_type' => true,
- 'no_superfluous_phpdoc_tags' => [
- 'allow_mixed' => true,
- ],
- 'phpdoc_line_span' => [
- 'const' => 'single',
- 'method' => 'multi',
- 'property' => 'single',
- ],
- 'phpdoc_trim_consecutive_blank_line_separation' => true,
- // risky rules
- 'fopen_flag_order' => true,
- 'fopen_flags' => true,
- 'ereg_to_preg' => true,
- 'implode_call' => true,
- 'no_unset_on_property' => true,
- // custom
- 'comment_to_phpdoc' => true,
- 'phpdoc_to_comment' => false,
-];
$rulesProvider = new Facile\CodingStandards\Rules\CompositeRulesProvider([
new Facile\CodingStandards\Rules\DefaultRulesProvider(),
- new Facile\CodingStandards\Rules\ArrayRulesProvider($additionalRules),
+ new Facile\CodingStandards\Rules\RiskyRulesProvider(),
]);
$config = new PhpCsFixer\Config();
diff --git a/composer.json b/composer.json
index adfa230..8756889 100644
--- a/composer.json
+++ b/composer.json
@@ -12,6 +12,9 @@
"minimum-stability": "stable",
"config": {
"sort-packages": true,
+ "platform": {
+ "php": "8.2.99"
+ },
"allow-plugins": {
"facile-it/facile-coding-standard": true,
"laminas/laminas-component-installer": true,
@@ -28,9 +31,9 @@
"identity"
],
"require": {
- "php": "^8.1",
+ "php": "^8.2",
"ext-json": "*",
- "facile-it/php-jose-verifier": "^0.5.0",
+ "facile-it/php-jose-verifier": "^1.0",
"php-http/discovery": "^1.6",
"psr/http-client": "^1.0",
"psr/http-client-implementation": "^1.0",
@@ -41,7 +44,7 @@
"psr/http-server-middleware": "^1.0",
"spomky-labs/aes-key-wrap": "^7.0",
"symfony/polyfill-php83": "^1.33",
- "web-token/jwt-library": "^3.4.3"
+ "web-token/jwt-library": "^4.0"
},
"autoload": {
"files": [
@@ -66,7 +69,7 @@
},
"require-dev": {
"dflydev/fig-cookies": "^2.0 || ^3.0",
- "facile-it/facile-coding-standard": "^0.5.2 || ^1.0.0",
+ "facile-it/facile-coding-standard": "1.5.0",
"friendsofphp/php-cs-fixer": "^3.0",
"laminas/laminas-component-installer": "^2.1 || ^3.0",
"laminas/laminas-config-aggregator": "^1.1",
@@ -79,6 +82,7 @@
"phpspec/prophecy": "^1.10.3",
"phpspec/prophecy-phpunit": "^2.0",
"phpunit/phpunit": "^10.5.60 || ^11.5.46 || ^12.0.0",
+ "rector/rector": "2.3.9",
"symfony/console": "^4.3 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
"vimeo/psalm": "^6.14.3"
},
@@ -88,13 +92,16 @@
"dflydev/fig-cookies": "To use the SessionCookieMiddleware"
},
"scripts": {
- "cs-check": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix --dry-run --diff --allow-risky=yes",
- "cs-fix": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix --diff --allow-risky=yes",
- "psalm": "psalm",
- "test": "phpunit",
- "test-coverage": "phpunit --coverage-text",
+ "rector-check": "vendor/bin/rector --dry-run",
+ "rector-fix": "vendor/bin/rector",
+ "cs-check": "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --dry-run --diff --allow-risky=yes",
+ "cs-fix": "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --diff --allow-risky=yes",
+ "psalm": "vendor/bin/psalm",
+ "test": "vendor/bin/phpunit",
+ "test-coverage": "vendor/bin/phpunit --coverage-text",
"check": [
- "@cs-check",
+ "@rector-fix",
+ "@cs-fix",
"@psalm",
"@test"
]
diff --git a/composer.lock b/composer.lock
index 5d78c6d..1a182e8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,29 +4,28 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "4d5a35ebb3a8b45b4affb90e99b4eba6",
+ "content-hash": "1b61f070c0c8e09ee6fb032ddc144ad6",
"packages": [
{
"name": "brick/math",
- "version": "0.12.3",
+ "version": "0.17.2",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
+ "reference": "8189e751995f9e15729c1aa2f89fa8f166ffe818"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
- "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
+ "url": "https://api.github.com/repos/brick/math/zipball/8189e751995f9e15729c1aa2f89fa8f166ffe818",
+ "reference": "8189e751995f9e15729c1aa2f89fa8f166ffe818",
"shasum": ""
},
"require": {
- "php": "^8.1"
+ "php": "^8.2"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^10.1",
- "vimeo/psalm": "6.8.8"
+ "phpstan/phpstan": "2.1.22",
+ "phpunit/phpunit": "^11.5"
},
"type": "library",
"autoload": {
@@ -56,7 +55,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.12.3"
+ "source": "https://github.com/brick/math/tree/0.17.2"
},
"funding": [
{
@@ -64,39 +63,42 @@
"type": "github"
}
],
- "time": "2025-02-28T13:11:00+00:00"
+ "time": "2026-05-25T20:34:43+00:00"
},
{
"name": "facile-it/php-jose-verifier",
- "version": "0.5.0",
+ "version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/facile-it/php-jose-verifier.git",
- "reference": "513de20772b851c0518dd85588bdd65420a1e864"
+ "reference": "2fed59e21b28729c1fa57456ac129ffc2bc2c08e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/facile-it/php-jose-verifier/zipball/513de20772b851c0518dd85588bdd65420a1e864",
- "reference": "513de20772b851c0518dd85588bdd65420a1e864",
+ "url": "https://api.github.com/repos/facile-it/php-jose-verifier/zipball/2fed59e21b28729c1fa57456ac129ffc2bc2c08e",
+ "reference": "2fed59e21b28729c1fa57456ac129ffc2bc2c08e",
"shasum": ""
},
"require": {
"ext-json": "*",
"nyholm/psr7": "^1.8",
- "php": "^8.1",
+ "php": "^8.2",
+ "psr/clock": "^1.0",
"psr/http-client": "^1.0",
"psr/http-message": "^1.0 || ^2.0",
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0",
"spomky-labs/base64url": "^2.0.1",
"symfony/http-client": "^6.0 || ^7.0 || ^8.0",
"symfony/polyfill-mbstring": "^1.15",
- "web-token/jwt-library": "^3.4"
+ "symfony/polyfill-php83": "^1.33",
+ "web-token/jwt-library": "^4.0"
},
"require-dev": {
- "facile-it/facile-coding-standard": "^1.4.1",
+ "facile-it/facile-coding-standard": "1.5.0",
"friendsofphp/php-cs-fixer": "^3.92.3",
"phpspec/prophecy-phpunit": "^2.0.1",
"phpunit/phpunit": "^10.5.60 || ^11.5.46 || ^12.0.0",
+ "rector/rector": "2.3.9",
"spomky-labs/aes-key-wrap": "^7.0",
"vimeo/psalm": "^6.14.3"
},
@@ -137,9 +139,9 @@
],
"support": {
"issues": "https://github.com/facile-it/php-jose-verifier/issues",
- "source": "https://github.com/facile-it/php-jose-verifier/tree/0.5.0"
+ "source": "https://github.com/facile-it/php-jose-verifier/tree/1.0.0"
},
- "time": "2026-01-02T11:41:21+00:00"
+ "time": "2026-06-12T07:27:16+00:00"
},
{
"name": "nyholm/psr7",
@@ -219,171 +221,6 @@
],
"time": "2024-09-09T07:06:30+00:00"
},
- {
- "name": "paragonie/constant_time_encoding",
- "version": "v3.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77",
- "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77",
- "shasum": ""
- },
- "require": {
- "php": "^8"
- },
- "require-dev": {
- "infection/infection": "^0",
- "nikic/php-fuzzer": "^0",
- "phpunit/phpunit": "^9|^10|^11",
- "vimeo/psalm": "^4|^5|^6"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "ParagonIE\\ConstantTime\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com",
- "role": "Maintainer"
- },
- {
- "name": "Steve 'Sc00bz' Thomas",
- "email": "steve@tobtu.com",
- "homepage": "https://www.tobtu.com",
- "role": "Original Developer"
- }
- ],
- "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
- "keywords": [
- "base16",
- "base32",
- "base32_decode",
- "base32_encode",
- "base64",
- "base64_decode",
- "base64_encode",
- "bin2hex",
- "encoding",
- "hex",
- "hex2bin",
- "rfc4648"
- ],
- "support": {
- "email": "info@paragonie.com",
- "issues": "https://github.com/paragonie/constant_time_encoding/issues",
- "source": "https://github.com/paragonie/constant_time_encoding"
- },
- "time": "2025-09-24T15:06:41+00:00"
- },
- {
- "name": "paragonie/sodium_compat",
- "version": "v2.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/sodium_compat.git",
- "reference": "4714da6efdc782c06690bc72ce34fae7941c2d9f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/4714da6efdc782c06690bc72ce34fae7941c2d9f",
- "reference": "4714da6efdc782c06690bc72ce34fae7941c2d9f",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "php-64bit": "*"
- },
- "require-dev": {
- "infection/infection": "^0",
- "nikic/php-fuzzer": "^0",
- "phpunit/phpunit": "^7|^8|^9|^10|^11",
- "vimeo/psalm": "^4|^5|^6"
- },
- "suggest": {
- "ext-sodium": "Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "files": [
- "autoload.php"
- ],
- "psr-4": {
- "ParagonIE\\Sodium\\": "namespaced/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "ISC"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com"
- },
- {
- "name": "Frank Denis",
- "email": "jedisct1@pureftpd.org"
- }
- ],
- "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists",
- "keywords": [
- "Authentication",
- "BLAKE2b",
- "ChaCha20",
- "ChaCha20-Poly1305",
- "Chapoly",
- "Curve25519",
- "Ed25519",
- "EdDSA",
- "Edwards-curve Digital Signature Algorithm",
- "Elliptic Curve Diffie-Hellman",
- "Poly1305",
- "Pure-PHP cryptography",
- "RFC 7748",
- "RFC 8032",
- "Salpoly",
- "Salsa20",
- "X25519",
- "XChaCha20-Poly1305",
- "XSalsa20-Poly1305",
- "Xchacha20",
- "Xsalsa20",
- "aead",
- "cryptography",
- "ecdh",
- "elliptic curve",
- "elliptic curve cryptography",
- "encryption",
- "libsodium",
- "php",
- "public-key cryptography",
- "secret-key cryptography",
- "side-channel resistant"
- ],
- "support": {
- "issues": "https://github.com/paragonie/sodium_compat/issues",
- "source": "https://github.com/paragonie/sodium_compat/tree/v2.5.0"
- },
- "time": "2025-12-30T16:12:18+00:00"
- },
{
"name": "php-http/discovery",
"version": "1.20.0",
@@ -463,55 +300,6 @@
},
"time": "2024-10-02T11:20:13+00:00"
},
- {
- "name": "psr/cache",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/cache.git",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Cache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for caching libraries",
- "keywords": [
- "cache",
- "psr",
- "psr-6"
- ],
- "support": {
- "source": "https://github.com/php-fig/cache/tree/3.0.0"
- },
- "time": "2021-02-03T23:26:27+00:00"
- },
{
"name": "psr/clock",
"version": "1.0.0",
@@ -1125,40 +913,41 @@
},
{
"name": "spomky-labs/pki-framework",
- "version": "1.4.1",
+ "version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/pki-framework.git",
- "reference": "f0e9a548df4e3942886adc9b7830581a46334631"
+ "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/f0e9a548df4e3942886adc9b7830581a46334631",
- "reference": "f0e9a548df4e3942886adc9b7830581a46334631",
+ "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/aa576cbd07128075bef97ac2f8af9854e67513d8",
+ "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8",
"shasum": ""
},
"require": {
- "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14",
+ "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17",
"ext-mbstring": "*",
- "php": ">=8.1"
+ "php": ">=8.1",
+ "psr/clock": "^1.0"
},
"require-dev": {
"ekino/phpstan-banned-code": "^1.0|^2.0|^3.0",
"ext-gmp": "*",
"ext-openssl": "*",
- "infection/infection": "^0.28|^0.29|^0.31",
+ "infection/infection": "^0.28|^0.29|^0.31|^0.32",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpstan/extension-installer": "^1.3|^2.0",
"phpstan/phpstan": "^1.8|^2.0",
"phpstan/phpstan-deprecation-rules": "^1.0|^2.0",
"phpstan/phpstan-phpunit": "^1.1|^2.0",
"phpstan/phpstan-strict-rules": "^1.3|^2.0",
- "phpunit/phpunit": "^10.1|^11.0|^12.0",
+ "phpunit/phpunit": "^10.1|^11.0|^12.0|^13.0",
"rector/rector": "^1.0|^2.0",
"roave/security-advisories": "dev-latest",
"symfony/string": "^6.4|^7.0|^8.0",
"symfony/var-dumper": "^6.4|^7.0|^8.0",
- "symplify/easy-coding-standard": "^12.0"
+ "symplify/easy-coding-standard": "^12.0|^13.0"
},
"suggest": {
"ext-bcmath": "For better performance (or GMP)",
@@ -1218,7 +1007,7 @@
],
"support": {
"issues": "https://github.com/Spomky-Labs/pki-framework/issues",
- "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.1"
+ "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.2"
},
"funding": [
{
@@ -1230,118 +1019,20 @@
"type": "patreon"
}
],
- "time": "2025-12-20T12:57:40+00:00"
- },
- {
- "name": "symfony/console",
- "version": "v6.4.31",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "f9f8a889f54c264f9abac3fc0f7a371ffca51997"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/f9f8a889f54c264f9abac3fc0f7a371ffca51997",
- "reference": "f9f8a889f54c264f9abac3fc0f7a371ffca51997",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^5.4|^6.0|^7.0"
- },
- "conflict": {
- "symfony/dependency-injection": "<5.4",
- "symfony/dotenv": "<5.4",
- "symfony/event-dispatcher": "<5.4",
- "symfony/lock": "<5.4",
- "symfony/process": "<5.4"
- },
- "provide": {
- "psr/log-implementation": "1.0|2.0|3.0"
- },
- "require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/lock": "^5.4|^6.0|^7.0",
- "symfony/messenger": "^5.4|^6.0|^7.0",
- "symfony/process": "^5.4|^6.0|^7.0",
- "symfony/stopwatch": "^5.4|^6.0|^7.0",
- "symfony/var-dumper": "^5.4|^6.0|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "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": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
- "keywords": [
- "cli",
- "command-line",
- "console",
- "terminal"
- ],
- "support": {
- "source": "https://github.com/symfony/console/tree/v6.4.31"
- },
- "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": "2025-12-22T08:30:34+00:00"
+ "time": "2026-03-23T22:56:56+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.6.0",
+ "version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
+ "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
- "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b",
+ "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b",
"shasum": ""
},
"require": {
@@ -1354,7 +1045,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.6-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
@@ -1379,7 +1070,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -1390,29 +1081,33 @@
"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": "2024-09-25T14:21:43+00:00"
+ "time": "2026-04-13T15:52:40+00:00"
},
{
"name": "symfony/http-client",
- "version": "v6.4.31",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "f166fe476c996237666bcf7ec2cf827cd82ad573"
+ "reference": "e8a112b8415707265a7e614278136a9d92989a6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/f166fe476c996237666bcf7ec2cf827cd82ad573",
- "reference": "f166fe476c996237666bcf7ec2cf827cd82ad573",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/e8a112b8415707265a7e614278136a9d92989a6a",
+ "reference": "e8a112b8415707265a7e614278136a9d92989a6a",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-client-contracts": "~3.4.4|^3.5.2",
@@ -1420,8 +1115,10 @@
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
+ "amphp/amp": "<2.5",
+ "amphp/socket": "<1.1",
"php-http/discovery": "<1.15",
- "symfony/http-foundation": "<6.3"
+ "symfony/http-foundation": "<6.4"
},
"provide": {
"php-http/async-client-implementation": "*",
@@ -1430,19 +1127,20 @@
"symfony/http-client-implementation": "3.0"
},
"require-dev": {
- "amphp/amp": "^2.5",
- "amphp/http-client": "^4.2.1",
- "amphp/http-tunnel": "^1.0",
- "amphp/socket": "^1.1",
+ "amphp/http-client": "^4.2.1|^5.0",
+ "amphp/http-tunnel": "^1.0|^2.0",
"guzzlehttp/promises": "^1.4|^2.0",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/http-kernel": "^5.4|^6.0|^7.0",
- "symfony/messenger": "^5.4|^6.0|^7.0",
- "symfony/process": "^5.4|^6.0|^7.0",
- "symfony/stopwatch": "^5.4|^6.0|^7.0"
+ "symfony/amphp-http-client-meta": "^1.0|^2.0",
+ "symfony/cache": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/rate-limiter": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -1473,7 +1171,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v6.4.31"
+ "source": "https://github.com/symfony/http-client/tree/v7.4.13"
},
"funding": [
{
@@ -1493,20 +1191,20 @@
"type": "tidelift"
}
],
- "time": "2025-12-23T14:19:38+00:00"
+ "time": "2026-05-24T09:57:54+00:00"
},
{
"name": "symfony/http-client-contracts",
- "version": "v3.6.0",
+ "version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
- "reference": "75d7043853a42837e68111812f4d964b01e5101c"
+ "reference": "4a2d00c37651c0bdc2b9e1c773487a8bf4edb12d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c",
- "reference": "75d7043853a42837e68111812f4d964b01e5101c",
+ "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/4a2d00c37651c0bdc2b9e1c773487a8bf4edb12d",
+ "reference": "4a2d00c37651c0bdc2b9e1c773487a8bf4edb12d",
"shasum": ""
},
"require": {
@@ -1519,7 +1217,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.6-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
@@ -1555,7 +1253,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/http-client-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -1566,35 +1264,40 @@
"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": "2025-04-29T11:18:49+00:00"
+ "time": "2026-03-06T13:17:50+00:00"
},
{
- "name": "symfony/polyfill-ctype",
- "version": "v1.33.0",
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.38.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
"shasum": ""
},
"require": {
+ "ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
- "ext-ctype": "*"
+ "ext-mbstring": "*"
},
"suggest": {
- "ext-ctype": "For best performance"
+ "ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
@@ -1608,7 +1311,7 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
+ "Symfony\\Polyfill\\Mbstring\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1617,24 +1320,25 @@
],
"authors": [
{
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for ctype functions",
+ "description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
- "ctype",
+ "mbstring",
"polyfill",
- "portable"
+ "portable",
+ "shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
},
"funding": [
{
@@ -1654,28 +1358,25 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-05-27T06:59:30+00:00"
},
{
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.33.0",
+ "name": "symfony/polyfill-php83",
+ "version": "v1.38.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
+ "url": "https://github.com/symfony/polyfill-php83.git",
+ "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
- "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8",
+ "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
- "suggest": {
- "ext-intl": "For best performance"
- },
"type": "library",
"extra": {
"thanks": {
@@ -1688,8 +1389,11 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- }
+ "Symfony\\Polyfill\\Php83\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1705,18 +1409,16 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for intl's grapheme_* functions",
+ "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
- "grapheme",
- "intl",
"polyfill",
"portable",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2"
},
"funding": [
{
@@ -1736,44 +1438,46 @@
"type": "tidelift"
}
],
- "time": "2025-06-27T09:58:17+00:00"
+ "time": "2026-05-27T06:51:48+00:00"
},
{
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.33.0",
+ "name": "symfony/service-contracts",
+ "version": "v3.7.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a",
+ "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
},
"type": "library",
"extra": {
"thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.7-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
"psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ "Symfony\\Contracts\\Service\\": ""
},
- "classmap": [
- "Resources/stubs"
+ "exclude-from-classmap": [
+ "/Test/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -1790,18 +1494,18 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "description": "Generic abstractions related to writing services",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -1821,45 +1525,45 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-03-28T09:44:51+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.33.0",
+ "name": "web-token/jwt-library",
+ "version": "4.1.7",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
+ "url": "https://github.com/web-token/jwt-library.git",
+ "reference": "fbcbf2c276d04d8b056f5c2957815abd5dfb704d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
- "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "url": "https://api.github.com/repos/web-token/jwt-library/zipball/fbcbf2c276d04d8b056f5c2957815abd5dfb704d",
+ "reference": "fbcbf2c276d04d8b056f5c2957815abd5dfb704d",
"shasum": ""
},
"require": {
- "ext-iconv": "*",
- "php": ">=7.2"
+ "brick/math": "^0.12|^0.13|^0.14|^0.15|^0.16|^0.17",
+ "php": ">=8.2",
+ "psr/clock": "^1.0",
+ "spomky-labs/pki-framework": "^1.2.1"
},
- "provide": {
- "ext-mbstring": "*"
+ "conflict": {
+ "spomky-labs/jose": "*"
},
"suggest": {
- "ext-mbstring": "For best performance"
+ "ext-bcmath": "GMP or BCMath is highly recommended to improve the library performance",
+ "ext-gmp": "GMP or BCMath is highly recommended to improve the library performance",
+ "ext-openssl": "For key management (creation, optimization, etc.) and some algorithms (AES, RSA, ECDSA, etc.)",
+ "ext-sodium": "Sodium is required for OKP key creation, EdDSA signature algorithm and ECDH-ES key encryption with OKP keys",
+ "paragonie/sodium_compat": "Sodium is required for OKP key creation, EdDSA signature algorithm and ECDH-ES key encryption with OKP keys",
+ "spomky-labs/aes-key-wrap": "For all Key Wrapping algorithms (AxxxKW, AxxxGCMKW, PBES2-HSxxx+AyyyKW...)",
+ "symfony/console": "Needed to use console commands",
+ "symfony/http-client": "To enable JKU/X5U support."
},
"type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
"autoload": {
- "files": [
- "bootstrap.php"
- ],
"psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
+ "Jose\\Component\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1868,80 +1572,85 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Florent Morselli",
+ "homepage": "https://github.com/Spomky"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "All contributors",
+ "homepage": "https://github.com/web-token/jwt-framework/contributors"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
+ "description": "JWT library",
+ "homepage": "https://github.com/web-token",
"keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
+ "JOSE",
+ "JWE",
+ "JWK",
+ "JWKSet",
+ "JWS",
+ "Jot",
+ "RFC7515",
+ "RFC7516",
+ "RFC7517",
+ "RFC7518",
+ "RFC7519",
+ "RFC7520",
+ "bundle",
+ "jwa",
+ "jwt",
+ "symfony"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
+ "issues": "https://github.com/web-token/jwt-library/issues",
+ "source": "https://github.com/web-token/jwt-library/tree/4.1.7"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
+ "url": "https://github.com/Spomky",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ "url": "https://www.patreon.com/FlorentMorselli",
+ "type": "patreon"
}
],
- "time": "2024-12-23T08:48:59+00:00"
- },
+ "time": "2026-06-06T18:12:39+00:00"
+ }
+ ],
+ "packages-dev": [
{
- "name": "symfony/polyfill-php83",
- "version": "v1.33.0",
+ "name": "amphp/amp",
+ "version": "v3.1.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
+ "url": "https://github.com/amphp/amp.git",
+ "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
- "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f",
+ "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "php": ">=8.1",
+ "revolt/event-loop": "^1 || ^0.2"
},
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
+ "require-dev": {
+ "amphp/php-cs-fixer-config": "^2",
+ "phpunit/phpunit": "^9",
+ "psalm/phar": "5.23.1"
},
+ "type": "library",
"autoload": {
"files": [
- "bootstrap.php"
+ "src/functions.php",
+ "src/Future/functions.php",
+ "src/Internal/functions.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Php83\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
+ "Amp\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1949,84 +1658,85 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Bob Weinand",
+ "email": "bobwei9@hotmail.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
+ },
+ {
+ "name": "Daniel Lowrey",
+ "email": "rdlowrey@php.net"
}
],
- "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
+ "description": "A non-blocking concurrency framework for PHP applications.",
+ "homepage": "https://amphp.org/amp",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "async",
+ "asynchronous",
+ "awaitable",
+ "concurrency",
+ "event",
+ "event-loop",
+ "future",
+ "non-blocking",
+ "promise"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
+ "issues": "https://github.com/amphp/amp/issues",
+ "source": "https://github.com/amphp/amp/tree/v3.1.1"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
+ "url": "https://github.com/amphp",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2025-07-08T02:45:35+00:00"
+ "time": "2025-08-27T21:42:00+00:00"
},
{
- "name": "symfony/service-contracts",
- "version": "v3.6.1",
+ "name": "amphp/byte-stream",
+ "version": "v2.1.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
+ "url": "https://github.com/amphp/byte-stream.git",
+ "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
- "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46",
+ "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46",
"shasum": ""
},
"require": {
+ "amphp/amp": "^3",
+ "amphp/parser": "^1.1",
+ "amphp/pipeline": "^1",
+ "amphp/serialization": "^1",
+ "amphp/sync": "^2",
"php": ">=8.1",
- "psr/container": "^1.1|^2.0",
- "symfony/deprecation-contracts": "^2.5|^3"
+ "revolt/event-loop": "^1 || ^0.2.3"
},
- "conflict": {
- "ext-psr": "<1.1|>=2"
+ "require-dev": {
+ "amphp/php-cs-fixer-config": "^2",
+ "amphp/phpunit-util": "^3",
+ "phpunit/phpunit": "^9",
+ "psalm/phar": "5.22.1"
},
"type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.6-dev"
- }
- },
"autoload": {
+ "files": [
+ "src/functions.php",
+ "src/Internal/functions.php"
+ ],
"psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- },
- "exclude-from-classmap": [
- "/Test/"
- ]
+ "Amp\\ByteStream\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2034,88 +1744,68 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
}
],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
+ "description": "A stream abstraction to make working with non-blocking I/O simple.",
+ "homepage": "https://amphp.org/byte-stream",
"keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
+ "amp",
+ "amphp",
+ "async",
+ "io",
+ "non-blocking",
+ "stream"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
+ "issues": "https://github.com/amphp/byte-stream/issues",
+ "source": "https://github.com/amphp/byte-stream/tree/v2.1.2"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
+ "url": "https://github.com/amphp",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2025-07-15T11:30:57+00:00"
+ "time": "2025-03-16T17:10:27+00:00"
},
{
- "name": "symfony/string",
- "version": "v6.4.30",
+ "name": "amphp/cache",
+ "version": "v2.0.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb"
+ "url": "https://github.com/amphp/cache.git",
+ "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/50590a057841fa6bf69d12eceffce3465b9e32cb",
- "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb",
+ "url": "https://api.github.com/repos/amphp/cache/zipball/46912e387e6aa94933b61ea1ead9cf7540b7797c",
+ "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c",
"shasum": ""
},
"require": {
+ "amphp/amp": "^3",
+ "amphp/serialization": "^1",
+ "amphp/sync": "^2",
"php": ">=8.1",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "conflict": {
- "symfony/translation-contracts": "<2.5"
+ "revolt/event-loop": "^1 || ^0.2"
},
"require-dev": {
- "symfony/http-client": "^5.4|^6.0|^7.0",
- "symfony/intl": "^6.2|^7.0",
- "symfony/translation-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^5.4|^6.0|^7.0"
+ "amphp/php-cs-fixer-config": "^2",
+ "amphp/phpunit-util": "^3",
+ "phpunit/phpunit": "^9",
+ "psalm/phar": "^5.4"
},
"type": "library",
"autoload": {
- "files": [
- "Resources/functions.php"
- ],
"psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Amp\\Cache\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2123,93 +1813,71 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
+ },
+ {
+ "name": "Daniel Lowrey",
+ "email": "rdlowrey@php.net"
}
],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
+ "description": "A fiber-aware cache API based on Amp and Revolt.",
+ "homepage": "https://amphp.org/cache",
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.30"
+ "issues": "https://github.com/amphp/cache/issues",
+ "source": "https://github.com/amphp/cache/tree/v2.0.1"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
+ "url": "https://github.com/amphp",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
}
],
- "time": "2025-11-21T18:03:05+00:00"
+ "time": "2024-04-19T03:38:06+00:00"
},
{
- "name": "web-token/jwt-library",
- "version": "3.4.9",
+ "name": "amphp/dns",
+ "version": "v2.4.0",
"source": {
"type": "git",
- "url": "https://github.com/web-token/jwt-library.git",
- "reference": "8fe1650bf3a73673a9c520feff8f9a0e9cbbcd8f"
+ "url": "https://github.com/amphp/dns.git",
+ "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-token/jwt-library/zipball/8fe1650bf3a73673a9c520feff8f9a0e9cbbcd8f",
- "reference": "8fe1650bf3a73673a9c520feff8f9a0e9cbbcd8f",
+ "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71",
+ "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71",
"shasum": ""
},
"require": {
- "brick/math": "^0.9|^0.10|^0.11|^0.12",
+ "amphp/amp": "^3",
+ "amphp/byte-stream": "^2",
+ "amphp/cache": "^2",
+ "amphp/parser": "^1",
+ "amphp/process": "^2",
+ "daverandom/libdns": "^2.0.2",
+ "ext-filter": "*",
"ext-json": "*",
- "ext-mbstring": "*",
- "paragonie/constant_time_encoding": "^2.6|^3.0",
- "paragonie/sodium_compat": "^1.20|^2.0",
"php": ">=8.1",
- "psr/cache": "^2.0|^3.0",
- "psr/clock": "^1.0",
- "psr/http-client": "^1.0",
- "psr/http-factory": "^1.0",
- "spomky-labs/pki-framework": "^1.2.1",
- "symfony/console": "^5.4|^6.0|^7.0",
- "symfony/http-client": "^5.4|^6.0|^7.0",
- "symfony/polyfill-mbstring": "^1.12"
- },
- "conflict": {
- "spomky-labs/jose": "*"
+ "revolt/event-loop": "^1 || ^0.2"
},
- "suggest": {
- "ext-bcmath": "GMP or BCMath is highly recommended to improve the library performance",
- "ext-gmp": "GMP or BCMath is highly recommended to improve the library performance",
- "ext-openssl": "For key management (creation, optimization, etc.) and some algorithms (AES, RSA, ECDSA, etc.)",
- "ext-sodium": "Sodium is required for OKP key creation, EdDSA signature algorithm and ECDH-ES key encryption with OKP keys",
- "paragonie/sodium_compat": "Sodium is required for OKP key creation, EdDSA signature algorithm and ECDH-ES key encryption with OKP keys",
- "spomky-labs/aes-key-wrap": "For all Key Wrapping algorithms (A128KW, A192KW, A256KW, A128GCMKW, A192GCMKW, A256GCMKW, PBES2-HS256+A128KW, PBES2-HS384+A192KW, PBES2-HS512+A256KW...)",
- "symfony/http-client": "To enable JKU/X5U support."
+ "require-dev": {
+ "amphp/php-cs-fixer-config": "^2",
+ "amphp/phpunit-util": "^3",
+ "phpunit/phpunit": "^9",
+ "psalm/phar": "5.20"
},
"type": "library",
"autoload": {
+ "files": [
+ "src/functions.php"
+ ],
"psr-4": {
- "Jose\\Component\\": ""
+ "Amp\\Dns\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2218,84 +1886,91 @@
],
"authors": [
{
- "name": "Florent Morselli",
- "homepage": "https://github.com/Spomky"
+ "name": "Chris Wright",
+ "email": "addr@daverandom.com"
},
{
- "name": "All contributors",
- "homepage": "https://github.com/web-token/jwt-framework/contributors"
+ "name": "Daniel Lowrey",
+ "email": "rdlowrey@php.net"
+ },
+ {
+ "name": "Bob Weinand",
+ "email": "bobwei9@hotmail.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
+ },
+ {
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
}
],
- "description": "JWT library",
- "homepage": "https://github.com/web-token",
+ "description": "Async DNS resolution for Amp.",
+ "homepage": "https://github.com/amphp/dns",
"keywords": [
- "JOSE",
- "JWE",
- "JWK",
- "JWKSet",
- "JWS",
- "Jot",
- "RFC7515",
- "RFC7516",
- "RFC7517",
- "RFC7518",
- "RFC7519",
- "RFC7520",
- "bundle",
- "jwa",
- "jwt",
- "symfony"
+ "amp",
+ "amphp",
+ "async",
+ "client",
+ "dns",
+ "resolve"
],
"support": {
- "issues": "https://github.com/web-token/jwt-library/issues",
- "source": "https://github.com/web-token/jwt-library/tree/3.4.9"
+ "issues": "https://github.com/amphp/dns/issues",
+ "source": "https://github.com/amphp/dns/tree/v2.4.0"
},
"funding": [
{
- "url": "https://github.com/Spomky",
+ "url": "https://github.com/amphp",
"type": "github"
- },
- {
- "url": "https://www.patreon.com/FlorentMorselli",
- "type": "patreon"
}
],
- "time": "2025-11-17T20:20:37+00:00"
- }
- ],
- "packages-dev": [
+ "time": "2025-01-19T15:43:40+00:00"
+ },
{
- "name": "amphp/amp",
- "version": "v3.1.1",
+ "name": "amphp/parallel",
+ "version": "v2.4.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/amp.git",
- "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f"
+ "url": "https://github.com/amphp/parallel.git",
+ "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f",
- "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f",
+ "url": "https://api.github.com/repos/amphp/parallel/zipball/37f5b2754fadc229c00f9416bd68fb8d04529a81",
+ "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81",
"shasum": ""
},
"require": {
+ "amphp/amp": "^3",
+ "amphp/byte-stream": "^2",
+ "amphp/cache": "^2",
+ "amphp/parser": "^1",
+ "amphp/pipeline": "^1",
+ "amphp/process": "^2",
+ "amphp/serialization": "^1",
+ "amphp/socket": "^2",
+ "amphp/sync": "^2",
"php": ">=8.1",
- "revolt/event-loop": "^1 || ^0.2"
+ "revolt/event-loop": "^1"
},
"require-dev": {
"amphp/php-cs-fixer-config": "^2",
+ "amphp/phpunit-util": "^3",
"phpunit/phpunit": "^9",
- "psalm/phar": "5.23.1"
+ "psalm/phar": "6.16.1"
},
"type": "library",
"autoload": {
"files": [
- "src/functions.php",
- "src/Future/functions.php",
- "src/Internal/functions.php"
+ "src/Context/functions.php",
+ "src/Context/Internal/functions.php",
+ "src/Ipc/functions.php",
+ "src/Worker/functions.php"
],
"psr-4": {
- "Amp\\": "src"
+ "Amp\\Parallel\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2307,35 +1982,27 @@
"name": "Aaron Piotrowski",
"email": "aaron@trowski.com"
},
- {
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
- },
{
"name": "Niklas Keller",
"email": "me@kelunik.com"
},
{
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
+ "name": "Stephen Coakley",
+ "email": "me@stephencoakley.com"
}
],
- "description": "A non-blocking concurrency framework for PHP applications.",
- "homepage": "https://amphp.org/amp",
+ "description": "Parallel processing component for Amp.",
+ "homepage": "https://github.com/amphp/parallel",
"keywords": [
"async",
"asynchronous",
- "awaitable",
- "concurrency",
- "event",
- "event-loop",
- "future",
- "non-blocking",
- "promise"
+ "concurrent",
+ "multi-processing",
+ "multi-threading"
],
"support": {
- "issues": "https://github.com/amphp/amp/issues",
- "source": "https://github.com/amphp/amp/tree/v3.1.1"
+ "issues": "https://github.com/amphp/parallel/issues",
+ "source": "https://github.com/amphp/parallel/tree/v2.4.0"
},
"funding": [
{
@@ -2343,45 +2010,34 @@
"type": "github"
}
],
- "time": "2025-08-27T21:42:00+00:00"
+ "time": "2026-05-16T16:54:01+00:00"
},
{
- "name": "amphp/byte-stream",
- "version": "v2.1.2",
+ "name": "amphp/parser",
+ "version": "v1.1.1",
"source": {
"type": "git",
- "url": "https://github.com/amphp/byte-stream.git",
- "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46"
+ "url": "https://github.com/amphp/parser.git",
+ "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46",
- "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46",
+ "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7",
+ "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7",
"shasum": ""
},
"require": {
- "amphp/amp": "^3",
- "amphp/parser": "^1.1",
- "amphp/pipeline": "^1",
- "amphp/serialization": "^1",
- "amphp/sync": "^2",
- "php": ">=8.1",
- "revolt/event-loop": "^1 || ^0.2.3"
+ "php": ">=7.4"
},
"require-dev": {
"amphp/php-cs-fixer-config": "^2",
- "amphp/phpunit-util": "^3",
"phpunit/phpunit": "^9",
- "psalm/phar": "5.22.1"
+ "psalm/phar": "^5.4"
},
"type": "library",
"autoload": {
- "files": [
- "src/functions.php",
- "src/Internal/functions.php"
- ],
"psr-4": {
- "Amp\\ByteStream\\": "src"
+ "Amp\\Parser\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2398,19 +2054,17 @@
"email": "me@kelunik.com"
}
],
- "description": "A stream abstraction to make working with non-blocking I/O simple.",
- "homepage": "https://amphp.org/byte-stream",
+ "description": "A generator parser to make streaming parsers simple.",
+ "homepage": "https://github.com/amphp/parser",
"keywords": [
- "amp",
- "amphp",
"async",
- "io",
"non-blocking",
+ "parser",
"stream"
],
"support": {
- "issues": "https://github.com/amphp/byte-stream/issues",
- "source": "https://github.com/amphp/byte-stream/tree/v2.1.2"
+ "issues": "https://github.com/amphp/parser/issues",
+ "source": "https://github.com/amphp/parser/tree/v1.1.1"
},
"funding": [
{
@@ -2418,39 +2072,37 @@
"type": "github"
}
],
- "time": "2025-03-16T17:10:27+00:00"
+ "time": "2024-03-21T19:16:53+00:00"
},
{
- "name": "amphp/cache",
- "version": "v2.0.1",
+ "name": "amphp/pipeline",
+ "version": "v1.2.4",
"source": {
"type": "git",
- "url": "https://github.com/amphp/cache.git",
- "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c"
+ "url": "https://github.com/amphp/pipeline.git",
+ "reference": "a044733e080940d1483f56caff0c412ad6982776"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/cache/zipball/46912e387e6aa94933b61ea1ead9cf7540b7797c",
- "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c",
+ "url": "https://api.github.com/repos/amphp/pipeline/zipball/a044733e080940d1483f56caff0c412ad6982776",
+ "reference": "a044733e080940d1483f56caff0c412ad6982776",
"shasum": ""
},
"require": {
"amphp/amp": "^3",
- "amphp/serialization": "^1",
- "amphp/sync": "^2",
"php": ">=8.1",
- "revolt/event-loop": "^1 || ^0.2"
+ "revolt/event-loop": "^1"
},
"require-dev": {
"amphp/php-cs-fixer-config": "^2",
"amphp/phpunit-util": "^3",
"phpunit/phpunit": "^9",
- "psalm/phar": "^5.4"
+ "psalm/phar": "6.16.1"
},
"type": "library",
"autoload": {
"psr-4": {
- "Amp\\Cache\\": "src"
+ "Amp\\Pipeline\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2458,24 +2110,28 @@
"MIT"
],
"authors": [
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- },
{
"name": "Aaron Piotrowski",
"email": "aaron@trowski.com"
},
{
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
}
],
- "description": "A fiber-aware cache API based on Amp and Revolt.",
- "homepage": "https://amphp.org/cache",
+ "description": "Asynchronous iterators and operators.",
+ "homepage": "https://amphp.org/pipeline",
+ "keywords": [
+ "amp",
+ "amphp",
+ "async",
+ "io",
+ "iterator",
+ "non-blocking"
+ ],
"support": {
- "issues": "https://github.com/amphp/cache/issues",
- "source": "https://github.com/amphp/cache/tree/v2.0.1"
+ "issues": "https://github.com/amphp/pipeline/issues",
+ "source": "https://github.com/amphp/pipeline/tree/v1.2.4"
},
"funding": [
{
@@ -2483,31 +2139,26 @@
"type": "github"
}
],
- "time": "2024-04-19T03:38:06+00:00"
+ "time": "2026-05-06T05:37:57+00:00"
},
{
- "name": "amphp/dns",
- "version": "v2.4.0",
+ "name": "amphp/process",
+ "version": "v2.1.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/dns.git",
- "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71"
+ "url": "https://github.com/amphp/process.git",
+ "reference": "583959df17d00304ad7b0b32285373f985935643"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71",
- "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71",
+ "url": "https://api.github.com/repos/amphp/process/zipball/583959df17d00304ad7b0b32285373f985935643",
+ "reference": "583959df17d00304ad7b0b32285373f985935643",
"shasum": ""
},
"require": {
"amphp/amp": "^3",
"amphp/byte-stream": "^2",
- "amphp/cache": "^2",
- "amphp/parser": "^1",
- "amphp/process": "^2",
- "daverandom/libdns": "^2.0.2",
- "ext-filter": "*",
- "ext-json": "*",
+ "amphp/sync": "^2",
"php": ">=8.1",
"revolt/event-loop": "^1 || ^0.2"
},
@@ -2515,7 +2166,7 @@
"amphp/php-cs-fixer-config": "^2",
"amphp/phpunit-util": "^3",
"phpunit/phpunit": "^9",
- "psalm/phar": "5.20"
+ "psalm/phar": "6.16.1"
},
"type": "library",
"autoload": {
@@ -2523,7 +2174,7 @@
"src/functions.php"
],
"psr-4": {
- "Amp\\Dns\\": "src"
+ "Amp\\Process\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2531,40 +2182,24 @@
"MIT"
],
"authors": [
- {
- "name": "Chris Wright",
- "email": "addr@daverandom.com"
- },
- {
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
- },
{
"name": "Bob Weinand",
"email": "bobwei9@hotmail.com"
},
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- },
{
"name": "Aaron Piotrowski",
"email": "aaron@trowski.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
}
],
- "description": "Async DNS resolution for Amp.",
- "homepage": "https://github.com/amphp/dns",
- "keywords": [
- "amp",
- "amphp",
- "async",
- "client",
- "dns",
- "resolve"
- ],
+ "description": "A fiber-aware process manager based on Amp and Revolt.",
+ "homepage": "https://amphp.org/process",
"support": {
- "issues": "https://github.com/amphp/dns/issues",
- "source": "https://github.com/amphp/dns/tree/v2.4.0"
+ "issues": "https://github.com/amphp/process/issues",
+ "source": "https://github.com/amphp/process/tree/v2.1.0"
},
"funding": [
{
@@ -2572,51 +2207,39 @@
"type": "github"
}
],
- "time": "2025-01-19T15:43:40+00:00"
+ "time": "2026-05-31T15:11:55+00:00"
},
{
- "name": "amphp/parallel",
- "version": "v2.3.3",
+ "name": "amphp/serialization",
+ "version": "v1.1.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/parallel.git",
- "reference": "296b521137a54d3a02425b464e5aee4c93db2c60"
+ "url": "https://github.com/amphp/serialization.git",
+ "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60",
- "reference": "296b521137a54d3a02425b464e5aee4c93db2c60",
+ "url": "https://api.github.com/repos/amphp/serialization/zipball/fdf2834d78cebb0205fb2672676c1b1eb84371f0",
+ "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0",
"shasum": ""
},
"require": {
- "amphp/amp": "^3",
- "amphp/byte-stream": "^2",
- "amphp/cache": "^2",
- "amphp/parser": "^1",
- "amphp/pipeline": "^1",
- "amphp/process": "^2",
- "amphp/serialization": "^1",
- "amphp/socket": "^2",
- "amphp/sync": "^2",
- "php": ">=8.1",
- "revolt/event-loop": "^1"
+ "php": ">=7.4"
},
"require-dev": {
"amphp/php-cs-fixer-config": "^2",
- "amphp/phpunit-util": "^3",
+ "ext-json": "*",
+ "ext-zlib": "*",
"phpunit/phpunit": "^9",
- "psalm/phar": "^5.18"
+ "psalm/phar": "6.16.1"
},
"type": "library",
"autoload": {
"files": [
- "src/Context/functions.php",
- "src/Context/Internal/functions.php",
- "src/Ipc/functions.php",
- "src/Worker/functions.php"
+ "src/functions.php"
],
"psr-4": {
- "Amp\\Parallel\\": "src"
+ "Amp\\Serialization\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2631,24 +2254,19 @@
{
"name": "Niklas Keller",
"email": "me@kelunik.com"
- },
- {
- "name": "Stephen Coakley",
- "email": "me@stephencoakley.com"
}
],
- "description": "Parallel processing component for Amp.",
- "homepage": "https://github.com/amphp/parallel",
+ "description": "Serialization tools for IPC and data storage in PHP.",
+ "homepage": "https://github.com/amphp/serialization",
"keywords": [
"async",
"asynchronous",
- "concurrent",
- "multi-processing",
- "multi-threading"
+ "serialization",
+ "serialize"
],
"support": {
- "issues": "https://github.com/amphp/parallel/issues",
- "source": "https://github.com/amphp/parallel/tree/v2.3.3"
+ "issues": "https://github.com/amphp/serialization/issues",
+ "source": "https://github.com/amphp/serialization/tree/v1.1.0"
},
"funding": [
{
@@ -2656,34 +2274,49 @@
"type": "github"
}
],
- "time": "2025-11-15T06:23:42+00:00"
+ "time": "2026-04-05T15:59:53+00:00"
},
{
- "name": "amphp/parser",
- "version": "v1.1.1",
+ "name": "amphp/socket",
+ "version": "v2.4.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/parser.git",
- "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7"
+ "url": "https://github.com/amphp/socket.git",
+ "reference": "dadb63c5d3179fd83803e29dfeac27350e619314"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7",
- "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7",
+ "url": "https://api.github.com/repos/amphp/socket/zipball/dadb63c5d3179fd83803e29dfeac27350e619314",
+ "reference": "dadb63c5d3179fd83803e29dfeac27350e619314",
"shasum": ""
},
"require": {
- "php": ">=7.4"
+ "amphp/amp": "^3",
+ "amphp/byte-stream": "^2",
+ "amphp/dns": "^2",
+ "ext-openssl": "*",
+ "kelunik/certificate": "^1.1",
+ "league/uri": "^7",
+ "league/uri-interfaces": "^7",
+ "php": ">=8.1",
+ "revolt/event-loop": "^1"
},
"require-dev": {
"amphp/php-cs-fixer-config": "^2",
+ "amphp/phpunit-util": "^3",
+ "amphp/process": "^2",
"phpunit/phpunit": "^9",
- "psalm/phar": "^5.4"
+ "psalm/phar": "6.16.1"
},
"type": "library",
"autoload": {
+ "files": [
+ "src/functions.php",
+ "src/Internal/functions.php",
+ "src/SocketAddress/functions.php"
+ ],
"psr-4": {
- "Amp\\Parser\\": "src"
+ "Amp\\Socket\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2691,6 +2324,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Daniel Lowrey",
+ "email": "rdlowrey@gmail.com"
+ },
{
"name": "Aaron Piotrowski",
"email": "aaron@trowski.com"
@@ -2700,17 +2337,20 @@
"email": "me@kelunik.com"
}
],
- "description": "A generator parser to make streaming parsers simple.",
- "homepage": "https://github.com/amphp/parser",
+ "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.",
+ "homepage": "https://github.com/amphp/socket",
"keywords": [
+ "amp",
"async",
+ "encryption",
"non-blocking",
- "parser",
- "stream"
+ "sockets",
+ "tcp",
+ "tls"
],
"support": {
- "issues": "https://github.com/amphp/parser/issues",
- "source": "https://github.com/amphp/parser/tree/v1.1.1"
+ "issues": "https://github.com/amphp/socket/issues",
+ "source": "https://github.com/amphp/socket/tree/v2.4.0"
},
"funding": [
{
@@ -2718,37 +2358,42 @@
"type": "github"
}
],
- "time": "2024-03-21T19:16:53+00:00"
+ "time": "2026-04-19T15:09:56+00:00"
},
{
- "name": "amphp/pipeline",
- "version": "v1.2.3",
+ "name": "amphp/sync",
+ "version": "v2.3.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/pipeline.git",
- "reference": "7b52598c2e9105ebcddf247fc523161581930367"
+ "url": "https://github.com/amphp/sync.git",
+ "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/pipeline/zipball/7b52598c2e9105ebcddf247fc523161581930367",
- "reference": "7b52598c2e9105ebcddf247fc523161581930367",
+ "url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1",
+ "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1",
"shasum": ""
},
"require": {
"amphp/amp": "^3",
+ "amphp/pipeline": "^1",
+ "amphp/serialization": "^1",
"php": ">=8.1",
- "revolt/event-loop": "^1"
+ "revolt/event-loop": "^1 || ^0.2"
},
"require-dev": {
"amphp/php-cs-fixer-config": "^2",
"amphp/phpunit-util": "^3",
"phpunit/phpunit": "^9",
- "psalm/phar": "^5.18"
+ "psalm/phar": "5.23"
},
"type": "library",
"autoload": {
+ "files": [
+ "src/functions.php"
+ ],
"psr-4": {
- "Amp\\Pipeline\\": "src"
+ "Amp\\Sync\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2763,21 +2408,24 @@
{
"name": "Niklas Keller",
"email": "me@kelunik.com"
+ },
+ {
+ "name": "Stephen Coakley",
+ "email": "me@stephencoakley.com"
}
],
- "description": "Asynchronous iterators and operators.",
- "homepage": "https://amphp.org/pipeline",
- "keywords": [
- "amp",
- "amphp",
+ "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.",
+ "homepage": "https://github.com/amphp/sync",
+ "keywords": [
"async",
- "io",
- "iterator",
- "non-blocking"
+ "asynchronous",
+ "mutex",
+ "semaphore",
+ "synchronization"
],
"support": {
- "issues": "https://github.com/amphp/pipeline/issues",
- "source": "https://github.com/amphp/pipeline/tree/v1.2.3"
+ "issues": "https://github.com/amphp/sync/issues",
+ "source": "https://github.com/amphp/sync/tree/v2.3.0"
},
"funding": [
{
@@ -2785,104 +2433,83 @@
"type": "github"
}
],
- "time": "2025-03-16T16:33:53+00:00"
+ "time": "2024-08-03T19:31:26+00:00"
},
{
- "name": "amphp/process",
- "version": "v2.0.3",
+ "name": "brick/varexporter",
+ "version": "0.7.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/process.git",
- "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d"
+ "url": "https://github.com/brick/varexporter.git",
+ "reference": "b3a50b8f630a9ed5015ea3e1f00479af261ed80d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/process/zipball/52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d",
- "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d",
+ "url": "https://api.github.com/repos/brick/varexporter/zipball/b3a50b8f630a9ed5015ea3e1f00479af261ed80d",
+ "reference": "b3a50b8f630a9ed5015ea3e1f00479af261ed80d",
"shasum": ""
},
"require": {
- "amphp/amp": "^3",
- "amphp/byte-stream": "^2",
- "amphp/sync": "^2",
- "php": ">=8.1",
- "revolt/event-loop": "^1 || ^0.2"
+ "nikic/php-parser": "^5.0",
+ "php": "^8.2"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "^2",
- "amphp/phpunit-util": "^3",
- "phpunit/phpunit": "^9",
- "psalm/phar": "^5.4"
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^11.0",
+ "vimeo/psalm": "6.14.3"
},
"type": "library",
"autoload": {
- "files": [
- "src/functions.php"
- ],
"psr-4": {
- "Amp\\Process\\": "src"
+ "Brick\\VarExporter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
+ "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()",
+ "keywords": [
+ "var_export"
],
- "description": "A fiber-aware process manager based on Amp and Revolt.",
- "homepage": "https://amphp.org/process",
"support": {
- "issues": "https://github.com/amphp/process/issues",
- "source": "https://github.com/amphp/process/tree/v2.0.3"
+ "issues": "https://github.com/brick/varexporter/issues",
+ "source": "https://github.com/brick/varexporter/tree/0.7.0"
},
"funding": [
{
- "url": "https://github.com/amphp",
+ "url": "https://github.com/BenMorel",
"type": "github"
}
],
- "time": "2024-04-19T03:13:44+00:00"
+ "time": "2026-01-06T22:56:00+00:00"
},
{
- "name": "amphp/serialization",
- "version": "v1.0.0",
+ "name": "clue/ndjson-react",
+ "version": "v1.3.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/serialization.git",
- "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1"
+ "url": "https://github.com/clue/reactphp-ndjson.git",
+ "reference": "392dc165fce93b5bb5c637b67e59619223c931b0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1",
- "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1",
+ "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0",
+ "reference": "392dc165fce93b5bb5c637b67e59619223c931b0",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=5.3",
+ "react/stream": "^1.2"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "phpunit/phpunit": "^9 || ^8 || ^7"
+ "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35",
+ "react/event-loop": "^1.2"
},
"type": "library",
"autoload": {
- "files": [
- "src/functions.php"
- ],
"psr-4": {
- "Amp\\Serialization\\": "src"
+ "Clue\\React\\NDJson\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2891,69 +2518,63 @@
],
"authors": [
{
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering"
}
],
- "description": "Serialization tools for IPC and data storage in PHP.",
- "homepage": "https://github.com/amphp/serialization",
+ "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
+ "homepage": "https://github.com/clue/reactphp-ndjson",
"keywords": [
- "async",
- "asynchronous",
- "serialization",
- "serialize"
+ "NDJSON",
+ "json",
+ "jsonlines",
+ "newline",
+ "reactphp",
+ "streaming"
],
"support": {
- "issues": "https://github.com/amphp/serialization/issues",
- "source": "https://github.com/amphp/serialization/tree/master"
+ "issues": "https://github.com/clue/reactphp-ndjson/issues",
+ "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0"
},
- "time": "2020-03-25T21:39:07+00:00"
+ "funding": [
+ {
+ "url": "https://clue.engineering/support",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-23T10:58:28+00:00"
},
{
- "name": "amphp/socket",
- "version": "v2.3.1",
+ "name": "clue/stream-filter",
+ "version": "v1.7.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/socket.git",
- "reference": "58e0422221825b79681b72c50c47a930be7bf1e1"
+ "url": "https://github.com/clue/stream-filter.git",
+ "reference": "049509fef80032cb3f051595029ab75b49a3c2f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/socket/zipball/58e0422221825b79681b72c50c47a930be7bf1e1",
- "reference": "58e0422221825b79681b72c50c47a930be7bf1e1",
+ "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7",
+ "reference": "049509fef80032cb3f051595029ab75b49a3c2f7",
"shasum": ""
},
"require": {
- "amphp/amp": "^3",
- "amphp/byte-stream": "^2",
- "amphp/dns": "^2",
- "ext-openssl": "*",
- "kelunik/certificate": "^1.1",
- "league/uri": "^6.5 | ^7",
- "league/uri-interfaces": "^2.3 | ^7",
- "php": ">=8.1",
- "revolt/event-loop": "^1 || ^0.2"
+ "php": ">=5.3"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "^2",
- "amphp/phpunit-util": "^3",
- "amphp/process": "^2",
- "phpunit/phpunit": "^9",
- "psalm/phar": "5.20"
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
"files": [
- "src/functions.php",
- "src/Internal/functions.php",
- "src/SocketAddress/functions.php"
+ "src/functions_include.php"
],
"psr-4": {
- "Amp\\Socket\\": "src"
+ "Clue\\StreamFilter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2962,75 +2583,77 @@
],
"authors": [
{
- "name": "Daniel Lowrey",
- "email": "rdlowrey@gmail.com"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering"
}
],
- "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.",
- "homepage": "https://github.com/amphp/socket",
+ "description": "A simple and modern approach to stream filtering in PHP",
+ "homepage": "https://github.com/clue/stream-filter",
"keywords": [
- "amp",
- "async",
- "encryption",
- "non-blocking",
- "sockets",
- "tcp",
- "tls"
+ "bucket brigade",
+ "callback",
+ "filter",
+ "php_user_filter",
+ "stream",
+ "stream_filter_append",
+ "stream_filter_register"
],
"support": {
- "issues": "https://github.com/amphp/socket/issues",
- "source": "https://github.com/amphp/socket/tree/v2.3.1"
+ "issues": "https://github.com/clue/stream-filter/issues",
+ "source": "https://github.com/clue/stream-filter/tree/v1.7.0"
},
"funding": [
{
- "url": "https://github.com/amphp",
+ "url": "https://clue.engineering/support",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/clue",
"type": "github"
}
],
- "time": "2024-04-21T14:33:03+00:00"
+ "time": "2023-12-20T15:40:13+00:00"
},
{
- "name": "amphp/sync",
- "version": "v2.3.0",
+ "name": "composer/pcre",
+ "version": "3.4.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/sync.git",
- "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1"
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1",
- "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed",
"shasum": ""
},
"require": {
- "amphp/amp": "^3",
- "amphp/pipeline": "^1",
- "amphp/serialization": "^1",
- "php": ">=8.1",
- "revolt/event-loop": "^1 || ^0.2"
+ "php": "^7.4 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<2.2.2"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "^2",
- "amphp/phpunit-util": "^3",
- "phpunit/phpunit": "^9",
- "psalm/phar": "5.23"
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^9"
},
"type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
"autoload": {
- "files": [
- "src/functions.php"
- ],
"psr-4": {
- "Amp\\Sync\\": "src"
+ "Composer\\Pcre\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -3039,300 +2662,37 @@
],
"authors": [
{
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- },
- {
- "name": "Stephen Coakley",
- "email": "me@stephencoakley.com"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
}
],
- "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.",
- "homepage": "https://github.com/amphp/sync",
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
"keywords": [
- "async",
- "asynchronous",
- "mutex",
- "semaphore",
- "synchronization"
+ "PCRE",
+ "preg",
+ "regex",
+ "regular expression"
],
"support": {
- "issues": "https://github.com/amphp/sync/issues",
- "source": "https://github.com/amphp/sync/tree/v2.3.0"
+ "issues": "https://github.com/composer/pcre/issues",
+ "source": "https://github.com/composer/pcre/tree/3.4.0"
},
"funding": [
{
- "url": "https://github.com/amphp",
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
"type": "github"
}
],
- "time": "2024-08-03T19:31:26+00:00"
+ "time": "2026-06-07T11:47:49+00:00"
},
{
- "name": "brick/varexporter",
- "version": "0.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/brick/varexporter.git",
- "reference": "af98bfc2b702a312abbcaff37656dbe419cec5bc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/brick/varexporter/zipball/af98bfc2b702a312abbcaff37656dbe419cec5bc",
- "reference": "af98bfc2b702a312abbcaff37656dbe419cec5bc",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^5.0",
- "php": "^8.1"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^10.5",
- "vimeo/psalm": "6.8.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Brick\\VarExporter\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()",
- "keywords": [
- "var_export"
- ],
- "support": {
- "issues": "https://github.com/brick/varexporter/issues",
- "source": "https://github.com/brick/varexporter/tree/0.6.0"
- },
- "funding": [
- {
- "url": "https://github.com/BenMorel",
- "type": "github"
- }
- ],
- "time": "2025-02-20T17:42:39+00:00"
- },
- {
- "name": "clue/ndjson-react",
- "version": "v1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/clue/reactphp-ndjson.git",
- "reference": "392dc165fce93b5bb5c637b67e59619223c931b0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0",
- "reference": "392dc165fce93b5bb5c637b67e59619223c931b0",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3",
- "react/stream": "^1.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35",
- "react/event-loop": "^1.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Clue\\React\\NDJson\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering"
- }
- ],
- "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
- "homepage": "https://github.com/clue/reactphp-ndjson",
- "keywords": [
- "NDJSON",
- "json",
- "jsonlines",
- "newline",
- "reactphp",
- "streaming"
- ],
- "support": {
- "issues": "https://github.com/clue/reactphp-ndjson/issues",
- "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0"
- },
- "funding": [
- {
- "url": "https://clue.engineering/support",
- "type": "custom"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
- }
- ],
- "time": "2022-12-23T10:58:28+00:00"
- },
- {
- "name": "clue/stream-filter",
- "version": "v1.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/clue/stream-filter.git",
- "reference": "049509fef80032cb3f051595029ab75b49a3c2f7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7",
- "reference": "049509fef80032cb3f051595029ab75b49a3c2f7",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "Clue\\StreamFilter\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering"
- }
- ],
- "description": "A simple and modern approach to stream filtering in PHP",
- "homepage": "https://github.com/clue/stream-filter",
- "keywords": [
- "bucket brigade",
- "callback",
- "filter",
- "php_user_filter",
- "stream",
- "stream_filter_append",
- "stream_filter_register"
- ],
- "support": {
- "issues": "https://github.com/clue/stream-filter/issues",
- "source": "https://github.com/clue/stream-filter/tree/v1.7.0"
- },
- "funding": [
- {
- "url": "https://clue.engineering/support",
- "type": "custom"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
- }
- ],
- "time": "2023-12-20T15:40:13+00:00"
- },
- {
- "name": "composer/pcre",
- "version": "3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/pcre.git",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<1.11.10"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.12 || ^2",
- "phpstan/phpstan-strict-rules": "^1 || ^2",
- "phpunit/phpunit": "^8 || ^9"
- },
- "type": "library",
- "extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- },
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Pcre\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
- "keywords": [
- "PCRE",
- "preg",
- "regex",
- "regular expression"
- ],
- "support": {
- "issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.3.2"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2024-11-12T16:29:46+00:00"
- },
- {
- "name": "composer/semver",
- "version": "3.4.4",
+ "name": "composer/semver",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
@@ -3475,22 +2835,22 @@
},
{
"name": "danog/advanced-json-rpc",
- "version": "v3.2.2",
+ "version": "v3.2.3",
"source": {
"type": "git",
"url": "https://github.com/danog/php-advanced-json-rpc.git",
- "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb"
+ "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/aadb1c4068a88c3d0530cfe324b067920661efcb",
- "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb",
+ "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/ae703ea7b4811797a10590b6078de05b3b33dd91",
+ "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91",
"shasum": ""
},
"require": {
"netresearch/jsonmapper": "^5",
"php": ">=8.1",
- "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
+ "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0 || ^6"
},
"replace": {
"felixfbecker/php-advanced-json-rpc": "^3"
@@ -3521,9 +2881,9 @@
"description": "A more advanced JSONRPC implementation",
"support": {
"issues": "https://github.com/danog/php-advanced-json-rpc/issues",
- "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.2"
+ "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.3"
},
- "time": "2025-02-14T10:55:15+00:00"
+ "time": "2026-01-12T21:07:10+00:00"
},
{
"name": "daverandom/libdns",
@@ -3670,29 +3030,29 @@
},
{
"name": "doctrine/deprecations",
- "version": "1.1.5",
+ "version": "1.1.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
- "phpunit/phpunit": "<=7.5 || >=13"
+ "phpunit/phpunit": "<=7.5 || >=14"
},
"require-dev": {
- "doctrine/coding-standard": "^9 || ^12 || ^13",
- "phpstan/phpstan": "1.4.10 || 2.1.11",
+ "doctrine/coding-standard": "^9 || ^12 || ^14",
+ "phpstan/phpstan": "1.4.10 || 2.1.30",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0",
"psr/log": "^1 || ^2 || ^3"
},
"suggest": {
@@ -3712,9 +3072,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.6"
},
- "time": "2025-04-07T20:06:18+00:00"
+ "time": "2026-02-07T07:09:04+00:00"
},
{
"name": "doctrine/instantiator",
@@ -3787,29 +3147,52 @@
"time": "2022-12-30T00:23:10+00:00"
},
{
- "name": "evenement/evenement",
- "version": "v3.0.2",
+ "name": "ergebnis/agent-detector",
+ "version": "1.2.0",
"source": {
"type": "git",
- "url": "https://github.com/igorw/evenement.git",
- "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
+ "url": "https://github.com/ergebnis/agent-detector.git",
+ "reference": "e211f17928c8b95a51e06040792d57f5462fb271"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
- "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
+ "url": "https://api.github.com/repos/ergebnis/agent-detector/zipball/e211f17928c8b95a51e06040792d57f5462fb271",
+ "reference": "e211f17928c8b95a51e06040792d57f5462fb271",
"shasum": ""
},
"require": {
- "php": ">=7.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0"
},
"require-dev": {
- "phpunit/phpunit": "^9 || ^6"
+ "ergebnis/composer-normalize": "^2.51.0",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.60.2",
+ "ergebnis/phpstan-rules": "^2.13.1",
+ "ergebnis/phpunit-slow-test-detector": "^2.24.0",
+ "ergebnis/rector-rules": "^1.18.1",
+ "fakerphp/faker": "^1.24.1",
+ "infection/infection": "^0.26.6",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.54",
+ "phpstan/phpstan-deprecation-rules": "^2.0.4",
+ "phpstan/phpstan-phpunit": "^2.0.16",
+ "phpstan/phpstan-strict-rules": "^2.0.10",
+ "phpunit/phpunit": "^9.6.34",
+ "rector/rector": "^2.4.2"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.2-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
"autoload": {
"psr-4": {
- "Evenement\\": "src/"
+ "Ergebnis\\AgentDetector\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -3818,11 +3201,57 @@
],
"authors": [
{
- "name": "Igor Wiedler",
- "email": "igor@wiedler.ch"
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Événement is a very simple event dispatching library for PHP",
+ "description": "Provides a detector for detecting the presence of an agent.",
+ "homepage": "https://github.com/ergebnis/agent-detector",
+ "support": {
+ "issues": "https://github.com/ergebnis/agent-detector/issues",
+ "security": "https://github.com/ergebnis/agent-detector/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/agent-detector"
+ },
+ "time": "2026-05-07T08:19:07+00:00"
+ },
+ {
+ "name": "evenement/evenement",
+ "version": "v3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/igorw/evenement.git",
+ "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
+ "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9 || ^6"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Evenement\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ }
+ ],
+ "description": "Événement is a very simple event dispatching library for PHP",
"keywords": [
"event-dispatcher",
"event-emitter"
@@ -3835,35 +3264,35 @@
},
{
"name": "facile-it/facile-coding-standard",
- "version": "1.4.1",
+ "version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/facile-it/facile-coding-standard.git",
- "reference": "d3554136624c16f2be471ec9ec32574e7a37b168"
+ "reference": "a7246be5b7e7d2e86d11fd18d3e48dc522fd3432"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/facile-it/facile-coding-standard/zipball/d3554136624c16f2be471ec9ec32574e7a37b168",
- "reference": "d3554136624c16f2be471ec9ec32574e7a37b168",
+ "url": "https://api.github.com/repos/facile-it/facile-coding-standard/zipball/a7246be5b7e7d2e86d11fd18d3e48dc522fd3432",
+ "reference": "a7246be5b7e7d2e86d11fd18d3e48dc522fd3432",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.0",
"ext-json": "*",
"friendsofphp/php-cs-fixer": "^3.88",
- "php": "^7.4 || ^8.0",
- "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0",
- "symfony/polyfill-php80": "^1.0"
+ "php": "^8.1",
+ "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0"
},
"require-dev": {
"composer/composer": "^2.0",
"composer/semver": "^3.0",
"mikey179/vfsstream": "^1.6.8",
"phpspec/prophecy": "^1.10",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpunit/phpunit": "^9.5.28 || ^10.5.36",
- "psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.23"
+ "phpspec/prophecy-phpunit": "^2.3",
+ "phpunit/phpunit": "^10.5.36 || ^11.5.10 || ^12.5.0 || ^13.0.0",
+ "psalm/plugin-phpunit": "0.19.3",
+ "rector/rector": "2.4.4",
+ "vimeo/psalm": "6.16.1"
},
"type": "composer-plugin",
"extra": {
@@ -3886,9 +3315,9 @@
],
"support": {
"issues": "https://github.com/facile-it/facile-coding-standard/issues",
- "source": "https://github.com/facile-it/facile-coding-standard/tree/1.4.1"
+ "source": "https://github.com/facile-it/facile-coding-standard/tree/1.5.0"
},
- "time": "2025-12-05T22:26:23+00:00"
+ "time": "2026-05-29T22:20:33+00:00"
},
{
"name": "felixfbecker/language-server-protocol",
@@ -4009,22 +3438,23 @@
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.92.3",
+ "version": "v3.95.5",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8"
+ "reference": "7f86d8763063f5d2e2e2d0e1e45bb2f15895361d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8",
- "reference": "2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/7f86d8763063f5d2e2e2d0e1e45bb2f15895361d",
+ "reference": "7f86d8763063f5d2e2e2d0e1e45bb2f15895361d",
"shasum": ""
},
"require": {
"clue/ndjson-react": "^1.3",
"composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.5",
+ "ergebnis/agent-detector": "^1.2",
"ext-filter": "*",
"ext-hash": "*",
"ext-json": "*",
@@ -4035,32 +3465,32 @@
"react/event-loop": "^1.5",
"react/socket": "^1.16",
"react/stream": "^1.4",
- "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0",
+ "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0 || ^9.0",
"symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
- "symfony/polyfill-mbstring": "^1.33",
- "symfony/polyfill-php80": "^1.33",
- "symfony/polyfill-php81": "^1.33",
- "symfony/polyfill-php84": "^1.33",
+ "symfony/polyfill-mbstring": "^1.37",
+ "symfony/polyfill-php80": "^1.37",
+ "symfony/polyfill-php81": "^1.37",
+ "symfony/polyfill-php84": "^1.37",
"symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0",
"symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0"
},
"require-dev": {
- "facile-it/paraunit": "^1.3.1 || ^2.7",
- "infection/infection": "^0.31.0",
- "justinrainbow/json-schema": "^6.5",
- "keradus/cli-executor": "^2.2",
+ "facile-it/paraunit": "^1.3.1 || ^2.11.0",
+ "infection/infection": "^0.32.7",
+ "justinrainbow/json-schema": "^6.8.0",
+ "keradus/cli-executor": "^2.3",
"mikey179/vfsstream": "^1.6.12",
- "php-coveralls/php-coveralls": "^2.9",
- "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
- "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
- "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
- "symfony/polyfill-php85": "^1.33",
- "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0",
- "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0"
+ "php-coveralls/php-coveralls": "^2.9.1",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8",
+ "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.55",
+ "symfony/polyfill-php85": "^1.37",
+ "symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.8",
+ "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.11"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -4101,7 +3531,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.92.3"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.5"
},
"funding": [
{
@@ -4109,29 +3539,30 @@
"type": "github"
}
],
- "time": "2025-12-18T10:45:02+00:00"
+ "time": "2026-06-09T14:55:16+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.10.0",
+ "version": "7.11.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
+ "reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
- "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/5af96f374e0ab4ebd747b8310888c99d3adb0a8c",
+ "reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^2.3",
- "guzzlehttp/psr7": "^2.8",
+ "guzzlehttp/promises": "^2.5",
+ "guzzlehttp/psr7": "^2.11",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
- "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ "symfony/deprecation-contracts": "^2.5 || ^3.0",
+ "symfony/polyfill-php80": "^1.24"
},
"provide": {
"psr/http-client-implementation": "1.0"
@@ -4140,8 +3571,9 @@
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
"guzzle/client-integration-tests": "3.0.2",
+ "guzzlehttp/test-server": "^0.5",
"php-http/message-factory": "^1.1",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34",
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
@@ -4219,7 +3651,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
+ "source": "https://github.com/guzzle/guzzle/tree/7.11.1"
},
"funding": [
{
@@ -4235,28 +3667,29 @@
"type": "tidelift"
}
],
- "time": "2025-08-23T22:36:01+00:00"
+ "time": "2026-06-07T22:54:06+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.3.0",
+ "version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "481557b130ef3790cf82b713667b43030dc9c957"
+ "reference": "4360e982f87f5f258bf872d094647791db2f4c8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
- "reference": "481557b130ef3790cf82b713667b43030dc9c957",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e",
+ "reference": "4360e982f87f5f258bf872d094647791db2f4c8e",
"shasum": ""
},
"require": {
- "php": "^7.2.5 || ^8.0"
+ "php": "^7.2.5 || ^8.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34"
},
"type": "library",
"extra": {
@@ -4302,7 +3735,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.3.0"
+ "source": "https://github.com/guzzle/promises/tree/2.5.0"
},
"funding": [
{
@@ -4318,27 +3751,29 @@
"type": "tidelift"
}
],
- "time": "2025-08-22T14:34:08+00:00"
+ "time": "2026-06-02T12:23:43+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.8.0",
+ "version": "2.11.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "21dc724a0583619cd1652f673303492272778051"
+ "reference": "bbb5e61349fa5cb822b3e87842b951088b76b81f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
- "reference": "21dc724a0583619cd1652f673303492272778051",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/bbb5e61349fa5cb822b3e87842b951088b76b81f",
+ "reference": "bbb5e61349fa5cb822b3e87842b951088b76b81f",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
- "ralouphie/getallheaders": "^3.0"
+ "ralouphie/getallheaders": "^3.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0",
+ "symfony/polyfill-php80": "^1.24"
},
"provide": {
"psr/http-factory-implementation": "1.0",
@@ -4346,8 +3781,9 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "http-interop/http-factory-tests": "0.9.0",
- "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ "http-interop/http-factory-tests": "1.1.0",
+ "jshttp/mime-db": "1.54.0.1",
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -4418,7 +3854,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.8.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.11.0"
},
"funding": [
{
@@ -4434,7 +3870,7 @@
"type": "tidelift"
}
],
- "time": "2025-08-23T21:21:41+00:00"
+ "time": "2026-06-02T12:30:48+00:00"
},
{
"name": "kelunik/certificate",
@@ -4496,21 +3932,21 @@
},
{
"name": "laminas/laminas-component-installer",
- "version": "3.6.0",
+ "version": "3.8.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-component-installer.git",
- "reference": "d36cd495624867985fc142e6004ade7c5f4a69bc"
+ "reference": "8eba3ef7054e4427cdd3c6c223e6c2b449fee9b7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-component-installer/zipball/d36cd495624867985fc142e6004ade7c5f4a69bc",
- "reference": "d36cd495624867985fc142e6004ade7c5f4a69bc",
+ "url": "https://api.github.com/repos/laminas/laminas-component-installer/zipball/8eba3ef7054e4427cdd3c6c223e6c2b449fee9b7",
+ "reference": "8eba3ef7054e4427cdd3c6c223e6c2b449fee9b7",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^2.0",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "composer-plugin-api": "^2.6",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"zendframework/zend-component-installer": "*"
@@ -4519,10 +3955,10 @@
"composer/composer": "^2.7.7",
"laminas/laminas-coding-standard": "~3.1.0",
"mikey179/vfsstream": "^1.6.11",
- "phpunit/phpunit": "^10.5.35",
+ "phpunit/phpunit": "^11.5.42",
"psalm/plugin-phpunit": "^0.19.5",
"vimeo/psalm": "^6.13.1",
- "webmozart/assert": "^1.11.0"
+ "webmozart/assert": "^1.11 || ^2.0.0"
},
"type": "composer-plugin",
"extra": {
@@ -4559,26 +3995,26 @@
"type": "community_bridge"
}
],
- "time": "2025-10-16T15:07:11+00:00"
+ "time": "2026-05-20T14:12:39+00:00"
},
{
"name": "laminas/laminas-config-aggregator",
- "version": "1.18.0",
+ "version": "1.20.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-config-aggregator.git",
- "reference": "a5cc009f58daa4e1b968abd65972fa3a481c22c5"
+ "reference": "75331b17a9ba72c5fa8679988ef08a588ddd86af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-config-aggregator/zipball/a5cc009f58daa4e1b968abd65972fa3a481c22c5",
- "reference": "a5cc009f58daa4e1b968abd65972fa3a481c22c5",
+ "url": "https://api.github.com/repos/laminas/laminas-config-aggregator/zipball/75331b17a9ba72c5fa8679988ef08a588ddd86af",
+ "reference": "75331b17a9ba72c5fa8679988ef08a588ddd86af",
"shasum": ""
},
"require": {
- "brick/varexporter": "^0.5.0 || ^0.4.0 || ^0.6.0",
+ "brick/varexporter": "^0.5.0 || ^0.4.0 || ^0.6.0 || ^0.7.0",
"laminas/laminas-stdlib": "^3.18.0",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"webimpress/safe-writer": "^2.2.0"
},
"conflict": {
@@ -4586,11 +4022,11 @@
"zendframework/zend-config-aggregator": "*"
},
"require-dev": {
- "laminas/laminas-coding-standard": "~3.0.1",
+ "laminas/laminas-coding-standard": "~3.1.0",
"laminas/laminas-config": "^3.10.1",
- "phpunit/phpunit": "^10.5.45",
- "psalm/plugin-phpunit": "^0.19.2",
- "vimeo/psalm": "^6.8.6"
+ "phpunit/phpunit": "^11.5.42",
+ "psalm/plugin-phpunit": "^0.19.5",
+ "vimeo/psalm": "^6.13.1"
},
"suggest": {
"laminas/laminas-config": "Allows loading configuration from XML, INI, YAML, and JSON files",
@@ -4627,25 +4063,25 @@
"type": "community_bridge"
}
],
- "time": "2025-02-21T18:18:40+00:00"
+ "time": "2026-06-01T15:37:55+00:00"
},
{
"name": "laminas/laminas-di",
- "version": "3.15.0",
+ "version": "3.16.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-di.git",
- "reference": "de00225cfbe30d7fab1e9cf476e154be25f2c878"
+ "reference": "7af1fdcbd1b79156b07e82a38f314ab6e07c79c0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-di/zipball/de00225cfbe30d7fab1e9cf476e154be25f2c878",
- "reference": "de00225cfbe30d7fab1e9cf476e154be25f2c878",
+ "url": "https://api.github.com/repos/laminas/laminas-di/zipball/7af1fdcbd1b79156b07e82a38f314ab6e07c79c0",
+ "reference": "7af1fdcbd1b79156b07e82a38f314ab6e07c79c0",
"shasum": ""
},
"require": {
- "laminas/laminas-stdlib": "^3.18.0",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "laminas/laminas-stdlib": "^3.21.0",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"psr/container": "^1.1.1",
"psr/log": "^1.1.4 || ^2.0.0 || ^3.0.0"
},
@@ -4660,10 +4096,10 @@
"laminas/laminas-servicemanager": "^3.22",
"mikey179/vfsstream": "^1.6.12",
"phpbench/phpbench": "^1.2.7",
- "phpunit/phpunit": "^9.6.22",
- "psalm/plugin-phpunit": "^0.18.0",
+ "phpunit/phpunit": "^11.0",
+ "psalm/plugin-phpunit": "^0.18.0 || ^0.19.0",
"squizlabs/php_codesniffer": "^3.7.1",
- "vimeo/psalm": "^5.0"
+ "vimeo/psalm": "^6.0"
},
"suggest": {
"laminas/laminas-servicemanager": "An IoC container without auto wiring capabilities"
@@ -4705,24 +4141,24 @@
"type": "community_bridge"
}
],
- "time": "2025-02-25T14:43:45+00:00"
+ "time": "2026-02-05T10:48:44+00:00"
},
{
"name": "laminas/laminas-diactoros",
- "version": "3.7.0",
+ "version": "3.8.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "b6a3b5bebb1a124f6e4ae22f3571ac83dee4b07d"
+ "reference": "60c182916b2749480895601649563970f3f12ec4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/b6a3b5bebb1a124f6e4ae22f3571ac83dee4b07d",
- "reference": "b6a3b5bebb1a124f6e4ae22f3571ac83dee4b07d",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4",
+ "reference": "60c182916b2749480895601649563970f3f12ec4",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"psr/http-factory": "^1.1",
"psr/http-message": "^1.1 || ^2.0"
},
@@ -4793,25 +4229,25 @@
"type": "community_bridge"
}
],
- "time": "2025-10-11T18:30:50+00:00"
+ "time": "2025-10-12T15:31:36+00:00"
},
{
"name": "laminas/laminas-servicemanager",
- "version": "3.23.1",
+ "version": "3.24.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-servicemanager.git",
- "reference": "06594db3a644447521eace9b5efdb12dc8446a33"
+ "reference": "b172a0df568bf37ebdfb3658263156eefe3c1e8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/06594db3a644447521eace9b5efdb12dc8446a33",
- "reference": "06594db3a644447521eace9b5efdb12dc8446a33",
+ "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/b172a0df568bf37ebdfb3658263156eefe3c1e8c",
+ "reference": "b172a0df568bf37ebdfb3658263156eefe3c1e8c",
"shasum": ""
},
"require": {
"laminas/laminas-stdlib": "^3.19",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"psr/container": "^1.0"
},
"conflict": {
@@ -4834,7 +4270,7 @@
"laminas/laminas-container-config-test": "^0.8",
"mikey179/vfsstream": "^1.6.12",
"phpbench/phpbench": "^1.4.1",
- "phpunit/phpunit": "^10.5.51",
+ "phpunit/phpunit": "^10.5.58",
"psalm/plugin-phpunit": "^0.18.4",
"vimeo/psalm": "^5.26.1"
},
@@ -4883,34 +4319,34 @@
"type": "community_bridge"
}
],
- "time": "2025-08-12T08:44:02+00:00"
+ "time": "2025-10-14T09:03:51+00:00"
},
{
"name": "laminas/laminas-stdlib",
- "version": "3.20.0",
+ "version": "3.21.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-stdlib.git",
- "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4"
+ "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/8974a1213be42c3e2f70b2c27b17f910291ab2f4",
- "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4",
+ "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/b1c81514cfe158aadf724c42b34d3d0a8164c096",
+ "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"zendframework/zend-stdlib": "*"
},
"require-dev": {
- "laminas/laminas-coding-standard": "^3.0",
- "phpbench/phpbench": "^1.3.1",
- "phpunit/phpunit": "^10.5.38",
- "psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.26.1"
+ "laminas/laminas-coding-standard": "^3.1.0",
+ "phpbench/phpbench": "^1.4.1",
+ "phpunit/phpunit": "^11.5.42",
+ "psalm/plugin-phpunit": "^0.19.5",
+ "vimeo/psalm": "^6.13.1"
},
"type": "library",
"autoload": {
@@ -4942,24 +4378,24 @@
"type": "community_bridge"
}
],
- "time": "2024-10-29T13:46:07+00:00"
+ "time": "2025-10-11T18:13:12+00:00"
},
{
"name": "league/uri",
- "version": "7.7.0",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
- "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807"
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
- "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4",
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4",
"shasum": ""
},
"require": {
- "league/uri-interfaces": "^7.7",
+ "league/uri-interfaces": "^7.8.1",
"php": "^8.1",
"psr/http-factory": "^1"
},
@@ -4973,11 +4409,11 @@
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
"ext-uri": "to use the PHP native URI class",
- "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain",
- "league/uri-components": "Needed to easily manipulate URI objects components",
- "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP",
+ "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain",
+ "league/uri-components": "to provide additional tools to manipulate URI objects components",
+ "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP",
"php-64bit": "to improve IPV4 host parsing",
- "rowbot/url": "to handle WHATWG URL",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -5032,7 +4468,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri/tree/7.7.0"
+ "source": "https://github.com/thephpleague/uri/tree/7.8.1"
},
"funding": [
{
@@ -5040,20 +4476,20 @@
"type": "github"
}
],
- "time": "2025-12-07T16:02:06+00:00"
+ "time": "2026-03-15T20:22:25+00:00"
},
{
"name": "league/uri-interfaces",
- "version": "7.7.0",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
- "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c"
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
- "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928",
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928",
"shasum": ""
},
"require": {
@@ -5066,7 +4502,7 @@
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
"php-64bit": "to improve IPV4 host parsing",
- "rowbot/url": "to handle WHATWG URL",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -5116,7 +4552,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0"
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1"
},
"funding": [
{
@@ -5124,7 +4560,7 @@
"type": "github"
}
],
- "time": "2025-12-07T16:03:21+00:00"
+ "time": "2026-03-08T20:05:35+00:00"
},
{
"name": "myclabs/deep-copy",
@@ -5188,16 +4624,16 @@
},
{
"name": "netresearch/jsonmapper",
- "version": "v5.0.0",
+ "version": "v5.0.1",
"source": {
"type": "git",
"url": "https://github.com/cweiske/jsonmapper.git",
- "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c"
+ "reference": "980674efdda65913492d29a8fd51c82270dd37bb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c",
- "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c",
+ "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/980674efdda65913492d29a8fd51c82270dd37bb",
+ "reference": "980674efdda65913492d29a8fd51c82270dd37bb",
"shasum": ""
},
"require": {
@@ -5233,9 +4669,9 @@
"support": {
"email": "cweiske@cweiske.de",
"issues": "https://github.com/cweiske/jsonmapper/issues",
- "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.0"
+ "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.1"
},
- "time": "2024-09-08T10:20:00+00:00"
+ "time": "2026-02-22T16:28:03+00:00"
},
{
"name": "nikic/php-parser",
@@ -5415,16 +4851,16 @@
},
{
"name": "php-http/cache-plugin",
- "version": "2.0.2",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/cache-plugin.git",
- "reference": "c7fd57abaf6d08578aee51a8f1f34ea33ddbfdef"
+ "reference": "1443d3882c4c18556fe9b409f664ebc8c021940c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/c7fd57abaf6d08578aee51a8f1f34ea33ddbfdef",
- "reference": "c7fd57abaf6d08578aee51a8f1f34ea33ddbfdef",
+ "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/1443d3882c4c18556fe9b409f664ebc8c021940c",
+ "reference": "1443d3882c4c18556fe9b409f664ebc8c021940c",
"shasum": ""
},
"require": {
@@ -5464,9 +4900,9 @@
],
"support": {
"issues": "https://github.com/php-http/cache-plugin/issues",
- "source": "https://github.com/php-http/cache-plugin/tree/2.0.2"
+ "source": "https://github.com/php-http/cache-plugin/tree/2.1.0"
},
- "time": "2025-12-01T08:38:41+00:00"
+ "time": "2026-05-12T09:44:11+00:00"
},
{
"name": "php-http/client-common",
@@ -5892,16 +5328,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.6.6",
+ "version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8"
+ "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8",
- "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582",
+ "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582",
"shasum": ""
},
"require": {
@@ -5909,8 +5345,8 @@
"ext-filter": "*",
"php": "^7.4 || ^8.0",
"phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.7",
- "phpstan/phpdoc-parser": "^1.7|^2.0",
+ "phpdocumentor/type-resolver": "^2.0",
+ "phpstan/phpdoc-parser": "^2.0",
"webmozart/assert": "^1.9.1 || ^2"
},
"require-dev": {
@@ -5920,7 +5356,8 @@
"phpstan/phpstan-mockery": "^1.1",
"phpstan/phpstan-webmozart-assert": "^1.2",
"phpunit/phpunit": "^9.5",
- "psalm/phar": "^5.26"
+ "psalm/phar": "^5.26",
+ "shipmonk/dead-code-detector": "^0.5.1"
},
"type": "library",
"extra": {
@@ -5950,44 +5387,44 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3"
},
- "time": "2025-12-22T21:13:58+00:00"
+ "time": "2026-03-18T20:49:53+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.12.0",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195"
+ "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195",
- "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9",
+ "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
- "php": "^7.3 || ^8.0",
+ "php": "^7.4 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.18|^2.0"
+ "phpstan/phpdoc-parser": "^2.0"
},
"require-dev": {
"ext-tokenizer": "*",
"phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^9.5",
- "rector/rector": "^0.13.9",
- "vimeo/psalm": "^4.25"
+ "psalm/phar": "^4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-1.x": "1.x-dev"
+ "dev-1.x": "1.x-dev",
+ "dev-2.x": "2.x-dev"
}
},
"autoload": {
@@ -6008,36 +5445,37 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0"
},
- "time": "2025-11-21T15:09:14+00:00"
+ "time": "2026-01-06T21:53:42+00:00"
},
{
"name": "phpspec/prophecy",
- "version": "v1.22.0",
+ "version": "v1.26.1",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "35f1adb388946d92e6edab2aa2cb2b60e132ebd5"
+ "reference": "09c2e5949d676286358a62af818f8407167a9dd6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/35f1adb388946d92e6edab2aa2cb2b60e132ebd5",
- "reference": "35f1adb388946d92e6edab2aa2cb2b60e132ebd5",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/09c2e5949d676286358a62af818f8407167a9dd6",
+ "reference": "09c2e5949d676286358a62af818f8407167a9dd6",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.2 || ^2.0",
- "php": "^7.4 || 8.0.* || 8.1.* || 8.2.* || 8.3.* || 8.4.*",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
- "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0"
+ "php": "8.2.* || 8.3.* || 8.4.* || 8.5.*",
+ "phpdocumentor/reflection-docblock": "^5.2 || ^6.0",
+ "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.1"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.40",
- "phpspec/phpspec": "^6.0 || ^7.0",
- "phpstan/phpstan": "^2.1.13",
- "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
+ "php-cs-fixer/shim": "^3.93.1",
+ "phpspec/phpspec": "^6.0 || ^7.0 || ^8.0",
+ "phpstan/phpstan": "^2.1.13, <2.1.34 || ^2.1.39",
+ "phpunit/phpunit": "^11.0 || ^12.0 || ^13.0"
},
"type": "library",
"extra": {
@@ -6078,28 +5516,28 @@
],
"support": {
"issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.22.0"
+ "source": "https://github.com/phpspec/prophecy/tree/v1.26.1"
},
- "time": "2025-04-29T14:58:06+00:00"
+ "time": "2026-04-13T14:35:16+00:00"
},
{
"name": "phpspec/prophecy-phpunit",
- "version": "v2.4.0",
+ "version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy-phpunit.git",
- "reference": "d3c28041d9390c9bca325a08c5b2993ac855bded"
+ "reference": "89f91b01d0640b7820e427e02a007bc6489d8a26"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/d3c28041d9390c9bca325a08c5b2993ac855bded",
- "reference": "d3c28041d9390c9bca325a08c5b2993ac855bded",
+ "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/89f91b01d0640b7820e427e02a007bc6489d8a26",
+ "reference": "89f91b01d0640b7820e427e02a007bc6489d8a26",
"shasum": ""
},
"require": {
"php": "^7.3 || ^8",
"phpspec/prophecy": "^1.18",
- "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0 || ^12.0"
+ "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0 || ^12.0 || ^13.0"
},
"require-dev": {
"phpstan/phpstan": "^1.10"
@@ -6133,22 +5571,22 @@
],
"support": {
"issues": "https://github.com/phpspec/prophecy-phpunit/issues",
- "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.4.0"
+ "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.5.0"
},
- "time": "2025-05-13T13:52:32+00:00"
+ "time": "2026-02-09T15:40:55+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "2.3.0",
+ "version": "2.3.2",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495"
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495",
- "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a",
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a",
"shasum": ""
},
"require": {
@@ -6180,41 +5618,105 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2"
+ },
+ "time": "2026-01-25T14:56:51+00:00"
+ },
+ {
+ "name": "phpstan/phpstan",
+ "version": "2.2.2",
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e5cc34d491a90e79c216d824f60fe21fd4d93bd6",
+ "reference": "e5cc34d491a90e79c216d824f60fe21fd4d93bd6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ondřej Mirtes"
+ },
+ {
+ "name": "Markus Staab"
+ },
+ {
+ "name": "Vincent Langlet"
+ }
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
},
- "time": "2025-08-30T15:50:23+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-05T09:00:01+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.16",
+ "version": "11.0.12",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
+ "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
- "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
+ "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": "^4.19.1 || ^5.1.0",
- "php": ">=8.1",
- "phpunit/php-file-iterator": "^4.1.0",
- "phpunit/php-text-template": "^3.0.1",
- "sebastian/code-unit-reverse-lookup": "^3.0.0",
- "sebastian/complexity": "^3.2.0",
- "sebastian/environment": "^6.1.0",
- "sebastian/lines-of-code": "^2.0.2",
- "sebastian/version": "^4.0.1",
- "theseer/tokenizer": "^1.2.3"
+ "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": "^10.1"
+ "phpunit/phpunit": "^11.5.46"
},
"suggest": {
"ext-pcov": "PHP extension that provides line coverage",
@@ -6223,7 +5725,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1.x-dev"
+ "dev-main": "11.0.x-dev"
}
},
"autoload": {
@@ -6252,40 +5754,52 @@
"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/10.1.16"
+ "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": "2024-08-22T04:31:57+00:00"
+ "time": "2025-12-24T07:01:01+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "4.1.0",
+ "version": "5.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
+ "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
- "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903",
+ "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -6313,36 +5827,48 @@
"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/4.1.0"
+ "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": "2023-08-31T06:24:48+00:00"
+ "time": "2026-02-02T13:52:54+00:00"
},
{
"name": "phpunit/php-invoker",
- "version": "4.0.0",
+ "version": "5.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
+ "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
- "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2",
+ "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
"ext-pcntl": "*",
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.0"
},
"suggest": {
"ext-pcntl": "*"
@@ -6350,7 +5876,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -6376,7 +5902,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
+ "security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1"
},
"funding": [
{
@@ -6384,32 +5911,32 @@
"type": "github"
}
],
- "time": "2023-02-03T06:56:09+00:00"
+ "time": "2024-07-03T05:07:44+00:00"
},
{
"name": "phpunit/php-text-template",
- "version": "3.0.1",
+ "version": "4.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
+ "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
- "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
+ "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -6436,7 +5963,7 @@
"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/3.0.1"
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1"
},
"funding": [
{
@@ -6444,32 +5971,32 @@
"type": "github"
}
],
- "time": "2023-08-31T14:07:24+00:00"
+ "time": "2024-07-03T05:08:43+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "6.0.0",
+ "version": "7.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
+ "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
- "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
+ "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -6495,7 +6022,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
+ "security": "https://github.com/sebastianbergmann/php-timer/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1"
},
"funding": [
{
@@ -6503,20 +6031,20 @@
"type": "github"
}
],
- "time": "2023-02-03T06:57:52+00:00"
+ "time": "2024-07-03T05:09:35+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "10.5.60",
+ "version": "11.5.55",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "f2e26f52f80ef77832e359205f216eeac00e320c"
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f2e26f52f80ef77832e359205f216eeac00e320c",
- "reference": "f2e26f52f80ef77832e359205f216eeac00e320c",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00",
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00",
"shasum": ""
},
"require": {
@@ -6529,23 +6057,24 @@
"myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
- "php": ">=8.1",
- "phpunit/php-code-coverage": "^10.1.16",
- "phpunit/php-file-iterator": "^4.1.0",
- "phpunit/php-invoker": "^4.0.0",
- "phpunit/php-text-template": "^3.0.1",
- "phpunit/php-timer": "^6.0.0",
- "sebastian/cli-parser": "^2.0.1",
- "sebastian/code-unit": "^2.0.0",
- "sebastian/comparator": "^5.0.4",
- "sebastian/diff": "^5.1.1",
- "sebastian/environment": "^6.1.0",
- "sebastian/exporter": "^5.1.4",
- "sebastian/global-state": "^6.0.2",
- "sebastian/object-enumerator": "^5.0.0",
- "sebastian/recursion-context": "^5.0.1",
- "sebastian/type": "^4.0.0",
- "sebastian/version": "^4.0.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"
@@ -6556,7 +6085,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.5-dev"
+ "dev-main": "11.5-dev"
}
},
"autoload": {
@@ -6588,7 +6117,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.60"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55"
},
"funding": [
{
@@ -6612,7 +6141,56 @@
"type": "tidelift"
}
],
- "time": "2025-12-06T07:50:42+00:00"
+ "time": "2026-02-18T12:37:06+00:00"
+ },
+ {
+ "name": "psr/cache",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/3.0.0"
+ },
+ "time": "2021-02-03T23:26:27+00:00"
},
{
"name": "psr/event-dispatcher",
@@ -7154,182 +6732,563 @@
"type": "open_collective"
}
],
- "time": "2025-11-19T20:47:34+00:00"
+ "time": "2025-11-19T20:47:34+00:00"
+ },
+ {
+ "name": "react/stream",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/stream.git",
+ "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+ "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.8",
+ "react/event-loop": "^1.2"
+ },
+ "require-dev": {
+ "clue/stream-filter": "~1.2",
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Stream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
+ "keywords": [
+ "event-driven",
+ "io",
+ "non-blocking",
+ "pipe",
+ "reactphp",
+ "readable",
+ "stream",
+ "writable"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/stream/issues",
+ "source": "https://github.com/reactphp/stream/tree/v1.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-06-11T12:45:25+00:00"
+ },
+ {
+ "name": "rector/rector",
+ "version": "2.3.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/rectorphp/rector.git",
+ "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/917842143fd9f5331a2adefc214b8d7143bd32c4",
+ "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0",
+ "phpstan/phpstan": "^2.1.40"
+ },
+ "conflict": {
+ "rector/rector-doctrine": "*",
+ "rector/rector-downgrade-php": "*",
+ "rector/rector-phpunit": "*",
+ "rector/rector-symfony": "*"
+ },
+ "suggest": {
+ "ext-dom": "To manipulate phpunit.xml via the custom-rule command"
+ },
+ "bin": [
+ "bin/rector"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Instant Upgrade and Automated Refactoring of any PHP code",
+ "homepage": "https://getrector.com/",
+ "keywords": [
+ "automation",
+ "dev",
+ "migration",
+ "refactoring"
+ ],
+ "support": {
+ "issues": "https://github.com/rectorphp/rector/issues",
+ "source": "https://github.com/rectorphp/rector/tree/2.3.9"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2026-03-16T09:43:55+00:00"
+ },
+ {
+ "name": "revolt/event-loop",
+ "version": "v1.0.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/revoltphp/event-loop.git",
+ "reference": "44061cf513e53c6200372fc935ac42271566295d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d",
+ "reference": "44061cf513e53c6200372fc935ac42271566295d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "ext-json": "*",
+ "jetbrains/phpstorm-stubs": "^2019.3",
+ "phpunit/phpunit": "^9",
+ "psalm/phar": "6.16.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Revolt\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "ceesjank@gmail.com"
+ },
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
+ }
+ ],
+ "description": "Rock-solid event loop for concurrent PHP applications.",
+ "keywords": [
+ "async",
+ "asynchronous",
+ "concurrency",
+ "event",
+ "event-loop",
+ "non-blocking",
+ "scheduler"
+ ],
+ "support": {
+ "issues": "https://github.com/revoltphp/event-loop/issues",
+ "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9"
+ },
+ "time": "2026-05-16T17:55:38+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": "react/stream",
- "version": "v1.4.0",
+ "name": "sebastian/comparator",
+ "version": "6.3.3",
"source": {
"type": "git",
- "url": "https://github.com/reactphp/stream.git",
- "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
- "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9",
+ "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9",
"shasum": ""
},
"require": {
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
- "php": ">=5.3.8",
- "react/event-loop": "^1.2"
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.2",
+ "sebastian/diff": "^6.0",
+ "sebastian/exporter": "^6.0"
},
"require-dev": {
- "clue/stream-filter": "~1.2",
- "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
+ "phpunit/phpunit": "^11.4"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
},
"type": "library",
- "autoload": {
- "psr-4": {
- "React\\Stream\\": "src/"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.3-dev"
}
},
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
},
{
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
},
{
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
}
],
- "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": [
- "event-driven",
- "io",
- "non-blocking",
- "pipe",
- "reactphp",
- "readable",
- "stream",
- "writable"
+ "comparator",
+ "compare",
+ "equality"
],
"support": {
- "issues": "https://github.com/reactphp/stream/issues",
- "source": "https://github.com/reactphp/stream/tree/v1.4.0"
+ "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://opencollective.com/reactphp",
- "type": "open_collective"
+ "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": "2024-06-11T12:45:25+00:00"
+ "time": "2026-01-24T09:26:40+00:00"
},
{
- "name": "revolt/event-loop",
- "version": "v1.0.8",
+ "name": "sebastian/complexity",
+ "version": "4.0.1",
"source": {
"type": "git",
- "url": "https://github.com/revoltphp/event-loop.git",
- "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c"
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "ee41d384ab1906c68852636b6de493846e13e5a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/b6fc06dce8e9b523c9946138fa5e62181934f91c",
- "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0",
+ "reference": "ee41d384ab1906c68852636b6de493846e13e5a0",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.2"
},
"require-dev": {
- "ext-json": "*",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^9",
- "psalm/phar": "^5.15"
+ "phpunit/phpunit": "^11.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.x-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Revolt\\": "src"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "ceesjank@gmail.com"
- },
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Rock-solid event loop for concurrent PHP applications.",
- "keywords": [
- "async",
- "asynchronous",
- "concurrency",
- "event",
- "event-loop",
- "non-blocking",
- "scheduler"
- ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
"support": {
- "issues": "https://github.com/revoltphp/event-loop/issues",
- "source": "https://github.com/revoltphp/event-loop/tree/v1.0.8"
+ "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"
},
- "time": "2025-08-27T21:33:23+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:49:50+00:00"
},
{
- "name": "sebastian/cli-parser",
- "version": "2.0.1",
+ "name": "sebastian/diff",
+ "version": "6.0.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
- "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.0",
+ "symfony/process": "^4.2 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -7344,16 +7303,25 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
}
],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
"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/2.0.1"
+ "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": [
{
@@ -7361,32 +7329,35 @@
"type": "github"
}
],
- "time": "2024-03-02T07:12:49+00:00"
+ "time": "2024-07-03T04:53:05+00:00"
},
{
- "name": "sebastian/code-unit",
- "version": "2.0.0",
+ "name": "sebastian/environment",
+ "version": "7.2.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
- "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4",
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.0-dev"
+ "dev-main": "7.2-dev"
}
},
"autoload": {
@@ -7401,48 +7372,67 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
+ "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": "2023-02-03T06:58:43+00:00"
+ "time": "2025-05-21T11:55:47+00:00"
},
{
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "3.0.0",
+ "name": "sebastian/exporter",
+ "version": "6.3.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
- "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "ext-mbstring": "*",
+ "php": ">=8.2",
+ "sebastian/recursion-context": "^6.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.0-dev"
+ "dev-main": "6.3-dev"
}
},
"autoload": {
@@ -7458,50 +7448,82 @@
{
"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": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "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/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
+ "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": "2023-02-03T06:59:15+00:00"
+ "time": "2025-09-24T06:12:51+00:00"
},
{
- "name": "sebastian/comparator",
- "version": "5.0.4",
+ "name": "sebastian/global-state",
+ "version": "7.0.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e"
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "3be331570a721f9a4b5917f4209773de17f747d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e",
- "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7",
+ "reference": "3be331570a721f9a4b5917f4209773de17f747d7",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "ext-mbstring": "*",
- "php": ">=8.1",
- "sebastian/diff": "^5.0",
- "sebastian/exporter": "^5.0"
+ "php": ">=8.2",
+ "sebastian/object-reflector": "^4.0",
+ "sebastian/recursion-context": "^6.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.5"
+ "ext-dom": "*",
+ "phpunit/phpunit": "^11.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -7517,77 +7539,51 @@
{
"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",
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": [
- "comparator",
- "compare",
- "equality"
+ "global state"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4"
+ "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"
- },
- {
- "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": "2025-09-07T05:25:07+00:00"
+ "time": "2024-07-03T04:57:36+00:00"
},
{
- "name": "sebastian/complexity",
- "version": "3.2.0",
+ "name": "sebastian/lines-of-code",
+ "version": "3.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "68ff824baeae169ec9f2137158ee529584553799"
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
- "reference": "68ff824baeae169ec9f2137158ee529584553799",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a",
+ "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=8.1"
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.2-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -7606,12 +7602,12 @@
"role": "lead"
}
],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
+ "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/complexity/issues",
- "security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
+ "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": [
{
@@ -7619,33 +7615,34 @@
"type": "github"
}
],
- "time": "2023-12-21T08:37:17+00:00"
+ "time": "2024-07-03T04:58:38+00:00"
},
{
- "name": "sebastian/diff",
- "version": "5.1.1",
+ "name": "sebastian/object-enumerator",
+ "version": "6.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "f5b498e631a74204185071eb41f33f38d64608aa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
- "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa",
+ "reference": "f5b498e631a74204185071eb41f33f38d64608aa",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2",
+ "sebastian/object-reflector": "^4.0",
+ "sebastian/recursion-context": "^6.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.0",
- "symfony/process": "^6.4"
+ "phpunit/phpunit": "^11.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.1-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -7661,24 +7658,14 @@
{
"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"
- ],
+ "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/diff/issues",
- "security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
+ "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": [
{
@@ -7686,35 +7673,32 @@
"type": "github"
}
],
- "time": "2024-03-02T07:15:17+00:00"
+ "time": "2024-07-03T05:00:13+00:00"
},
{
- "name": "sebastian/environment",
- "version": "6.1.0",
+ "name": "sebastian/object-reflector",
+ "version": "4.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
- "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9",
+ "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "suggest": {
- "ext-posix": "*"
+ "phpunit/phpunit": "^11.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.1-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -7732,17 +7716,12 @@
"email": "sebastian@phpunit.de"
}
],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "https://github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
+ "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/environment/issues",
- "security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
+ "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": [
{
@@ -7750,34 +7729,32 @@
"type": "github"
}
],
- "time": "2024-03-23T08:47:14+00:00"
+ "time": "2024-07-03T05:01:32+00:00"
},
{
- "name": "sebastian/exporter",
- "version": "5.1.4",
+ "name": "sebastian/recursion-context",
+ "version": "6.0.3",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "0735b90f4da94969541dac1da743446e276defa6"
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6",
- "reference": "0735b90f4da94969541dac1da743446e276defa6",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
"shasum": ""
},
"require": {
- "ext-mbstring": "*",
- "php": ">=8.1",
- "sebastian/recursion-context": "^5.0"
+ "php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^10.5"
+ "phpunit/phpunit": "^11.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.1-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -7798,29 +7775,17 @@
"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"
- ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4"
+ "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": [
{
@@ -7836,39 +7801,36 @@
"type": "thanks_dev"
},
{
- "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
"type": "tidelift"
}
],
- "time": "2025-09-24T06:09:11+00:00"
+ "time": "2025-08-13T04:42:22+00:00"
},
{
- "name": "sebastian/global-state",
- "version": "6.0.2",
+ "name": "sebastian/type",
+ "version": "5.1.3",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
- "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "sebastian/object-reflector": "^3.0",
- "sebastian/recursion-context": "^5.0"
+ "php": ">=8.2"
},
"require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^11.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -7883,52 +7845,58 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Snapshotting of global state",
- "homepage": "https://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
+ "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/global-state/issues",
- "security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
+ "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": "2024-03-02T07:19:19+00:00"
+ "time": "2025-08-09T06:55:48+00:00"
},
{
- "name": "sebastian/lines-of-code",
- "version": "2.0.2",
+ "name": "sebastian/version",
+ "version": "5.0.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
- "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874",
+ "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
+ "php": ">=8.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -7947,12 +7915,12 @@
"role": "lead"
}
],
- "description": "Library for counting the lines of code in PHP source code",
- "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "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/lines-of-code/issues",
- "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
+ "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": [
{
@@ -7960,338 +7928,421 @@
"type": "github"
}
],
- "time": "2023-12-21T08:38:20+00:00"
+ "time": "2024-10-09T05:16:32+00:00"
},
{
- "name": "sebastian/object-enumerator",
- "version": "5.0.0",
+ "name": "spatie/array-to-xml",
+ "version": "3.4.4",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
+ "url": "https://github.com/spatie/array-to-xml.git",
+ "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
- "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
+ "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/88b2f3852a922dd73177a68938f8eb2ec70c7224",
+ "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "sebastian/object-reflector": "^3.0",
- "sebastian/recursion-context": "^5.0"
+ "ext-dom": "*",
+ "php": "^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "mockery/mockery": "^1.2",
+ "pestphp/pest": "^1.21",
+ "spatie/pest-plugin-snapshots": "^1.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "3.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Spatie\\ArrayToXml\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://freek.dev",
+ "role": "Developer"
}
],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "description": "Convert an array to xml",
+ "homepage": "https://github.com/spatie/array-to-xml",
+ "keywords": [
+ "array",
+ "convert",
+ "xml"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
+ "source": "https://github.com/spatie/array-to-xml/tree/3.4.4"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/spatie",
"type": "github"
}
],
- "time": "2023-02-03T07:08:32+00:00"
+ "time": "2025-12-15T09:00:41+00:00"
},
{
- "name": "sebastian/object-reflector",
- "version": "3.0.0",
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
- "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "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",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
"autoload": {
"classmap": [
- "src/"
+ "lib/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
+ "description": "A static analysis tool to detect side effects in PHP code",
+ "keywords": [
+ "static analysis"
],
- "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",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
+ "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/sebastianbergmann",
+ "url": "https://github.com/staabm",
"type": "github"
}
],
- "time": "2023-02-03T07:06:18+00:00"
+ "time": "2024-10-20T05:08:20+00:00"
},
{
- "name": "sebastian/recursion-context",
- "version": "5.0.1",
+ "name": "symfony/console",
+ "version": "v7.4.13",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a"
+ "url": "https://github.com/symfony/console.git",
+ "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a",
- "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a",
+ "url": "https://api.github.com/repos/symfony/console/zipball/85095d2573eaefaf35e40b9513a9bf09f72cd217",
+ "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^7.2|^8.0"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/dotenv": "<6.4",
+ "symfony/event-dispatcher": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/process": "<6.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.5"
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "5.0-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
},
{
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
"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/5.0.1"
+ "source": "https://github.com/symfony/console/tree/v7.4.13"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
},
{
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
+ "url": "https://github.com/fabpot",
+ "type": "github"
},
{
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-08-10T07:50:56+00:00"
+ "time": "2026-05-24T08:56:14+00:00"
},
{
- "name": "sebastian/type",
- "version": "4.0.0",
+ "name": "symfony/event-dispatcher",
+ "version": "v7.4.9",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
- "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e4a2e29753c7801f7a8340e066cfa788f3bc8101",
+ "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2",
+ "symfony/event-dispatcher-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/service-contracts": "<2.5"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0|3.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/framework-bundle": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "4.0-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
"support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.9"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "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": "2023-02-03T07:10:45+00:00"
+ "time": "2026-04-18T13:18:21+00:00"
},
{
- "name": "sebastian/version",
- "version": "4.0.1",
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v3.7.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
- "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32",
+ "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.1",
+ "psr/event-dispatcher": "^1"
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
+ "description": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "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": "2023-02-07T11:34:05+00:00"
+ "time": "2026-01-05T13:30:16+00:00"
},
{
- "name": "spatie/array-to-xml",
- "version": "3.4.4",
+ "name": "symfony/filesystem",
+ "version": "v7.4.11",
"source": {
"type": "git",
- "url": "https://github.com/spatie/array-to-xml.git",
- "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224"
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/88b2f3852a922dd73177a68938f8eb2ec70c7224",
- "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/d721ea61b4a5fba8c5b6e7c1feda19efea144b50",
+ "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "php": "^8.0"
+ "php": ">=8.2",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.8"
},
"require-dev": {
- "mockery/mockery": "^1.2",
- "pestphp/pest": "^1.21",
- "spatie/pest-plugin-snapshots": "^1.1"
+ "symfony/process": "^6.4|^7.0|^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "Spatie\\ArrayToXml\\": "src"
- }
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -8299,74 +8350,63 @@
],
"authors": [
{
- "name": "Freek Van der Herten",
- "email": "freek@spatie.be",
- "homepage": "https://freek.dev",
- "role": "Developer"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Convert an array to xml",
- "homepage": "https://github.com/spatie/array-to-xml",
- "keywords": [
- "array",
- "convert",
- "xml"
- ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/spatie/array-to-xml/tree/3.4.4"
+ "source": "https://github.com/symfony/filesystem/tree/v7.4.11"
},
"funding": [
{
- "url": "https://spatie.be/open-source/support-us",
+ "url": "https://symfony.com/sponsor",
"type": "custom"
},
{
- "url": "https://github.com/spatie",
+ "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": "2025-12-15T09:00:41+00:00"
+ "time": "2026-05-11T16:38:44+00:00"
},
{
- "name": "symfony/event-dispatcher",
- "version": "v6.4.25",
+ "name": "symfony/finder",
+ "version": "v7.4.8",
"source": {
"type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "b0cf3162020603587363f0551cd3be43958611ff"
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "e0be088d22278583a82da281886e8c3592fbf149"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b0cf3162020603587363f0551cd3be43958611ff",
- "reference": "b0cf3162020603587363f0551cd3be43958611ff",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149",
+ "reference": "e0be088d22278583a82da281886e8c3592fbf149",
"shasum": ""
},
- "require": {
- "php": ">=8.1",
- "symfony/event-dispatcher-contracts": "^2.5|^3"
- },
- "conflict": {
- "symfony/dependency-injection": "<5.4",
- "symfony/service-contracts": "<2.5"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "2.0|3.0"
- },
+ "require": {
+ "php": ">=8.2"
+ },
"require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/error-handler": "^5.4|^6.0|^7.0",
- "symfony/expression-language": "^5.4|^6.0|^7.0",
- "symfony/http-foundation": "^5.4|^6.0|^7.0",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^5.4|^6.0|^7.0"
+ "symfony/filesystem": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
+ "Symfony\\Component\\Finder\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -8386,10 +8426,10 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.25"
+ "source": "https://github.com/symfony/finder/tree/v7.4.8"
},
"funding": [
{
@@ -8409,40 +8449,34 @@
"type": "tidelift"
}
],
- "time": "2025-08-13T09:41:44+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
- "name": "symfony/event-dispatcher-contracts",
- "version": "v3.6.0",
+ "name": "symfony/options-resolver",
+ "version": "v7.4.8",
"source": {
"type": "git",
- "url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
+ "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "psr/event-dispatcher": "^1"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.6-dev"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Contracts\\EventDispatcher\\": ""
- }
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -8450,26 +8484,23 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Generic abstractions related to dispatching event",
+ "description": "Provides an improved replacement for the array_replace PHP function",
"homepage": "https://symfony.com",
"keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
+ "config",
+ "configuration",
+ "options"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/options-resolver/tree/v7.4.8"
},
"funding": [
{
@@ -8480,43 +8511,54 @@
"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": "2024-09-25T14:21:43+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
- "name": "symfony/filesystem",
- "version": "v6.4.30",
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.37.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789"
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/441c6b69f7222aadae7cbf5df588496d5ee37789",
- "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.8"
+ "php": ">=7.2"
},
- "require-dev": {
- "symfony/process": "^5.4|^6.4|^7.0"
+ "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\\Component\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -8524,18 +8566,24 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides basic utilities for the filesystem",
+ "description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.30"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0"
},
"funding": [
{
@@ -8555,36 +8603,42 @@
"type": "tidelift"
}
],
- "time": "2025-11-26T14:43:45+00:00"
+ "time": "2026-04-10T16:19:22+00:00"
},
{
- "name": "symfony/finder",
- "version": "v6.4.31",
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.38.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "5547f2e1f0ca8e2e7abe490156b62da778cfbe2b"
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/5547f2e1f0ca8e2e7abe490156b62da778cfbe2b",
- "reference": "5547f2e1f0ca8e2e7abe490156b62da778cfbe2b",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603",
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=7.2"
},
- "require-dev": {
- "symfony/filesystem": "^6.0|^7.0"
+ "suggest": {
+ "ext-intl": "For best performance"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Symfony\\Component\\Finder\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -8592,18 +8646,26 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Finds files and directories via an intuitive fluent interface",
+ "description": "Symfony polyfill for intl's grapheme_* functions",
"homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.4.31"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1"
},
"funding": [
{
@@ -8623,33 +8685,44 @@
"type": "tidelift"
}
],
- "time": "2025-12-11T14:52:17+00:00"
+ "time": "2026-05-26T05:58:03+00:00"
},
{
- "name": "symfony/options-resolver",
- "version": "v6.4.30",
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.38.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/options-resolver.git",
- "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f"
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/eeaa8cabe54c7b3516938c72a4a161c0cc80a34f",
- "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b",
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3"
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Symfony\\Component\\OptionsResolver\\": ""
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -8658,23 +8731,26 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides an improved replacement for the array_replace PHP function",
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
- "config",
- "configuration",
- "options"
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v6.4.30"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0"
},
"funding": [
{
@@ -8694,20 +8770,20 @@
"type": "tidelift"
}
],
- "time": "2025-11-12T13:06:53+00:00"
+ "time": "2026-05-25T13:48:31+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.33.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
- "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
"shasum": ""
},
"require": {
@@ -8758,7 +8834,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0"
},
"funding": [
{
@@ -8778,20 +8854,20 @@
"type": "tidelift"
}
],
- "time": "2025-01-02T08:10:11+00:00"
+ "time": "2026-04-10T16:19:22+00:00"
},
{
"name": "symfony/polyfill-php81",
- "version": "v1.33.0",
+ "version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
+ "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
+ "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
"shasum": ""
},
"require": {
@@ -8838,7 +8914,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.38.1"
},
"funding": [
{
@@ -8858,20 +8934,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-05-26T12:45:58+00:00"
},
{
"name": "symfony/polyfill-php84",
- "version": "v1.33.0",
+ "version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php84.git",
- "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
- "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
"shasum": ""
},
"require": {
@@ -8918,7 +8994,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1"
},
"funding": [
{
@@ -8938,24 +9014,24 @@
"type": "tidelift"
}
],
- "time": "2025-06-24T13:30:11+00:00"
+ "time": "2026-05-26T12:51:13+00:00"
},
{
"name": "symfony/process",
- "version": "v6.4.31",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8541b7308fca001320e90bca8a73a28aa5604a6e"
+ "reference": "f5804be144caceb570f6747519999636b664f24c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8541b7308fca001320e90bca8a73a28aa5604a6e",
- "reference": "8541b7308fca001320e90bca8a73a28aa5604a6e",
+ "url": "https://api.github.com/repos/symfony/process/zipball/f5804be144caceb570f6747519999636b664f24c",
+ "reference": "f5804be144caceb570f6747519999636b664f24c",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"type": "library",
"autoload": {
@@ -8983,7 +9059,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.31"
+ "source": "https://github.com/symfony/process/tree/v7.4.13"
},
"funding": [
{
@@ -9003,24 +9079,24 @@
"type": "tidelift"
}
],
- "time": "2025-12-15T19:26:35+00:00"
+ "time": "2026-05-23T16:05:06+00:00"
},
{
"name": "symfony/stopwatch",
- "version": "v6.4.24",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898"
+ "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b67e94e06a05d9572c2fa354483b3e13e3cb1898",
- "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/70a852d72fec4d51efb1f48dcd968efcaf5ccb89",
+ "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/service-contracts": "^2.5|^3"
},
"type": "library",
@@ -9049,7 +9125,98 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v6.4.24"
+ "source": "https://github.com/symfony/stopwatch/tree/v7.4.8"
+ },
+ "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-03-24T13:12:05+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v7.4.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/961683010db3b27ec6ebcd7308e6e1ee8fa7ffde",
+ "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3.0",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.33",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/emoji": "^7.1|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/intl": "^6.4|^7.0|^8.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v7.4.13"
},
"funding": [
{
@@ -9069,7 +9236,7 @@
"type": "tidelift"
}
],
- "time": "2025-07-10T08:14:14+00:00"
+ "time": "2026-05-23T15:23:29+00:00"
},
{
"name": "theseer/tokenizer",
@@ -9123,16 +9290,16 @@
},
{
"name": "vimeo/psalm",
- "version": "6.14.3",
+ "version": "6.16.1",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
- "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a"
+ "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0b040a91f280f071c1abcb1b77ce3822058725a",
- "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1f5de594dc76faf8784e02d3dc4716c91c6f6ac",
+ "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac",
"shasum": ""
},
"require": {
@@ -9156,7 +9323,7 @@
"netresearch/jsonmapper": "^5.0",
"nikic/php-parser": "^5.0.0",
"php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0",
- "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0",
+ "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
"spatie/array-to-xml": "^2.17.0 || ^3.0",
"symfony/console": "^6.0 || ^7.0 || ^8.0",
"symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0",
@@ -9237,7 +9404,7 @@
"issues": "https://github.com/vimeo/psalm/issues",
"source": "https://github.com/vimeo/psalm"
},
- "time": "2025-12-23T15:36:48+00:00"
+ "time": "2026-03-19T10:56:09+00:00"
},
{
"name": "webimpress/safe-writer",
@@ -9300,23 +9467,23 @@
},
{
"name": "webmozart/assert",
- "version": "1.12.1",
+ "version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
- "reference": "9be6926d8b485f55b9229203f962b51ed377ba68"
+ "reference": "9007ea6f45ecf352a9422b36644e4bfc039b9155"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68",
- "reference": "9be6926d8b485f55b9229203f962b51ed377ba68",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/9007ea6f45ecf352a9422b36644e4bfc039b9155",
+ "reference": "9007ea6f45ecf352a9422b36644e4bfc039b9155",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-date": "*",
"ext-filter": "*",
- "php": "^7.2 || ^8.0"
+ "php": "^8.2"
},
"suggest": {
"ext-intl": "",
@@ -9325,8 +9492,12 @@
},
"type": "library",
"extra": {
+ "psalm": {
+ "pluginClass": "Webmozart\\Assert\\PsalmPlugin"
+ },
"branch-alias": {
- "dev-master": "1.10-dev"
+ "dev-master": "2.0-dev",
+ "dev-feature/2-0": "2.0-dev"
}
},
"autoload": {
@@ -9342,6 +9513,10 @@
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com"
}
],
"description": "Assertions to validate method input/output with nice error messages.",
@@ -9352,9 +9527,9 @@
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.12.1"
+ "source": "https://github.com/webmozarts/assert/tree/2.4.0"
},
- "time": "2025-10-29T15:56:20+00:00"
+ "time": "2026-05-20T13:07:01+00:00"
}
],
"aliases": [],
@@ -9363,9 +9538,12 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": "^8.1",
+ "php": "^8.2",
"ext-json": "*"
},
"platform-dev": {},
+ "platform-overrides": {
+ "php": "8.2.99"
+ },
"plugin-api-version": "2.9.0"
}
diff --git a/conformance/src/AbstractRpTestCase.php b/conformance/src/AbstractRpTestCase.php
index e0a33fa..25ac2ba 100644
--- a/conformance/src/AbstractRpTestCase.php
+++ b/conformance/src/AbstractRpTestCase.php
@@ -22,9 +22,9 @@
use ReflectionFunction;
use RuntimeException;
use Throwable;
+use ReflectionClass;
use function array_merge;
-use function dirname;
use function file;
use function file_exists;
use function file_put_contents;
@@ -33,7 +33,6 @@
use function ltrim;
use function mkdir;
use function parse_str;
-use function sprintf;
use function var_export;
use const PHP_EOL;
@@ -82,7 +81,6 @@ public function getRedirectUri(): string
protected function simulateAuthRedirect(string $uri): ServerRequestInterface
{
- /** @var HttpClient $client */
$httpClient = $this->getContainer()->has(HttpClient::class)
? $this->getContainer()->get(HttpClient::class)
: Psr18ClientDiscovery::find();
@@ -114,8 +112,6 @@ protected function executeRpTest(string $profile, string $testName, callable $ca
{
echo $this->getClosureDump($callback);
- $testUtil = $this->getContainer()->get(RpTestUtil::class);
-
try {
$callback($profile, $testName);
} catch (Throwable $e) {
@@ -153,7 +149,7 @@ protected function getClosureDump(callable $closure)
$s = '';
if ($p->isArray()) {
$s .= 'array ';
- } elseif ($p->getClass()) {
+ } elseif ($p->getClass() instanceof ReflectionClass) {
$s .= $p->getClass()->name . ' ';
}
if ($p->isPassedByReference()) {
@@ -190,10 +186,10 @@ public function getAndSaveTestLog(string $profile, string $testName): string
$log = (string) $response->getBody();
$logFilePath = __DIR__ . '/../log/' . ltrim($profile, '@') . '/' . $testName . '.txt';
- $dirname = dirname($logFilePath);
+ $dirname = \dirname($logFilePath);
if (! file_exists($dirname) && ! mkdir($concurrentDirectory = $dirname, 0o777, true) && ! is_dir($concurrentDirectory)) {
- throw new RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
+ throw new RuntimeException(\sprintf('Directory "%s" was not created', $concurrentDirectory));
}
file_put_contents($logFilePath, $log);
diff --git a/conformance/src/Command/RpTest.php b/conformance/src/Command/RpTest.php
index ee7215b..5e39fdb 100644
--- a/conformance/src/Command/RpTest.php
+++ b/conformance/src/Command/RpTest.php
@@ -15,33 +15,19 @@
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
+use Throwable;
use function array_filter;
-use function count;
use function fnmatch;
-use function sprintf;
use function str_repeat;
class RpTest extends Command
{
- /** @var RpTestRunner */
- private $testRunner;
-
- /** @var RpProfileTestsProvider */
- private $testsProvider;
-
- /** @var RPLogsHelper */
- private $logsHelper;
-
public function __construct(
- RpTestRunner $testRunner,
- RpProfileTestsProvider $testsProvider,
- RPLogsHelper $logsHelper
+ private readonly RpTestRunner $testRunner,
+ private readonly RpProfileTestsProvider $testsProvider,
+ private readonly RPLogsHelper $logsHelper,
) {
- $this->testRunner = $testRunner;
- $this->testsProvider = $testsProvider;
- $this->logsHelper = $logsHelper;
-
parent::__construct('test');
}
@@ -86,8 +72,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$this->logsHelper->clearLogs($testInfo->getRoot(), $testInfo->getRpId());
}
- if (count($testIds)) {
- $tests = array_filter($tests, static function (RpTestInterface $test) use ($testIds) {
+ if (\count($testIds) > 0) {
+ $tests = array_filter($tests, static function (RpTestInterface $test) use ($testIds): bool {
foreach ($testIds as $testId) {
if (fnmatch($testId, $test->getTestId())) {
return true;
@@ -111,7 +97,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
do {
$result = $this->testRunner->run($test, $testInfo);
- } while (null !== $result->getException() && ++$count < $retries);
+ } while ($result->getException() instanceof Throwable && ++$count < $retries);
$output->writeln("Test: {$testName}", OutputInterface::VERBOSITY_NORMAL);
@@ -134,7 +120,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$this->printRemoteLog($result, $output);
}
- if ($exception = $result->getException()) {
+ if (($exception = $result->getException()) instanceof Throwable) {
$counters['errors'][] = $testName;
$output->writeln('Result: Test failed!', OutputInterface::VERBOSITY_NORMAL);
$output->writeln((string) $exception, OutputInterface::VERBOSITY_DEBUG);
@@ -152,20 +138,20 @@ protected function execute(InputInterface $input, OutputInterface $output): int
}
$output->writeln('--- SUMMARY ---', OutputInterface::VERBOSITY_NORMAL);
- $output->writeln(sprintf('Executed: %d', count($counters['executed'])), OutputInterface::VERBOSITY_NORMAL);
- $output->writeln(sprintf('Success: %d', count($counters['success'])), OutputInterface::VERBOSITY_NORMAL);
- $output->writeln(sprintf('Errors: %d', count($counters['errors'])), OutputInterface::VERBOSITY_NORMAL);
+ $output->writeln(\sprintf('Executed: %d', \count($counters['executed'])), OutputInterface::VERBOSITY_NORMAL);
+ $output->writeln(\sprintf('Success: %d', \count($counters['success'])), OutputInterface::VERBOSITY_NORMAL);
+ $output->writeln(\sprintf('Errors: %d', \count($counters['errors'])), OutputInterface::VERBOSITY_NORMAL);
- if (count($counters['errors'])) {
+ if (\count($counters['errors'])) {
$this->printSeparator($output, OutputInterface::VERBOSITY_NORMAL);
$output->writeln('Failed tests', OutputInterface::VERBOSITY_NORMAL);
foreach ($counters['errors'] as $testName) {
- $output->writeln(sprintf(' - %s', $testName), OutputInterface::VERBOSITY_NORMAL);
+ $output->writeln(\sprintf(' - %s', $testName), OutputInterface::VERBOSITY_NORMAL);
}
}
- if (count($counters['errors'])) {
+ if (\count($counters['errors'])) {
return 1;
}
@@ -183,7 +169,7 @@ private function printRemoteLog(RpTestResult $result, OutputInterface $output):
$body = (string) $this->logsHelper->getLog(
$testInfo->getRoot(),
$testInfo->getRpId(),
- $result->getTest()->getTestId()
+ $result->getTest()->getTestId(),
)
->getBody();
$output->writeln('Remote Log:');
diff --git a/conformance/src/Provider/ImplementationProvider.php b/conformance/src/Provider/ImplementationProvider.php
index 154eaee..9a91d1a 100644
--- a/conformance/src/Provider/ImplementationProvider.php
+++ b/conformance/src/Provider/ImplementationProvider.php
@@ -10,62 +10,51 @@
use function array_map;
use function array_pop;
use function array_shift;
-use function array_slice;
use function array_unshift;
use function file;
use function implode;
-use function is_callable;
use function preg_match;
use function preg_replace;
-use function sprintf;
use function str_repeat;
-use function strlen;
class ImplementationProvider
{
- /** @var int */
- private $indent;
+ public function __construct(
+ private readonly int $indent = 4,
+ ) {}
- /**
- * ImplementationProvider constructor.
- */
- public function __construct(int $indent = 4)
+ public function getCallableCode(callable $closure): string
{
- $this->indent = $indent;
- }
-
- public function getCallableCode(callable $closure)
- {
- if (is_callable($closure)) {
+ if (\is_callable($closure)) {
$closure = Closure::fromCallable($closure);
}
$r = new ReflectionFunction($closure);
$lines = file($r->getFileName());
- $lines = array_slice($lines, $r->getStartLine(), $r->getEndLine() - $r->getStartLine());
+ $lines = \array_slice($lines, $r->getStartLine(), $r->getEndLine() - $r->getStartLine());
if (preg_match('/^ *{ *$/', $lines[0] ?? '')) {
unset($lines[0]);
}
$firstLine = array_shift($lines) ?: '';
- if (! preg_match('/^ *{ *$/', $firstLine)) {
+ if (! preg_match('/^ *{ *$/', (string) $firstLine)) {
array_unshift($lines, $firstLine);
}
$lastLine = array_pop($lines) ?: '';
- if (! preg_match('/^ *} *$/', $lastLine)) {
+ if (! preg_match('/^ *} *$/', (string) $lastLine)) {
$lines[] = $lastLine;
}
// remove spaces based on first line
if (preg_match('/^( +)/', $lines[0] ?? '', $matches)) {
- $toTrim = strlen($matches[1]);
- $lines = array_map(static fn(string $line) => preg_replace(sprintf('/^ {0,%d}/', $toTrim), '', $line), $lines);
+ $toTrim = \strlen($matches[1]);
+ $lines = array_map(static fn(string $line): ?string => preg_replace(\sprintf('/^ {0,%d}/', $toTrim), '', $line), $lines);
}
- if ($this->indent) {
- $lines = array_map(fn(string $line) => str_repeat(' ', $this->indent) . $line, $lines);
+ if ($this->indent !== 0) {
+ $lines = array_map(fn(string $line): string => str_repeat(' ', $this->indent) . $line, $lines);
}
return implode('', $lines);
diff --git a/conformance/src/Provider/RpProfileTestsProvider.php b/conformance/src/Provider/RpProfileTestsProvider.php
index fbd9df5..74db889 100644
--- a/conformance/src/Provider/RpProfileTestsProvider.php
+++ b/conformance/src/Provider/RpProfileTestsProvider.php
@@ -15,11 +15,8 @@
class RpProfileTestsProvider
{
- /** @var ContainerInterface */
- private $container;
-
/** @var array */
- private static $responseTypeMap = [
+ private static array $responseTypeMap = [
TestInfo::PROFILE_BASIC_CODE => 'code',
TestInfo::PROFILE_IMPLICIT_IDTOKEN => 'id_token',
TestInfo::PROFILE_IMPLICIT_IDTOKEN_TOKEN => 'id_token token',
@@ -30,7 +27,7 @@ class RpProfileTestsProvider
TestInfo::PROFILE_DYNAMIC => 'code',
];
- private static $testMap = [
+ private static array $testMap = [
TestInfo::PROFILE_BASIC_CODE => [
RpTest\ResponseTypeAndResponseMode\RPResponseTypeCodeTest::class,
RpTest\ScopeRequestParameter\RpScopeUserinfoClaimsTest::class,
@@ -396,19 +393,18 @@ class RpProfileTestsProvider
/**
* ProfileTestsProvider constructor.
*/
- public function __construct(ContainerInterface $container)
- {
- $this->container = $container;
- }
+ public function __construct(
+ private readonly ContainerInterface $container,
+ ) {}
public function getAvailableProfiles(): array
{
- return array_keys(static::$testMap);
+ return array_keys(self::$testMap);
}
public function getResponseTypeForProfile(string $profile): string
{
- $responseType = static::$responseTypeMap[$profile] ?? null;
+ $responseType = self::$responseTypeMap[$profile] ?? null;
if (null === $responseType) {
throw new InvalidArgumentException('No response type for profile ' . $profile);
@@ -422,6 +418,6 @@ public function getResponseTypeForProfile(string $profile): string
*/
public function getTests(string $profile): array
{
- return array_map([$this->container, 'get'], static::$testMap[$profile] ?? []);
+ return array_map($this->container->get(...), self::$testMap[$profile] ?? []);
}
}
diff --git a/conformance/src/RpTest/AbstractRpTest.php b/conformance/src/RpTest/AbstractRpTest.php
index fe9201a..cf6a243 100644
--- a/conformance/src/RpTest/AbstractRpTest.php
+++ b/conformance/src/RpTest/AbstractRpTest.php
@@ -26,7 +26,6 @@
use function array_merge;
use function json_decode;
use function json_encode;
-use function sprintf;
use const PHP_EOL;
@@ -34,13 +33,9 @@ abstract class AbstractRpTest implements RpTestInterface
{
protected const REDIRECT_URI = 'https://rp.test/callback';
- /** @var ContainerInterface */
- private $container;
-
- public function __construct(ContainerInterface $container)
- {
- $this->container = $container;
- }
+ public function __construct(
+ private readonly ContainerInterface $container,
+ ) {}
public function getContainer(): ContainerInterface
{
@@ -72,7 +67,7 @@ public function registerClient(TestInfo $testInfo, array $metadata = [], ?JWKSet
try {
$clientMetadata = ClientMetadata::fromArray($registrationService->register($issuer, $metadata));
} catch (OAuth2Exception $e) {
- echo sprintf('%s (%s)', $e->getMessage(), $e->getDescription()) . PHP_EOL;
+ echo \sprintf('%s (%s)', $e->getMessage(), $e->getDescription()) . PHP_EOL;
throw $e;
} catch (RemoteException $e) {
echo $e->getResponse()->getBody() . PHP_EOL;
@@ -88,7 +83,6 @@ public function registerClient(TestInfo $testInfo, array $metadata = [], ?JWKSet
protected function httpGet(string $uri, array $headers = []): ResponseInterface
{
- /** @var HttpClient $client */
$httpClient = $this->getContainer()->has(HttpClient::class)
? $this->getContainer()->get(HttpClient::class)
: Psr18ClientDiscovery::find();
diff --git a/conformance/src/RpTest/Discovery/RPDiscoveryJwksUriKeys.php b/conformance/src/RpTest/Discovery/RPDiscoveryJwksUriKeys.php
index 1774014..1f46d2d 100644
--- a/conformance/src/RpTest/Discovery/RPDiscoveryJwksUriKeys.php
+++ b/conformance/src/RpTest/Discovery/RPDiscoveryJwksUriKeys.php
@@ -9,8 +9,6 @@
use Facile\OpenIDClient\Issuer\IssuerBuilder;
use PHPUnit\Framework\Assert;
-use function sprintf;
-
/**
* The Relying Party uses keys from the jwks_uri which has been obtained from the OpenID Provider Metadata.
*
@@ -25,7 +23,7 @@ public function getTestId(): string
public function execute(TestInfo $testInfo): void
{
- $configUri = sprintf('%s/%s/%s/.well-known/openid-configuration', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
+ $configUri = \sprintf('%s/%s/%s/.well-known/openid-configuration', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
$issuer = (new IssuerBuilder())
->build($configUri);
diff --git a/conformance/src/RpTest/Discovery/RPDiscoveryOpenIdConfiguration.php b/conformance/src/RpTest/Discovery/RPDiscoveryOpenIdConfiguration.php
index 507bad5..83c6b90 100644
--- a/conformance/src/RpTest/Discovery/RPDiscoveryOpenIdConfiguration.php
+++ b/conformance/src/RpTest/Discovery/RPDiscoveryOpenIdConfiguration.php
@@ -9,8 +9,6 @@
use Facile\OpenIDClient\Issuer\IssuerBuilder;
use PHPUnit\Framework\Assert;
-use function sprintf;
-
/**
* Retrieve and use the OpenID Provider Configuration Information.
*
@@ -25,11 +23,11 @@ public function getTestId(): string
public function execute(TestInfo $testInfo): void
{
- $configUri = sprintf('%s/%s/%s/.well-known/openid-configuration', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
+ $configUri = \sprintf('%s/%s/%s/.well-known/openid-configuration', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
$issuer = (new IssuerBuilder())
->build($configUri);
- $expected = sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
+ $expected = \sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
Assert::assertSame($expected, $issuer->getMetadata()->getIssuer());
}
}
diff --git a/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerAcct.php b/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerAcct.php
index edfe175..dc658b6 100644
--- a/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerAcct.php
+++ b/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerAcct.php
@@ -11,7 +11,6 @@
use function parse_url;
use function rtrim;
-use function sprintf;
/**
* Use WebFinger (RFC7033) and OpenID Provider Issuer Discovery to determine the location of the OpenID Provider.
@@ -32,11 +31,11 @@ public function execute(TestInfo $testInfo): void
$parsed = parse_url($testInfo->getRoot());
$issuerHostAndPort = rtrim($parsed['host'] . ':' . ($parsed['port'] ?? ''), ':');
- $input = sprintf('acct:%s.%s@%s', $testInfo->getRpId(), $this->getTestId(), $issuerHostAndPort);
+ $input = \sprintf('acct:%s.%s@%s', $testInfo->getRpId(), $this->getTestId(), $issuerHostAndPort);
$issuer = (new IssuerBuilder())
->build($input);
- $expected = sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
+ $expected = \sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
Assert::assertSame($expected, $issuer->getMetadata()->getIssuer());
}
}
diff --git a/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUnknownMember.php b/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUnknownMember.php
index 4cf36cf..2a21820 100644
--- a/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUnknownMember.php
+++ b/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUnknownMember.php
@@ -9,8 +9,6 @@
use Facile\OpenIDClient\Issuer\IssuerBuilder;
use PHPUnit\Framework\Assert;
-use function sprintf;
-
/**
* The webfinger response will contain a member that the client doesn't recognize.
*
@@ -30,7 +28,7 @@ public function execute(TestInfo $testInfo): void
$issuer = (new IssuerBuilder())
->build($input);
- $expected = sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
+ $expected = \sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
Assert::assertSame($expected, $issuer->getMetadata()->getIssuer());
}
}
diff --git a/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUrl.php b/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUrl.php
index e079fd8..3b2897b 100644
--- a/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUrl.php
+++ b/conformance/src/RpTest/Discovery/RPDiscoveryWebFingerUrl.php
@@ -9,8 +9,6 @@
use Facile\OpenIDClient\Issuer\IssuerBuilder;
use PHPUnit\Framework\Assert;
-use function sprintf;
-
/**
* Use WebFinger (RFC7033) and OpenID Provider Issuer Discovery to determine the location of the OpenID Provider.
* The discovery should be done using URL syntax as user input identifier.
@@ -31,7 +29,7 @@ public function execute(TestInfo $testInfo): void
$issuer = (new IssuerBuilder())
->build($input);
- $expected = sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
+ $expected = \sprintf('%s/%s/%s', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
Assert::assertSame($expected, $issuer->getMetadata()->getIssuer());
}
}
diff --git a/conformance/src/RpTest/DynamicClientRegistration/RPRegistrationDynamic.php b/conformance/src/RpTest/DynamicClientRegistration/RPRegistrationDynamic.php
index 9a9a234..07f3344 100644
--- a/conformance/src/RpTest/DynamicClientRegistration/RPRegistrationDynamic.php
+++ b/conformance/src/RpTest/DynamicClientRegistration/RPRegistrationDynamic.php
@@ -10,8 +10,6 @@
use Facile\OpenIDClient\Service\RegistrationService;
use PHPUnit\Framework\Assert;
-use function sprintf;
-
/**
* Use the client registration endpoint in order to dynamically register the Relying Party.
*
@@ -28,7 +26,7 @@ public function execute(TestInfo $testInfo): void
{
$clientRegistrationService = new RegistrationService();
- $configUri = sprintf('%s/%s/%s/.well-known/openid-configuration', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
+ $configUri = \sprintf('%s/%s/%s/.well-known/openid-configuration', $testInfo->getRoot(), $testInfo->getRpId(), $this->getTestId());
$issuer = (new IssuerBuilder())
->build($configUri);
diff --git a/conformance/src/RpTest/IdToken/RpIdTokenSigEncA128KWTest.php b/conformance/src/RpTest/IdToken/RpIdTokenSigEncA128KWTest.php
index 093b5cd..e35b3dd 100644
--- a/conformance/src/RpTest/IdToken/RpIdTokenSigEncA128KWTest.php
+++ b/conformance/src/RpTest/IdToken/RpIdTokenSigEncA128KWTest.php
@@ -50,6 +50,6 @@ public function execute(TestInfo $testInfo): void
$tokenSet = $authorizationService->callback($client, $params);
Assert::assertNotNull($tokenSet->getIdToken());
- Assert::arrayHasKey('email', $tokenSet->claims());
+ Assert::assertArrayHasKey('email', $tokenSet->claims());
}
}
diff --git a/conformance/src/RpTest/IdToken/RpIdTokenSigEncTest.php b/conformance/src/RpTest/IdToken/RpIdTokenSigEncTest.php
index af58398..f211225 100644
--- a/conformance/src/RpTest/IdToken/RpIdTokenSigEncTest.php
+++ b/conformance/src/RpTest/IdToken/RpIdTokenSigEncTest.php
@@ -37,7 +37,7 @@ public function execute(TestInfo $testInfo): void
$jwkEncAlg = JWKFactory::createRSAKey(2_048, ['alg' => 'RSA1_5', 'use' => 'enc']);
$jwks = new JWKSet([$jwkSig, $jwkEncAlg]);
- $publicJwks = new JWKSet(array_map(fn(JWK $jwk) => $jwk->toPublic(), $jwks->all()));
+ $publicJwks = new JWKSet(array_map(fn(JWK $jwk): JWK => $jwk->toPublic(), $jwks->all()));
$client = $this->registerClient($testInfo, [
'id_token_signed_response_alg' => 'RS256',
@@ -66,6 +66,6 @@ public function execute(TestInfo $testInfo): void
$tokenSet = $authorizationService->callback($client, $params, null, $authSession);
Assert::assertNotNull($tokenSet->getIdToken());
- Assert::arrayHasKey('email', $tokenSet->claims());
+ Assert::assertArrayHasKey('email', $tokenSet->claims());
}
}
diff --git a/conformance/src/RpTest/KeyRotation/RPKeyRotationOPEncKeyTest.php b/conformance/src/RpTest/KeyRotation/RPKeyRotationOPEncKeyTest.php
index 043520c..5f6a55c 100644
--- a/conformance/src/RpTest/KeyRotation/RPKeyRotationOPEncKeyTest.php
+++ b/conformance/src/RpTest/KeyRotation/RPKeyRotationOPEncKeyTest.php
@@ -40,7 +40,7 @@ public function execute(TestInfo $testInfo): void
$jwkEncAlg = JWKFactory::createRSAKey(2_048, ['alg' => 'RSA-OAEP', 'use' => 'enc']);
$jwks = new JWKSet([$jwkSig, $jwkEncAlg]);
- $publicJwks = new JWKSet(array_map(static fn(JWK $jwk) => $jwk->toPublic(), $jwks->all()));
+ $publicJwks = new JWKSet(array_map(static fn(JWK $jwk): JWK => $jwk->toPublic(), $jwks->all()));
$client = $this->registerClient($testInfo, [
'request_object_signing_alg' => 'RS256',
diff --git a/conformance/src/RpTest/NonceRequestParameter/RpNonceUnlessCodeFlowTest.php b/conformance/src/RpTest/NonceRequestParameter/RpNonceUnlessCodeFlowTest.php
index c73f6d6..b77d14e 100644
--- a/conformance/src/RpTest/NonceRequestParameter/RpNonceUnlessCodeFlowTest.php
+++ b/conformance/src/RpTest/NonceRequestParameter/RpNonceUnlessCodeFlowTest.php
@@ -56,7 +56,7 @@ public function execute(TestInfo $testInfo): void
$serverRequest = $this->simulateAuthRedirect($uri);
$params = $authorizationService->getCallbackParams($serverRequest, $client);
- $tokenSet = $authorizationService->callback($client, $params, null, $authSession);
+ $authorizationService->callback($client, $params, null, $authSession);
Assert::assertTrue(true);
}
diff --git a/conformance/src/RpTest/ResponseTypeAndResponseMode/RPResponseModeFormPostErrorTest.php b/conformance/src/RpTest/ResponseTypeAndResponseMode/RPResponseModeFormPostErrorTest.php
index 2b51b37..c3d8094 100644
--- a/conformance/src/RpTest/ResponseTypeAndResponseMode/RPResponseModeFormPostErrorTest.php
+++ b/conformance/src/RpTest/ResponseTypeAndResponseMode/RPResponseModeFormPostErrorTest.php
@@ -70,7 +70,7 @@ public function execute(TestInfo $testInfo): void
throw new AssertionFailedError('No assertions');
} catch (OAuth2Exception $e) {
Assert::assertSame('login_required', $e->getError());
- } catch (Throwable $e) {
+ } catch (Throwable) {
throw new AssertionFailedError('No assertions');
}
}
diff --git a/conformance/src/RpTest/ScopeRequestParameter/RpScopeUserinfoClaimsTest.php b/conformance/src/RpTest/ScopeRequestParameter/RpScopeUserinfoClaimsTest.php
index b1e30f6..903d317 100644
--- a/conformance/src/RpTest/ScopeRequestParameter/RpScopeUserinfoClaimsTest.php
+++ b/conformance/src/RpTest/ScopeRequestParameter/RpScopeUserinfoClaimsTest.php
@@ -52,7 +52,7 @@ public function execute(TestInfo $testInfo): void
if ($accessToken) {
$userInfo = $userInfoService->getUserInfo($client, $tokenSet);
} else {
- $userInfo = json_decode(base64url_decode(explode('.', $tokenSet->getIdToken())[1]), true);
+ $userInfo = json_decode(base64url_decode(explode('.', (string) $tokenSet->getIdToken())[1]), true);
}
Assert::assertArrayHasKey('email', $userInfo);
diff --git a/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoEncTest.php b/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoEncTest.php
index be37ee4..33ebd28 100644
--- a/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoEncTest.php
+++ b/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoEncTest.php
@@ -37,7 +37,7 @@ public function execute(TestInfo $testInfo): void
$jwkEncAlg = JWKFactory::createRSAKey(2_048, ['alg' => 'RSA1_5', 'use' => 'enc']);
$jwks = new JWKSet([$jwkEncAlg]);
- $publicJwks = new JWKSet(array_map(static fn(JWK $jwk) => $jwk->toPublic(), $jwks->all()));
+ $publicJwks = new JWKSet(array_map(static fn(JWK $jwk): JWK => $jwk->toPublic(), $jwks->all()));
$client = $this->registerClient($testInfo, [
'userinfo_signed_response_alg' => 'none',
diff --git a/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoSigEncTest.php b/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoSigEncTest.php
index 44090b5..1dd48ac 100644
--- a/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoSigEncTest.php
+++ b/conformance/src/RpTest/UserInfoEndpoint/RPUserInfoSigEncTest.php
@@ -38,7 +38,7 @@ public function execute(TestInfo $testInfo): void
$jwkEncAlg = JWKFactory::createRSAKey(2_048, ['alg' => 'RSA1_5', 'use' => 'enc']);
$jwks = new JWKSet([$jwkSig, $jwkEncAlg]);
- $publicJwks = new JWKSet(array_map(static fn(JWK $jwk) => $jwk->toPublic(), $jwks->all()));
+ $publicJwks = new JWKSet(array_map(static fn(JWK $jwk): JWK => $jwk->toPublic(), $jwks->all()));
$client = $this->registerClient($testInfo, [
'userinfo_signed_response_alg' => 'RS256',
diff --git a/conformance/src/RpTestUtil.php b/conformance/src/RpTestUtil.php
index a53908c..7f4fcb7 100644
--- a/conformance/src/RpTestUtil.php
+++ b/conformance/src/RpTestUtil.php
@@ -19,7 +19,6 @@
use function ltrim;
use function mkdir;
use function preg_match;
-use function sprintf;
class RpTestUtil
{
@@ -29,23 +28,19 @@ class RpTestUtil
/** @var RequestFactoryInterface */
private $requestFactory;
- /** @var string */
- private $logDir;
-
public function __construct(
?ClientInterface $client = null,
?RequestFactoryInterface $requestFactory = null,
- string $logDir = __DIR__ . '/../log'
+ private readonly string $logDir = __DIR__ . '/../log',
) {
$this->client = $client ?? Psr18ClientDiscovery::find();
$this->requestFactory = $requestFactory ?? Psr17FactoryDiscovery::findRequestFactory();
- $this->logDir = $logDir;
}
private function mkdir(string $dirname): void
{
if (! file_exists($dirname) && ! mkdir($concurrentDirectory = $dirname, 0o777, true) && ! is_dir($concurrentDirectory)) {
- throw new RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
+ throw new RuntimeException(\sprintf('Directory "%s" was not created', $concurrentDirectory));
}
}
diff --git a/conformance/src/Runner/RpTestResult.php b/conformance/src/Runner/RpTestResult.php
index 2cede13..d0a9268 100644
--- a/conformance/src/Runner/RpTestResult.php
+++ b/conformance/src/Runner/RpTestResult.php
@@ -10,28 +10,13 @@
class RpTestResult
{
- /** @var RpTestInterface */
- private $test;
-
- /** @var TestInfo */
- private $testInfo;
-
- /** @var string */
- private $implementation;
-
- /** @var Throwable */
- private $exception;
-
- /**
- * RpTestResult constructor.
- */
- public function __construct(RpTestInterface $test, TestInfo $testInfo, string $implementation, ?Throwable $exception = null)
- {
- $this->test = $test;
- $this->testInfo = $testInfo;
- $this->implementation = $implementation;
- $this->exception = $exception;
- }
+ public function __construct(
+ private readonly RpTestInterface $test,
+ private readonly TestInfo $testInfo,
+ private readonly string $implementation,
+ /** @var Throwable */
+ private ?Throwable $exception = null,
+ ) {}
public function getTest(): RpTestInterface
{
diff --git a/conformance/src/Runner/RpTestRunner.php b/conformance/src/Runner/RpTestRunner.php
index 96894fc..845791d 100644
--- a/conformance/src/Runner/RpTestRunner.php
+++ b/conformance/src/Runner/RpTestRunner.php
@@ -13,23 +13,16 @@
class RpTestRunner
{
- /** @var ImplementationProvider */
- private $implementationProvider;
+ public function __construct(
+ private readonly ImplementationProvider $implementationProvider,
+ ) {}
- /**
- * RpTestRunner constructor.
- */
- public function __construct(ImplementationProvider $implementationProvider)
- {
- $this->implementationProvider = $implementationProvider;
- }
-
- public function run(RpTestInterface $test, TestInfo $testInfo)
+ public function run(RpTestInterface $test, TestInfo $testInfo): RpTestResult
{
$testResult = new RpTestResult(
$test,
$testInfo,
- $this->implementationProvider->getCallableCode([$test, 'execute'])
+ $this->implementationProvider->getCallableCode($test->execute(...)),
);
try {
diff --git a/conformance/src/TestInfo.php b/conformance/src/TestInfo.php
index 47e591c..6810e98 100644
--- a/conformance/src/TestInfo.php
+++ b/conformance/src/TestInfo.php
@@ -25,30 +25,14 @@ class TestInfo
public const PROFILE_DYNAMIC = 'dynamic';
- /** @var string */
- private $profile;
+ private readonly string $root;
- /** @var string */
- private $responseType;
-
- /** @var string */
- private $rpId;
-
- /** @var string */
- private $root;
-
- /**
- * TestInfo constructor.
- */
public function __construct(
- string $profile,
- string $responseType = 'code',
- string $baseRpId = 'tmv_php-openid-client',
- string $root = 'https://rp.certification.openid.net:8080/'
+ private readonly string $profile,
+ private readonly string $responseType = 'code',
+ private readonly string $rpId = 'tmv_php-openid-client',
+ string $root = 'https://rp.certification.openid.net:8080/',
) {
- $this->profile = $profile;
- $this->responseType = $responseType;
- $this->rpId = $baseRpId;
$this->root = rtrim($root, '/');
}
diff --git a/conformance/src/TestListener.php b/conformance/src/TestListener.php
index 7309333..f5e7632 100644
--- a/conformance/src/TestListener.php
+++ b/conformance/src/TestListener.php
@@ -16,19 +16,13 @@
use function array_map;
use function array_pop;
-use function array_push;
use function array_shift;
-use function array_slice;
use function array_unshift;
use function file;
use function implode;
-use function is_callable;
use function preg_match;
use function preg_replace;
-use function sprintf;
use function str_repeat;
-use function strlen;
-use function strpos;
use function substr;
class TestListener implements TestListenerInterface
@@ -71,7 +65,7 @@ public function getRpId(): string
*/
public function startTestSuite(TestSuite $suite): void
{
- if (0 !== strpos($suite->getName(), 'rp-')) {
+ if (! str_starts_with($suite->getName(), 'rp-')) {
return;
}
@@ -103,12 +97,7 @@ public function endTestSuite(TestSuite $suite): void
/**
* A test started.
*/
- public function startTest(Test $test): void
- {
- if (! $test instanceof RpTestInterface) {
- return;
- }
- }
+ public function startTest(Test $test): void {}
/**
* A test ended.
@@ -119,43 +108,43 @@ public function endTest(Test $test, float $time): void
return;
}
- $testUtil = $this->container->get(RpTestUtil::class);
+ $this->container->get(RpTestUtil::class);
- $implementation = $this->getClosureDump([$test, 'execute']);
+ $this->getClosureDump([$test, 'execute']);
}
- protected function getClosureDump(callable $closure, int $indent = 4)
+ protected function getClosureDump(callable $closure, int $indent = 4): string
{
- if (is_callable($closure)) {
+ if (\is_callable($closure)) {
$closure = Closure::fromCallable($closure);
}
$r = new ReflectionFunction($closure);
$lines = file($r->getFileName());
- $lines = array_slice($lines, $r->getStartLine(), $r->getEndLine() - $r->getStartLine());
+ $lines = \array_slice($lines, $r->getStartLine(), $r->getEndLine() - $r->getStartLine());
if (preg_match('/^ *{ *$/', $lines[0] ?? '')) {
unset($lines[0]);
}
$firstLine = array_shift($lines) ?: '';
- if (! preg_match('/^ *{ *$/', $firstLine)) {
+ if (! preg_match('/^ *{ *$/', (string) $firstLine)) {
array_unshift($lines, $firstLine);
}
$lastLine = array_pop($lines) ?: '';
- if (! preg_match('/^ *} *$/', $lastLine)) {
- array_push($lines, $lastLine);
+ if (! preg_match('/^ *} *$/', (string) $lastLine)) {
+ $lines[] = $lastLine;
}
// remove spaces based on first line
if (preg_match('/^( +)/', $lines[0] ?? '', $matches)) {
- $toTrim = strlen($matches[1]);
- $lines = array_map(static fn(string $line) => preg_replace(sprintf('/^ {0,%d}/', $toTrim), '', $line), $lines);
+ $toTrim = \strlen($matches[1]);
+ $lines = array_map(static fn(string $line): ?string => preg_replace(\sprintf('/^ {0,%d}/', $toTrim), '', $line), $lines);
}
- if ($indent) {
- $lines = array_map(static fn(string $line) => str_repeat(' ', $indent) . $line, $lines);
+ if ($indent !== 0) {
+ $lines = array_map(static fn(string $line): string => str_repeat(' ', $indent) . $line, $lines);
}
return implode('', $lines);
diff --git a/rector.php b/rector.php
new file mode 100644
index 0000000..9866a39
--- /dev/null
+++ b/rector.php
@@ -0,0 +1,20 @@
+withPaths([
+ __DIR__ . '/conformance',
+ __DIR__ . '/src',
+ __DIR__ . '/tests',
+ ])
+ // uncomment to reach your current PHP version
+ ->withPhpSets()
+ ->withPreparedSets(
+ deadCode: true,
+ codeQuality: true,
+ typeDeclarations: true
+ )
+;
diff --git a/src/AlgorithmManagerBuilder.php b/src/AlgorithmManagerBuilder.php
index 936cf3a..f903c14 100644
--- a/src/AlgorithmManagerBuilder.php
+++ b/src/AlgorithmManagerBuilder.php
@@ -10,7 +10,7 @@
use Jose\Component\Signature\Algorithm;
use Throwable;
-final class AlgorithmManagerBuilder
+final readonly class AlgorithmManagerBuilder
{
/**
* @var string[]
@@ -36,7 +36,7 @@ public function build(): AlgorithmManager
if (class_exists($algorithmClass)) {
try {
$algorithms[] = new $algorithmClass();
- } catch (Throwable $throwable) {
+ } catch (Throwable) {
// does nothing
}
}
diff --git a/src/AuthMethod/AbstractJwtAuth.php b/src/AuthMethod/AbstractJwtAuth.php
index 04c45d1..6ba79b1 100644
--- a/src/AuthMethod/AbstractJwtAuth.php
+++ b/src/AuthMethod/AbstractJwtAuth.php
@@ -22,7 +22,7 @@ abstract protected function createAuthJwt(OpenIDClient $client, array $claims =
public function createRequest(
RequestInterface $request,
OpenIDClient $client,
- array $claims
+ array $claims,
): RequestInterface {
$clientId = $client->getMetadata()->getClientId();
diff --git a/src/AuthMethod/AbstractTLS.php b/src/AuthMethod/AbstractTLS.php
index 96eb505..a809fb9 100644
--- a/src/AuthMethod/AbstractTLS.php
+++ b/src/AuthMethod/AbstractTLS.php
@@ -17,7 +17,7 @@ abstract class AbstractTLS implements AuthMethodInterface
public function createRequest(
RequestInterface $request,
OpenIDClient $client,
- array $claims
+ array $claims,
): RequestInterface {
$clientId = $client->getMetadata()->getClientId();
diff --git a/src/AuthMethod/ClientSecretBasic.php b/src/AuthMethod/ClientSecretBasic.php
index 8050d65..6c34881 100644
--- a/src/AuthMethod/ClientSecretBasic.php
+++ b/src/AuthMethod/ClientSecretBasic.php
@@ -25,7 +25,7 @@ public function getSupportedMethod(): string
public function createRequest(
RequestInterface $request,
OpenIDClient $client,
- array $claims
+ array $claims,
): RequestInterface {
$clientId = $client->getMetadata()->getClientId();
$clientSecret = $client->getMetadata()->getClientSecret();
@@ -36,7 +36,7 @@ public function createRequest(
$request = $request->withHeader(
'Authorization',
- 'Basic ' . base64_encode(urlencode($clientId) . ':' . urlencode($clientSecret))
+ 'Basic ' . base64_encode(urlencode($clientId) . ':' . urlencode($clientSecret)),
);
$request->getBody()->write(http_build_query($claims));
diff --git a/src/AuthMethod/ClientSecretJwt.php b/src/AuthMethod/ClientSecretJwt.php
index 449a009..9281ab7 100644
--- a/src/AuthMethod/ClientSecretJwt.php
+++ b/src/AuthMethod/ClientSecretJwt.php
@@ -24,20 +24,10 @@
final class ClientSecretJwt extends AbstractJwtAuth
{
- private ?JWSBuilder $jwsBuilder;
-
- private JWSSerializer $jwsSerializer;
-
- /**
- * ClientSecretJwt constructor.
- */
public function __construct(
- ?JWSBuilder $jwsBuilder = null,
- ?JWSSerializer $jwsSerializer = null
- ) {
- $this->jwsBuilder = $jwsBuilder;
- $this->jwsSerializer = $jwsSerializer ?? new CompactSerializer();
- }
+ private ?JWSBuilder $jwsBuilder = null,
+ private readonly JWSSerializer $jwsSerializer = new CompactSerializer(),
+ ) {}
#[Override]
public function getSupportedMethod(): string
@@ -47,7 +37,7 @@ public function getSupportedMethod(): string
private function getJwsBuilder(): JWSBuilder
{
- if (null !== $this->jwsBuilder) {
+ if ($this->jwsBuilder instanceof JWSBuilder) {
return $this->jwsBuilder;
}
@@ -82,7 +72,7 @@ protected function createAuthJwt(OpenIDClient $client, array $claims = []): stri
'iat' => $time,
'exp' => $time + 60,
'jti' => $jti,
- ], JSON_THROW_ON_ERROR);
+ ], \JSON_THROW_ON_ERROR);
$jws = $this->getJwsBuilder()->create()
->withPayload($payload)
diff --git a/src/AuthMethod/ClientSecretPost.php b/src/AuthMethod/ClientSecretPost.php
index cda87f6..5cafde5 100644
--- a/src/AuthMethod/ClientSecretPost.php
+++ b/src/AuthMethod/ClientSecretPost.php
@@ -24,7 +24,7 @@ public function getSupportedMethod(): string
public function createRequest(
RequestInterface $request,
OpenIDClient $client,
- array $claims
+ array $claims,
): RequestInterface {
$clientSecret = $client->getMetadata()->getClientSecret();
diff --git a/src/AuthMethod/None.php b/src/AuthMethod/None.php
index 69efd64..6dc4bc2 100644
--- a/src/AuthMethod/None.php
+++ b/src/AuthMethod/None.php
@@ -23,7 +23,7 @@ public function getSupportedMethod(): string
public function createRequest(
RequestInterface $request,
OpenIDClient $client,
- array $claims
+ array $claims,
): RequestInterface {
$params = array_merge(['client_id' => $client->getMetadata()->getClientId()], $claims);
$request->getBody()->write(http_build_query($params));
diff --git a/src/AuthMethod/PrivateKeyJwt.php b/src/AuthMethod/PrivateKeyJwt.php
index 64fb9df..57fecbb 100644
--- a/src/AuthMethod/PrivateKeyJwt.php
+++ b/src/AuthMethod/PrivateKeyJwt.php
@@ -23,27 +23,18 @@
final class PrivateKeyJwt extends AbstractJwtAuth
{
- private JWSBuilder $jwsBuilder;
+ private readonly JWSBuilder $jwsBuilder;
- private JWSSerializer $jwsSerializer;
+ private readonly JWSSerializer $jwsSerializer;
- private ?JWK $jwk;
-
- private int $tokenTTL;
-
- /**
- * PrivateKeyJwt constructor.
- */
public function __construct(
?JWSBuilder $jwsBuilder = null,
?JWSSerializer $serializer = null,
- ?JWK $jwk = null,
- int $tokenTTL = 60
+ private readonly ?JWK $jwk = null,
+ private readonly int $tokenTTL = 60,
) {
$this->jwsBuilder = $jwsBuilder ?? new JWSBuilder((new AlgorithmManagerBuilder())->build());
$this->jwsSerializer = $serializer ?? new CompactSerializer();
- $this->jwk = $jwk;
- $this->tokenTTL = $tokenTTL;
}
#[Override]
@@ -62,7 +53,7 @@ protected function createAuthJwt(OpenIDClient $client, array $claims = []): stri
$jwk = $this->jwk ?? JWKSet::createFromKeyData($client->getJwksProvider()->getJwks())->selectKey('sig');
- if (null === $jwk) {
+ if (! $jwk instanceof JWK) {
throw new RuntimeException('Unable to get a client signature jwk');
}
@@ -78,12 +69,12 @@ protected function createAuthJwt(OpenIDClient $client, array $claims = []): stri
'iat' => $time,
'exp' => $time + $this->tokenTTL,
'jti' => $jti,
- ]
- ), JSON_THROW_ON_ERROR);
+ ],
+ ), \JSON_THROW_ON_ERROR);
$jwkAlg = $jwk->get('alg');
- if (! is_string($jwkAlg)) {
+ if (! \is_string($jwkAlg)) {
throw new RuntimeException('Invalid JWK `alg` value');
}
diff --git a/src/Authorization/AuthRequest.php b/src/Authorization/AuthRequest.php
index b0b2b5d..d0e4b70 100644
--- a/src/Authorization/AuthRequest.php
+++ b/src/Authorization/AuthRequest.php
@@ -12,7 +12,6 @@
use function array_flip;
use function array_keys;
use function array_merge;
-use function count;
use function implode;
/**
@@ -39,7 +38,7 @@ final class AuthRequest implements AuthRequestInterface
public function __construct(
string $clientId,
string $redirectUri,
- array $params = []
+ array $params = [],
) {
$defaults = [
'scope' => 'openid',
@@ -61,20 +60,18 @@ public function __construct(
* @param array $params
*
* @psalm-param array{client_id: string, redirect_uri: string} $params
- *
- * @return static
*/
public static function fromParams(array $params): self
{
$missingKeys = array_diff(self::$requiredKeys, array_keys($params));
- if (0 !== count($missingKeys)) {
+ if (0 !== \count($missingKeys)) {
throw new InvalidArgumentException(implode(', ', $missingKeys) . ' keys not provided');
}
- return new static(
+ return new self(
$params['client_id'],
$params['redirect_uri'],
- $params
+ $params,
);
}
@@ -256,7 +253,7 @@ public function withParams(array $params): AuthRequestInterface
$instance->params = $params;
- if (0 === count(array_diff_key($instance->params, array_flip(self::$requiredKeys)))) {
+ if (0 === \count(array_diff_key($instance->params, array_flip(self::$requiredKeys)))) {
throw new InvalidArgumentException(implode(', ', self::$requiredKeys) . ' should be provided');
}
diff --git a/src/Claims/AbstractClaims.php b/src/Claims/AbstractClaims.php
index 8dde72a..e5c764f 100644
--- a/src/Claims/AbstractClaims.php
+++ b/src/Claims/AbstractClaims.php
@@ -12,6 +12,7 @@
use Facile\OpenIDClient\Issuer\IssuerBuilderInterface;
use Facile\OpenIDClient\Token\TokenSetInterface;
use Jose\Component\Core\AlgorithmManager;
+use Jose\Component\Core\JWK;
use Jose\Component\Core\JWKSet;
use Jose\Component\Signature\JWSVerifier;
use Jose\Component\Signature\Serializer\CompactSerializer;
@@ -20,12 +21,9 @@
use function array_diff_key;
use function array_flip;
-use function array_key_exists;
-use function count;
use function explode;
use function Facile\OpenIDClient\base64url_decode;
use function json_decode;
-use function sprintf;
/**
* @psalm-import-type TokenSetClaimsType from TokenSetInterface
@@ -47,7 +45,7 @@ public function __construct(
?IssuerBuilderInterface $issuerBuilder = null,
?AlgorithmManager $algorithmManager = null,
?JWSVerifier $JWSVerifier = null,
- ?JWSSerializer $serializer = null
+ ?JWSSerializer $serializer = null,
) {
$this->issuerBuilder = $issuerBuilder ?? new IssuerBuilder();
$this->algorithmManager = $algorithmManager ?? (new AlgorithmManagerBuilder())->build();
@@ -64,7 +62,7 @@ public function __construct(
*/
protected function isAggregateSource(array $data): bool
{
- return array_key_exists('JWT', $data);
+ return \array_key_exists('JWT', $data);
}
/**
@@ -76,7 +74,7 @@ protected function isAggregateSource(array $data): bool
*/
protected function isDistributedSource(array $data): bool
{
- return array_key_exists('endpoint', $data);
+ return \array_key_exists('endpoint', $data);
}
/**
@@ -88,9 +86,9 @@ protected function claimJWT(OpenIDClient $client, string $jwt): array
try {
/** @var null|array $header */
- $header = json_decode(base64url_decode(explode('.', $jwt)[0] ?? '{}'), true, 512, JSON_THROW_ON_ERROR);
+ $header = json_decode(base64url_decode(explode('.', $jwt)[0] ?? '{}'), true, 512, \JSON_THROW_ON_ERROR);
/** @var array $payload */
- $payload = json_decode(base64url_decode(explode('.', $jwt)[1] ?? '{}'), true, 512, JSON_THROW_ON_ERROR);
+ $payload = json_decode(base64url_decode(explode('.', $jwt)[1] ?? '{}'), true, 512, \JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw new InvalidArgumentException('Invalid JWT content', 0, $e);
}
@@ -122,7 +120,7 @@ protected function claimJWT(OpenIDClient $client, string $jwt): array
$jwk = $jwks->selectKey('sig', $this->algorithmManager->get($alg), null !== $kid ? ['kid' => $kid] : []);
- if (null === $jwk) {
+ if (! $jwk instanceof JWK) {
throw new RuntimeException('Unable to get a key to verify claim source JWT');
}
@@ -147,12 +145,12 @@ protected function claimJWT(OpenIDClient $client, string $jwt): array
protected function assignClaims(array $claims, array $sourceNames, array $sources): array
{
foreach ($sourceNames as $claim => $inSource) {
- if (! array_key_exists($inSource, $sources)) {
+ if (! \array_key_exists($inSource, $sources)) {
continue;
}
- if (! array_key_exists($claim, $sources[$inSource])) {
- throw new RuntimeException(sprintf('Unable to find claim "%s" in source "%s"', $claim, $inSource));
+ if (! \array_key_exists($claim, $sources[$inSource])) {
+ throw new RuntimeException(\sprintf('Unable to find claim "%s" in source "%s"', $claim, $inSource));
}
/** @psalm-var scalar $value */
@@ -177,12 +175,12 @@ protected function assignClaims(array $claims, array $sourceNames, array $source
*/
protected function cleanClaims(array $claims): array
{
- if (array_key_exists('_claim_names', $claims) && 0 === count($claims['_claim_names'] ?? [])) {
+ if (\array_key_exists('_claim_names', $claims) && 0 === \count($claims['_claim_names'] ?? [])) {
/** @var TokenSetClaimsType $claims */
$claims = array_diff_key($claims, array_flip(['_claim_names']));
}
- if (array_key_exists('_claim_sources', $claims) && 0 === count($claims['_claim_sources'] ?? [])) {
+ if (\array_key_exists('_claim_sources', $claims) && 0 === \count($claims['_claim_sources'] ?? [])) {
/** @var TokenSetClaimsType $claims */
$claims = array_diff_key($claims, array_flip(['_claim_sources']));
}
diff --git a/src/Claims/AggregateParser.php b/src/Claims/AggregateParser.php
index 700e46f..42c1fce 100644
--- a/src/Claims/AggregateParser.php
+++ b/src/Claims/AggregateParser.php
@@ -7,9 +7,6 @@
use Facile\OpenIDClient\Client\ClientInterface;
use Override;
-use function array_filter;
-use function array_key_exists;
-
/**
* @psalm-api
*/
@@ -18,18 +15,20 @@ final class AggregateParser extends AbstractClaims implements AggregatedParserIn
#[Override]
public function unpack(ClientInterface $client, array $claims): array
{
- if (! array_key_exists('_claim_sources', $claims)) {
+ if (! \array_key_exists('_claim_sources', $claims)) {
return $claims;
}
- if (! array_key_exists('_claim_names', $claims)) {
+ if (! \array_key_exists('_claim_names', $claims)) {
return $claims;
}
- $aggregatedSources = array_filter($claims['_claim_sources'], fn($value): bool => $this->isAggregateSource($value));
-
$claimPayloads = [];
- foreach ($aggregatedSources as $sourceName => $source) {
+ foreach ($claims['_claim_sources'] as $sourceName => $source) {
+ if (! $this->isAggregateSource($source)) {
+ continue;
+ }
+
$claimPayloads[$sourceName] = $this->claimJWT($client, $source['JWT']);
unset($claims['_claim_sources'][$sourceName]);
}
diff --git a/src/Claims/DistributedParser.php b/src/Claims/DistributedParser.php
index 99f94e1..b8ee407 100644
--- a/src/Claims/DistributedParser.php
+++ b/src/Claims/DistributedParser.php
@@ -18,8 +18,6 @@
use Throwable;
use Override;
-use function array_filter;
-use function array_key_exists;
use function Facile\OpenIDClient\check_server_response;
/**
@@ -27,9 +25,9 @@
*/
final class DistributedParser extends AbstractClaims implements DistributedParserInterface
{
- private ClientInterface $client;
+ private readonly ClientInterface $client;
- private RequestFactoryInterface $requestFactory;
+ private readonly RequestFactoryInterface $requestFactory;
public function __construct(
?IssuerBuilderInterface $issuerBuilder = null,
@@ -37,7 +35,7 @@ public function __construct(
?RequestFactoryInterface $requestFactory = null,
?AlgorithmManager $algorithmManager = null,
?JWSVerifier $JWSVerifier = null,
- ?JWSSerializer $serializer = null
+ ?JWSSerializer $serializer = null,
) {
parent::__construct($issuerBuilder, $algorithmManager, $JWSVerifier, $serializer);
@@ -48,19 +46,21 @@ public function __construct(
#[Override]
public function fetch(OpenIDClient $client, array $claims, array $accessTokens = []): array
{
- if (! array_key_exists('_claim_sources', $claims)) {
+ if (! \array_key_exists('_claim_sources', $claims)) {
return $claims;
}
- if (! array_key_exists('_claim_names', $claims)) {
+ if (! \array_key_exists('_claim_names', $claims)) {
return $claims;
}
- $distributedSources = array_filter($claims['_claim_sources'], fn($value): bool => $this->isDistributedSource($value));
-
/** @var array $responses */
$responses = [];
- foreach ($distributedSources as $sourceName => $source) {
+ foreach ($claims['_claim_sources'] as $sourceName => $source) {
+ if (! $this->isDistributedSource($source)) {
+ continue;
+ }
+
$request = $this->requestFactory->createRequest('GET', $source['endpoint'])
->withHeader('accept', 'application/jwt');
diff --git a/src/Client/Client.php b/src/Client/Client.php
index cc7915d..939a4ef 100644
--- a/src/Client/Client.php
+++ b/src/Client/Client.php
@@ -20,32 +20,13 @@
use Psr\Http\Client\ClientInterface as HttpClient;
use Override;
-final class Client implements ClientInterface
+final readonly class Client implements ClientInterface
{
- private IssuerInterface $issuer;
-
- private ClientMetadataInterface $metadata;
-
- private JwksProviderInterface $jwksProvider;
-
- private AuthMethodFactoryInterface $authMethodFactory;
-
- private ?HttpClient $httpClient;
-
- /**
- * Client constructor.
- */
public function __construct(
- IssuerInterface $issuer,
- ClientMetadataInterface $metadata,
- ?JwksProviderInterface $jwksProvider = null,
- ?AuthMethodFactoryInterface $authMethodFactory = null,
- ?HttpClient $httpClient = null
- ) {
- $this->issuer = $issuer;
- $this->metadata = $metadata;
- $this->jwksProvider = $jwksProvider ?? new MemoryJwksProvider();
- $this->authMethodFactory = $authMethodFactory ?? new AuthMethodFactory([
+ private IssuerInterface $issuer,
+ private ClientMetadataInterface $metadata,
+ private JwksProviderInterface $jwksProvider = new MemoryJwksProvider(),
+ private AuthMethodFactoryInterface $authMethodFactory = new AuthMethodFactory([
new ClientSecretBasic(),
new ClientSecretJwt(),
new ClientSecretPost(),
@@ -53,9 +34,9 @@ public function __construct(
new PrivateKeyJwt(),
new TLSClientAuth(),
new SelfSignedTLSClientAuth(),
- ]);
- $this->httpClient = $httpClient;
- }
+ ]),
+ private ?HttpClient $httpClient = null,
+ ) {}
#[Override]
public function getIssuer(): IssuerInterface
diff --git a/src/Client/ClientBuilder.php b/src/Client/ClientBuilder.php
index f973322..5246979 100644
--- a/src/Client/ClientBuilder.php
+++ b/src/Client/ClientBuilder.php
@@ -73,11 +73,11 @@ public function setHttpClient(?HttpClient $httpClient): self
private function buildJwksProvider(): JwksProviderInterface
{
- if (null !== $this->jwksProvider) {
+ if ($this->jwksProvider instanceof JwksProviderInterface) {
return $this->jwksProvider;
}
- if (null === $this->clientMetadata) {
+ if (! $this->clientMetadata instanceof ClientMetadataInterface) {
return new MemoryJwksProvider(['keys' => []]);
}
@@ -110,11 +110,11 @@ private function buildHttpClient(): HttpClient
public function build(): ClientInterface
{
- if (null === $this->issuer) {
+ if (! $this->issuer instanceof IssuerInterface) {
throw new InvalidArgumentException('Issuer must be provided');
}
- if (null === $this->clientMetadata) {
+ if (! $this->clientMetadata instanceof ClientMetadataInterface) {
throw new InvalidArgumentException('Client metadata must be provided');
}
@@ -123,7 +123,7 @@ public function build(): ClientInterface
$this->clientMetadata,
$this->buildJwksProvider(),
$this->buildAuthMethodFactory(),
- $this->buildHttpClient()
+ $this->buildHttpClient(),
);
}
}
diff --git a/src/Client/Metadata/ClientMetadata.php b/src/Client/Metadata/ClientMetadata.php
index 998a655..5b4d9d1 100644
--- a/src/Client/Metadata/ClientMetadata.php
+++ b/src/Client/Metadata/ClientMetadata.php
@@ -9,10 +9,8 @@
use Override;
use function array_diff;
-use function array_key_exists;
use function array_keys;
use function array_merge;
-use function count;
use function implode;
/**
@@ -59,19 +57,17 @@ public function __construct(string $clientId, array $claims = [])
* @param array $claims
*
* @psalm-param ClientMetadataType $claims
- *
- * @return static
*/
public static function fromArray(array $claims): self
{
$missingKeys = array_diff(self::$requiredKeys, array_keys($claims));
- if (0 !== count($missingKeys)) {
+ if (0 !== \count($missingKeys)) {
throw new InvalidArgumentException(
- 'Invalid client metadata. Missing keys: ' . implode(', ', $missingKeys)
+ 'Invalid client metadata. Missing keys: ' . implode(', ', $missingKeys),
);
}
- return new static($claims['client_id'], $claims);
+ return new self($claims['client_id'], $claims);
}
#[Override]
@@ -209,7 +205,7 @@ public function toArray(): array
#[Override]
public function has(string $name): bool
{
- return array_key_exists($name, $this->metadata);
+ return \array_key_exists($name, $this->metadata);
}
/**
diff --git a/src/Exception/OAuth2Exception.php b/src/Exception/OAuth2Exception.php
index b438032..1d5adc6 100644
--- a/src/Exception/OAuth2Exception.php
+++ b/src/Exception/OAuth2Exception.php
@@ -10,10 +10,7 @@
use Throwable;
use Override;
-use function array_key_exists;
-use function is_array;
use function json_decode;
-use function sprintf;
/**
* @psalm-type OAuth2ErrorType = array{}&array{
@@ -25,11 +22,9 @@
*/
final class OAuth2Exception extends RuntimeException implements JsonSerializable
{
- private string $error;
+ private readonly string $error;
- private ?string $description;
-
- private ?string $errorUri;
+ private readonly ?string $description;
/**
* @psalm-param array $data
@@ -38,7 +33,7 @@ final class OAuth2Exception extends RuntimeException implements JsonSerializable
*/
public static function isOAuth2Error(array $data): bool
{
- return array_key_exists('error', $data);
+ return \array_key_exists('error', $data);
}
/**
@@ -48,12 +43,12 @@ public static function fromResponse(ResponseInterface $response, ?Throwable $pre
{
try {
/** @psalm-var false|array{error?: string, error_description?: string, error_uri?: string} $data */
- $data = json_decode((string) $response->getBody(), true, 512, JSON_THROW_ON_ERROR);
- } catch (JsonException $e) {
+ $data = json_decode((string) $response->getBody(), true, 512, \JSON_THROW_ON_ERROR);
+ } catch (JsonException) {
throw new RemoteException($response, $response->getReasonPhrase(), $previous);
}
- if (! is_array($data) || ! isset($data['error'])) {
+ if (! \is_array($data) || ! isset($data['error'])) {
throw new RemoteException($response, $response->getReasonPhrase(), $previous);
}
@@ -67,7 +62,7 @@ public static function fromResponse(ResponseInterface $response, ?Throwable $pre
*/
public static function fromParameters(array $params, ?Throwable $previous = null): self
{
- if (! static::isOAuth2Error($params)) {
+ if (! self::isOAuth2Error($params)) {
throw new InvalidArgumentException('Invalid OAuth2 exception', 0, $previous);
}
@@ -76,26 +71,25 @@ public static function fromParameters(array $params, ?Throwable $previous = null
$params['error_description'] ?? null,
$params['error_uri'] ?? null,
0,
- $previous
+ $previous,
);
}
public function __construct(
string $error,
?string $description = null,
- ?string $errorUri = null,
+ private readonly ?string $errorUri = null,
int $code = 0,
- ?Throwable $previous = null
+ ?Throwable $previous = null,
) {
$message = $error;
if (null !== $description) {
- $message = sprintf('%s (%s)', $description, $error);
+ $message = \sprintf('%s (%s)', $description, $error);
}
parent::__construct($message, $code, $previous);
$this->error = $error;
$this->description = $description;
- $this->errorUri = $errorUri;
}
public function getError(): string
diff --git a/src/Exception/RemoteException.php b/src/Exception/RemoteException.php
index 787a74e..58783dc 100644
--- a/src/Exception/RemoteException.php
+++ b/src/Exception/RemoteException.php
@@ -12,14 +12,14 @@
*/
final class RemoteException extends RuntimeException
{
- private ResponseInterface $response;
+ private readonly ResponseInterface $response;
public function __construct(ResponseInterface $response, ?string $message = null, ?Throwable $previous = null)
{
parent::__construct(
$message ?? $response->getReasonPhrase(),
$response->getStatusCode(),
- $previous
+ $previous,
);
$this->response = $response;
}
diff --git a/src/Issuer/Issuer.php b/src/Issuer/Issuer.php
index 6a75186..0419555 100644
--- a/src/Issuer/Issuer.php
+++ b/src/Issuer/Issuer.php
@@ -8,17 +8,12 @@
use Facile\OpenIDClient\Issuer\Metadata\IssuerMetadataInterface;
use Override;
-final class Issuer implements IssuerInterface
+final readonly class Issuer implements IssuerInterface
{
- private IssuerMetadataInterface $metadata;
-
- private JwksProviderInterface $jwksProvider;
-
- public function __construct(IssuerMetadataInterface $metadata, JwksProviderInterface $jwksProvider)
- {
- $this->metadata = $metadata;
- $this->jwksProvider = $jwksProvider;
- }
+ public function __construct(
+ private IssuerMetadataInterface $metadata,
+ private JwksProviderInterface $jwksProvider,
+ ) {}
#[Override]
public function getMetadata(): IssuerMetadataInterface
diff --git a/src/Issuer/IssuerBuilder.php b/src/Issuer/IssuerBuilder.php
index e933969..9f83cd4 100644
--- a/src/Issuer/IssuerBuilder.php
+++ b/src/Issuer/IssuerBuilder.php
@@ -53,7 +53,7 @@ public function build(string $resource): IssuerInterface
return new Issuer(
$metadata,
- $jwksProvider
+ $jwksProvider,
);
}
}
diff --git a/src/Issuer/Metadata/IssuerMetadata.php b/src/Issuer/Metadata/IssuerMetadata.php
index 8840313..1586975 100644
--- a/src/Issuer/Metadata/IssuerMetadata.php
+++ b/src/Issuer/Metadata/IssuerMetadata.php
@@ -9,10 +9,8 @@
use Override;
use function array_diff;
-use function array_key_exists;
use function array_keys;
use function array_merge;
-use function count;
use function implode;
/**
@@ -43,7 +41,7 @@ public function __construct(
string $issuer,
string $authorizationEndpoint,
string $jwksUri,
- array $claims = []
+ array $claims = [],
) {
$requiredClaims = [
'issuer' => $issuer,
@@ -60,21 +58,19 @@ public function __construct(
* @param array $claims
*
* @psalm-param IssuerRemoteMetadataType $claims
- *
- * @return static
*/
public static function fromArray(array $claims): self
{
$missingKeys = array_diff(self::$requiredKeys, array_keys($claims));
- if (0 !== count($missingKeys)) {
+ if (0 !== \count($missingKeys)) {
throw new InvalidArgumentException('Invalid issuer metadata. Missing keys: ' . implode(', ', $missingKeys));
}
- return new IssuerMetadata(
+ return new self(
$claims['issuer'],
$claims['authorization_endpoint'],
$claims['jwks_uri'],
- $claims
+ $claims,
);
}
@@ -438,7 +434,7 @@ public function toArray(): array
#[Override]
public function has(string $name): bool
{
- return array_key_exists($name, $this->metadata);
+ return \array_key_exists($name, $this->metadata);
}
#[Override]
diff --git a/src/Issuer/Metadata/Provider/CachedProviderDecorator.php b/src/Issuer/Metadata/Provider/CachedProviderDecorator.php
index 069d7bd..ff54de8 100644
--- a/src/Issuer/Metadata/Provider/CachedProviderDecorator.php
+++ b/src/Issuer/Metadata/Provider/CachedProviderDecorator.php
@@ -9,7 +9,6 @@
use Psr\SimpleCache\CacheInterface;
use Override;
-use function is_array;
use function json_decode;
use function json_encode;
use function sha1;
@@ -20,12 +19,6 @@
*/
final class CachedProviderDecorator implements RemoteProviderInterface
{
- private RemoteProviderInterface $provider;
-
- private CacheInterface $cache;
-
- private ?int $cacheTtl = null;
-
/**
* @var callable
*
@@ -37,14 +30,11 @@ final class CachedProviderDecorator implements RemoteProviderInterface
* @psalm-param null|callable(string): string $cacheIdGenerator
*/
public function __construct(
- RemoteProviderInterface $provider,
- CacheInterface $cache,
- ?int $cacheTtl = null,
- ?callable $cacheIdGenerator = null
+ private readonly RemoteProviderInterface $provider,
+ private readonly CacheInterface $cache,
+ private readonly ?int $cacheTtl = null,
+ ?callable $cacheIdGenerator = null,
) {
- $this->provider = $provider;
- $this->cache = $cache;
- $this->cacheTtl = $cacheTtl;
$this->cacheIdGenerator = $cacheIdGenerator ?? static fn(string $uri): string => substr(sha1($uri), 0, 65);
}
@@ -65,19 +55,19 @@ public function fetch(string $uri): array
try {
/** @psalm-var null|string|IssuerRemoteMetadataType $data */
- $data = json_decode($cached, true, 512, JSON_THROW_ON_ERROR);
- } catch (JsonException $e) {
+ $data = json_decode($cached, true, 512, \JSON_THROW_ON_ERROR);
+ } catch (JsonException) {
$data = null;
}
- if (is_array($data)) {
+ if (\is_array($data)) {
/** @psalm-var IssuerRemoteMetadataType $data */
return $data;
}
$data = $this->provider->fetch($uri);
- $this->cache->set($cacheId, json_encode($data, JSON_THROW_ON_ERROR), $this->cacheTtl);
+ $this->cache->set($cacheId, json_encode($data, \JSON_THROW_ON_ERROR), $this->cacheTtl);
return $data;
}
diff --git a/src/Issuer/Metadata/Provider/DiscoveryProvider.php b/src/Issuer/Metadata/Provider/DiscoveryProvider.php
index 6afc988..936a4d5 100644
--- a/src/Issuer/Metadata/Provider/DiscoveryProvider.php
+++ b/src/Issuer/Metadata/Provider/DiscoveryProvider.php
@@ -12,7 +12,6 @@
use Psr\Http\Message\UriFactoryInterface;
use Override;
-use function array_key_exists;
use function Facile\OpenIDClient\parse_metadata_response;
use function preg_match;
use function rtrim;
@@ -20,27 +19,17 @@
/**
* @psalm-import-type IssuerRemoteMetadataType from TokenVerifierInterface
*/
-final class DiscoveryProvider implements DiscoveryProviderInterface
+final readonly class DiscoveryProvider implements DiscoveryProviderInterface
{
private const OIDC_DISCOVERY = '/.well-known/openid-configuration';
private const OAUTH2_DISCOVERY = '/.well-known/oauth-authorization-server';
- private ClientInterface $client;
-
- private RequestFactoryInterface $requestFactory;
-
- private UriFactoryInterface $uriFactory;
-
public function __construct(
- ClientInterface $client,
- RequestFactoryInterface $requestFactory,
- UriFactoryInterface $uriFactory
- ) {
- $this->client = $client;
- $this->requestFactory = $requestFactory;
- $this->uriFactory = $uriFactory;
- }
+ private ClientInterface $client,
+ private RequestFactoryInterface $requestFactory,
+ private UriFactoryInterface $uriFactory,
+ ) {}
#[Override]
public function isAllowedUri(string $uri): bool
@@ -75,7 +64,7 @@ public function discovery(string $url): array
foreach ($uris as $wellKnownUri) {
try {
return $this->fetchOpenIdConfiguration((string) $wellKnownUri);
- } catch (RuntimeException $e) {
+ } catch (RuntimeException) {
}
}
@@ -99,7 +88,7 @@ private function fetchOpenIdConfiguration(string $uri): array
throw new RuntimeException('Unable to fetch provider metadata', 0, $e);
}
- if (! array_key_exists('issuer', $data)) {
+ if (! \array_key_exists('issuer', $data)) {
throw new RuntimeException('Invalid metadata content, no "issuer" key found');
}
diff --git a/src/Issuer/Metadata/Provider/MetadataProviderBuilder.php b/src/Issuer/Metadata/Provider/MetadataProviderBuilder.php
index 69e06c3..5c8ce3a 100644
--- a/src/Issuer/Metadata/Provider/MetadataProviderBuilder.php
+++ b/src/Issuer/Metadata/Provider/MetadataProviderBuilder.php
@@ -109,7 +109,7 @@ private function buildDiscoveryProvider(): DiscoveryProviderInterface
return $this->discoveryProvider ?? new DiscoveryProvider(
$this->buildClient(),
$this->buildRequestFactory(),
- $this->buildUriFactory()
+ $this->buildUriFactory(),
);
}
@@ -119,7 +119,7 @@ public function buildWebFingerProvider(): WebFingerProviderInterface
$this->buildClient(),
$this->buildRequestFactory(),
$this->buildUriFactory(),
- $this->buildDiscoveryProvider()
+ $this->buildDiscoveryProvider(),
);
}
@@ -130,7 +130,7 @@ public function build(): RemoteProviderInterface
$this->buildWebFingerProvider(),
]);
- if (null !== $this->cache) {
+ if ($this->cache instanceof CacheInterface) {
$provider = new CachedProviderDecorator($provider, $this->cache, $this->cacheTtl);
}
diff --git a/src/Issuer/Metadata/Provider/RemoteProvider.php b/src/Issuer/Metadata/Provider/RemoteProvider.php
index 5ca0fd8..837af9f 100644
--- a/src/Issuer/Metadata/Provider/RemoteProvider.php
+++ b/src/Issuer/Metadata/Provider/RemoteProvider.php
@@ -10,18 +10,14 @@
use function array_filter;
-final class RemoteProvider implements RemoteProviderInterface
+final readonly class RemoteProvider implements RemoteProviderInterface
{
- /** @var RemoteProviderInterface[] */
- private array $providers;
-
/**
* @param RemoteProviderInterface[] $providers
*/
- public function __construct(array $providers)
- {
- $this->providers = $providers;
- }
+ public function __construct(
+ private array $providers,
+ ) {}
#[Override]
public function isAllowedUri(string $uri): bool
diff --git a/src/Issuer/Metadata/Provider/WebFingerProvider.php b/src/Issuer/Metadata/Provider/WebFingerProvider.php
index 0c1f822..ac93c22 100644
--- a/src/Issuer/Metadata/Provider/WebFingerProvider.php
+++ b/src/Issuer/Metadata/Provider/WebFingerProvider.php
@@ -13,13 +13,10 @@
use Psr\Http\Message\UriFactoryInterface;
use Override;
-use function array_key_exists;
use function array_pop;
use function explode;
use function Facile\OpenIDClient\parse_metadata_response;
use function http_build_query;
-use function is_array;
-use function is_string;
use function parse_url;
use function preg_match;
use function preg_replace;
@@ -29,35 +26,18 @@
/**
* @psalm-import-type IssuerRemoteMetadataType from TokenVerifierInterface
*/
-final class WebFingerProvider implements RemoteProviderInterface, WebFingerProviderInterface
+final readonly class WebFingerProvider implements RemoteProviderInterface, WebFingerProviderInterface
{
- private const OIDC_DISCOVERY = '/.well-known/openid-configuration';
-
private const WEBFINGER = '/.well-known/webfinger';
private const REL = 'http://openid.net/specs/connect/1.0/issuer';
- private const AAD_MULTITENANT_DISCOVERY = 'https://login.microsoftonline.com/common/v2.0$' . self::OIDC_DISCOVERY;
-
- private ClientInterface $client;
-
- private RequestFactoryInterface $requestFactory;
-
- private UriFactoryInterface $uriFactory;
-
- private DiscoveryProviderInterface $discoveryProvider;
-
public function __construct(
- ClientInterface $client,
- RequestFactoryInterface $requestFactory,
- UriFactoryInterface $uriFactory,
- DiscoveryProviderInterface $discoveryProvider
- ) {
- $this->client = $client;
- $this->requestFactory = $requestFactory;
- $this->uriFactory = $uriFactory;
- $this->discoveryProvider = $discoveryProvider;
- }
+ private ClientInterface $client,
+ private RequestFactoryInterface $requestFactory,
+ private UriFactoryInterface $uriFactory,
+ private DiscoveryProviderInterface $discoveryProvider,
+ ) {}
#[Override]
public function isAllowedUri(string $uri): bool
@@ -70,13 +50,11 @@ public function fetch(string $uri): array
{
$uri = $this->normalizeWebfinger($uri);
$parts = explode('@', $uri, 2);
- if (isset($parts[1])) {
- $parsedUrl = parse_url('https://' . $parts[1]);
- } else {
- $parsedUrl = parse_url($uri);
- }
+ $parsedUrl = isset($parts[1])
+ ? parse_url('https://' . $parts[1])
+ : parse_url($uri);
- if (! is_array($parsedUrl) || ! array_key_exists('host', $parsedUrl)) {
+ if (! \is_array($parsedUrl) || ! \array_key_exists('host', $parsedUrl)) {
throw new RuntimeException('Unable to parse resource');
}
@@ -103,9 +81,9 @@ public function fetch(string $uri): array
/** @var array $links */
$links = $data['links'] ?? [];
- $href = null;
+ $href = '';
foreach ($links as $link) {
- if (! is_array($link)) {
+ if (! \is_array($link)) {
continue;
}
@@ -113,14 +91,14 @@ public function fetch(string $uri): array
continue;
}
- if (! array_key_exists('href', $link)) {
+ if (! \array_key_exists('href', $link)) {
continue;
}
$href = $link['href'];
}
- if (! is_string($href) || 0 !== strpos($href, 'https://')) {
+ if (! str_starts_with($href, 'https://')) {
throw new InvalidArgumentException('Invalid issuer location');
}
@@ -137,7 +115,7 @@ public function fetch(string $uri): array
private function normalizeWebfinger(string $input): string
{
$hasScheme = static function (string $resource): bool {
- if (false !== strpos($resource, '://')) {
+ if (str_contains($resource, '://')) {
return true;
}
@@ -153,7 +131,7 @@ private function normalizeWebfinger(string $input): string
};
$acctSchemeAssumed = static function (string $input): bool {
- if (false === strpos($input, '@')) {
+ if (! str_contains($input, '@')) {
return false;
}
diff --git a/src/Middleware/AuthRedirectHandler.php b/src/Middleware/AuthRedirectHandler.php
index 2c862c4..0e33cb4 100644
--- a/src/Middleware/AuthRedirectHandler.php
+++ b/src/Middleware/AuthRedirectHandler.php
@@ -23,30 +23,20 @@
/**
* @psalm-api
*/
-final class AuthRedirectHandler implements RequestHandlerInterface
+final readonly class AuthRedirectHandler implements RequestHandlerInterface
{
- private AuthorizationService $authorizationService;
-
private ResponseFactoryInterface $responseFactory;
- private ?ClientInterface $client = null;
-
- /** @psalm-var positive-int */
- private int $randomBytes;
-
/**
* @psalm-param positive-int $randomBytes
*/
public function __construct(
- AuthorizationService $authorizationService,
+ private AuthorizationService $authorizationService,
?ResponseFactoryInterface $responseFactory = null,
- ?ClientInterface $client = null,
- int $randomBytes = 32
+ private ?ClientInterface $client = null,
+ private int $randomBytes = 32,
) {
- $this->authorizationService = $authorizationService;
$this->responseFactory = $responseFactory ?? Psr17FactoryDiscovery::findResponseFactory();
- $this->client = $client;
- $this->randomBytes = $randomBytes;
}
#[Override]
diff --git a/src/Middleware/AuthRequestProviderMiddleware.php b/src/Middleware/AuthRequestProviderMiddleware.php
index 70aa539..16f0f2d 100644
--- a/src/Middleware/AuthRequestProviderMiddleware.php
+++ b/src/Middleware/AuthRequestProviderMiddleware.php
@@ -14,14 +14,11 @@
/**
* @psalm-api
*/
-final class AuthRequestProviderMiddleware implements MiddlewareInterface
+final readonly class AuthRequestProviderMiddleware implements MiddlewareInterface
{
- private AuthRequestInterface $authRequest;
-
- public function __construct(AuthRequestInterface $authRequest)
- {
- $this->authRequest = $authRequest;
- }
+ public function __construct(
+ private AuthRequestInterface $authRequest,
+ ) {}
#[Override]
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
diff --git a/src/Middleware/CallbackMiddleware.php b/src/Middleware/CallbackMiddleware.php
index f093d9d..394c723 100644
--- a/src/Middleware/CallbackMiddleware.php
+++ b/src/Middleware/CallbackMiddleware.php
@@ -20,25 +20,12 @@
*/
class CallbackMiddleware implements MiddlewareInterface
{
- private AuthorizationService $authorizationService;
-
- private ?string $redirectUri;
-
- private ?ClientInterface $client;
-
- private ?int $maxAge;
-
public function __construct(
- AuthorizationService $authorizationService,
- ?ClientInterface $client = null,
- ?string $redirectUri = null,
- ?int $maxAge = null
- ) {
- $this->authorizationService = $authorizationService;
- $this->client = $client;
- $this->redirectUri = $redirectUri;
- $this->maxAge = $maxAge;
- }
+ private readonly AuthorizationService $authorizationService,
+ private readonly ?ClientInterface $client = null,
+ private readonly ?string $redirectUri = null,
+ private readonly ?int $maxAge = null,
+ ) {}
#[Override]
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
@@ -60,7 +47,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
$params,
$this->redirectUri,
$authSession,
- $this->maxAge
+ $this->maxAge,
);
return $handler->handle($request->withAttribute(TokenSetInterface::class, $tokenSet));
diff --git a/src/Middleware/ClientProviderMiddleware.php b/src/Middleware/ClientProviderMiddleware.php
index f40ab67..f3bd5c0 100644
--- a/src/Middleware/ClientProviderMiddleware.php
+++ b/src/Middleware/ClientProviderMiddleware.php
@@ -14,14 +14,11 @@
/**
* @psalm-api
*/
-final class ClientProviderMiddleware implements MiddlewareInterface
+final readonly class ClientProviderMiddleware implements MiddlewareInterface
{
- private ClientInterface $client;
-
- public function __construct(ClientInterface $client)
- {
- $this->client = $client;
- }
+ public function __construct(
+ private ClientInterface $client,
+ ) {}
#[Override]
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
diff --git a/src/Middleware/SessionCookieMiddleware.php b/src/Middleware/SessionCookieMiddleware.php
index 6628f1c..62038e8 100644
--- a/src/Middleware/SessionCookieMiddleware.php
+++ b/src/Middleware/SessionCookieMiddleware.php
@@ -4,6 +4,7 @@
namespace Facile\OpenIDClient\Middleware;
+use Dflydev\FigCookies\Cookie;
use Dflydev\FigCookies\Cookies;
use Dflydev\FigCookies\FigResponseCookies;
use Dflydev\FigCookies\Modifier\SameSite;
@@ -21,7 +22,6 @@
use function bin2hex;
use function class_exists;
-use function is_array;
use function json_decode;
use function json_encode;
use function random_bytes;
@@ -31,22 +31,15 @@
*
* @psalm-import-type AuthSessionType from AuthSessionInterface
*/
-final class SessionCookieMiddleware implements MiddlewareInterface
+final readonly class SessionCookieMiddleware implements MiddlewareInterface
{
public const SESSION_ATTRIBUTE = AuthSessionInterface::class;
- private string $cookieName;
-
- private int $ttl;
-
- private CacheInterface $cache;
-
- public function __construct(CacheInterface $cache, string $cookieName = 'openid', int $ttl = 300)
- {
- $this->cache = $cache;
- $this->cookieName = $cookieName;
- $this->ttl = $ttl;
- }
+ public function __construct(
+ private CacheInterface $cache,
+ private string $cookieName = 'openid',
+ private int $ttl = 300,
+ ) {}
#[Override]
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
@@ -58,13 +51,13 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
$cookies = Cookies::fromRequest($request);
$sessionCookie = $cookies->get($this->cookieName);
- $sessionId = null !== $sessionCookie ? $sessionCookie->getValue() : null;
+ $sessionId = $sessionCookie instanceof Cookie ? $sessionCookie->getValue() : null;
/** @var string|null $sessionValue */
$sessionValue = null !== $sessionId ? $this->cache->get($sessionId) : null;
/** @var false|AuthSessionType $data */
- $data = null !== $sessionValue ? json_decode($sessionValue, true, 512, JSON_THROW_ON_ERROR) : [];
+ $data = null !== $sessionValue ? json_decode($sessionValue, true, 512, \JSON_THROW_ON_ERROR) : [];
- if (! is_array($data)) {
+ if (! \is_array($data)) {
$data = [];
}
@@ -74,7 +67,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
$sessionId ??= bin2hex(random_bytes(32));
- $sessionValue = json_encode($authSession, JSON_THROW_ON_ERROR);
+ $sessionValue = json_encode($authSession, \JSON_THROW_ON_ERROR);
if (false === $this->cache->set($sessionId, $sessionValue, $this->ttl)) {
throw new RuntimeException('Unable to save session');
@@ -87,8 +80,6 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
->withPath('/')
->withSameSite(SameSite::strict());
- $response = FigResponseCookies::set($response, $sessionCookie);
-
- return $response;
+ return FigResponseCookies::set($response, $sessionCookie);
}
}
diff --git a/src/Middleware/UserInfoMiddleware.php b/src/Middleware/UserInfoMiddleware.php
index f567039..d4ac3b3 100644
--- a/src/Middleware/UserInfoMiddleware.php
+++ b/src/Middleware/UserInfoMiddleware.php
@@ -18,21 +18,14 @@
/**
* @psalm-api
*/
-final class UserInfoMiddleware implements MiddlewareInterface
+final readonly class UserInfoMiddleware implements MiddlewareInterface
{
public const USERINFO_ATTRIBUTE = self::class;
- private UserInfoService $userInfoService;
-
- private ?ClientInterface $client;
-
public function __construct(
- UserInfoService $userInfoService,
- ?ClientInterface $client = null
- ) {
- $this->userInfoService = $userInfoService;
- $this->client = $client;
- }
+ private UserInfoService $userInfoService,
+ private ?ClientInterface $client = null,
+ ) {}
#[Override]
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
diff --git a/src/RequestObject/RequestObjectFactory.php b/src/RequestObject/RequestObjectFactory.php
index 51c9ba9..a3cc73b 100644
--- a/src/RequestObject/RequestObjectFactory.php
+++ b/src/RequestObject/RequestObjectFactory.php
@@ -8,6 +8,7 @@
use Facile\OpenIDClient\Client\ClientInterface;
use Facile\OpenIDClient\Exception\RuntimeException;
use Jose\Component\Core\AlgorithmManager;
+use Jose\Component\Core\JWK;
use Jose\Component\Core\JWKSet;
use Jose\Component\Encryption\JWEBuilder;
use Jose\Component\Encryption\Serializer\CompactSerializer as EncryptionCompactSerializer;
@@ -25,13 +26,12 @@
use function json_encode;
use function preg_match;
use function random_bytes;
-use function strpos;
use function time;
/**
* @psalm-api
*/
-final class RequestObjectFactory
+final readonly class RequestObjectFactory
{
private AlgorithmManager $algorithmManager;
@@ -39,22 +39,16 @@ final class RequestObjectFactory
private JWEBuilder $jweBuilder;
- private JWSSerializer $signatureSerializer;
-
- private JWESerializer $encryptionSerializer;
-
public function __construct(
?AlgorithmManager $algorithmManager = null,
?JWSBuilder $jwsBuilder = null,
?JWEBuilder $jweBuilder = null,
- ?JWSSerializer $signatureSerializer = null,
- ?JWESerializer $encryptionSerializer = null
+ private JWSSerializer $signatureSerializer = new SignatureCompactSerializer(),
+ private JWESerializer $encryptionSerializer = new EncryptionCompactSerializer(),
) {
$this->algorithmManager = $algorithmManager ?? (new AlgorithmManagerBuilder())->build();
$this->jwsBuilder = $jwsBuilder ?? new JWSBuilder($this->algorithmManager);
$this->jweBuilder = $jweBuilder ?? new JWEBuilder($this->algorithmManager);
- $this->signatureSerializer = $signatureSerializer ?? new SignatureCompactSerializer();
- $this->encryptionSerializer = $encryptionSerializer ?? new EncryptionCompactSerializer();
}
/**
@@ -86,7 +80,7 @@ private function createPayload(ClientInterface $client, array $params = []): str
]);
try {
- $payload = json_encode($payloadParams, JSON_THROW_ON_ERROR);
+ $payload = json_encode($payloadParams, \JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw new RuntimeException('Unable to encode payload', 0, $e);
}
@@ -103,20 +97,20 @@ private function createSignedToken(ClientInterface $client, string $payload): st
if ('none' === $alg) {
return implode('.', [
- base64url_encode(json_encode(['alg' => $alg], JSON_THROW_ON_ERROR)),
+ base64url_encode(json_encode(['alg' => $alg], \JSON_THROW_ON_ERROR)),
base64url_encode($payload),
'',
]);
}
- if (0 === strpos($alg, 'HS')) {
+ if (str_starts_with($alg, 'HS')) {
$jwk = jose_secret_key($metadata->getClientSecret() ?? '');
} else {
$jwk = JWKSet::createFromKeyData($client->getJwksProvider()->getJwks())
->selectKey('sig', $this->algorithmManager->get($alg));
}
- if (null === $jwk) {
+ if (! $jwk instanceof JWK) {
throw new RuntimeException('No key to sign with alg ' . $alg);
}
@@ -156,11 +150,11 @@ private function createEncryptedToken(ClientInterface $client, string $payload):
} else {
$jwk = jose_secret_key(
$metadata->getClientSecret() ?? '',
- 'dir' === $alg ? $enc : $alg
+ 'dir' === $alg ? $enc : $alg,
);
}
- if (null === $jwk) {
+ if (! $jwk instanceof JWK) {
throw new RuntimeException('No key to encrypt with alg ' . $alg);
}
diff --git a/src/Service/AuthorizationService.php b/src/Service/AuthorizationService.php
index 142fa87..f90a450 100644
--- a/src/Service/AuthorizationService.php
+++ b/src/Service/AuthorizationService.php
@@ -20,14 +20,11 @@
use Psr\Http\Message\ServerRequestInterface;
use function array_filter;
-use function array_key_exists;
use function array_merge;
use function Facile\OpenIDClient\get_endpoint_uri;
use function Facile\OpenIDClient\parse_callback_params;
use function Facile\OpenIDClient\parse_metadata_response;
use function http_build_query;
-use function is_array;
-use function is_string;
use function json_encode;
/**
@@ -56,31 +53,15 @@
* }
* @psalm-type CallbackParamsType = array
*/
-final class AuthorizationService
+final readonly class AuthorizationService
{
- private TokenSetFactoryInterface $tokenSetFactory;
-
- private ClientInterface $client;
-
- private RequestFactoryInterface $requestFactory;
-
- private IdTokenVerifierBuilderInterface $idTokenVerifierBuilder;
-
- private TokenVerifierBuilderInterface $responseVerifierBuilder;
-
public function __construct(
- TokenSetFactoryInterface $tokenSetFactory,
- ClientInterface $client,
- RequestFactoryInterface $requestFactory,
- IdTokenVerifierBuilderInterface $idTokenVerifierBuilder,
- TokenVerifierBuilderInterface $responseVerifierBuilder
- ) {
- $this->tokenSetFactory = $tokenSetFactory;
- $this->client = $client;
- $this->requestFactory = $requestFactory;
- $this->idTokenVerifierBuilder = $idTokenVerifierBuilder;
- $this->responseVerifierBuilder = $responseVerifierBuilder;
- }
+ private TokenSetFactoryInterface $tokenSetFactory,
+ private ClientInterface $client,
+ private RequestFactoryInterface $requestFactory,
+ private IdTokenVerifierBuilderInterface $idTokenVerifierBuilder,
+ private TokenVerifierBuilderInterface $responseVerifierBuilder,
+ ) {}
/**
* @param array $params
@@ -108,14 +89,14 @@ public function getAuthorizationUri(OpenIDClient $client, array $params = []): s
foreach ($params as $key => $value) {
if (null === $value) {
unset($params[$key]);
- } elseif ('claims' === $key && (is_array($value) || $value instanceof JsonSerializable)) {
- $params['claims'] = json_encode($value, JSON_THROW_ON_ERROR);
- } elseif (! is_string($value)) {
+ } elseif ('claims' === $key && (\is_array($value) || $value instanceof JsonSerializable)) {
+ $params['claims'] = json_encode($value, \JSON_THROW_ON_ERROR);
+ } elseif (! \is_string($value)) {
$params[$key] = (string) $value;
}
}
- if (! array_key_exists('nonce', $params) && 'code' !== ($params['response_type'] ?? '')) {
+ if (! \array_key_exists('nonce', $params) && 'code' !== ($params['response_type'] ?? '')) {
throw new InvalidArgumentException('nonce MUST be provided for implicit and hybrid flows');
}
@@ -151,13 +132,13 @@ public function callback(
array $params,
?string $redirectUri = null,
?AuthSessionInterface $authSession = null,
- ?int $maxAge = null
+ ?int $maxAge = null,
): TokenSetInterface {
$allowedParams = ['code', 'state', 'token_type', 'access_token', 'id_token', 'refresh_token', 'expires_in', 'code_verifier'];
/** @psalm-var AuthorizationResponseType $safeParams */
$safeParams = array_intersect_key(
$params,
- array_fill_keys($allowedParams, true)
+ array_fill_keys($allowedParams, true),
);
$tokenSet = $this->tokenSetFactory->fromArray($safeParams);
@@ -191,7 +172,7 @@ public function fetchToken(
TokenSetInterface $tokenSet,
?string $redirectUri = null,
?AuthSessionInterface $authSession = null,
- ?int $maxAge = null
+ ?int $maxAge = null,
): TokenSetInterface {
$code = $tokenSet->getCode();
@@ -213,7 +194,7 @@ public function fetchToken(
'redirect_uri' => $redirectUri,
];
- if (null !== $authSession && null !== $authSession->getCodeVerifier()) {
+ if ($authSession instanceof AuthSessionInterface && null !== $authSession->getCodeVerifier()) {
$params['code_verifier'] = $authSession->getCodeVerifier();
}
@@ -303,7 +284,7 @@ public function grant(OpenIDClient $client, array $params = []): TokenSetInterfa
*/
private function isAuthorizationResponseObject(array $params): bool
{
- return array_key_exists('response', $params);
+ return \array_key_exists('response', $params);
}
/**
diff --git a/src/Service/Builder/AuthorizationServiceBuilder.php b/src/Service/Builder/AuthorizationServiceBuilder.php
index a5780c9..eb41f98 100644
--- a/src/Service/Builder/AuthorizationServiceBuilder.php
+++ b/src/Service/Builder/AuthorizationServiceBuilder.php
@@ -66,7 +66,7 @@ public function build(): AuthorizationService
$this->getHttpClient(),
$this->getRequestFactory(),
$this->getIdTokenVerifierBuilder(),
- $this->getResponseVerifierBuilder()
+ $this->getResponseVerifierBuilder(),
);
}
}
diff --git a/src/Service/Builder/IntrospectionServiceBuilder.php b/src/Service/Builder/IntrospectionServiceBuilder.php
index 9150aec..36a14b3 100644
--- a/src/Service/Builder/IntrospectionServiceBuilder.php
+++ b/src/Service/Builder/IntrospectionServiceBuilder.php
@@ -15,7 +15,7 @@ public function build(): IntrospectionService
{
return new IntrospectionService(
$this->getHttpClient(),
- $this->getRequestFactory()
+ $this->getRequestFactory(),
);
}
}
diff --git a/src/Service/Builder/RegistrationServiceBuilder.php b/src/Service/Builder/RegistrationServiceBuilder.php
index b52ff21..498ac85 100644
--- a/src/Service/Builder/RegistrationServiceBuilder.php
+++ b/src/Service/Builder/RegistrationServiceBuilder.php
@@ -15,7 +15,7 @@ public function build(): RegistrationService
{
return new RegistrationService(
$this->getHttpClient(),
- $this->getRequestFactory()
+ $this->getRequestFactory(),
);
}
}
diff --git a/src/Service/Builder/RevocationServiceBuilder.php b/src/Service/Builder/RevocationServiceBuilder.php
index 854fedd..5114de6 100644
--- a/src/Service/Builder/RevocationServiceBuilder.php
+++ b/src/Service/Builder/RevocationServiceBuilder.php
@@ -15,7 +15,7 @@ public function build(): RevocationService
{
return new RevocationService(
$this->getHttpClient(),
- $this->getRequestFactory()
+ $this->getRequestFactory(),
);
}
}
diff --git a/src/Service/Builder/UserInfoServiceBuilder.php b/src/Service/Builder/UserInfoServiceBuilder.php
index a75e8f7..d2c2728 100644
--- a/src/Service/Builder/UserInfoServiceBuilder.php
+++ b/src/Service/Builder/UserInfoServiceBuilder.php
@@ -25,7 +25,7 @@ public function build(): UserInfoService
return new UserInfoService(
$this->getUserInfoVerifierBuilder(),
$this->getHttpClient(),
- $this->getRequestFactory()
+ $this->getRequestFactory(),
);
}
}
diff --git a/src/Service/IntrospectionService.php b/src/Service/IntrospectionService.php
index 281494e..23402e1 100644
--- a/src/Service/IntrospectionService.php
+++ b/src/Service/IntrospectionService.php
@@ -20,19 +20,12 @@
*
* @psalm-api
*/
-final class IntrospectionService
+final readonly class IntrospectionService
{
- private ClientInterface $client;
-
- private RequestFactoryInterface $requestFactory;
-
public function __construct(
- ClientInterface $client,
- RequestFactoryInterface $requestFactory
- ) {
- $this->client = $client;
- $this->requestFactory = $requestFactory;
- }
+ private ClientInterface $client,
+ private RequestFactoryInterface $requestFactory,
+ ) {}
/**
* @param array $params
diff --git a/src/Service/RegistrationService.php b/src/Service/RegistrationService.php
index 7e09491..0811e2f 100644
--- a/src/Service/RegistrationService.php
+++ b/src/Service/RegistrationService.php
@@ -15,7 +15,6 @@
use function array_diff_key;
use function array_flip;
use function array_intersect_key;
-use function array_key_exists;
use function array_merge;
use function Facile\OpenIDClient\check_server_response;
use function Facile\OpenIDClient\parse_metadata_response;
@@ -31,10 +30,6 @@
*/
final class RegistrationService
{
- private ClientInterface $client;
-
- private RequestFactoryInterface $requestFactory;
-
/** @var string[] */
private static array $registrationClaims = [
'registration_access_token',
@@ -44,12 +39,9 @@ final class RegistrationService
];
public function __construct(
- ClientInterface $client,
- RequestFactoryInterface $requestFactory
- ) {
- $this->client = $client;
- $this->requestFactory = $requestFactory;
- }
+ private readonly ClientInterface $client,
+ private readonly RequestFactoryInterface $requestFactory,
+ ) {}
/**
* @param array $metadata
@@ -59,7 +51,7 @@ public function __construct(
public function register(
IssuerInterface $issuer,
array $metadata,
- ?string $initialToken = null
+ ?string $initialToken = null,
): array {
$registrationEndpoint = $issuer->getMetadata()->getRegistrationEndpoint();
@@ -68,7 +60,7 @@ public function register(
}
try {
- $encodedMetadata = json_encode($metadata, JSON_THROW_ON_ERROR);
+ $encodedMetadata = json_encode($metadata, \JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw new RuntimeException('Unable to encode client metadata', 0, $e);
}
@@ -91,7 +83,7 @@ public function register(
$data = parse_metadata_response($response, 201);
- if (! array_key_exists('client_id', $data)) {
+ if (! \array_key_exists('client_id', $data)) {
throw new RuntimeException('Registration response did not return a client_id field');
}
@@ -115,7 +107,7 @@ public function read(string $clientUri, string $accessToken): array
$claims = parse_metadata_response($response, 200);
- if (! array_key_exists('client_id', $claims)) {
+ if (! \array_key_exists('client_id', $claims)) {
throw new RuntimeException('Registration response did not return a client_id field');
}
@@ -130,13 +122,13 @@ public function read(string $clientUri, string $accessToken): array
public function update(
string $clientUri,
string $accessToken,
- array $metadata
+ array $metadata,
): array {
$clientRegistrationMetadata = array_intersect_key($metadata, array_flip(self::$registrationClaims));
$metadata = array_diff_key($metadata, $clientRegistrationMetadata);
try {
- $encodedMetadata = json_encode($metadata, JSON_THROW_ON_ERROR);
+ $encodedMetadata = json_encode($metadata, \JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw new RuntimeException('Unable to encode client metadata', 0, $e);
}
@@ -156,7 +148,7 @@ public function update(
$data = parse_metadata_response($response, 200);
- if (! array_key_exists('client_id', $data)) {
+ if (! \array_key_exists('client_id', $data)) {
throw new RuntimeException('Registration response did not return a client_id field');
}
diff --git a/src/Service/RevocationService.php b/src/Service/RevocationService.php
index bc6bd1f..ee9dfb8 100644
--- a/src/Service/RevocationService.php
+++ b/src/Service/RevocationService.php
@@ -20,19 +20,12 @@
*
* @psalm-api
*/
-final class RevocationService
+final readonly class RevocationService
{
- private ClientInterface $client;
-
- private RequestFactoryInterface $requestFactory;
-
public function __construct(
- ClientInterface $client,
- RequestFactoryInterface $requestFactory
- ) {
- $this->client = $client;
- $this->requestFactory = $requestFactory;
- }
+ private ClientInterface $client,
+ private RequestFactoryInterface $requestFactory,
+ ) {}
/**
* @param array $params
diff --git a/src/Service/UserInfoService.php b/src/Service/UserInfoService.php
index 592ac63..1776144 100644
--- a/src/Service/UserInfoService.php
+++ b/src/Service/UserInfoService.php
@@ -17,28 +17,17 @@
use function http_build_query;
use function json_decode;
-use function sprintf;
/**
* @psalm-import-type TokenSetClaimsType from TokenSetInterface
*/
-final class UserInfoService
+final readonly class UserInfoService
{
- private ClientInterface $client;
-
- private RequestFactoryInterface $requestFactory;
-
- private TokenVerifierBuilderInterface $userInfoVerifierBuilder;
-
public function __construct(
- TokenVerifierBuilderInterface $userInfoVerifierBuilder,
- ClientInterface $client,
- RequestFactoryInterface $requestFactory
- ) {
- $this->userInfoVerifierBuilder = $userInfoVerifierBuilder;
- $this->client = $client;
- $this->requestFactory = $requestFactory;
- }
+ private TokenVerifierBuilderInterface $userInfoVerifierBuilder,
+ private ClientInterface $client,
+ private RequestFactoryInterface $requestFactory,
+ ) {}
/**
* @return array
@@ -100,7 +89,7 @@ public function getUserInfo(OpenIDClient $client, TokenSetInterface $tokenSet, b
} else {
try {
/** @var TokenSetClaimsType $payload */
- $payload = json_decode((string) $response->getBody(), true, 512, JSON_THROW_ON_ERROR);
+ $payload = json_decode((string) $response->getBody(), true, 512, \JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw new RuntimeException('Unable to parse userinfo claims', 0, $e);
}
@@ -121,7 +110,7 @@ public function getUserInfo(OpenIDClient $client, TokenSetInterface $tokenSet, b
if ($expectedSub !== ($payload['sub'] ?? null)) {
throw new RuntimeException(
- sprintf('Userinfo sub mismatch, expected %s, got: %s', $expectedSub, $payload['sub'] ?? '')
+ \sprintf('Userinfo sub mismatch, expected %s, got: %s', $expectedSub, $payload['sub'] ?? ''),
);
}
diff --git a/src/Session/AuthSession.php b/src/Session/AuthSession.php
index 659aa21..05f6196 100644
--- a/src/Session/AuthSession.php
+++ b/src/Session/AuthSession.php
@@ -76,7 +76,7 @@ public function setCustoms(array $customs): void
#[Override]
public static function fromArray(array $array): AuthSessionInterface
{
- $session = new static();
+ $session = new self();
$session->setState($array['state'] ?? null);
$session->setNonce($array['nonce'] ?? null);
$session->setCodeVerifier($array['code_verifier'] ?? null);
diff --git a/src/Token/TokenSet.php b/src/Token/TokenSet.php
index 3cbabe6..2c396d8 100644
--- a/src/Token/TokenSet.php
+++ b/src/Token/TokenSet.php
@@ -7,8 +7,6 @@
use JsonSerializable;
use Override;
-use function array_key_exists;
-
/**
* @psalm-import-type TokenSetType from TokenSetInterface
* @psalm-import-type TokenSetAttributesType from TokenSetInterface
@@ -18,28 +16,16 @@
final class TokenSet implements TokenSetInterface, JsonSerializable
{
/**
- * @var array
- *
- * @psalm-var TokenSetAttributesType
- */
- private array $attributes;
-
- /**
- * @var array
+ * @param array $attributes
+ * @param array $claims
*
- * @psalm-var TokenSetClaimsType
- */
- private array $claims;
-
- /**
* @psalm-param TokenSetAttributesType $attributes
* @psalm-param TokenSetClaimsType $claims
*/
- private function __construct(array $attributes, array $claims)
- {
- $this->attributes = $attributes;
- $this->claims = $claims;
- }
+ private function __construct(
+ private array $attributes,
+ private array $claims,
+ ) {}
/**
* @param array $data
@@ -49,14 +35,14 @@ private function __construct(array $attributes, array $claims)
public static function fromParams(array $data): TokenSetInterface
{
$claims = [];
- if (array_key_exists('claims', $data)) {
+ if (\array_key_exists('claims', $data)) {
$claims = $data['claims'];
unset($data['claims']);
}
/** @psalm-var TokenSetAttributesType $data */
- return new static($data, $claims);
+ return new self($data, $claims);
}
#[Override]
diff --git a/src/functions/base64url_decode.php b/src/functions/base64url_decode.php
index 2843309..2fce630 100644
--- a/src/functions/base64url_decode.php
+++ b/src/functions/base64url_decode.php
@@ -8,12 +8,11 @@
use function base64_decode;
use function str_pad;
-use function strlen;
use function strtr;
function base64url_decode(string $data): string
{
- $decoded = base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '='), true);
+ $decoded = base64_decode(str_pad(strtr($data, '-_', '+/'), \strlen($data) % 4, '='), true);
if (false === $decoded) {
throw new RuntimeException('Unable to base64url_decode');
diff --git a/src/functions/get_endpoint_uri.php b/src/functions/get_endpoint_uri.php
index 7f1dcbd..29ab18d 100644
--- a/src/functions/get_endpoint_uri.php
+++ b/src/functions/get_endpoint_uri.php
@@ -7,9 +7,6 @@
use Facile\OpenIDClient\Client\ClientInterface as OpenIDClient;
use Facile\OpenIDClient\Exception\RuntimeException;
-use function is_string;
-use function strpos;
-
/**
* Handle endpoint URI based on auth method.
*
@@ -22,7 +19,7 @@ function get_endpoint_uri(OpenIDClient $client, string $endpointMetadata): strin
$endpoint = null;
- if (null !== $authMethod && false !== strpos($authMethod, 'tls_client_auth')) {
+ if (null !== $authMethod && str_contains($authMethod, 'tls_client_auth')) {
$endpoint = $client->getIssuer()
->getMetadata()
->getMtlsEndpointAliases()['token_endpoint'] ?? null;
@@ -33,7 +30,7 @@ function get_endpoint_uri(OpenIDClient $client, string $endpointMetadata): strin
$endpoint = $client->getIssuer()->getMetadata()->get($endpointMetadata);
}
- if (! is_string($endpoint)) {
+ if (! \is_string($endpoint)) {
throw new RuntimeException('Unable to retrieve the token endpoint');
}
diff --git a/src/functions/jose_secret_key.php b/src/functions/jose_secret_key.php
index 3727432..98748ac 100644
--- a/src/functions/jose_secret_key.php
+++ b/src/functions/jose_secret_key.php
@@ -23,10 +23,8 @@ function jose_secret_key(string $secret, ?string $alg = null): JWK
return derived_key($secret, (int) ($matches[2] ?? $matches[1]));
}
- $key = new JWK([
+ return new JWK([
'k' => base64url_encode($secret),
'kty' => 'oct',
]);
-
- return $key;
}
diff --git a/src/functions/parse_callback_params.php b/src/functions/parse_callback_params.php
index 7438718..fa3ee19 100644
--- a/src/functions/parse_callback_params.php
+++ b/src/functions/parse_callback_params.php
@@ -7,7 +7,6 @@
use Facile\OpenIDClient\Exception\RuntimeException;
use Psr\Http\Message\ServerRequestInterface;
-use function in_array;
use function parse_str;
use function strtoupper;
@@ -20,7 +19,7 @@ function parse_callback_params(ServerRequestInterface $serverRequest): array
{
$method = strtoupper($serverRequest->getMethod());
- if (! in_array($method, ['GET', 'POST'], true)) {
+ if (! \in_array($method, ['GET', 'POST'], true)) {
throw new RuntimeException('Invalid callback method');
}
diff --git a/src/functions/parse_metadata_response.php b/src/functions/parse_metadata_response.php
index 32d6679..1dfda44 100644
--- a/src/functions/parse_metadata_response.php
+++ b/src/functions/parse_metadata_response.php
@@ -8,7 +8,6 @@
use JsonException;
use Psr\Http\Message\ResponseInterface;
-use function is_array;
use function json_decode;
/**
@@ -24,12 +23,12 @@ function parse_metadata_response(ResponseInterface $response, ?int $expectedCode
try {
/** @var null|(array{}&array{error?: string, error_description?: string, error_uri?: string, response?: string}) $data */
- $data = json_decode((string) $response->getBody(), true, 512, JSON_THROW_ON_ERROR);
+ $data = json_decode((string) $response->getBody(), true, 512, \JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw new InvalidArgumentException('Invalid metadata content', 0, $e);
}
- if (! is_array($data)) {
+ if (! \is_array($data)) {
throw new InvalidArgumentException('Invalid metadata content');
}
diff --git a/tests/AuthMethod/AuthMethodFactoryTest.php b/tests/AuthMethod/AuthMethodFactoryTest.php
index 9d0d755..38c8d39 100644
--- a/tests/AuthMethod/AuthMethodFactoryTest.php
+++ b/tests/AuthMethod/AuthMethodFactoryTest.php
@@ -24,9 +24,9 @@ public function testFactory(): void
$authMethod2->reveal(),
]);
- static::assertCount(2, $factory->all());
- static::assertSame($authMethod1->reveal(), $factory->create('foo'));
- static::assertSame($authMethod2->reveal(), $factory->create('bar'));
+ self::assertCount(2, $factory->all());
+ self::assertSame($authMethod1->reveal(), $factory->create('foo'));
+ self::assertSame($authMethod2->reveal(), $factory->create('bar'));
}
public function testCreateWithUnknownAuthMethod(): void
diff --git a/tests/AuthMethod/ClientSecretBasicTest.php b/tests/AuthMethod/ClientSecretBasicTest.php
index a59c8a7..faac9ba 100644
--- a/tests/AuthMethod/ClientSecretBasicTest.php
+++ b/tests/AuthMethod/ClientSecretBasicTest.php
@@ -19,7 +19,7 @@ class ClientSecretBasicTest extends TestCase
public function testGetSupportedMethod(): void
{
$auth = new ClientSecretBasic();
- static::assertSame('client_secret_basic', $auth->getSupportedMethod());
+ self::assertSame('client_secret_basic', $auth->getSupportedMethod());
}
public function testCreateRequest(): void
@@ -48,10 +48,10 @@ public function testCreateRequest(): void
$result = $auth->createRequest(
$request->reveal(),
$client->reveal(),
- ['foo' => 'bar']
+ ['foo' => 'bar'],
);
- static::assertSame($requestWithHeader->reveal(), $result);
+ self::assertSame($requestWithHeader->reveal(), $result);
}
public function testCreateRequestWithNoClientSecret(): void
@@ -71,7 +71,7 @@ public function testCreateRequestWithNoClientSecret(): void
$auth->createRequest(
$request->reveal(),
$client->reveal(),
- []
+ [],
);
}
}
diff --git a/tests/AuthMethod/ClientSecretJwtTest.php b/tests/AuthMethod/ClientSecretJwtTest.php
index 1a787d9..f56b69a 100644
--- a/tests/AuthMethod/ClientSecretJwtTest.php
+++ b/tests/AuthMethod/ClientSecretJwtTest.php
@@ -30,7 +30,7 @@ class ClientSecretJwtTest extends TestCase
public function testGetSupportedMethod(): void
{
$auth = new ClientSecretJwt();
- static::assertSame('client_secret_jwt', $auth->getSupportedMethod());
+ self::assertSame('client_secret_jwt', $auth->getSupportedMethod());
}
public function testCreateRequest(): void
@@ -40,7 +40,7 @@ public function testCreateRequest(): void
$auth = new ClientSecretJwt(
$jwsBuilder->reveal(),
- $serializer->reveal()
+ $serializer->reveal(),
);
$issuerMetadata = IssuerMetadata::fromArray([
@@ -70,25 +70,25 @@ public function testCreateRequest(): void
$jws = $this->prophesize(JWS::class);
$jwsBuilder->create()->shouldBeCalled()->willReturn($jwsBuilder2->reveal());
- $jwsBuilder2->withPayload(Argument::that(function (string $payload) {
+ $jwsBuilder2->withPayload(Argument::that(function (string $payload): true {
$decoded = json_decode($payload, true);
- static::assertIsArray($decoded);
+ self::assertIsArray($decoded);
- static::assertArrayHasKey('iss', $decoded);
- static::assertArrayHasKey('sub', $decoded);
- static::assertArrayHasKey('aud', $decoded);
- static::assertArrayHasKey('iat', $decoded);
- static::assertArrayHasKey('exp', $decoded);
- static::assertArrayHasKey('jti', $decoded);
+ self::assertArrayHasKey('iss', $decoded);
+ self::assertArrayHasKey('sub', $decoded);
+ self::assertArrayHasKey('aud', $decoded);
+ self::assertArrayHasKey('iat', $decoded);
+ self::assertArrayHasKey('exp', $decoded);
+ self::assertArrayHasKey('jti', $decoded);
- static::assertSame('bar', $decoded['foo'] ?? null);
- static::assertSame('foo', $decoded['iss'] ?? null);
- static::assertSame('foo', $decoded['sub'] ?? null);
- static::assertSame('https://issuer.com/token', $decoded['aud'] ?? null);
- static::assertLessThanOrEqual(time(), $decoded['iat']);
- static::assertLessThanOrEqual(time() + 60, $decoded['exp']);
- static::assertGreaterThan(time(), $decoded['exp']);
+ self::assertSame('bar', $decoded['foo'] ?? null);
+ self::assertSame('foo', $decoded['iss'] ?? null);
+ self::assertSame('foo', $decoded['sub'] ?? null);
+ self::assertSame('https://issuer.com/token', $decoded['aud'] ?? null);
+ self::assertLessThanOrEqual(time(), $decoded['iat']);
+ self::assertLessThanOrEqual(time() + 60, $decoded['exp']);
+ self::assertGreaterThan(time(), $decoded['exp']);
return true;
}))
@@ -97,16 +97,16 @@ public function testCreateRequest(): void
$jwsBuilder3->addSignature(Argument::allOf(
Argument::type(JWK::class),
- Argument::that(function (JWK $jwk) {
- static::assertSame('oct', $jwk->get('kty'));
- static::assertSame(base64url_encode('bar'), $jwk->get('k'));
+ Argument::that(function (JWK $jwk): true {
+ self::assertSame('oct', $jwk->get('kty'));
+ self::assertSame(base64url_encode('bar'), $jwk->get('k'));
return true;
- })
+ }),
), Argument::allOf(
Argument::type('array'),
Argument::withEntry('alg', 'HS256'),
- Argument::withKey('jti')
+ Argument::withKey('jti'),
))
->shouldBeCalled()
->willReturn($jwsBuilder4);
@@ -130,10 +130,10 @@ public function testCreateRequest(): void
$result = $auth->createRequest(
$request->reveal(),
$client->reveal(),
- ['foo' => 'bar']
+ ['foo' => 'bar'],
);
- static::assertSame($request->reveal(), $result);
+ self::assertSame($request->reveal(), $result);
}
public function testCreateRequestWithNoClientSecret(): void
@@ -145,7 +145,7 @@ public function testCreateRequestWithNoClientSecret(): void
$auth = new ClientSecretJwt(
$jwsBuilder->reveal(),
- $serializer->reveal()
+ $serializer->reveal(),
);
$request = $this->prophesize(RequestInterface::class);
@@ -159,7 +159,7 @@ public function testCreateRequestWithNoClientSecret(): void
$auth->createRequest(
$request->reveal(),
$client->reveal(),
- []
+ [],
);
}
}
diff --git a/tests/AuthMethod/ClientSecretPostTest.php b/tests/AuthMethod/ClientSecretPostTest.php
index 7bd3817..ee0f217 100644
--- a/tests/AuthMethod/ClientSecretPostTest.php
+++ b/tests/AuthMethod/ClientSecretPostTest.php
@@ -17,7 +17,7 @@ class ClientSecretPostTest extends TestCase
public function testGetSupportedMethod(): void
{
$auth = new ClientSecretPost();
- static::assertSame('client_secret_post', $auth->getSupportedMethod());
+ self::assertSame('client_secret_post', $auth->getSupportedMethod());
}
public function testCreateRequest(): void
@@ -41,10 +41,10 @@ public function testCreateRequest(): void
$result = $auth->createRequest(
$request->reveal(),
$client->reveal(),
- ['foo' => 'bar']
+ ['foo' => 'bar'],
);
- static::assertSame($request->reveal(), $result);
+ self::assertSame($request->reveal(), $result);
}
public function testCreateRequestWithNoClientSecret(): void
@@ -63,7 +63,7 @@ public function testCreateRequestWithNoClientSecret(): void
$auth->createRequest(
$request->reveal(),
$client->reveal(),
- []
+ [],
);
}
}
diff --git a/tests/AuthMethod/NoneTest.php b/tests/AuthMethod/NoneTest.php
index 7bd11c6..1ee7772 100644
--- a/tests/AuthMethod/NoneTest.php
+++ b/tests/AuthMethod/NoneTest.php
@@ -16,7 +16,7 @@ class NoneTest extends TestCase
public function testGetSupportedMethod(): void
{
$auth = new None();
- static::assertSame('none', $auth->getSupportedMethod());
+ self::assertSame('none', $auth->getSupportedMethod());
}
public function testCreateRequest(): void
@@ -37,9 +37,9 @@ public function testCreateRequest(): void
$result = $auth->createRequest(
$request->reveal(),
$client->reveal(),
- ['foo' => 'bar']
+ ['foo' => 'bar'],
);
- static::assertSame($request->reveal(), $result);
+ self::assertSame($request->reveal(), $result);
}
}
diff --git a/tests/AuthMethod/PrivateKeyJwtTest.php b/tests/AuthMethod/PrivateKeyJwtTest.php
index be0a9df..28a0c59 100644
--- a/tests/AuthMethod/PrivateKeyJwtTest.php
+++ b/tests/AuthMethod/PrivateKeyJwtTest.php
@@ -36,9 +36,9 @@ public function testGetSupportedMethod(): void
$jwsBuilder->reveal(),
$serializer->reveal(),
null,
- 60
+ 60,
);
- static::assertSame('private_key_jwt', $auth->getSupportedMethod());
+ self::assertSame('private_key_jwt', $auth->getSupportedMethod());
}
public static function createRequestProvider(): array
@@ -64,7 +64,7 @@ public function testCreateRequest(bool $jwkAsDependency = false): void
$jwsBuilder->reveal(),
$serializer->reveal(),
$jwkAsDependency ? $jwk : null,
- 60
+ 60,
);
$jwksProvider = $this->prophesize(JwksProviderInterface::class);
@@ -105,25 +105,25 @@ public function testCreateRequest(bool $jwkAsDependency = false): void
$jws = $this->prophesize(JWS::class);
$jwsBuilder->create()->shouldBeCalled()->willReturn($jwsBuilder2->reveal());
- $jwsBuilder2->withPayload(Argument::that(function (string $payload) {
+ $jwsBuilder2->withPayload(Argument::that(function (string $payload): true {
$decoded = json_decode($payload, true);
- static::assertIsArray($decoded);
+ self::assertIsArray($decoded);
- static::assertArrayHasKey('iss', $decoded);
- static::assertArrayHasKey('sub', $decoded);
- static::assertArrayHasKey('aud', $decoded);
- static::assertArrayHasKey('iat', $decoded);
- static::assertArrayHasKey('exp', $decoded);
- static::assertArrayHasKey('jti', $decoded);
+ self::assertArrayHasKey('iss', $decoded);
+ self::assertArrayHasKey('sub', $decoded);
+ self::assertArrayHasKey('aud', $decoded);
+ self::assertArrayHasKey('iat', $decoded);
+ self::assertArrayHasKey('exp', $decoded);
+ self::assertArrayHasKey('jti', $decoded);
- static::assertSame('bar', $decoded['foo'] ?? null);
- static::assertSame('foo', $decoded['iss'] ?? null);
- static::assertSame('foo', $decoded['sub'] ?? null);
- static::assertSame('https://issuer.com/token', $decoded['aud'] ?? null);
- static::assertLessThanOrEqual(time(), $decoded['iat']);
- static::assertLessThanOrEqual(time() + 60, $decoded['exp']);
- static::assertGreaterThan(time(), $decoded['exp']);
+ self::assertSame('bar', $decoded['foo'] ?? null);
+ self::assertSame('foo', $decoded['iss'] ?? null);
+ self::assertSame('foo', $decoded['sub'] ?? null);
+ self::assertSame('https://issuer.com/token', $decoded['aud'] ?? null);
+ self::assertLessThanOrEqual(time(), $decoded['iat']);
+ self::assertLessThanOrEqual(time() + 60, $decoded['exp']);
+ self::assertGreaterThan(time(), $decoded['exp']);
return true;
}))
@@ -133,13 +133,13 @@ public function testCreateRequest(bool $jwkAsDependency = false): void
$jwsBuilder3->addSignature(
Argument::allOf(
Argument::type(JWK::class),
- Argument::that(fn(JWK $key) => 'foo' === $key->get('kid'))
+ Argument::that(fn(JWK $key): bool => 'foo' === $key->get('kid')),
),
Argument::allOf(
Argument::type('array'),
Argument::withEntry('alg', 'ALG'),
- Argument::withKey('jti')
- )
+ Argument::withKey('jti'),
+ ),
)
->shouldBeCalled()
->willReturn($jwsBuilder4);
@@ -162,9 +162,9 @@ public function testCreateRequest(bool $jwkAsDependency = false): void
$result = $auth->createRequest(
$request->reveal(),
$client->reveal(),
- ['foo' => 'bar']
+ ['foo' => 'bar'],
);
- static::assertSame($request->reveal(), $result);
+ self::assertSame($request->reveal(), $result);
}
}
diff --git a/tests/AuthMethod/SelfSignedTLSClientAuthTest.php b/tests/AuthMethod/SelfSignedTLSClientAuthTest.php
index 2687a23..77d6a64 100644
--- a/tests/AuthMethod/SelfSignedTLSClientAuthTest.php
+++ b/tests/AuthMethod/SelfSignedTLSClientAuthTest.php
@@ -16,7 +16,7 @@ class SelfSignedTLSClientAuthTest extends TestCase
public function testGetSupportedMethod(): void
{
$auth = new SelfSignedTLSClientAuth();
- static::assertSame('self_signed_tls_client_auth', $auth->getSupportedMethod());
+ self::assertSame('self_signed_tls_client_auth', $auth->getSupportedMethod());
}
public function testCreateRequest(): void
@@ -39,9 +39,9 @@ public function testCreateRequest(): void
$result = $auth->createRequest(
$request->reveal(),
$client->reveal(),
- ['foo' => 'bar']
+ ['foo' => 'bar'],
);
- static::assertSame($request->reveal(), $result);
+ self::assertSame($request->reveal(), $result);
}
}
diff --git a/tests/AuthMethod/TLSClientAuthTest.php b/tests/AuthMethod/TLSClientAuthTest.php
index c033b5f..47f99d6 100644
--- a/tests/AuthMethod/TLSClientAuthTest.php
+++ b/tests/AuthMethod/TLSClientAuthTest.php
@@ -16,7 +16,7 @@ class TLSClientAuthTest extends TestCase
public function testGetSupportedMethod(): void
{
$auth = new TLSClientAuth();
- static::assertSame('tls_client_auth', $auth->getSupportedMethod());
+ self::assertSame('tls_client_auth', $auth->getSupportedMethod());
}
public function testCreateRequest(): void
@@ -39,9 +39,9 @@ public function testCreateRequest(): void
$result = $auth->createRequest(
$request->reveal(),
$client->reveal(),
- ['foo' => 'bar']
+ ['foo' => 'bar'],
);
- static::assertSame($request->reveal(), $result);
+ self::assertSame($request->reveal(), $result);
}
}
diff --git a/tests/Authorization/AuthRequestTest.php b/tests/Authorization/AuthRequestTest.php
index f2bd5cc..28bbe3c 100644
--- a/tests/Authorization/AuthRequestTest.php
+++ b/tests/Authorization/AuthRequestTest.php
@@ -20,9 +20,9 @@ public function testFromParams(): void
'redirect_uri' => 'bar',
]);
- static::assertSame('foo', $authRequest->getClientId());
- static::assertSame('bar', $authRequest->getRedirectUri());
- static::assertSame('fooscope', $authRequest->getScope());
+ self::assertSame('foo', $authRequest->getClientId());
+ self::assertSame('bar', $authRequest->getRedirectUri());
+ self::assertSame('fooscope', $authRequest->getScope());
}
public function testJsonSerialize(): void
@@ -34,11 +34,11 @@ public function testJsonSerialize(): void
$array = json_decode(json_encode($authRequest), true);
- static::assertSame('foo', $array['client_id']);
- static::assertSame('bar', $array['redirect_uri']);
- static::assertSame('openid', $array['scope']);
- static::assertSame('code', $array['response_type']);
- static::assertSame('query', $array['response_mode']);
+ self::assertSame('foo', $array['client_id']);
+ self::assertSame('bar', $array['redirect_uri']);
+ self::assertSame('openid', $array['scope']);
+ self::assertSame('code', $array['response_type']);
+ self::assertSame('query', $array['response_mode']);
}
public function testCreateParams(): void
@@ -50,38 +50,38 @@ public function testCreateParams(): void
$array = $authRequest->createParams();
- static::assertSame('foo', $array['client_id']);
- static::assertSame('bar', $array['redirect_uri']);
- static::assertSame('openid', $array['scope']);
- static::assertSame('code', $array['response_type']);
- static::assertSame('query', $array['response_mode']);
+ self::assertSame('foo', $array['client_id']);
+ self::assertSame('bar', $array['redirect_uri']);
+ self::assertSame('openid', $array['scope']);
+ self::assertSame('code', $array['response_type']);
+ self::assertSame('query', $array['response_mode']);
}
public function testGetClientId(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertSame('foo', $authRequest->getClientId());
+ self::assertSame('foo', $authRequest->getClientId());
}
public function testGetUiLocales(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getUiLocales());
+ self::assertNull($authRequest->getUiLocales());
$authRequest = new AuthRequest('foo', 'bar', ['ui_locales' => 'it_IT']);
- static::assertSame('it_IT', $authRequest->getUiLocales());
+ self::assertSame('it_IT', $authRequest->getUiLocales());
}
public function testGetRequest(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getRequest());
+ self::assertNull($authRequest->getRequest());
$authRequest = new AuthRequest('foo', 'bar', ['request' => 'foo']);
- static::assertSame('foo', $authRequest->getRequest());
+ self::assertSame('foo', $authRequest->getRequest());
}
public function testWithParams(): void
@@ -90,145 +90,145 @@ public function testWithParams(): void
$authRequest2 = $authRequest->withParams(['request' => 'foo']);
- static::assertNotSame($authRequest2, $authRequest);
- static::assertNull($authRequest->getRequest());
- static::assertSame('foo', $authRequest2->getRequest());
+ self::assertNotSame($authRequest2, $authRequest);
+ self::assertNull($authRequest->getRequest());
+ self::assertSame('foo', $authRequest2->getRequest());
}
public function testGetCodeChallengeMethod(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getCodeChallengeMethod());
+ self::assertNull($authRequest->getCodeChallengeMethod());
$authRequest = new AuthRequest('foo', 'bar', ['code_challenge_method' => 'foo']);
- static::assertSame('foo', $authRequest->getCodeChallengeMethod());
+ self::assertSame('foo', $authRequest->getCodeChallengeMethod());
}
public function testGetState(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getState());
+ self::assertNull($authRequest->getState());
$authRequest = new AuthRequest('foo', 'bar', ['state' => 'foo']);
- static::assertSame('foo', $authRequest->getState());
+ self::assertSame('foo', $authRequest->getState());
}
public function testGetLoginHint(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getLoginHint());
+ self::assertNull($authRequest->getLoginHint());
$authRequest = new AuthRequest('foo', 'bar', ['login_hint' => 'foo']);
- static::assertSame('foo', $authRequest->getLoginHint());
+ self::assertSame('foo', $authRequest->getLoginHint());
}
public function testGetDisplay(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getDisplay());
+ self::assertNull($authRequest->getDisplay());
$authRequest = new AuthRequest('foo', 'bar', ['display' => 'foo']);
- static::assertSame('foo', $authRequest->getDisplay());
+ self::assertSame('foo', $authRequest->getDisplay());
}
public function testGetMaxAge(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getMaxAge());
+ self::assertNull($authRequest->getMaxAge());
$authRequest = new AuthRequest('foo', 'bar', ['max_age' => 3]);
- static::assertSame(3, $authRequest->getMaxAge());
+ self::assertSame(3, $authRequest->getMaxAge());
}
public function testGetRedirectUri(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertSame('bar', $authRequest->getRedirectUri());
+ self::assertSame('bar', $authRequest->getRedirectUri());
}
public function testGetNonce(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getNonce());
+ self::assertNull($authRequest->getNonce());
$authRequest = new AuthRequest('foo', 'bar', ['nonce' => 'foo']);
- static::assertSame('foo', $authRequest->getNonce());
+ self::assertSame('foo', $authRequest->getNonce());
}
public function testGetCodeChallenge(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getCodeChallenge());
+ self::assertNull($authRequest->getCodeChallenge());
$authRequest = new AuthRequest('foo', 'bar', ['code_challenge' => 'foo']);
- static::assertSame('foo', $authRequest->getCodeChallenge());
+ self::assertSame('foo', $authRequest->getCodeChallenge());
}
public function testGetAcrValues(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getAcrValues());
+ self::assertNull($authRequest->getAcrValues());
$authRequest = new AuthRequest('foo', 'bar', ['acr_values' => 'foo']);
- static::assertSame('foo', $authRequest->getAcrValues());
+ self::assertSame('foo', $authRequest->getAcrValues());
}
public function testGetScope(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertSame('openid', $authRequest->getScope());
+ self::assertSame('openid', $authRequest->getScope());
$authRequest = new AuthRequest('foo', 'bar', ['scope' => 'foo']);
- static::assertSame('foo', $authRequest->getScope());
+ self::assertSame('foo', $authRequest->getScope());
}
public function testGetResponseMode(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertSame('query', $authRequest->getResponseMode());
+ self::assertSame('query', $authRequest->getResponseMode());
$authRequest = new AuthRequest('foo', 'bar', ['response_mode' => 'foo']);
- static::assertSame('foo', $authRequest->getResponseMode());
+ self::assertSame('foo', $authRequest->getResponseMode());
}
public function testGetPrompt(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getPrompt());
+ self::assertNull($authRequest->getPrompt());
$authRequest = new AuthRequest('foo', 'bar', ['prompt' => 'foo']);
- static::assertSame('foo', $authRequest->getPrompt());
+ self::assertSame('foo', $authRequest->getPrompt());
}
public function testGetIdTokenHint(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertNull($authRequest->getIdTokenHint());
+ self::assertNull($authRequest->getIdTokenHint());
$authRequest = new AuthRequest('foo', 'bar', ['id_token_hint' => 'foo']);
- static::assertSame('foo', $authRequest->getIdTokenHint());
+ self::assertSame('foo', $authRequest->getIdTokenHint());
}
public function testGetResponseType(): void
{
$authRequest = new AuthRequest('foo', 'bar');
- static::assertSame('code', $authRequest->getResponseType());
+ self::assertSame('code', $authRequest->getResponseType());
$authRequest = new AuthRequest('foo', 'bar', ['response_type' => 'foo']);
- static::assertSame('foo', $authRequest->getResponseType());
+ self::assertSame('foo', $authRequest->getResponseType());
}
}
diff --git a/tests/Claims/AggregatedClaimsTest.php b/tests/Claims/AggregatedClaimsTest.php
index ee81600..d8663c5 100644
--- a/tests/Claims/AggregatedClaimsTest.php
+++ b/tests/Claims/AggregatedClaimsTest.php
@@ -28,7 +28,6 @@ class AggregatedClaimsTest extends TestCase
{
public function testUnpackAggregatedClaimsWithNoClaimSources(): void
{
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$JWSSerializer = $this->prophesize(JWSSerializer::class);
$client = $this->prophesize(ClientInterface::class);
@@ -36,9 +35,9 @@ public function testUnpackAggregatedClaimsWithNoClaimSources(): void
$service = new AggregateParser(
$issuerBuilder->reveal(),
- $algorithmManager->reveal(),
+ new AlgorithmManager([]),
$JWSVerifier->reveal(),
- $JWSSerializer->reveal()
+ $JWSSerializer->reveal(),
);
$claims = [
@@ -51,20 +50,19 @@ public function testUnpackAggregatedClaimsWithNoClaimSources(): void
$unpacked = $service->unpack($client->reveal(), $claims);
- static::assertSame($claims, $unpacked);
+ self::assertSame($claims, $unpacked);
}
public function testUnpackAggregatedClaimsWithNoClaimNames(): void
{
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$issuerBuilder = $this->prophesize(IssuerBuilderInterface::class);
$client = $this->prophesize(ClientInterface::class);
$service = new AggregateParser(
$issuerBuilder->reveal(),
- $algorithmManager->reveal(),
- $JWSVerifier->reveal()
+ new AlgorithmManager([]),
+ $JWSVerifier->reveal(),
);
$claims = [
@@ -78,14 +76,13 @@ public function testUnpackAggregatedClaimsWithNoClaimNames(): void
$unpacked = $service->unpack($client->reveal(), $claims);
- static::assertSame($claims, $unpacked);
+ self::assertSame($claims, $unpacked);
}
public function testUnpackAggregatedClaims(): void
{
$jwt = 'eyJhbGciOiJub25lIn0.eyJleWVfY29sb3IiOiAiYmx1ZSIsICJzaG9lX3NpemUiOiA4fQ.';
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$issuerBuilder = $this->prophesize(IssuerBuilderInterface::class);
$client = $this->prophesize(ClientInterface::class);
@@ -95,8 +92,8 @@ public function testUnpackAggregatedClaims(): void
$service = new AggregateParser(
$issuerBuilder->reveal(),
- $algorithmManager->reveal(),
- $JWSVerifier->reveal()
+ new AlgorithmManager([]),
+ $JWSVerifier->reveal(),
);
$claims = [
@@ -114,10 +111,10 @@ public function testUnpackAggregatedClaims(): void
$unpacked = $service->unpack($client->reveal(), $claims);
- static::assertSame('blue', $unpacked['eye_color'] ?? null);
- static::assertSame(8, $unpacked['shoe_size'] ?? null);
- static::assertArrayNotHasKey('_claim_names', $unpacked);
- static::assertArrayNotHasKey('_claim_sources', $unpacked);
+ self::assertSame('blue', $unpacked['eye_color'] ?? null);
+ self::assertSame(8, $unpacked['shoe_size'] ?? null);
+ self::assertArrayNotHasKey('_claim_names', $unpacked);
+ self::assertArrayNotHasKey('_claim_sources', $unpacked);
}
public function testUnpackAggregatedClaimsWithSignedJWT(): void
@@ -136,7 +133,6 @@ public function testUnpackAggregatedClaimsWithSignedJWT(): void
$jwt = $serializer->serialize($jws, 0);
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$client = $this->prophesize(ClientInterface::class);
$issuer = $this->prophesize(IssuerInterface::class);
@@ -144,10 +140,13 @@ public function testUnpackAggregatedClaimsWithSignedJWT(): void
$issuerBuilder = $this->prophesize(IssuerBuilderInterface::class);
$issuerJwksProvider = $this->prophesize(JwksProviderInterface::class);
- $algorithm = new RS256();
- $algorithmManager->get('RS256')->willReturn($algorithm);
+ new AlgorithmManager([new RS256()]);
- $JWSVerifier->verifyWithKey(Argument::type(JWS::class), Argument::that(fn(JWK $key) => $jwkPublic->all() === $key->all()), 0)
+ $JWSVerifier->verifyWithKey(
+ Argument::type(JWS::class),
+ Argument::that(fn(JWK $key): bool => $jwkPublic->all() === $key->all()),
+ 0,
+ )
->willReturn(true);
$client->getIssuer()->willReturn($issuer->reveal());
@@ -162,8 +161,8 @@ public function testUnpackAggregatedClaimsWithSignedJWT(): void
$service = new AggregateParser(
$issuerBuilder->reveal(),
- $algorithmManager->reveal(),
- $JWSVerifier->reveal()
+ new AlgorithmManager([new RS256()]),
+ $JWSVerifier->reveal(),
);
$claims = [
@@ -180,8 +179,8 @@ public function testUnpackAggregatedClaimsWithSignedJWT(): void
$unpacked = $service->unpack($client->reveal(), $claims);
- static::assertSame('blue', $unpacked['eye_color'] ?? null);
- static::assertArrayNotHasKey('_claim_names', $unpacked);
- static::assertArrayNotHasKey('_claim_sources', $unpacked);
+ self::assertSame('blue', $unpacked['eye_color'] ?? null);
+ self::assertArrayNotHasKey('_claim_names', $unpacked);
+ self::assertArrayNotHasKey('_claim_sources', $unpacked);
}
}
diff --git a/tests/Claims/DistributedClaimsTest.php b/tests/Claims/DistributedClaimsTest.php
index 06e655f..fd7d2e0 100644
--- a/tests/Claims/DistributedClaimsTest.php
+++ b/tests/Claims/DistributedClaimsTest.php
@@ -26,7 +26,6 @@ class DistributedClaimsTest extends TestCase
{
public function testUnpackAggregatedClaimsWithNoClaimSources(): void
{
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$issuerBuilder = $this->prophesize(IssuerBuilderInterface::class);
$httpClient = $this->prophesize(HttpClient::class);
@@ -37,8 +36,8 @@ public function testUnpackAggregatedClaimsWithNoClaimSources(): void
$issuerBuilder->reveal(),
$httpClient->reveal(),
$requestFactory->reveal(),
- $algorithmManager->reveal(),
- $JWSVerifier->reveal()
+ new AlgorithmManager([]),
+ $JWSVerifier->reveal(),
);
$claims = [
@@ -50,12 +49,11 @@ public function testUnpackAggregatedClaimsWithNoClaimSources(): void
$distributed = $service->fetch($client->reveal(), $claims);
- static::assertSame($claims, $distributed);
+ self::assertSame($claims, $distributed);
}
public function testUnpackAggregatedClaimsWithNoClaimNames(): void
{
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$issuerBuilder = $this->prophesize(IssuerBuilderInterface::class);
$httpClient = $this->prophesize(HttpClient::class);
@@ -66,8 +64,8 @@ public function testUnpackAggregatedClaimsWithNoClaimNames(): void
$issuerBuilder->reveal(),
$httpClient->reveal(),
$requestFactory->reveal(),
- $algorithmManager->reveal(),
- $JWSVerifier->reveal()
+ new AlgorithmManager([]),
+ $JWSVerifier->reveal(),
);
$claims = [
@@ -82,7 +80,7 @@ public function testUnpackAggregatedClaimsWithNoClaimNames(): void
$distributed = $service->fetch($client->reveal(), $claims);
- static::assertSame($claims, $distributed);
+ self::assertSame($claims, $distributed);
}
public function testUnpackAggregatedClaims(): void
@@ -93,7 +91,6 @@ public function testUnpackAggregatedClaims(): void
'.',
]);
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$issuerBuilder = $this->prophesize(IssuerBuilderInterface::class);
$httpClient = $this->prophesize(HttpClient::class);
@@ -125,8 +122,8 @@ public function testUnpackAggregatedClaims(): void
$issuerBuilder->reveal(),
$httpClient->reveal(),
$requestFactory->reveal(),
- $algorithmManager->reveal(),
- $JWSVerifier->reveal()
+ new AlgorithmManager([]),
+ $JWSVerifier->reveal(),
);
$claims = [
@@ -144,9 +141,9 @@ public function testUnpackAggregatedClaims(): void
$unpacked = $service->fetch($client->reveal(), $claims);
- static::assertSame(30, $unpacked['age'] ?? null);
- static::assertArrayNotHasKey('_claim_names', $unpacked);
- static::assertArrayNotHasKey('_claim_sources', $unpacked);
+ self::assertSame(30, $unpacked['age'] ?? null);
+ self::assertArrayNotHasKey('_claim_names', $unpacked);
+ self::assertArrayNotHasKey('_claim_sources', $unpacked);
}
public function testUnpackAggregatedClaimsWithResourceError(): void
@@ -160,7 +157,6 @@ public function testUnpackAggregatedClaimsWithResourceError(): void
'.',
]);
- $algorithmManager = $this->prophesize(AlgorithmManager::class);
$JWSVerifier = $this->prophesize(JWSVerifier::class);
$issuerBuilder = $this->prophesize(IssuerBuilderInterface::class);
$httpClient = $this->prophesize(HttpClient::class);
@@ -193,8 +189,8 @@ public function testUnpackAggregatedClaimsWithResourceError(): void
$issuerBuilder->reveal(),
$httpClient->reveal(),
$requestFactory->reveal(),
- $algorithmManager->reveal(),
- $JWSVerifier->reveal()
+ new AlgorithmManager([]),
+ $JWSVerifier->reveal(),
);
$claims = [
@@ -212,6 +208,6 @@ public function testUnpackAggregatedClaimsWithResourceError(): void
$unpacked = $service->fetch($client->reveal(), $claims);
- static::assertSame($claims, $unpacked);
+ self::assertSame($claims, $unpacked);
}
}
diff --git a/tests/Client/ClientBuilderTest.php b/tests/Client/ClientBuilderTest.php
index b40d22f..61f403e 100644
--- a/tests/Client/ClientBuilderTest.php
+++ b/tests/Client/ClientBuilderTest.php
@@ -21,12 +21,12 @@ public function testWithoutClientJwks(): void
->setClientMetadata($metadata->reveal())
->setIssuer($issuer->reveal());
$client = $builder->build();
- $provider = $client->getJwksProvider();
+ $client->getJwksProvider();
- static::assertSame($issuer->reveal(), $client->getIssuer());
- static::assertSame($metadata->reveal(), $client->getMetadata());
- static::assertInstanceOf(MemoryJwksProvider::class, $client->getJwksProvider());
- static::assertSame(['keys' => []], $client->getJwksProvider()->getJwks());
+ self::assertSame($issuer->reveal(), $client->getIssuer());
+ self::assertSame($metadata->reveal(), $client->getMetadata());
+ self::assertInstanceOf(MemoryJwksProvider::class, $client->getJwksProvider());
+ self::assertSame(['keys' => []], $client->getJwksProvider()->getJwks());
}
public function testBuildWithClientJwks(): void
@@ -43,11 +43,11 @@ public function testBuildWithClientJwks(): void
->setClientMetadata($metadata->reveal())
->setIssuer($issuer->reveal());
$client = $builder->build();
- $provider = $client->getJwksProvider();
+ $client->getJwksProvider();
- static::assertSame($issuer->reveal(), $client->getIssuer());
- static::assertSame($metadata->reveal(), $client->getMetadata());
- static::assertInstanceOf(MemoryJwksProvider::class, $client->getJwksProvider());
- static::assertSame($jwks, $client->getJwksProvider()->getJwks());
+ self::assertSame($issuer->reveal(), $client->getIssuer());
+ self::assertSame($metadata->reveal(), $client->getMetadata());
+ self::assertInstanceOf(MemoryJwksProvider::class, $client->getJwksProvider());
+ self::assertSame($jwks, $client->getJwksProvider()->getJwks());
}
}
diff --git a/tests/Client/ClientTest.php b/tests/Client/ClientTest.php
index 33da62a..bfdb65e 100644
--- a/tests/Client/ClientTest.php
+++ b/tests/Client/ClientTest.php
@@ -20,13 +20,13 @@ public function testMinimalConstructor(): void
$client = new Client(
$issuer->reveal(),
- $metadata->reveal()
+ $metadata->reveal(),
);
- static::assertSame($issuer->reveal(), $client->getIssuer());
- static::assertSame($metadata->reveal(), $client->getMetadata());
- static::assertInstanceOf(JwksProviderInterface::class, $client->getJwksProvider());
- static::assertInstanceOf(AuthMethodFactoryInterface::class, $client->getAuthMethodFactory());
+ self::assertSame($issuer->reveal(), $client->getIssuer());
+ self::assertSame($metadata->reveal(), $client->getMetadata());
+ self::assertInstanceOf(JwksProviderInterface::class, $client->getJwksProvider());
+ self::assertInstanceOf(AuthMethodFactoryInterface::class, $client->getAuthMethodFactory());
}
public function testWithFullConstructor(): void
@@ -40,12 +40,12 @@ public function testWithFullConstructor(): void
$issuer->reveal(),
$metadata->reveal(),
$jwksProvider->reveal(),
- $authMethodFactory->reveal()
+ $authMethodFactory->reveal(),
);
- static::assertSame($issuer->reveal(), $client->getIssuer());
- static::assertSame($metadata->reveal(), $client->getMetadata());
- static::assertSame($jwksProvider->reveal(), $client->getJwksProvider());
- static::assertSame($authMethodFactory->reveal(), $client->getAuthMethodFactory());
+ self::assertSame($issuer->reveal(), $client->getIssuer());
+ self::assertSame($metadata->reveal(), $client->getMetadata());
+ self::assertSame($jwksProvider->reveal(), $client->getJwksProvider());
+ self::assertSame($authMethodFactory->reveal(), $client->getAuthMethodFactory());
}
}
diff --git a/tests/Client/Metadata/ClientMetadataTest.php b/tests/Client/Metadata/ClientMetadataTest.php
index b87925e..58fbfb0 100644
--- a/tests/Client/Metadata/ClientMetadataTest.php
+++ b/tests/Client/Metadata/ClientMetadataTest.php
@@ -20,8 +20,8 @@ public function testFromClaims(): void
'redirect_uris' => ['bar'],
]);
- static::assertSame('foo', $metadata->getClientId());
- static::assertSame(['bar'], $metadata->getRedirectUris());
+ self::assertSame('foo', $metadata->getClientId());
+ self::assertSame(['bar'], $metadata->getRedirectUris());
}
public function testFromClaimsWithNoClientId(): void
@@ -37,270 +37,270 @@ public function testGetClientId(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertSame('foo', $metadata->getClientId());
+ self::assertSame('foo', $metadata->getClientId());
}
public function testGetRedirectUris(): void
{
$metadata = new ClientMetadata('foo');
- static::assertSame([], $metadata->getRedirectUris());
+ self::assertSame([], $metadata->getRedirectUris());
$metadata = new ClientMetadata('foo', [
'redirect_uris' => ['https://example.com/callback'],
]);
- static::assertSame(['https://example.com/callback'], $metadata->getRedirectUris());
+ self::assertSame(['https://example.com/callback'], $metadata->getRedirectUris());
}
public function testGetResponseTypes(): void
{
$metadata = new ClientMetadata('foo');
- static::assertSame(['code'], $metadata->getResponseTypes());
+ self::assertSame(['code'], $metadata->getResponseTypes());
$metadata = new ClientMetadata('foo', [
'response_types' => ['code', 'id_token'],
]);
- static::assertSame(['code', 'id_token'], $metadata->getResponseTypes());
+ self::assertSame(['code', 'id_token'], $metadata->getResponseTypes());
}
public function testGetIdTokenSignedResponseAlg(): void
{
$metadata = new ClientMetadata('foo');
- static::assertSame('RS256', $metadata->getIdTokenSignedResponseAlg());
+ self::assertSame('RS256', $metadata->getIdTokenSignedResponseAlg());
$metadata = new ClientMetadata('foo', [
'id_token_signed_response_alg' => 'HS256',
]);
- static::assertSame('HS256', $metadata->getIdTokenSignedResponseAlg());
+ self::assertSame('HS256', $metadata->getIdTokenSignedResponseAlg());
}
public function testGetIdTokenEncryptedResponseAlg(): void
{
$metadata = new ClientMetadata('foo');
- static::assertNull($metadata->getIdTokenEncryptedResponseAlg());
+ self::assertNull($metadata->getIdTokenEncryptedResponseAlg());
$metadata = new ClientMetadata('foo', [
'id_token_encrypted_response_alg' => 'RSA-OEAP',
]);
- static::assertSame('RSA-OEAP', $metadata->getIdTokenEncryptedResponseAlg());
+ self::assertSame('RSA-OEAP', $metadata->getIdTokenEncryptedResponseAlg());
}
public function testGetIdTokenEncryptedResponseEnc(): void
{
$metadata = new ClientMetadata('foo');
- static::assertNull($metadata->getIdTokenEncryptedResponseEnc());
+ self::assertNull($metadata->getIdTokenEncryptedResponseEnc());
$metadata = new ClientMetadata('foo', [
'id_token_encrypted_response_enc' => 'ALG',
]);
- static::assertSame('ALG', $metadata->getIdTokenEncryptedResponseEnc());
+ self::assertSame('ALG', $metadata->getIdTokenEncryptedResponseEnc());
}
public function testGetUserinfoEncryptedResponseAlg(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getUserinfoEncryptedResponseAlg());
+ self::assertNull($metadata->getUserinfoEncryptedResponseAlg());
$metadata = new ClientMetadata('foo', [
'userinfo_encrypted_response_alg' => 'foo',
]);
- static::assertSame('foo', $metadata->getUserinfoEncryptedResponseAlg());
+ self::assertSame('foo', $metadata->getUserinfoEncryptedResponseAlg());
}
public function testGetRevocationEndpointAuthMethod(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertSame($metadata->getTokenEndpointAuthMethod(), $metadata->getRevocationEndpointAuthMethod());
+ self::assertSame($metadata->getTokenEndpointAuthMethod(), $metadata->getRevocationEndpointAuthMethod());
$metadata = new ClientMetadata('foo', [
'revocation_endpoint_auth_method' => 'foo',
]);
- static::assertSame('foo', $metadata->getRevocationEndpointAuthMethod());
+ self::assertSame('foo', $metadata->getRevocationEndpointAuthMethod());
}
public function testGetClientSecret(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getClientSecret());
+ self::assertNull($metadata->getClientSecret());
$metadata = new ClientMetadata('foo', [
'client_secret' => 'foo',
]);
- static::assertSame('foo', $metadata->getClientSecret());
+ self::assertSame('foo', $metadata->getClientSecret());
}
public function testGetAuthorizationEncryptedResponseAlg(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getAuthorizationEncryptedResponseAlg());
+ self::assertNull($metadata->getAuthorizationEncryptedResponseAlg());
$metadata = new ClientMetadata('foo', [
'authorization_encrypted_response_alg' => 'foo',
]);
- static::assertSame('foo', $metadata->getAuthorizationEncryptedResponseAlg());
+ self::assertSame('foo', $metadata->getAuthorizationEncryptedResponseAlg());
}
public function testGetUserinfoSignedResponseAlg(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getUserinfoSignedResponseAlg());
+ self::assertNull($metadata->getUserinfoSignedResponseAlg());
$metadata = new ClientMetadata('foo', [
'userinfo_signed_response_alg' => 'foo',
]);
- static::assertSame('foo', $metadata->getUserinfoSignedResponseAlg());
+ self::assertSame('foo', $metadata->getUserinfoSignedResponseAlg());
}
public function testGetIntrospectionEndpointAuthMethod(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertSame($metadata->getTokenEndpointAuthMethod(), $metadata->getIntrospectionEndpointAuthMethod());
+ self::assertSame($metadata->getTokenEndpointAuthMethod(), $metadata->getIntrospectionEndpointAuthMethod());
$metadata = new ClientMetadata('foo', [
'introspection_endpoint_auth_method' => 'foo',
]);
- static::assertSame('foo', $metadata->getIntrospectionEndpointAuthMethod());
+ self::assertSame('foo', $metadata->getIntrospectionEndpointAuthMethod());
}
public function testGetUserinfoEncryptedResponseEnc(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getUserinfoEncryptedResponseEnc());
+ self::assertNull($metadata->getUserinfoEncryptedResponseEnc());
$metadata = new ClientMetadata('foo', [
'userinfo_encrypted_response_enc' => 'foo',
]);
- static::assertSame('foo', $metadata->getUserinfoEncryptedResponseEnc());
+ self::assertSame('foo', $metadata->getUserinfoEncryptedResponseEnc());
}
public function testGetAuthorizationEncryptedResponseEnc(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getAuthorizationEncryptedResponseEnc());
+ self::assertNull($metadata->getAuthorizationEncryptedResponseEnc());
$metadata = new ClientMetadata('foo', [
'authorization_encrypted_response_enc' => 'foo',
]);
- static::assertSame('foo', $metadata->getAuthorizationEncryptedResponseEnc());
+ self::assertSame('foo', $metadata->getAuthorizationEncryptedResponseEnc());
}
public function testGetRequestObjectSigningAlg(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getRequestObjectSigningAlg());
+ self::assertNull($metadata->getRequestObjectSigningAlg());
$metadata = new ClientMetadata('foo', [
'request_object_signing_alg' => 'foo',
]);
- static::assertSame('foo', $metadata->getRequestObjectSigningAlg());
+ self::assertSame('foo', $metadata->getRequestObjectSigningAlg());
}
public function testGetRequestObjectEncryptionAlg(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getRequestObjectEncryptionAlg());
+ self::assertNull($metadata->getRequestObjectEncryptionAlg());
$metadata = new ClientMetadata('foo', [
'request_object_encryption_alg' => 'foo',
]);
- static::assertSame('foo', $metadata->getRequestObjectEncryptionAlg());
+ self::assertSame('foo', $metadata->getRequestObjectEncryptionAlg());
}
public function testGetRequestObjectEncryptionEnc(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getRequestObjectEncryptionEnc());
+ self::assertNull($metadata->getRequestObjectEncryptionEnc());
$metadata = new ClientMetadata('foo', [
'request_object_encryption_enc' => 'foo',
]);
- static::assertSame('foo', $metadata->getRequestObjectEncryptionEnc());
+ self::assertSame('foo', $metadata->getRequestObjectEncryptionEnc());
}
public function testGetAuthorizationSignedResponseAlg(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->getAuthorizationSignedResponseAlg());
+ self::assertNull($metadata->getAuthorizationSignedResponseAlg());
$metadata = new ClientMetadata('foo', [
'authorization_signed_response_alg' => 'foo',
]);
- static::assertSame('foo', $metadata->getAuthorizationSignedResponseAlg());
+ self::assertSame('foo', $metadata->getAuthorizationSignedResponseAlg());
}
public function testGetTokenEndpointAuthMethod(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertSame('client_secret_basic', $metadata->getTokenEndpointAuthMethod());
+ self::assertSame('client_secret_basic', $metadata->getTokenEndpointAuthMethod());
$metadata = new ClientMetadata('foo', [
'token_endpoint_auth_method' => 'foo',
]);
- static::assertSame('foo', $metadata->getTokenEndpointAuthMethod());
+ self::assertSame('foo', $metadata->getTokenEndpointAuthMethod());
}
public function testDefaults(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertNull($metadata->get('require_auth_time'));
- static::assertNull($metadata->get('tls_client_certificate_bound_access_tokens'));
- static::assertNull($metadata->get('response_types'));
- static::assertSame(['code'], $metadata->getResponseTypes());
- static::assertNull($metadata->get('post_logout_redirect_uris'));
- static::assertNull($metadata->get('id_token_signed_response_alg'));
- static::assertSame('RS256', $metadata->getIdTokenSignedResponseAlg());
- static::assertSame('client_secret_basic', $metadata->getTokenEndpointAuthMethod());
+ self::assertNull($metadata->get('require_auth_time'));
+ self::assertNull($metadata->get('tls_client_certificate_bound_access_tokens'));
+ self::assertNull($metadata->get('response_types'));
+ self::assertSame(['code'], $metadata->getResponseTypes());
+ self::assertNull($metadata->get('post_logout_redirect_uris'));
+ self::assertNull($metadata->get('id_token_signed_response_alg'));
+ self::assertSame('RS256', $metadata->getIdTokenSignedResponseAlg());
+ self::assertSame('client_secret_basic', $metadata->getTokenEndpointAuthMethod());
}
public function testGet(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertSame('foo', $metadata->get('client_id'));
+ self::assertSame('foo', $metadata->get('client_id'));
}
public function testHas(): void
{
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertTrue($metadata->has('client_id'));
- static::assertFalse($metadata->has('foo'));
+ self::assertTrue($metadata->has('client_id'));
+ self::assertFalse($metadata->has('foo'));
}
public function testJsonSerialize(): void
@@ -311,6 +311,6 @@ public function testJsonSerialize(): void
];
$metadata = new ClientMetadata('foo', ['redirect_uris' => ['bar']]);
- static::assertSame($expected, json_decode(json_encode($metadata), true));
+ self::assertSame($expected, json_decode(json_encode($metadata), true));
}
}
diff --git a/tests/Exception/InvalidArgumentExceptionTest.php b/tests/Exception/InvalidArgumentExceptionTest.php
index 74aa1f4..194ca6a 100644
--- a/tests/Exception/InvalidArgumentExceptionTest.php
+++ b/tests/Exception/InvalidArgumentExceptionTest.php
@@ -13,6 +13,6 @@ class InvalidArgumentExceptionTest extends TestCase
public function testException(): void
{
$exception = new InvalidArgumentException();
- static::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
}
}
diff --git a/tests/Exception/LogicExceptionTest.php b/tests/Exception/LogicExceptionTest.php
index 7c35eed..1833e18 100644
--- a/tests/Exception/LogicExceptionTest.php
+++ b/tests/Exception/LogicExceptionTest.php
@@ -13,6 +13,6 @@ class LogicExceptionTest extends TestCase
public function testException(): void
{
$exception = new LogicException();
- static::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
}
}
diff --git a/tests/Exception/OAuth2ExceptionTest.php b/tests/Exception/OAuth2ExceptionTest.php
index dd55f8d..a323712 100644
--- a/tests/Exception/OAuth2ExceptionTest.php
+++ b/tests/Exception/OAuth2ExceptionTest.php
@@ -30,11 +30,11 @@ public function testFromResponse(): void
$exception = OAuth2Exception::fromResponse($response->reveal());
- static::assertInstanceOf(ExceptionInterface::class, $exception);
- static::assertSame('error_code', $exception->getMessage());
- static::assertSame('error_code', $exception->getError());
- static::assertNull($exception->getDescription());
- static::assertNull($exception->getErrorUri());
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertSame('error_code', $exception->getMessage());
+ self::assertSame('error_code', $exception->getError());
+ self::assertNull($exception->getDescription());
+ self::assertNull($exception->getErrorUri());
}
public function testFromResponseComplete(): void
@@ -50,11 +50,11 @@ public function testFromResponseComplete(): void
$exception = OAuth2Exception::fromResponse($response->reveal());
- static::assertInstanceOf(ExceptionInterface::class, $exception);
- static::assertSame('Error message (error_code)', $exception->getMessage());
- static::assertSame('error_code', $exception->getError());
- static::assertSame('Error message', $exception->getDescription());
- static::assertSame('uri', $exception->getErrorUri());
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertSame('Error message (error_code)', $exception->getMessage());
+ self::assertSame('error_code', $exception->getError());
+ self::assertSame('Error message', $exception->getDescription());
+ self::assertSame('uri', $exception->getErrorUri());
}
public function testFromResponseNoOAuthError(): void
@@ -81,11 +81,11 @@ public function testFromParameters(): void
'error_uri' => 'uri',
]);
- static::assertInstanceOf(ExceptionInterface::class, $exception);
- static::assertSame('Error message (error_code)', $exception->getMessage());
- static::assertSame('error_code', $exception->getError());
- static::assertSame('Error message', $exception->getDescription());
- static::assertSame('uri', $exception->getErrorUri());
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertSame('Error message (error_code)', $exception->getMessage());
+ self::assertSame('error_code', $exception->getError());
+ self::assertSame('Error message', $exception->getDescription());
+ self::assertSame('uri', $exception->getErrorUri());
}
public function testFromInvalidParameters(): void
@@ -107,7 +107,7 @@ public function testJsonSerializer(): void
];
$exception = OAuth2Exception::fromParameters($params);
- static::assertInstanceOf(ExceptionInterface::class, $exception);
- static::assertSame($params, json_decode(json_encode($exception), true));
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertSame($params, json_decode(json_encode($exception), true));
}
}
diff --git a/tests/Exception/RemoteExceptionTest.php b/tests/Exception/RemoteExceptionTest.php
index c05ce56..b46de86 100644
--- a/tests/Exception/RemoteExceptionTest.php
+++ b/tests/Exception/RemoteExceptionTest.php
@@ -19,10 +19,10 @@ public function testException(): void
$exception = new RemoteException($response->reveal());
- static::assertInstanceOf(ExceptionInterface::class, $exception);
- static::assertSame('Error message', $exception->getMessage());
- static::assertSame(400, $exception->getCode());
- static::assertSame($response->reveal(), $exception->getResponse());
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertSame('Error message', $exception->getMessage());
+ self::assertSame(400, $exception->getCode());
+ self::assertSame($response->reveal(), $exception->getResponse());
}
public function testExceptionWithCustomMessage(): void
@@ -33,9 +33,9 @@ public function testExceptionWithCustomMessage(): void
$exception = new RemoteException($response->reveal(), 'foo');
- static::assertInstanceOf(ExceptionInterface::class, $exception);
- static::assertSame('foo', $exception->getMessage());
- static::assertSame(400, $exception->getCode());
- static::assertSame($response->reveal(), $exception->getResponse());
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertSame('foo', $exception->getMessage());
+ self::assertSame(400, $exception->getCode());
+ self::assertSame($response->reveal(), $exception->getResponse());
}
}
diff --git a/tests/Exception/RuntimeExceptionTest.php b/tests/Exception/RuntimeExceptionTest.php
index a65e0c2..79925fc 100644
--- a/tests/Exception/RuntimeExceptionTest.php
+++ b/tests/Exception/RuntimeExceptionTest.php
@@ -13,6 +13,6 @@ class RuntimeExceptionTest extends TestCase
public function testException(): void
{
$exception = new RuntimeException();
- static::assertInstanceOf(ExceptionInterface::class, $exception);
+ self::assertInstanceOf(ExceptionInterface::class, $exception);
}
}
diff --git a/tests/Issuer/IssuerTest.php b/tests/Issuer/IssuerTest.php
index f476857..d50c635 100644
--- a/tests/Issuer/IssuerTest.php
+++ b/tests/Issuer/IssuerTest.php
@@ -18,10 +18,10 @@ public function testMinimalConstructor(): void
$issuer = new Issuer(
$metadata->reveal(),
- $jwksProvider->reveal()
+ $jwksProvider->reveal(),
);
- static::assertSame($metadata->reveal(), $issuer->getMetadata());
- static::assertSame($jwksProvider->reveal(), $issuer->getJwksProvider());
+ self::assertSame($metadata->reveal(), $issuer->getMetadata());
+ self::assertSame($jwksProvider->reveal(), $issuer->getJwksProvider());
}
}
diff --git a/tests/Issuer/Metadata/IssuerMetadataTest.php b/tests/Issuer/Metadata/IssuerMetadataTest.php
index 3b291a3..6a4d07d 100644
--- a/tests/Issuer/Metadata/IssuerMetadataTest.php
+++ b/tests/Issuer/Metadata/IssuerMetadataTest.php
@@ -18,7 +18,7 @@ public function testJsonSerialize(): void
$metadata = new IssuerMetadata(
'foo-issuer',
'foo-endpoint',
- 'foo-jwks'
+ 'foo-jwks',
);
$expected = [
@@ -27,7 +27,7 @@ public function testJsonSerialize(): void
'jwks_uri' => 'foo-jwks',
];
- static::assertSame($expected, json_decode(json_encode($metadata), true));
+ self::assertSame($expected, json_decode(json_encode($metadata), true));
}
public function testFromArray(): void
@@ -38,10 +38,10 @@ public function testFromArray(): void
'jwks_uri' => 'foo-jwks',
]);
- static::assertInstanceOf(IssuerMetadata::class, $metadata);
- static::assertSame('foo', $metadata->getIssuer());
- static::assertSame('foo-endpoint', $metadata->getAuthorizationEndpoint());
- static::assertSame('foo-jwks', $metadata->getJwksUri());
+ self::assertInstanceOf(IssuerMetadata::class, $metadata);
+ self::assertSame('foo', $metadata->getIssuer());
+ self::assertSame('foo-endpoint', $metadata->getAuthorizationEndpoint());
+ self::assertSame('foo-jwks', $metadata->getJwksUri());
}
public function testGet(): void
@@ -52,12 +52,12 @@ public function testGet(): void
'foo-jwks',
[
'foo' => 'bar',
- ]
+ ],
);
- static::assertSame('foo-issuer', $metadata->get('issuer'));
- static::assertSame('bar', $metadata->get('foo'));
- static::assertNull($metadata->get('foo2'));
+ self::assertSame('foo-issuer', $metadata->get('issuer'));
+ self::assertSame('bar', $metadata->get('foo'));
+ self::assertNull($metadata->get('foo2'));
}
public function testHas(): void
@@ -68,19 +68,16 @@ public function testHas(): void
'foo-jwks',
[
'foo' => 'bar',
- ]
+ ],
);
- static::assertTrue($metadata->has('issuer'));
- static::assertTrue($metadata->has('foo'));
- static::assertFalse($metadata->has('foo2'));
+ self::assertTrue($metadata->has('issuer'));
+ self::assertTrue($metadata->has('foo'));
+ self::assertFalse($metadata->has('foo2'));
}
- /**
- * @param mixed $value
- */
#[DataProvider('getClaimGetterProvider')]
- public static function testGetters(string $claim, string $methodName, $value): void
+ public static function testGetters(string $claim, string $methodName, string|bool|array $value): void
{
$metadata = new IssuerMetadata(
'foo',
@@ -88,12 +85,12 @@ public static function testGetters(string $claim, string $methodName, $value): v
'foo',
[
$claim => $value,
- ]
+ ],
);
/** @var callable $callable */
$callable = [$metadata, $methodName];
- static::assertSame($value, $callable());
+ self::assertSame($value, $callable());
}
public static function getClaimGetterProvider(): array
diff --git a/tests/Issuer/Metadata/Provider/CachedProviderDecoratorTest.php b/tests/Issuer/Metadata/Provider/CachedProviderDecoratorTest.php
index f9013e1..61e78ad 100644
--- a/tests/Issuer/Metadata/Provider/CachedProviderDecoratorTest.php
+++ b/tests/Issuer/Metadata/Provider/CachedProviderDecoratorTest.php
@@ -27,7 +27,7 @@ public function testShouldPersistCachedData(): void
$provider = new CachedProviderDecorator(
$provider1->reveal(),
- $cache->reveal()
+ $cache->reveal(),
);
$cache->get(Argument::type('string'))
@@ -53,7 +53,7 @@ public function testShouldReuseCachedData(): void
$provider = new CachedProviderDecorator(
$provider1->reveal(),
- $cache->reveal()
+ $cache->reveal(),
);
$cache->get(Argument::type('string'))
diff --git a/tests/Issuer/Metadata/Provider/DiscoveryProviderTest.php b/tests/Issuer/Metadata/Provider/DiscoveryProviderTest.php
index e0dc12d..cad5760 100644
--- a/tests/Issuer/Metadata/Provider/DiscoveryProviderTest.php
+++ b/tests/Issuer/Metadata/Provider/DiscoveryProviderTest.php
@@ -18,13 +18,13 @@
class DiscoveryProviderTest extends TestCase
{
/** @var ClientInterface|ObjectProphecy */
- private $client;
+ private ObjectProphecy $client;
/** @var RequestFactoryInterface|ObjectProphecy */
- private $requestFactory;
+ private ObjectProphecy $requestFactory;
/** @var UriFactoryInterface|ObjectProphecy */
- private $uriFactory;
+ private ObjectProphecy $uriFactory;
protected function setUp(): void
{
@@ -79,7 +79,7 @@ public function testDiscovery(): void
$provider = new DiscoveryProvider(
$client->reveal(),
$requestFactory->reveal(),
- $uriFactory->reveal()
+ $uriFactory->reveal(),
);
$uri2 = $this->prophesize(UriInterface::class);
@@ -101,7 +101,7 @@ public function testDiscovery(): void
$this->prepareForDiscovery('https://example.com/.well-known/openid-configuration');
- static::assertSame(['issuer' => 'https://openid-uri'], $provider->discovery($uri));
+ self::assertSame(['issuer' => 'https://openid-uri'], $provider->discovery($uri));
}
public function testDiscoveryWithBaseUri(): void
@@ -115,7 +115,7 @@ public function testDiscoveryWithBaseUri(): void
$provider = new DiscoveryProvider(
$client->reveal(),
$requestFactory->reveal(),
- $uriFactory->reveal()
+ $uriFactory->reveal(),
);
$uri2 = $this->prophesize(UriInterface::class);
@@ -137,7 +137,7 @@ public function testDiscoveryWithBaseUri(): void
$this->prepareForDiscovery('https://example.com' . $baseUri . '/.well-known/openid-configuration', $baseUri);
- static::assertSame(['issuer' => 'https://openid-uri' . $baseUri], $provider->discovery($uri));
+ self::assertSame(['issuer' => 'https://openid-uri' . $baseUri], $provider->discovery($uri));
}
public function testDiscoveryWithWellKnown(): void
@@ -150,11 +150,11 @@ public function testDiscoveryWithWellKnown(): void
$provider = new DiscoveryProvider(
$client->reveal(),
$requestFactory->reveal(),
- $uriFactory->reveal()
+ $uriFactory->reveal(),
);
$this->prepareForDiscovery('https://example.com/.well-known/openid-configuration');
- static::assertSame(['issuer' => 'https://openid-uri'], $provider->discovery($uri));
+ self::assertSame(['issuer' => 'https://openid-uri'], $provider->discovery($uri));
}
}
diff --git a/tests/Issuer/Metadata/Provider/RemoteProviderTest.php b/tests/Issuer/Metadata/Provider/RemoteProviderTest.php
index 6683ff8..c1658e7 100644
--- a/tests/Issuer/Metadata/Provider/RemoteProviderTest.php
+++ b/tests/Issuer/Metadata/Provider/RemoteProviderTest.php
@@ -42,7 +42,7 @@ public function testShouldFallbackOnNextProvider(): void
$provider1->isAllowedUri($uri)->willReturn(true);
$provider2->isAllowedUri($uri)->willReturn(true);
- $provider1->fetch($uri)->shouldBeCalled()->willThrow(new RuntimeException('Error'));
+ $provider1->fetch($uri)->shouldBeCalled()->willThrow(new RuntimeException(\Error::class));
$provider2->fetch($uri)->shouldBeCalled()->willReturn([
'foo1' => 'bar1',
]);
diff --git a/tests/Issuer/Metadata/Provider/WebFingerProviderTest.php b/tests/Issuer/Metadata/Provider/WebFingerProviderTest.php
index 6cd6de8..f7189d7 100644
--- a/tests/Issuer/Metadata/Provider/WebFingerProviderTest.php
+++ b/tests/Issuer/Metadata/Provider/WebFingerProviderTest.php
@@ -32,7 +32,7 @@ public function testFetch(): void
$client->reveal(),
$requestFactory->reveal(),
$uriFactory->reveal(),
- $discoveryProvider->reveal()
+ $discoveryProvider->reveal(),
);
$webFingerUrl = $this->prophesize(UriInterface::class);
@@ -85,6 +85,6 @@ public function testFetch(): void
'issuer' => 'https://openid-uri',
]);
- static::assertSame(['issuer' => 'https://openid-uri'], $provider->fetch($resource));
+ self::assertSame(['issuer' => 'https://openid-uri'], $provider->fetch($resource));
}
}
diff --git a/tests/RequestObject/RequestObjectFactoryTest.php b/tests/RequestObject/RequestObjectFactoryTest.php
index 934c3ba..977acb8 100644
--- a/tests/RequestObject/RequestObjectFactoryTest.php
+++ b/tests/RequestObject/RequestObjectFactoryTest.php
@@ -31,41 +31,34 @@
class RequestObjectFactoryTest extends TestCase
{
- /** @var ObjectProphecy|AlgorithmManager */
- private $algorithmManager;
+ private ?AlgorithmManager $algorithmManager = null;
/** @var ObjectProphecy|JWSBuilder */
- private $jwsBuilder;
+ private ObjectProphecy $jwsBuilder;
/** @var ObjectProphecy|JWEBuilder */
- private $jweBuilder;
+ private ObjectProphecy $jweBuilder;
/** @var ObjectProphecy|JWSSerializer */
- private $jwsSerializer;
+ private ObjectProphecy $jwsSerializer;
/** @var ObjectProphecy|JWESerializer */
- private $jweSerializer;
+ private ObjectProphecy $jweSerializer;
/** @var ObjectProphecy|ClientInterface */
- private $client;
+ private ObjectProphecy $client;
/** @var ObjectProphecy|ClientMetadataInterface */
- private $clientMetadata;
+ private ObjectProphecy $clientMetadata;
/** @var ObjectProphecy|IssuerInterface */
- private $issuer;
-
- /** @var ObjectProphecy|IssuerMetadataInterface */
- private $issuerMetadata;
-
- /** @var RequestObjectFactory */
- private $factory;
+ private ObjectProphecy $issuer;
protected function setUp(): void
{
parent::setUp();
- $this->algorithmManager = $this->prophesize(AlgorithmManager::class);
+ $this->algorithmManager = null;
$this->jwsBuilder = $this->prophesize(JWSBuilder::class);
$this->jweBuilder = $this->prophesize(JWEBuilder::class);
$this->jwsSerializer = $this->prophesize(JWSSerializer::class);
@@ -86,14 +79,16 @@ protected function setUp(): void
$this->client = $client;
$this->clientMetadata = $clientMetadata;
$this->issuer = $issuer;
- $this->issuerMetadata = $issuerMetadata;
+ }
- $this->factory = new RequestObjectFactory(
- $this->algorithmManager->reveal(),
+ private function getSUT(): RequestObjectFactory
+ {
+ return new RequestObjectFactory(
+ $this->algorithmManager ?? new AlgorithmManager([]),
$this->jwsBuilder->reveal(),
$this->jweBuilder->reveal(),
$this->jwsSerializer->reveal(),
- $this->jweSerializer->reveal()
+ $this->jweSerializer->reveal(),
);
}
@@ -109,7 +104,7 @@ public function testCreateWithNoSignAndNoEnc(): void
$this->clientMetadata->get('request_object_encryption_alg')->willReturn(null);
$this->clientMetadata->get('request_object_encryption_enc')->willReturn(null);
- $token = $this->factory->create($this->client->reveal(), ['foo' => 'bar']);
+ $token = $this->getSUT()->create($this->client->reveal(), ['foo' => 'bar']);
[$header, $payload] = explode('.', $token);
$header = json_decode(base64url_decode($header), true);
@@ -137,8 +132,8 @@ public function testCreateWithSymSignAndNoEnc(): void
$this->jwsBuilder->withPayload(Argument::type('string'))->willReturn($this->jwsBuilder->reveal());
$this->jwsBuilder->addSignature(Argument::allOf(
Argument::type(JWK::class),
- Argument::that(fn(JWK $jwk) => $jwk->get('k') === base64url_encode('client-secret')),
- Argument::that(fn(JWK $jwk) => $jwk->get('kty') === 'oct')
+ Argument::that(fn(JWK $jwk): bool => $jwk->get('k') === base64url_encode('client-secret')),
+ Argument::that(fn(JWK $jwk): bool => $jwk->get('kty') === 'oct'),
), [
'alg' => 'HS256',
'typ' => 'JWT',
@@ -149,7 +144,7 @@ public function testCreateWithSymSignAndNoEnc(): void
$this->jwsSerializer->serialize($jws->reveal(), 0)
->willReturn('token');
- $token = $this->factory->create($this->client->reveal(), ['foo' => 'bar']);
+ $token = $this->getSUT()->create($this->client->reveal(), ['foo' => 'bar']);
self::assertSame('token', $token);
}
@@ -160,8 +155,7 @@ public function testCreateWithAsymSignAndNoEnc(): void
$this->clientMetadata->get('request_object_encryption_alg')->willReturn(null);
$this->clientMetadata->get('request_object_encryption_enc')->willReturn(null);
- $alg = new RS256();
- $this->algorithmManager->get('RS256')->willReturn($alg);
+ $this->algorithmManager = new AlgorithmManager([new RS256()]);
$jwksProvider = $this->prophesize(JwksProviderInterface::class);
$jwksProvider->getJwks()->willReturn([
@@ -176,7 +170,7 @@ public function testCreateWithAsymSignAndNoEnc(): void
$this->jwsBuilder->create()->willReturn($this->jwsBuilder->reveal());
$this->jwsBuilder->withPayload(Argument::type('string'))->willReturn($this->jwsBuilder->reveal());
- $this->jwsBuilder->addSignature(Argument::that(fn(JWK $key) => 'some-key-id' === $key->get('kid')), [
+ $this->jwsBuilder->addSignature(Argument::that(fn(JWK $key): bool => 'some-key-id' === $key->get('kid')), [
'alg' => 'RS256',
'typ' => 'JWT',
'kid' => 'some-key-id',
@@ -187,7 +181,7 @@ public function testCreateWithAsymSignAndNoEnc(): void
$this->jwsSerializer->serialize($jws->reveal(), 0)
->willReturn('token');
- $token = $this->factory->create($this->client->reveal(), ['foo' => 'bar']);
+ $token = $this->getSUT()->create($this->client->reveal(), ['foo' => 'bar']);
self::assertSame('token', $token);
}
@@ -209,8 +203,8 @@ public function testCreateWithNoSignAndSymEnc(): void
])->willReturn($this->jweBuilder->reveal());
$this->jweBuilder->addRecipient(Argument::allOf(
Argument::type(JWK::class),
- Argument::that(fn(JWK $jwk) => $jwk->get('k') === base64url_encode('client-secret')),
- Argument::that(fn(JWK $jwk) => $jwk->get('kty') === 'oct')
+ Argument::that(fn(JWK $jwk): bool => $jwk->get('k') === base64url_encode('client-secret')),
+ Argument::that(fn(JWK $jwk): bool => $jwk->get('kty') === 'oct'),
))
->willReturn($this->jweBuilder->reveal());
$this->jweBuilder->build()->willReturn($jwe->reveal());
@@ -218,7 +212,7 @@ public function testCreateWithNoSignAndSymEnc(): void
$this->jweSerializer->serialize($jwe->reveal(), 0)
->willReturn('token');
- $token = $this->factory->create($this->client->reveal(), ['foo' => 'bar']);
+ $token = $this->getSUT()->create($this->client->reveal(), ['foo' => 'bar']);
self::assertSame('token', $token);
}
@@ -229,8 +223,7 @@ public function testCreateWithNoSignAndAsymEnc(): void
$this->clientMetadata->get('request_object_encryption_alg')->willReturn('RSA-OAEP');
$this->clientMetadata->get('request_object_encryption_enc')->willReturn('ASY2');
- $alg = new RSAOAEP();
- $this->algorithmManager->get('RSA-OAEP')->willReturn($alg);
+ $this->algorithmManager = new AlgorithmManager([new RSAOAEP()]);
$jwksProvider = $this->prophesize(JwksProviderInterface::class);
$jwksProvider->getJwks()->willReturn([
@@ -250,14 +243,14 @@ public function testCreateWithNoSignAndAsymEnc(): void
'cty' => 'JWT',
'kid' => 'some-key-id',
])->willReturn($this->jweBuilder->reveal());
- $this->jweBuilder->addRecipient(Argument::that(fn(JWK $key) => 'some-key-id' === $key->get('kid')))
+ $this->jweBuilder->addRecipient(Argument::that(fn(JWK $key): bool => 'some-key-id' === $key->get('kid')))
->willReturn($this->jweBuilder->reveal());
$this->jweBuilder->build()->willReturn($jwe->reveal());
$this->jweSerializer->serialize($jwe->reveal(), 0)
->willReturn('token');
- $token = $this->factory->create($this->client->reveal(), ['foo' => 'bar']);
+ $token = $this->getSUT()->create($this->client->reveal(), ['foo' => 'bar']);
self::assertSame('token', $token);
}
diff --git a/tests/Service/AuthorizationServiceTest.php b/tests/Service/AuthorizationServiceTest.php
index cbde2fe..91cde81 100644
--- a/tests/Service/AuthorizationServiceTest.php
+++ b/tests/Service/AuthorizationServiceTest.php
@@ -39,7 +39,7 @@ public function testGetAuthorizationUri(): void
$client->reveal(),
$requestFactory->reveal(),
$idTokenVerifierBuilder->reveal(),
- $tokenVerifierBuilder->reveal()
+ $tokenVerifierBuilder->reveal(),
);
$openIdClient = $this->prophesize(OpenIDClient::class);
@@ -56,9 +56,9 @@ public function testGetAuthorizationUri(): void
$issuer->getMetadata()->willReturn($issuerMetadata);
$issuerMetadata->getAuthorizationEndpoint()->willReturn('https://foo-endpoint');
- static::assertSame(
+ self::assertSame(
'https://foo-endpoint?client_id=clientId&scope=openid&response_type=code&redirect_uri=redirect_uri_1',
- $service->getAuthorizationUri($openIdClient->reveal())
+ $service->getAuthorizationUri($openIdClient->reveal()),
);
}
@@ -75,7 +75,7 @@ public function testGetAuthorizationUriWithParameters(): void
$client->reveal(),
$requestFactory->reveal(),
$idTokenVerifierBuilder->reveal(),
- $tokenVerifierBuilder->reveal()
+ $tokenVerifierBuilder->reveal(),
);
$openIdClient = $this->prophesize(OpenIDClient::class);
@@ -92,9 +92,9 @@ public function testGetAuthorizationUriWithParameters(): void
$issuer->getMetadata()->willReturn($issuerMetadata);
$issuerMetadata->getAuthorizationEndpoint()->willReturn('https://foo-endpoint?param=value');
- static::assertSame(
+ self::assertSame(
'https://foo-endpoint?param=value&client_id=clientId&scope=openid&response_type=code&redirect_uri=redirect_uri_1',
- $service->getAuthorizationUri($openIdClient->reveal())
+ $service->getAuthorizationUri($openIdClient->reveal()),
);
}
@@ -111,7 +111,7 @@ public function testFetchTokenFromCode(): void
$client->reveal(),
$requestFactory->reveal(),
$idTokenVerifierBuilder->reveal(),
- $tokenVerifierBuilder->reveal()
+ $tokenVerifierBuilder->reveal(),
);
$openIdClient = $this->prophesize(OpenIDClient::class);
@@ -149,7 +149,7 @@ public function testFetchTokenFromCode(): void
$authMethod->createRequest(
$tokenRequest1->reveal(),
$openIdClient->reveal(),
- $claims
+ $claims,
)
->willReturn($tokenRequest2->reveal());
@@ -162,7 +162,7 @@ public function testFetchTokenFromCode(): void
$tokenSet = $this->prophesize(TokenSetInterface::class);
$tokenSetFactory->fromArray(['foo' => 'bar'])->willReturn($tokenSet->reveal());
- static::assertSame($tokenSet->reveal(), $service->grant($openIdClient->reveal(), $claims));
+ self::assertSame($tokenSet->reveal(), $service->grant($openIdClient->reveal(), $claims));
}
public function testCallbackShouldNotProcessUnknownParams(): void
@@ -178,7 +178,7 @@ public function testCallbackShouldNotProcessUnknownParams(): void
$client->reveal(),
$requestFactory->reveal(),
$idTokenVerifierBuilder->reveal(),
- $tokenVerifierBuilder->reveal()
+ $tokenVerifierBuilder->reveal(),
);
$issuer = $this->prophesize(IssuerInterface::class);
@@ -191,7 +191,7 @@ public function testCallbackShouldNotProcessUnknownParams(): void
]);
$client = new Client(
$issuer->reveal(),
- $clientMetadata
+ $clientMetadata,
);
$tokenSet = $this->prophesize(TokenSetInterface::class);
diff --git a/tests/Session/AuthSessionTest.php b/tests/Session/AuthSessionTest.php
index f512ef5..9955bba 100644
--- a/tests/Session/AuthSessionTest.php
+++ b/tests/Session/AuthSessionTest.php
@@ -16,44 +16,44 @@ public function testSetState(): void
{
$session = new AuthSession();
- static::assertNull($session->getState());
+ self::assertNull($session->getState());
$session->setState('foo');
- static::assertSame('foo', $session->getState());
+ self::assertSame('foo', $session->getState());
}
public function testSetNonce(): void
{
$session = new AuthSession();
- static::assertNull($session->getNonce());
+ self::assertNull($session->getNonce());
$session->setNonce('foo');
- static::assertSame('foo', $session->getNonce());
+ self::assertSame('foo', $session->getNonce());
}
public function testSetCodeVerifier(): void
{
$session = new AuthSession();
- static::assertNull($session->getCodeVerifier());
+ self::assertNull($session->getCodeVerifier());
$session->setCodeVerifier('foo');
- static::assertSame('foo', $session->getCodeVerifier());
+ self::assertSame('foo', $session->getCodeVerifier());
}
public function testSetCustoms(): void
{
$session = new AuthSession();
- static::assertSame([], $session->getCustoms());
+ self::assertSame([], $session->getCustoms());
$session->setCustoms(['foo' => 'bar']);
- static::assertSame(['foo' => 'bar'], $session->getCustoms());
+ self::assertSame(['foo' => 'bar'], $session->getCustoms());
}
public function testFromArray(): void
@@ -63,8 +63,8 @@ public function testFromArray(): void
'nonce' => 'bar',
]);
- static::assertSame('foo', $session->getState());
- static::assertSame('bar', $session->getNonce());
+ self::assertSame('foo', $session->getState());
+ self::assertSame('bar', $session->getNonce());
}
public function testJsonSerializer(): void
@@ -74,7 +74,7 @@ public function testJsonSerializer(): void
'nonce' => 'bar',
]);
- static::assertSame([
+ self::assertSame([
'state' => 'foo',
'nonce' => 'bar',
], json_decode(json_encode($session), true));
diff --git a/tests/Token/TokenSetTest.php b/tests/Token/TokenSetTest.php
index e1ff29e..ce1ef9c 100644
--- a/tests/Token/TokenSetTest.php
+++ b/tests/Token/TokenSetTest.php
@@ -12,72 +12,72 @@ class TokenSetTest extends TestCase
public function testGetTokenType(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getTokenType());
+ self::assertNull($authResponse->getTokenType());
$authResponse = TokenSet::fromParams(['token_type' => 'foo']);
- static::assertSame('foo', $authResponse->getTokenType());
+ self::assertSame('foo', $authResponse->getTokenType());
}
public function testGetCode(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getCode());
+ self::assertNull($authResponse->getCode());
$authResponse = TokenSet::fromParams(['code' => 'foo']);
- static::assertSame('foo', $authResponse->getCode());
+ self::assertSame('foo', $authResponse->getCode());
}
public function testGetExpiresIn(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getExpiresIn());
+ self::assertNull($authResponse->getExpiresIn());
$authResponse = TokenSet::fromParams(['expires_in' => '3']);
- static::assertSame(3, $authResponse->getExpiresIn());
+ self::assertSame(3, $authResponse->getExpiresIn());
}
public function testGetIdToken(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getIdToken());
+ self::assertNull($authResponse->getIdToken());
$authResponse = TokenSet::fromParams(['id_token' => 'foo']);
- static::assertSame('foo', $authResponse->getIdToken());
+ self::assertSame('foo', $authResponse->getIdToken());
}
public function testGetRefreshToken(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getRefreshToken());
+ self::assertNull($authResponse->getRefreshToken());
$authResponse = TokenSet::fromParams(['refresh_token' => 'foo']);
- static::assertSame('foo', $authResponse->getRefreshToken());
+ self::assertSame('foo', $authResponse->getRefreshToken());
}
public function testGetCodeVerifier(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getCodeVerifier());
+ self::assertNull($authResponse->getCodeVerifier());
$authResponse = TokenSet::fromParams(['code_verifier' => 'foo']);
- static::assertSame('foo', $authResponse->getCodeVerifier());
+ self::assertSame('foo', $authResponse->getCodeVerifier());
}
public function testGetState(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getState());
+ self::assertNull($authResponse->getState());
$authResponse = TokenSet::fromParams(['state' => 'foo']);
- static::assertSame('foo', $authResponse->getState());
+ self::assertSame('foo', $authResponse->getState());
}
public function testGetAccessToken(): void
{
$authResponse = TokenSet::fromParams([]);
- static::assertNull($authResponse->getAccessToken());
+ self::assertNull($authResponse->getAccessToken());
$authResponse = TokenSet::fromParams(['access_token' => 'foo']);
- static::assertSame('foo', $authResponse->getAccessToken());
+ self::assertSame('foo', $authResponse->getAccessToken());
}
}
diff --git a/tests/functions/Base64UrlDecodeTest.php b/tests/functions/Base64UrlDecodeTest.php
index 25ca4b3..db44365 100644
--- a/tests/functions/Base64UrlDecodeTest.php
+++ b/tests/functions/Base64UrlDecodeTest.php
@@ -12,7 +12,7 @@ class Base64UrlDecodeTest extends TestCase
{
public function testBase64UrlEncode(): void
{
- static::assertSame('foo', base64url_decode('Zm9v'));
- static::assertSame('aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789', base64url_decode('YUJjRGVGZ0hpSmtMbU5vUHFSc1R1VndYeVowMTIzNDU2Nzg5'));
+ self::assertSame('foo', base64url_decode('Zm9v'));
+ self::assertSame('aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789', base64url_decode('YUJjRGVGZ0hpSmtMbU5vUHFSc1R1VndYeVowMTIzNDU2Nzg5'));
}
}
diff --git a/tests/functions/Base64UrlEncodeTest.php b/tests/functions/Base64UrlEncodeTest.php
index c05de83..084085d 100644
--- a/tests/functions/Base64UrlEncodeTest.php
+++ b/tests/functions/Base64UrlEncodeTest.php
@@ -12,7 +12,7 @@ class Base64UrlEncodeTest extends TestCase
{
public function testBase64UrlEncode(): void
{
- static::assertSame('Zm9v', base64url_encode('foo'));
- static::assertSame('YUJjRGVGZ0hpSmtMbU5vUHFSc1R1VndYeVowMTIzNDU2Nzg5', base64url_encode('aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789'));
+ self::assertSame('Zm9v', base64url_encode('foo'));
+ self::assertSame('YUJjRGVGZ0hpSmtMbU5vUHFSc1R1VndYeVowMTIzNDU2Nzg5', base64url_encode('aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789'));
}
}
diff --git a/tests/functions/CheckServerResponseTest.php b/tests/functions/CheckServerResponseTest.php
index 6975c5f..5b7f865 100644
--- a/tests/functions/CheckServerResponseTest.php
+++ b/tests/functions/CheckServerResponseTest.php
@@ -18,7 +18,7 @@ public function testErrorStatusCode(): void
{
$this->expectException(RemoteException::class);
$this->expectExceptionCode(400);
- $this->expectExceptionMessage('Error');
+ $this->expectExceptionMessage(\Error::class);
$response = $this->prophesize(ResponseInterface::class);
$stream = $this->prophesize(StreamInterface::class);
@@ -26,7 +26,7 @@ public function testErrorStatusCode(): void
$stream->__toString()->willReturn('');
$response->getBody()->willReturn($stream->reveal());
$response->getStatusCode()->willReturn(400);
- $response->getReasonPhrase()->willReturn('Error');
+ $response->getReasonPhrase()->willReturn(\Error::class);
check_server_response($response->reveal());
}
diff --git a/tests/functions/DerivedKeyTest.php b/tests/functions/DerivedKeyTest.php
index e3c10b6..6150dce 100644
--- a/tests/functions/DerivedKeyTest.php
+++ b/tests/functions/DerivedKeyTest.php
@@ -15,8 +15,8 @@ class DerivedKeyTest extends TestCase
public function testDerivedKey(string $secret, int $length, string $expected): void
{
$jwk = derived_key($secret, $length);
- static::assertSame('oct', $jwk->get('kty'));
- static::assertSame($expected, $jwk->get('k'));
+ self::assertSame('oct', $jwk->get('kty'));
+ self::assertSame($expected, $jwk->get('k'));
}
public static function valuesProvider(): array
diff --git a/tests/functions/JoseSecretKeyTest.php b/tests/functions/JoseSecretKeyTest.php
index 02f4899..00fb238 100644
--- a/tests/functions/JoseSecretKeyTest.php
+++ b/tests/functions/JoseSecretKeyTest.php
@@ -15,8 +15,8 @@ class JoseSecretKeyTest extends TestCase
public function testJoseSecretKey(string $secret, string $alg, string $expected): void
{
$jwk = jose_secret_key($secret, $alg);
- static::assertSame('oct', $jwk->get('kty'));
- static::assertSame($expected, $jwk->get('k'));
+ self::assertSame('oct', $jwk->get('kty'));
+ self::assertSame($expected, $jwk->get('k'));
}
public static function valuesProvider(): array
diff --git a/tests/functions/ParseCallbackParamsTest.php b/tests/functions/ParseCallbackParamsTest.php
index 1b32555..5768ab2 100644
--- a/tests/functions/ParseCallbackParamsTest.php
+++ b/tests/functions/ParseCallbackParamsTest.php
@@ -28,7 +28,7 @@ public function testWithPost(): void
$params = parse_callback_params($serverRequest->reveal());
- static::assertSame($expected, $params);
+ self::assertSame($expected, $params);
}
public function testWithGetFragment(): void
@@ -45,7 +45,7 @@ public function testWithGetFragment(): void
$params = parse_callback_params($serverRequest->reveal());
- static::assertSame($expected, $params);
+ self::assertSame($expected, $params);
}
public function testWithGetQuery(): void
@@ -63,7 +63,7 @@ public function testWithGetQuery(): void
$params = parse_callback_params($serverRequest->reveal());
- static::assertSame($expected, $params);
+ self::assertSame($expected, $params);
}
public function testWithInvalidMethod(): void
diff --git a/tests/functions/ParseMetadataResponseTest.php b/tests/functions/ParseMetadataResponseTest.php
index 5d0a3fd..1d0aedb 100644
--- a/tests/functions/ParseMetadataResponseTest.php
+++ b/tests/functions/ParseMetadataResponseTest.php
@@ -26,7 +26,7 @@ public function testHappyPath(): void
$data = parse_metadata_response($response->reveal());
- static::assertSame(['foo' => 'bar'], $data);
+ self::assertSame(['foo' => 'bar'], $data);
}
public function testWithInvalidContent(): void
@@ -48,7 +48,7 @@ public function testErrorStatusCode(): void
{
$this->expectException(RemoteException::class);
$this->expectExceptionCode(400);
- $this->expectExceptionMessage('Error');
+ $this->expectExceptionMessage(\Error::class);
$response = $this->prophesize(ResponseInterface::class);
$stream = $this->prophesize(StreamInterface::class);
@@ -56,7 +56,7 @@ public function testErrorStatusCode(): void
$stream->__toString()->willReturn('');
$response->getBody()->willReturn($stream->reveal());
$response->getStatusCode()->willReturn(400);
- $response->getReasonPhrase()->willReturn('Error');
+ $response->getReasonPhrase()->willReturn(\Error::class);
parse_metadata_response($response->reveal());
}