From f2c8729630c418d0b7bf2b7cc6bd10bcf246ca45 Mon Sep 17 00:00:00 2001 From: Tim Kelty Date: Tue, 10 Nov 2026 18:37:59 +0000 Subject: [PATCH 1/5] Rebuild the 5.x baseline for Craft 6 beta - Move to the CraftCms\Cloud namespace - Run queued jobs with bref/laravel-bridge's QueueHandler - Run platform commands with a Guzzle-based CommandSqsHandler - Give the Valkey connection 1-second timeouts - Force stderr logging and database sessions on Cloud - Read CRAFT_CLOUD_* through one Cloud class - Test with Orchestra Testbench booting Craft - Release with release-it, matching 3.x Amp-Thread-ID: https://ampcode.com/threads/T-5e08134f-736d-4bda-8b28-d21654023ef7 Co-authored-by: Amp --- .gitattributes | 1 + .release-it.json | 14 + .releaserc.yaml | 8 - README.md | 41 +- composer.json | 17 +- composer.lock | 5561 +++++++++++++++----- phpunit.xml.dist | 6 - src/Cloud.php | 30 + src/CloudServiceProvider.php | 59 +- src/Lambda/CommandSqsHandler.php | 123 + src/bref/craft/CraftCliEntrypoint.php | 61 - src/bref/curl/CurlClient.php | 39 - src/bref/curl/CurlResponse.php | 19 - src/bref/handlers/CommandHandler.php | 32 - src/bref/handlers/CommandSqsHandler.php | 97 - src/bref/handlers/JobSqsHandler.php | 37 - src/bref/handlers/command-cmd.php | 7 - src/bref/handlers/command-sqs-cmd.php | 6 +- src/bref/handlers/job-sqs-cmd.php | 11 +- tests/Feature/CloudServiceProviderTest.php | 115 +- tests/Feature/CommandSqsHandlerTest.php | 93 + tests/Pest.php | 4 +- tests/Support/DnsRecords.php | 7 +- tests/Support/functions.php | 7 +- tests/TestCase.php | 154 +- 25 files changed, 4654 insertions(+), 1895 deletions(-) create mode 100644 .release-it.json delete mode 100644 .releaserc.yaml create mode 100644 src/Cloud.php create mode 100644 src/Lambda/CommandSqsHandler.php delete mode 100644 src/bref/craft/CraftCliEntrypoint.php delete mode 100644 src/bref/curl/CurlClient.php delete mode 100644 src/bref/curl/CurlResponse.php delete mode 100644 src/bref/handlers/CommandHandler.php delete mode 100644 src/bref/handlers/CommandSqsHandler.php delete mode 100644 src/bref/handlers/JobSqsHandler.php delete mode 100644 src/bref/handlers/command-cmd.php create mode 100644 tests/Feature/CommandSqsHandlerTest.php diff --git a/.gitattributes b/.gitattributes index 78bdd415..3fb5bfac 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,6 +3,7 @@ /.gitattributes export-ignore /.gitignore export-ignore +/.release-it.json export-ignore /composer.lock export-ignore /mago.toml export-ignore /package-lock.json export-ignore diff --git a/.release-it.json b/.release-it.json new file mode 100644 index 00000000..5fe6925b --- /dev/null +++ b/.release-it.json @@ -0,0 +1,14 @@ +{ + "npm": false, + "git": { + "commit": false, + "tag": false, + "push": false, + "requireBranch": ["5.x"] + }, + "github": { + "release": true, + "autoGenerate": true, + "draft": true + } +} diff --git a/.releaserc.yaml b/.releaserc.yaml deleted file mode 100644 index 2f51b28b..00000000 --- a/.releaserc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -branches: - - '5.x' -tagFormat: '${version}' -plugins: - - '@semantic-release/commit-analyzer' - - '@semantic-release/release-notes-generator' - - '@semantic-release/changelog' - - '@semantic-release/github' diff --git a/README.md b/README.md index 42b64b18..d40a771e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,40 @@ -# Craft Cloud Package +# Craft Cloud -Run Craft CMS on Craft Cloud. +Runs Craft CMS 6 on [Craft Cloud](https://craftcms.com/cloud). + +```bash +composer require craftcms/cloud +``` + +Laravel discovers `CraftCms\Cloud\CloudServiceProvider` automatically. Outside Craft Cloud it changes nothing, so the same project runs locally as usual. + +## What it configures on Craft Cloud + +Craft Cloud is detected from `CRAFT_CLOUD` or `AWS_LAMBDA_RUNTIME_API`. When either is set, the provider: + +- **Queue:** uses the environment's SQS queue (`CRAFT_CLOUD_SQS_URL`) as the default connection, dispatching after commit. +- **Cache:** uses a failover store: Valkey (found with the `CRAFT_CLOUD_CACHE_SRV` SRV record, with 1-second timeouts), then the database, then memory. +- **Logging:** sends the default channel to stderr, which is all Lambda collects. +- **Sessions:** replaces `file` or `cookie` sessions with `database` sessions. Other drivers are left alone. + +## Lambda handlers + +The Cloud platform runs these files as Lambda handlers, so their paths must not change: + +- `src/bref/handlers/job-sqs-cmd.php` runs queued jobs in-process with bref/laravel-bridge. +- `src/bref/handlers/command-sqs-cmd.php` runs Craft console commands sent by the platform and posts their output back. + +## Development + +```bash +composer install +composer test # Pest, with Orchestra Testbench booting Craft +composer lint # Mago +composer fix +``` + +Releases are tagged by hand with [release-it](https://github.com/release-it/release-it), which drafts a GitHub release: + +```bash +npx release-it 5.0.0-beta.1 +``` diff --git a/composer.json b/composer.json index be6f1aa3..50a18c5a 100644 --- a/composer.json +++ b/composer.json @@ -5,16 +5,17 @@ "license": "proprietary", "type": "library", "require": { - "ext-curl": "*", "bref/bref": "^3", "bref/extra-php-extensions": "^3", - "bref/laravel-bridge": "^3.0", - "craftcms/cms": "^6", - "symfony/process": "^7.4.5 || ^8.0.5" + "bref/laravel-bridge": "^3.1", + "craftcms/cms": "^6.0.0-beta.1", + "symfony/process": "^7.4.5 || ^8.0.5", + "guzzlehttp/guzzle": "^7.8" }, "require-dev": { "carthage-software/mago": "^1.1.0", - "pestphp/pest": "^4.0" + "pestphp/pest": "^4.0", + "orchestra/testbench": "^11.0" }, "scripts": { "lint": "mago lint --minimum-fail-level=warning && mago format --check", @@ -26,12 +27,12 @@ }, "autoload": { "psr-4": { - "craft\\cloud\\": "src/" + "CraftCms\\Cloud\\": "src/" } }, "autoload-dev": { "psr-4": { - "craft\\cloud\\tests\\": "tests/" + "CraftCms\\Cloud\\Tests\\": "tests/" }, "files": [ "tests/Support/functions.php" @@ -48,7 +49,7 @@ "extra": { "laravel": { "providers": [ - "craft\\cloud\\CloudServiceProvider" + "CraftCms\\Cloud\\CloudServiceProvider" ] } } diff --git a/composer.lock b/composer.lock index a77b7c32..9d87aade 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ac3769b93490f33743c2d11be91ed70f", + "content-hash": "371cadc2f29074674aeafc34289a79c8", "packages": [ { "name": "aws/aws-crt-php", @@ -58,20 +58,21 @@ "issues": "https://github.com/awslabs/aws-crt-php/issues", "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" }, - "time": "2024-10-18T22:15:13+00:00" + "time": "2024-10-18T22:15:13+00:00", + "published-time": "2024-10-23T18:30:53+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.380.3", + "version": "3.403.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "16fdf619fdcee1d58e0cb4eb642487041a144cba" + "reference": "20e883c6952986c3de686515a99b63caeb8dfafe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/16fdf619fdcee1d58e0cb4eb642487041a144cba", - "reference": "16fdf619fdcee1d58e0cb4eb642487041a144cba", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/20e883c6952986c3de686515a99b63caeb8dfafe", + "reference": "20e883c6952986c3de686515a99b63caeb8dfafe", "shasum": "" }, "require": { @@ -79,11 +80,11 @@ "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/promises": "^2.0", - "guzzlehttp/psr7": "^2.4.5", - "mtdowling/jmespath.php": "^2.8.0", - "php": ">=8.1", + "guzzlehttp/guzzle": "^7.8.2 || ^8.0", + "guzzlehttp/promises": "^2.0.3 || ^3.0", + "guzzlehttp/psr7": "^2.6.3 || ^3.0", + "mtdowling/jmespath.php": "^2.9.1", + "php": ">=8.2", "psr/http-message": "^1.0 || ^2.0", "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0" }, @@ -153,34 +154,36 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.380.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.403.2" }, - "time": "2026-05-07T18:29:36+00:00" + "time": "2026-11-09T19:36:28+00:00", + "published-time": "2026-11-09T19:45:32+00:00" }, { "name": "bacon/bacon-qr-code", - "version": "2.0.8", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", - "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2", + "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2", "shasum": "" }, "require": { "dasprid/enum": "^1.0.3", "ext-iconv": "*", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "phly/keep-a-changelog": "^2.1", - "phpunit/phpunit": "^7 | ^8 | ^9", - "spatie/phpunit-snapshot-assertions": "^4.2.9", - "squizlabs/php_codesniffer": "^3.4" + "phly/keep-a-changelog": "^2.12", + "phpunit/phpunit": "^10.5.11 || ^11.0.4", + "spatie/phpunit-snapshot-assertions": "^5.1.5", + "spatie/pixelmatch-php": "^1.2.0", + "squizlabs/php_codesniffer": "^3.9" }, "suggest": { "ext-imagick": "to generate QR code images" @@ -207,36 +210,36 @@ "homepage": "https://github.com/Bacon/BaconQrCode", "support": { "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.1.1" }, - "time": "2022-12-07T17:46:57+00:00" + "time": "2026-04-05T21:06:35+00:00", + "published-time": "2026-04-05T21:07:28+00:00" }, { "name": "bref/bref", - "version": "3.0.4", + "version": "3.0.15", "source": { "type": "git", "url": "https://github.com/brefphp/bref.git", - "reference": "08bd8cbd4f115a3ff17a9355abbcc72dc4e9c85a" + "reference": "18776f2f9bcf6be47736a33b9dfa301085ee827e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brefphp/bref/zipball/08bd8cbd4f115a3ff17a9355abbcc72dc4e9c85a", - "reference": "08bd8cbd4f115a3ff17a9355abbcc72dc4e9c85a", + "url": "https://api.github.com/repos/brefphp/bref/zipball/18776f2f9bcf6be47736a33b9dfa301085ee827e", + "reference": "18776f2f9bcf6be47736a33b9dfa301085ee827e", "shasum": "" }, "require": { "crwlr/query-string": "^1.0.3", "ext-curl": "*", - "ext-json": "*", - "hollodotme/fast-cgi-client": "^3.0.1", + "hollodotme/fast-cgi-client": "^4.0", "nyholm/psr7": "^1.4.1", "php": ">=8.2", "psr/container": "^1.0|^2.0", "psr/http-message": "^1.0|^2.0", "psr/http-server-handler": "^1.0", - "riverline/multipart-parser": "^2.1.2", - "symfony/process": "^6.4|^7.0|^8.0" + "riverline/multipart-parser": "^2.3", + "symfony/process": "^5.4|^6.4|^7.0|^8.0" }, "require-dev": { "async-aws/core": "^1.0", @@ -248,8 +251,8 @@ "guzzlehttp/guzzle": "^7.5", "phpstan/phpstan": "^2", "phpunit/phpunit": "^10.1", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/console": "^5.4|^6.4|^7.0|^8.0", + "symfony/yaml": "^5.4|^6.4|^7.0|^8.0" }, "bin": [ "src/bref-local" @@ -275,7 +278,7 @@ ], "support": { "issues": "https://github.com/brefphp/bref/issues", - "source": "https://github.com/brefphp/bref/tree/3.0.4" + "source": "https://github.com/brefphp/bref/tree/3.0.15" }, "funding": [ { @@ -287,20 +290,21 @@ "type": "github" } ], - "time": "2026-05-07T13:57:38+00:00" + "time": "2026-11-05T16:08:15+00:00", + "published-time": "2026-11-05T16:14:17+00:00" }, { "name": "bref/extra-php-extensions", - "version": "3.0.7", + "version": "3.0.13", "source": { "type": "git", "url": "https://github.com/brefphp/extra-php-extensions.git", - "reference": "4348efda77dbe502da94759eb03d6b34e1fd499e" + "reference": "4ef259132dfa1dbe26bcb890fe539a24903b3119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brefphp/extra-php-extensions/zipball/4348efda77dbe502da94759eb03d6b34e1fd499e", - "reference": "4348efda77dbe502da94759eb03d6b34e1fd499e", + "url": "https://api.github.com/repos/brefphp/extra-php-extensions/zipball/4ef259132dfa1dbe26bcb890fe539a24903b3119", + "reference": "4ef259132dfa1dbe26bcb890fe539a24903b3119", "shasum": "" }, "conflict": { @@ -331,7 +335,7 @@ "description": "Extra PHP extensions for your lambda application.", "support": { "issues": "https://github.com/brefphp/extra-php-extensions/issues", - "source": "https://github.com/brefphp/extra-php-extensions/tree/3.0.7" + "source": "https://github.com/brefphp/extra-php-extensions/tree/3.0.13" }, "funding": [ { @@ -347,27 +351,28 @@ "type": "github" } ], - "time": "2026-04-23T09:06:47+00:00" + "time": "2026-09-18T09:37:31+00:00", + "published-time": "2026-09-18T09:37:40+00:00" }, { "name": "bref/laravel-bridge", - "version": "3.0.4", + "version": "3.1.6", "source": { "type": "git", "url": "https://github.com/brefphp/laravel-bridge.git", - "reference": "30569eabb2a07bb0444898d31b2230ad6426a6cb" + "reference": "4cec0e7d8d804d8cdd5af80259a275edd53abb23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brefphp/laravel-bridge/zipball/30569eabb2a07bb0444898d31b2230ad6426a6cb", - "reference": "30569eabb2a07bb0444898d31b2230ad6426a6cb", + "url": "https://api.github.com/repos/brefphp/laravel-bridge/zipball/4cec0e7d8d804d8cdd5af80259a275edd53abb23", + "reference": "4cec0e7d8d804d8cdd5af80259a275edd53abb23", "shasum": "" }, "require": { "aws/aws-sdk-php": "^3.222", - "bref/bref": "^3.0.2", + "bref/bref": "^3.0.13", "bref/laravel-health-check": "^1", - "bref/monolog-bridge": "^1.0", + "bref/monolog-bridge": "^1.0 || ^2.0", "illuminate/container": "^10.0 || ^11.0 || ^12.0 || ^13.0", "illuminate/contracts": "^10.0 || ^11.0 || ^12.0 || ^13.0", "illuminate/http": "^10.0 || ^11.0 || ^12.0 || ^13.0", @@ -376,10 +381,11 @@ "laravel/octane": "^1.2 || ^2.0", "laravel/tinker": "^2.0 || ^3.0", "php": "^8.2", - "riverline/multipart-parser": "^2.0" + "riverline/multipart-parser": "^2.3" }, "require-dev": { "larastan/larastan": "^2.11 || ^3", + "league/flysystem-aws-s3-v3": "^3.0", "orchestra/testbench": "^8.0 || ^9.0 || ^10.0 || ^11.0", "php-parallel-lint/php-parallel-lint": "^1.3", "phpunit/phpunit": "^9.5 || ^10 || ^11 || ^12.5.12", @@ -416,9 +422,10 @@ ], "support": { "issues": "https://github.com/brefphp/laravel-bridge/issues", - "source": "https://github.com/brefphp/laravel-bridge/tree/3.0.4" + "source": "https://github.com/brefphp/laravel-bridge/tree/3.1.6" }, - "time": "2026-04-21T17:52:19+00:00" + "time": "2026-11-05T16:08:07+00:00", + "published-time": "2026-11-05T16:09:10+00:00" }, { "name": "bref/laravel-health-check", @@ -474,30 +481,31 @@ "type": "github" } ], - "time": "2026-02-26T14:43:26+00:00" + "time": "2026-02-26T14:43:26+00:00", + "published-time": "2026-02-26T14:43:51+00:00" }, { "name": "bref/monolog-bridge", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/brefphp/monolog-bridge.git", - "reference": "0dd46623b4a298838ca103f93d8cb29db029cc30" + "reference": "ffde3460fe25cf1f94293ec29c0d4df626a0acc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brefphp/monolog-bridge/zipball/0dd46623b4a298838ca103f93d8cb29db029cc30", - "reference": "0dd46623b4a298838ca103f93d8cb29db029cc30", + "url": "https://api.github.com/repos/brefphp/monolog-bridge/zipball/ffde3460fe25cf1f94293ec29c0d4df626a0acc4", + "reference": "ffde3460fe25cf1f94293ec29c0d4df626a0acc4", "shasum": "" }, "require": { "monolog/monolog": "^2.4|^3", - "php": ">=8.0" + "php": ">=8.2" }, "require-dev": { "mnapoli/hard-mode": "^0.3", - "phpstan/phpstan": "^1", - "phpunit/phpunit": "^9.6|^10.5|^11|^12" + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^11.5|^12|^13" }, "type": "library", "autoload": { @@ -519,7 +527,7 @@ ], "support": { "issues": "https://github.com/brefphp/monolog-bridge/issues", - "source": "https://github.com/brefphp/monolog-bridge/tree/1.0.1" + "source": "https://github.com/brefphp/monolog-bridge/tree/2.0.0" }, "funding": [ { @@ -527,27 +535,29 @@ "type": "github" } ], - "time": "2025-06-14T15:06:36+00:00" + "time": "2026-09-26T19:17:27+00:00", + "published-time": "2026-09-26T19:18:43+00:00" }, { "name": "brick/math", - "version": "0.17.0", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "a62af7ab2e3cee9f9bf4cf77a5d1e6ba408a44ee" + "reference": "2effe05d2177c451b86c6a073196a4034c02f211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/a62af7ab2e3cee9f9bf4cf77a5d1e6ba408a44ee", - "reference": "a62af7ab2e3cee9f9bf4cf77a5d1e6ba408a44ee", + "url": "https://api.github.com/repos/brick/math/zipball/2effe05d2177c451b86c6a073196a4034c02f211", + "reference": "2effe05d2177c451b86c6a073196a4034c02f211", "shasum": "" }, "require": { "php": "^8.2" }, "require-dev": { - "phpstan/phpstan": "2.1.22", + "phpstan/phpstan": "2.2.13", + "phpstan/phpstan-phpunit": "2.0.18", "phpunit/phpunit": "^11.5" }, "type": "library", @@ -578,7 +588,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.17.0" + "source": "https://github.com/brick/math/tree/1.0.0" }, "funding": [ { @@ -586,20 +596,21 @@ "type": "github" } ], - "time": "2026-03-17T12:54:54+00:00" + "time": "2026-09-12T10:28:18+00:00", + "published-time": "2026-09-12T12:23:30+00:00" }, { "name": "carbonphp/carbon-doctrine-types", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + "reference": "5fa5eacafd9ef47c8c6ab9143fc901ba0194d3dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/5fa5eacafd9ef47c8c6ab9143fc901ba0194d3dc", + "reference": "5fa5eacafd9ef47c8c6ab9143fc901ba0194d3dc", "shasum": "" }, "require": { @@ -614,6 +625,11 @@ "phpunit/phpunit": "^10.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" @@ -639,7 +655,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.1" }, "funding": [ { @@ -655,24 +671,25 @@ "type": "tidelift" } ], - "time": "2024-02-09T16:56:22+00:00" + "time": "2026-09-06T14:11:38+00:00", + "published-time": "2026-09-06T14:15:00+00:00" }, { "name": "commerceguys/addressing", - "version": "v2.2.5", + "version": "v2.3.2", "source": { "type": "git", "url": "https://github.com/commerceguys/addressing.git", - "reference": "15b789e5e6ededaf803d23c56cdc300a94522a7c" + "reference": "e3ce66714cfa181b848533d926e8583261253c9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/commerceguys/addressing/zipball/15b789e5e6ededaf803d23c56cdc300a94522a7c", - "reference": "15b789e5e6ededaf803d23c56cdc300a94522a7c", + "url": "https://api.github.com/repos/commerceguys/addressing/zipball/e3ce66714cfa181b848533d926e8583261253c9e", + "reference": "e3ce66714cfa181b848533d926e8583261253c9e", "shasum": "" }, "require": { - "doctrine/collections": "^1.6 || ^2.0", + "doctrine/collections": "^1.6 || ^2.0 || ^3.0", "php": ">=8.0" }, "require-dev": { @@ -717,34 +734,36 @@ ], "support": { "issues": "https://github.com/commerceguys/addressing/issues", - "source": "https://github.com/commerceguys/addressing/tree/v2.2.5" + "source": "https://github.com/commerceguys/addressing/tree/v2.3.2" }, - "time": "2026-01-05T13:00:32+00:00" + "time": "2026-10-09T10:50:35+00:00", + "published-time": "2026-10-09T10:52:01+00:00" }, { "name": "composer/pcre", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "conflict": { - "phpstan/phpstan": "<1.11.10" + "phpstan/phpstan": "<2.2.2" }, "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8 || ^9" + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9" }, "type": "library", "extra": { @@ -782,7 +801,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" + "source": "https://github.com/composer/pcre/tree/3.4.0" }, "funding": [ { @@ -792,26 +811,23 @@ { "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" + "time": "2026-06-07T11:47:49+00:00", + "published-time": "2026-06-11T12:12:37+00:00" }, { "name": "composer/semver", - "version": "3.4.4", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + "reference": "d92543b7ede9c4ec6b59853cefb061e39866d2cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "url": "https://api.github.com/repos/composer/semver/zipball/d92543b7ede9c4ec6b59853cefb061e39866d2cf", + "reference": "d92543b7ede9c4ec6b59853cefb061e39866d2cf", "shasum": "" }, "require": { @@ -853,7 +869,7 @@ "homepage": "http://robbast.nl" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "Version comparison library that offers utilities, version constraint parsing and validation.", "keywords": [ "semantic", "semver", @@ -863,7 +879,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.4" + "source": "https://github.com/composer/semver/tree/3.6.0" }, "funding": [ { @@ -875,33 +891,36 @@ "type": "github" } ], - "time": "2025-08-20T19:15:30+00:00" + "time": "2026-10-29T09:13:34+00:00", + "published-time": "2026-10-29T09:14:11+00:00" }, { "name": "craftcms/cms", - "version": "6.0.0-alpha.1", + "version": "6.x-dev", "source": { "type": "git", "url": "https://github.com/craftcms/cms.git", - "reference": "799dd2cdd1991992010a67f18162860b60bfa3b1" + "reference": "05ce9b81be3704fb27da3a5a6670accfa49ec9a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/cms/zipball/799dd2cdd1991992010a67f18162860b60bfa3b1", - "reference": "799dd2cdd1991992010a67f18162860b60bfa3b1", + "url": "https://api.github.com/repos/craftcms/cms/zipball/05ce9b81be3704fb27da3a5a6670accfa49ec9a9", + "reference": "05ce9b81be3704fb27da3a5a6670accfa49ec9a9", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "^2.0", - "commerceguys/addressing": "^2.1.1", + "bacon/bacon-qr-code": "^3.0", + "commerceguys/addressing": "^2.3.0", "composer/semver": "^3.3.2", + "craftcms/cms-assets": "self.version", "craftcms/laravel-aliases": "^2.0", "craftcms/laravel-dependency-aware-cache": "^1.2.3", "craftcms/laravel-ruleset-validation": "^1.1", "craftcms/plugin-installer": "~1.6.0", "craftcms/server-check": "~6.0.0", - "elvanto/litemoji": "~4.3.0", - "enshrined/svg-sanitize": "~0.22.0", + "craftcms/url-validator": "^1.0", + "elvanto/litemoji": "^5.2.0", + "enshrined/svg-sanitize": "^1.0.0", "ext-bcmath": "*", "ext-curl": "*", "ext-dom": "*", @@ -914,61 +933,74 @@ "ext-zip": "*", "guzzlehttp/guzzle": "^7.2.0", "inertiajs/inertia-laravel": "^3.0", - "laravel/framework": "^13.0.0", - "laravel/wayfinder": "^0.1.12", + "intervention/image": "^4.2", + "laravel/ai": "^1.2", + "laravel/framework": "^13.38", + "laravel/passport": "^13.0", + "laravel/wayfinder": "^0.1.23", "league/commonmark": "^2.8", "league/flysystem-path-prefixing": "^3.31", "league/uri": "^7.0", + "mcp/sdk": "~0.9.0", "moneyphp/money": "^4.0", "php": "^8.5", - "phpdocumentor/reflection-docblock": "^5.3", "phpoffice/phpspreadsheet": "^5.3", - "pixelandtonic/graphql-php": "~14.11.10.1", - "pixelandtonic/imagine": "~1.3.3.1", - "pragmarx/google2fa": "^8.0", + "pragmarx/google2fa": "^9.0", "pragmarx/recovery": "^0.2.1", "symfony/css-selector": "^7.0|^8.0", "symfony/dom-crawler": "^7.0|^8.0", "symfony/filesystem": "^7.0|^8.0", "symfony/html-sanitizer": "^7.0|^8.0", - "symfony/property-access": "^7.0|^8.0", - "symfony/property-info": "^7.0|^8.0", + "symfony/psr-http-message-bridge": "^7.4|^8.0", "symfony/serializer": "^6.4|^7.0|^8.0", "symfony/yaml": "^7.0|^8.0", "theiconic/name-parser": "^1.2", "tpetry/laravel-query-expressions": "^1.5", - "twig/twig": "~3.21.1", + "twig/twig": "~3.30.0", "voku/portable-ascii": "^2.0", - "web-auth/webauthn-lib": "~5.2.4", + "web-auth/webauthn-lib": "~5.3.9", + "webonyx/graphql-php": "~15.33.1", "yiisoft/arrays": "^3.2", - "yiisoft/html": "^3.11", + "yiisoft/html": "^4.1", "yiisoft/translator": "^3.2", "yiisoft/translator-message-php": "^1.1" }, "require-dev": { + "barryvdh/laravel-debugbar": "^4.2", + "craftcms/test-plugin": "1.0.1", "dg/bypass-finals": "^1.9", - "driftingly/rector-laravel": "^2.1", + "driftingly/rector-laravel": "^2.6.2", "fakerphp/faker": "^1.19.0", - "larastan/larastan": "^3.4", + "intervention/image-driver-vips": "^4.1", + "larastan/larastan": "^3.13", + "laravel/boost": "^2.10.3", + "laravel/pao": "^1.0", "laravel/pint": "^1.22", "laravel/socialite": "^5.23", + "league/flysystem-aws-s3-v3": "^3.35", "orchestra/testbench": "^11.0", - "pestphp/pest": "^4.0", - "pestphp/pest-plugin-arch": "^4.0", - "pestphp/pest-plugin-laravel": "^4.0", + "pestphp/pest": "^5.0", + "pestphp/pest-plugin-agent": "^5.0", + "pestphp/pest-plugin-arch": "^5.0", + "pestphp/pest-plugin-browser": "^5.2", + "pestphp/pest-plugin-laravel": "^5.0", + "phpbench/phpbench": "^1.7", "phpstan/phpstan": "^2.1", - "rector/rector": "^2.3" + "rector/rector": "^2.3", + "spatie/laravel-typescript-transformer": "^3.2" }, "suggest": { "ext-exif": "Adds support for parsing image EXIF data.", "ext-iconv": "Adds support for more character encodings than PHP’s built-in mb_convert_encoding() function, which Craft will take advantage of when converting strings to UTF-8.", "ext-imagick": "Adds support for more image processing formats and options.", + "intervention/image-driver-vips": "Adds support for image processing with libvips (requires ext-ffi and libvips).", "laravel/socialite": "Adds OAuth login support for providers configured with `GeneralConfig::oauthProviders()`." }, "type": "library", "extra": { "laravel": { "aliases": { + "Ai": "CraftCms\\Cms\\Support\\Facades\\Ai", "Gql": "CraftCms\\Cms\\Support\\Facades\\Gql", "I18N": "CraftCms\\Cms\\Support\\Facades\\I18N", "Path": "CraftCms\\Cms\\Support\\Facades\\Path", @@ -981,6 +1013,7 @@ "Fields": "CraftCms\\Cms\\Support\\Facades\\Fields", "Images": "CraftCms\\Cms\\Support\\Facades\\Images", "Search": "CraftCms\\Cms\\Support\\Facades\\Search", + "Anchors": "CraftCms\\Cms\\Support\\Facades\\Anchors", "BulkOps": "CraftCms\\Cms\\Support\\Facades\\BulkOps", "Entries": "CraftCms\\Cms\\Support\\Facades\\Entries", "Folders": "CraftCms\\Cms\\Support\\Facades\\Folders", @@ -991,9 +1024,12 @@ "Markdown": "CraftCms\\Cms\\Support\\Facades\\Markdown", "Sections": "CraftCms\\Cms\\Support\\Facades\\Sections", "Security": "CraftCms\\Cms\\Support\\Facades\\Security", + "Template": "CraftCms\\Cms\\Support\\Facades\\Template", "Addresses": "CraftCms\\Cms\\Support\\Facades\\Addresses", "HtmlStack": "CraftCms\\Cms\\Support\\Facades\\HtmlStack", "Revisions": "CraftCms\\Cms\\Support\\Facades\\Revisions", + "Workflows": "CraftCms\\Cms\\Support\\Facades\\Workflows", + "Activities": "CraftCms\\Cms\\Support\\Facades\\Activities", "Conditions": "CraftCms\\Cms\\Support\\Facades\\Conditions", "Deprecator": "CraftCms\\Cms\\Support\\Facades\\Deprecator", "EntryTypes": "CraftCms\\Cms\\Support\\Facades\\EntryTypes", @@ -1001,10 +1037,8 @@ "Structures": "CraftCms\\Cms\\Support\\Facades\\Structures", "UserGroups": "CraftCms\\Cms\\Support\\Facades\\UserGroups", "AuthMethods": "CraftCms\\Cms\\Support\\Facades\\AuthMethods", - "Filesystems": "CraftCms\\Cms\\Support\\Facades\\Filesystems", "JobProgress": "CraftCms\\Cms\\Support\\Facades\\JobProgress", "AssetIndexer": "CraftCms\\Cms\\Support\\Facades\\AssetIndexer", - "Announcements": "CraftCms\\Cms\\Support\\Facades\\Announcements", "DeltaRegistry": "CraftCms\\Cms\\Support\\Facades\\DeltaRegistry", "ElementCaches": "CraftCms\\Cms\\Support\\Facades\\ElementCaches", "ProjectConfig": "CraftCms\\Cms\\Support\\Facades\\ProjectConfig", @@ -1015,6 +1049,7 @@ "InputNamespace": "CraftCms\\Cms\\Support\\Facades\\InputNamespace", "ElementActivity": "CraftCms\\Cms\\Support\\Facades\\ElementActivity", "ImageTransforms": "CraftCms\\Cms\\Support\\Facades\\ImageTransforms", + "ResponseHeaders": "CraftCms\\Cms\\Support\\Facades\\ResponseHeaders", "UserPermissions": "CraftCms\\Cms\\Support\\Facades\\UserPermissions", "ElementExporters": "CraftCms\\Cms\\Support\\Facades\\ElementExporters" }, @@ -1056,7 +1091,35 @@ "rss": "https://github.com/craftcms/cms/releases.atom", "source": "https://github.com/craftcms/cms" }, - "time": "2026-05-06T18:45:13+00:00" + "time": "2026-11-10T18:14:47+00:00", + "published-time": "2026-11-10T18:15:11+00:00" + }, + { + "name": "craftcms/cms-assets", + "version": "6.x-dev", + "source": { + "type": "git", + "url": "https://github.com/craftcms/cms-assets.git", + "reference": "2d0fdf2712c51d6dc0bc77900af0debe6a343ee6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/craftcms/cms-assets/zipball/2d0fdf2712c51d6dc0bc77900af0debe6a343ee6", + "reference": "2d0fdf2712c51d6dc0bc77900af0debe6a343ee6", + "shasum": "" + }, + "default-branch": true, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "proprietary" + ], + "description": "Built assets for Craft CMS.", + "support": { + "source": "https://github.com/craftcms/cms-assets/tree/6.x" + }, + "time": "2026-11-10T15:34:49+00:00", + "published-time": "2026-11-10T15:35:00+00:00" }, { "name": "craftcms/laravel-aliases", @@ -1128,7 +1191,8 @@ "issues": "https://github.com/craftcms/laravel-aliases/issues", "source": "https://github.com/craftcms/laravel-aliases/tree/2.1.0" }, - "time": "2026-03-17T14:59:00+00:00" + "time": "2026-03-17T14:59:00+00:00", + "published-time": "2026-03-17T15:00:47+00:00" }, { "name": "craftcms/laravel-dependency-aware-cache", @@ -1198,7 +1262,8 @@ "issues": "https://github.com/craftcms/laravel-dependency-aware-cache/issues", "source": "https://github.com/craftcms/laravel-dependency-aware-cache/tree/1.2.3" }, - "time": "2026-05-01T12:08:11+00:00" + "time": "2026-05-01T12:08:11+00:00", + "published-time": "2026-05-01T12:08:33+00:00" }, { "name": "craftcms/laravel-ruleset-validation", @@ -1262,7 +1327,8 @@ "issues": "https://github.com/craftcms/laravel-ruleset-validation/issues", "source": "https://github.com/craftcms/laravel-ruleset-validation/tree/1.1.0" }, - "time": "2026-04-22T11:01:37+00:00" + "time": "2026-04-22T11:01:37+00:00", + "published-time": "2026-04-22T11:02:13+00:00" }, { "name": "craftcms/plugin-installer", @@ -1315,7 +1381,8 @@ "rss": "https://craftcms.com/changelog.rss", "source": "https://github.com/craftcms/cms" }, - "time": "2023-02-22T13:17:00+00:00" + "time": "2023-02-22T13:17:00+00:00", + "published-time": "2023-02-22T13:18:16+00:00" }, { "name": "craftcms/server-check", @@ -1357,7 +1424,69 @@ "rss": "https://github.com/craftcms/server-check/releases.atom", "source": "https://github.com/craftcms/server-check" }, - "time": "2026-05-06T18:15:11+00:00" + "time": "2026-05-06T18:15:11+00:00", + "published-time": "2026-05-06T18:15:28+00:00" + }, + { + "name": "craftcms/url-validator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/craftcms/url-validator.git", + "reference": "1e6a935fff86171e3ca8086b5c547071e5ceb3c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/craftcms/url-validator/zipball/1e6a935fff86171e3ca8086b5c547071e5ceb3c2", + "reference": "1e6a935fff86171e3ca8086b5c547071e5ceb3c2", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.0.2" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.0", + "laravel/pint": "^1.29", + "nunomaduro/collision": "^8.1", + "pestphp/pest": "^3.0", + "phpstan/phpstan": "^2.0" + }, + "suggest": { + "guzzlehttp/guzzle": "Required to use GuzzleMiddleware" + }, + "type": "library", + "autoload": { + "psr-4": { + "CraftCms\\UrlValidator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Pixel & Tonic", + "homepage": "https://pixelandtonic.com/" + } + ], + "description": "Validate URLs and IP addresses against SSRF, DNS rebinding, and cloud-metadata attacks.", + "homepage": "https://github.com/craftcms/url-validator", + "keywords": [ + "IP", + "craftcms", + "security", + "ssrf", + "url", + "validation" + ], + "support": { + "issues": "https://github.com/craftcms/url-validator/issues", + "source": "https://github.com/craftcms/url-validator/tree/1.2.0" + }, + "time": "2026-10-09T22:39:23+00:00", + "published-time": "2026-10-09T22:40:36+00:00" }, { "name": "crwlr/query-string", @@ -1414,7 +1543,8 @@ "issues": "https://github.com/crwlrsoft/query-string/issues", "source": "https://github.com/crwlrsoft/query-string" }, - "time": "2023-04-12T21:31:58+00:00" + "time": "2023-04-12T21:31:58+00:00", + "published-time": "2023-04-12T21:34:54+00:00" }, { "name": "dasprid/enum", @@ -1464,7 +1594,76 @@ "issues": "https://github.com/DASPRiD/Enum/issues", "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2025-09-16T12:23:56+00:00" + "time": "2025-09-16T12:23:56+00:00", + "published-time": "2025-09-16T12:25:04+00:00" + }, + { + "name": "defuse/php-encryption", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/defuse/php-encryption.git", + "reference": "f53396c2d34225064647a05ca76c1da9d99e5828" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/defuse/php-encryption/zipball/f53396c2d34225064647a05ca76c1da9d99e5828", + "reference": "f53396c2d34225064647a05ca76c1da9d99e5828", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "paragonie/random_compat": ">= 2", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^5|^6|^7|^8|^9|^10", + "yoast/phpunit-polyfills": "^2.0.0" + }, + "bin": [ + "bin/generate-defuse-key" + ], + "type": "library", + "autoload": { + "psr-4": { + "Defuse\\Crypto\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Hornby", + "email": "taylor@defuse.ca", + "homepage": "https://defuse.ca/" + }, + { + "name": "Scott Arciszewski", + "email": "info@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "Secure PHP Encryption Library", + "keywords": [ + "aes", + "authenticated encryption", + "cipher", + "crypto", + "cryptography", + "encrypt", + "encryption", + "openssl", + "security", + "symmetric key cryptography" + ], + "support": { + "issues": "https://github.com/defuse/php-encryption/issues", + "source": "https://github.com/defuse/php-encryption/tree/v2.4.0" + }, + "time": "2023-06-19T06:10:36+00:00", + "published-time": "2023-06-19T06:16:55+00:00" }, { "name": "dflydev/dot-access-data", @@ -1539,33 +1738,34 @@ "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "time": "2024-07-08T12:26:09+00:00" + "time": "2024-07-08T12:26:09+00:00", + "published-time": "2024-07-08T12:27:13+00:00" }, { "name": "doctrine/collections", - "version": "2.6.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2" + "reference": "7c2f25ed928553a3de389ccb99aa46c0eedb2d4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2", - "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2", + "url": "https://api.github.com/repos/doctrine/collections/zipball/7c2f25ed928553a3de389ccb99aa46c0eedb2d4d", + "reference": "7c2f25ed928553a3de389ccb99aa46c0eedb2d4d", "shasum": "" }, "require": { "doctrine/deprecations": "^1", - "php": "^8.1", - "symfony/polyfill-php84": "^1.30" + "php": "^8.4", + "symfony/polyfill-php86": "^1.36" }, "require-dev": { "doctrine/coding-standard": "^14", "ext-json": "*", "phpstan/phpstan": "^2.1.30", "phpstan/phpstan-phpunit": "^2.0.7", - "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4" + "phpunit/phpunit": "^12.4" }, "type": "library", "autoload": { @@ -1609,7 +1809,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.6.0" + "source": "https://github.com/doctrine/collections/tree/3.1.0" }, "funding": [ { @@ -1625,7 +1825,8 @@ "type": "tidelift" } ], - "time": "2026-01-15T10:01:58+00:00" + "time": "2026-04-29T20:41:02+00:00", + "published-time": "2026-04-29T20:41:48+00:00" }, { "name": "doctrine/deprecations", @@ -1673,27 +1874,28 @@ "issues": "https://github.com/doctrine/deprecations/issues", "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2026-02-07T07:09:04+00:00" + "time": "2026-02-07T07:09:04+00:00", + "published-time": "2026-02-07T07:10:09+00:00" }, { "name": "doctrine/inflector", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + "reference": "46351b6812b7b6d52b82c3efa5dfb786a198ec88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", - "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/46351b6812b7b6d52b82c3efa5dfb786a198ec88", + "reference": "46351b6812b7b6d52b82c3efa5dfb786a198ec88", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^12.0 || ^13.0", + "doctrine/coding-standard": "^12.0 || ^14.0", "phpstan/phpstan": "^1.12 || ^2.0", "phpstan/phpstan-phpunit": "^1.4 || ^2.0", "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", @@ -1747,7 +1949,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.1.0" + "source": "https://github.com/doctrine/inflector/tree/2.1.1" }, "funding": [ { @@ -1763,31 +1965,30 @@ "type": "tidelift" } ], - "time": "2025-08-10T19:31:58+00:00" + "time": "2026-10-26T08:14:14+00:00", + "published-time": "2026-10-26T20:06:59+00:00" }, { "name": "doctrine/lexer", - "version": "3.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + "reference": "71d305eaa6480d3d3460c7d053d1da7749fa9cca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/71d305eaa6480d3d3460c7d053d1da7749fa9cca", + "reference": "71d305eaa6480d3d3460c7d053d1da7749fa9cca", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10.5.58 || ^12.5.4" }, "type": "library", "autoload": { @@ -1824,7 +2025,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.3" }, "funding": [ { @@ -1840,20 +2041,21 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:56:58+00:00" + "time": "2026-10-01T06:59:29+00:00", + "published-time": "2026-10-01T07:01:28+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" + "reference": "4189372ffeff09bf14f731f67a9de90c7b413ebe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", - "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/4189372ffeff09bf14f731f67a9de90c7b413ebe", + "reference": "4189372ffeff09bf14f731f67a9de90c7b413ebe", "shasum": "" }, "require": { @@ -1864,8 +2066,8 @@ }, "require-dev": { "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.32|^2.1.31", - "phpunit/phpunit": "^8.5.48|^9.0" + "phpstan/phpstan": "^2.1.31", + "phpunit/phpunit": "^11.5.43 || ^12.4" }, "type": "library", "extra": { @@ -1896,7 +2098,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.1" }, "funding": [ { @@ -1904,7 +2106,8 @@ "type": "github" } ], - "time": "2025-10-31T18:51:33+00:00" + "time": "2026-10-19T17:53:57+00:00", + "published-time": "2026-10-19T17:54:31+00:00" }, { "name": "egulias/email-validator", @@ -1971,28 +2174,29 @@ "type": "github" } ], - "time": "2025-03-06T22:45:56+00:00" + "time": "2025-03-06T22:45:56+00:00", + "published-time": "2025-03-20T21:39:03+00:00" }, { "name": "elvanto/litemoji", - "version": "4.3.0", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/elvanto/litemoji.git", - "reference": "f13cf10686f7110a3b17d09de03050d0708840b8" + "reference": "859dbcaa31ac5eb99c0811a981ba9d9ca3dab1c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elvanto/litemoji/zipball/f13cf10686f7110a3b17d09de03050d0708840b8", - "reference": "f13cf10686f7110a3b17d09de03050d0708840b8", + "url": "https://api.github.com/repos/elvanto/litemoji/zipball/859dbcaa31ac5eb99c0811a981ba9d9ca3dab1c1", + "reference": "859dbcaa31ac5eb99c0811a981ba9d9ca3dab1c1", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=7.3" + "php": ">=7.4" }, "require-dev": { - "milesj/emojibase": "7.0.*", + "milesj/emojibase": "^16.0.3", "phpunit/phpunit": "^9.0" }, "type": "library", @@ -2012,22 +2216,23 @@ ], "support": { "issues": "https://github.com/elvanto/litemoji/issues", - "source": "https://github.com/elvanto/litemoji/tree/4.3.0" + "source": "https://github.com/elvanto/litemoji/tree/5.2.0" }, - "time": "2022-10-28T02:32:19+00:00" + "time": "2025-07-15T04:24:11+00:00", + "published-time": "2025-07-15T04:26:07+00:00" }, { "name": "enshrined/svg-sanitize", - "version": "0.22.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500" + "reference": "1976ff93c8d8a234cdd3ff99626bd43ecf11bf49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/0afa95ea74be155a7bcd6c6fb60c276c39984500", - "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/1976ff93c8d8a234cdd3ff99626bd43ecf11bf49", + "reference": "1976ff93c8d8a234cdd3ff99626bd43ecf11bf49", "shasum": "" }, "require": { @@ -2057,9 +2262,85 @@ "description": "An SVG sanitizer for PHP", "support": { "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.22.0" + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/1.1.1" + }, + "time": "2026-10-20T09:45:10+00:00", + "published-time": "2026-10-20T09:46:58+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v7.2.1", + "source": { + "type": "git", + "url": "https://github.com/googleapis/php-jwt.git", + "reference": "0501f5729b9e2448516674aff07c7d1727869b8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/php-jwt/zipball/0501f5729b9e2448516674aff07c7d1727869b8e", + "reference": "0501f5729b9e2448516674aff07c7d1727869b8e", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.4||^8.0", + "phpfastcache/phpfastcache": "^9.2", + "phpseclib/phpseclib": "~3.0", + "phpspec/prophecy-phpunit": "^2.2", + "phpunit/phpunit": "^9.5", + "psr/cache": "^2.0||^3.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present", + "phpseclib/phpseclib": "Support PS256 (RSASSA-PSS) signatures" + }, + "type": "library", + "extra": { + "component": { + "id": "jwt", + "path": "Jwt", + "entry": "README.md", + "target": "googleapis/php-jwt.git" + } + }, + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } }, - "time": "2025-08-12T10:13:48+00:00" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/googleapis/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/googleapis/php-jwt/issues", + "source": "https://github.com/googleapis/php-jwt/tree/v7.2.1" + }, + "time": "2026-09-28T17:51:46+00:00", + "published-time": "2026-09-28T18:08:24+00:00" }, { "name": "fruitcake/php-cors", @@ -2130,28 +2411,29 @@ "type": "github" } ], - "time": "2025-12-03T09:33:47+00:00" + "time": "2025-12-03T09:33:47+00:00", + "published-time": "2025-12-03T09:37:01+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.4", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + "reference": "adccca3324eece92ca35463648c12b9e6293c05b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", - "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/adccca3324eece92ca35463648c12b9e6293c05b", + "reference": "adccca3324eece92ca35463648c12b9e6293c05b", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.5" + "phpoption/phpoption": "^1.10" }, "require-dev": { - "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + "phpunit/phpunit": "^8.5.52 || ^9.6.34 || ^10.5.63 || ^11.5.55 || ^12.5.14" }, "type": "library", "autoload": { @@ -2180,7 +2462,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.2.0" }, "funding": [ { @@ -2192,29 +2474,31 @@ "type": "tidelift" } ], - "time": "2025-12-27T19:43:20+00:00" + "time": "2026-08-24T09:06:52+00:00", + "published-time": "2026-08-24T09:07:57+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.10.0", + "version": "7.16.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + "reference": "81755d989b3007ca7f88a069857553cd08e7dc2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/81755d989b3007ca7f88a069857553cd08e7dc2e", + "reference": "81755d989b3007ca7f88a069857553cd08e7dc2e", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.3", - "guzzlehttp/psr7": "^2.8", + "guzzlehttp/promises": "^2.6", + "guzzlehttp/psr7": "^2.13.2", "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.25" }, "provide": { "psr/http-client-implementation": "1.0" @@ -2222,9 +2506,10 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", + "guzzle/client-integration-tests": "3.0.3", + "guzzlehttp/test-server": "^0.7", "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": { @@ -2302,7 +2587,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.16.1" }, "funding": [ { @@ -2318,28 +2603,30 @@ "type": "tidelift" } ], - "time": "2025-08-23T22:36:01+00:00" + "time": "2026-10-25T21:35:21+00:00", + "published-time": "2026-10-25T21:37:23+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.3.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "481557b130ef3790cf82b713667b43030dc9c957" + "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", - "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "url": "https://api.github.com/repos/guzzle/promises/zipball/3d88c829bd5f13d13847b39067dbf09a60af2154", + "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154", "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": { @@ -2385,7 +2672,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.6.0" }, "funding": [ { @@ -2401,27 +2688,30 @@ "type": "tidelift" } ], - "time": "2025-08-22T14:34:08+00:00" + "time": "2026-10-18T12:46:59+00:00", + "published-time": "2026-10-18T12:47:39+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.9.0", + "version": "2.13.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" + "reference": "adee536f95101929f262b8c59e8a61472f347d58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", - "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/adee536f95101929f262b8c59e8a61472f347d58", + "reference": "adee536f95101929f262b8c59e8a61472f347d58", "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.25" }, "provide": { "psr/http-factory-implementation": "1.0", @@ -2429,9 +2719,9 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "0.9.0", + "http-interop/http-factory-tests": "1.1.0", "jshttp/mime-db": "1.54.0.1", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2502,7 +2792,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.9.0" + "source": "https://github.com/guzzle/psr7/tree/2.13.2" }, "funding": [ { @@ -2518,30 +2808,31 @@ "type": "tidelift" } ], - "time": "2026-03-10T16:41:02+00:00" + "time": "2026-10-17T23:49:46+00:00", + "published-time": "2026-10-17T23:51:00+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.5", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" + "reference": "7a466ad606491eb6528c717482f7cca77f1851f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", - "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/7a466ad606491eb6528c717482f7cca77f1851f3", + "reference": "7a466ad606491eb6528c717482f7cca77f1851f3", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.24" + "php": "^7.4 || ^8.0", + "symfony/polyfill-php80": "^1.25" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25", - "uri-template/tests": "1.0.0" + "phpunit/phpunit": "^9.6.34", + "uri-template/tests": "1.0.2" }, "type": "library", "extra": { @@ -2588,7 +2879,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.5" + "source": "https://github.com/guzzle/uri-template/tree/v2.0.1" }, "funding": [ { @@ -2604,28 +2895,33 @@ "type": "tidelift" } ], - "time": "2025-08-22T14:27:06+00:00" + "time": "2026-08-24T17:13:02+00:00", + "published-time": "2026-08-24T17:13:22+00:00" }, { "name": "hollodotme/fast-cgi-client", - "version": "v3.1.7", + "version": "v4.0.0", "source": { "type": "git", "url": "https://github.com/hollodotme/fast-cgi-client.git", - "reference": "062182d4eda73c161cc2839783acc83096ec0f37" + "reference": "b65cb9ba2f12ad456478813fe1550022b171dc9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hollodotme/fast-cgi-client/zipball/062182d4eda73c161cc2839783acc83096ec0f37", - "reference": "062182d4eda73c161cc2839783acc83096ec0f37", + "url": "https://api.github.com/repos/hollodotme/fast-cgi-client/zipball/b65cb9ba2f12ad456478813fe1550022b171dc9f", + "reference": "b65cb9ba2f12ad456478813fe1550022b171dc9f", "shasum": "" }, "require": { + "ext-fileinfo": "*", "ext-json": "*", - "php": ">=7.1" + "php": ">=8.0" }, "require-dev": { - "ext-xdebug": ">=2.6.0" + "ext-xdebug": ">=3.1", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4.0" }, "type": "library", "autoload": { @@ -2652,41 +2948,47 @@ ], "support": { "issues": "https://github.com/hollodotme/fast-cgi-client/issues", - "source": "https://github.com/hollodotme/fast-cgi-client/tree/v3.1.7" + "source": "https://github.com/hollodotme/fast-cgi-client/tree/v4.0.0" }, - "time": "2021-12-07T10:10:20+00:00" + "funding": [ + { + "url": "https://github.com/hollodotme", + "type": "github" + } + ], + "time": "2026-10-05T12:05:19+00:00", + "published-time": "2026-10-05T12:05:43+00:00" }, { "name": "inertiajs/inertia-laravel", - "version": "v3.1.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/inertiajs/inertia-laravel.git", - "reference": "f588ce4a5beb25d166f4e372bac0c7f46a4f52ac" + "reference": "9d3f9060c1614565eb4d3a3208015ed01de347bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/f588ce4a5beb25d166f4e372bac0c7f46a4f52ac", - "reference": "f588ce4a5beb25d166f4e372bac0c7f46a4f52ac", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/9d3f9060c1614565eb4d3a3208015ed01de347bb", + "reference": "9d3f9060c1614565eb4d3a3208015ed01de347bb", "shasum": "" }, "require": { "ext-json": "*", - "laravel/framework": "^11.0|^12.0|^13.0", + "laravel/framework": "^11.35|^12.0|^13.0", "php": "^8.2.0", "symfony/console": "^7.0|^8.0" }, "conflict": { - "laravel/boost": "<2.2.0" + "laravel/boost": "<2.5.0" }, "require-dev": { - "guzzlehttp/guzzle": "^7.2", + "guzzlehttp/guzzle": "^7.15.2|^8.0", "larastan/larastan": "^3.0", "laravel/pint": "^1.16", "mockery/mockery": "^1.3.3", "orchestra/testbench": "^9.2|^10.0|^11.0", - "phpunit/phpunit": "^11.5|^12.0", - "roave/security-advisories": "dev-master" + "phpunit/phpunit": "^11.5|^12.0" }, "suggest": { "ext-pcntl": "Recommended when running the Inertia SSR server via the `inertia:start-ssr` artisan command." @@ -2725,85 +3027,233 @@ ], "support": { "issues": "https://github.com/inertiajs/inertia-laravel/issues", - "source": "https://github.com/inertiajs/inertia-laravel/tree/v3.1.0" + "source": "https://github.com/inertiajs/inertia-laravel/tree/v3.7.0" }, - "time": "2026-04-30T15:30:29+00:00" + "time": "2026-11-02T10:29:10+00:00", + "published-time": "2026-11-02T10:45:07+00:00" }, { - "name": "laminas/laminas-diactoros", - "version": "3.8.0", + "name": "intervention/gif", + "version": "5.0.1", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "60c182916b2749480895601649563970f3f12ec4" + "url": "https://github.com/Intervention/gif.git", + "reference": "bb395af960deffe64d70c976b4df9283f68e762d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4", - "reference": "60c182916b2749480895601649563970f3f12ec4", + "url": "https://api.github.com/repos/Intervention/gif/zipball/bb395af960deffe64d70c976b4df9283f68e762d", + "reference": "bb395af960deffe64d70c976b4df9283f68e762d", "shasum": "" }, "require": { - "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" - }, - "conflict": { - "amphp/amp": "<2.6.4" - }, - "provide": { - "psr/http-factory-implementation": "^1.0", - "psr/http-message-implementation": "^1.1 || ^2.0" + "php": "^8.3" }, "require-dev": { - "ext-curl": "*", - "ext-dom": "*", - "ext-gd": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^2.2.0", - "laminas/laminas-coding-standard": "~3.1.0", - "php-http/psr7-integration-tests": "^1.4.0", - "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.13" + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^12.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^4" }, "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\Diactoros", - "config-provider": "Laminas\\Diactoros\\ConfigProvider" - } - }, "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], "psr-4": { - "Laminas\\Diactoros\\": "src/" + "Intervention\\Gif\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "PHP GIF Encoder/Decoder", + "homepage": "https://github.com/intervention/gif", "keywords": [ - "http", - "laminas", - "psr", - "psr-17", - "psr-7" + "animation", + "gd", + "gif", + "image" ], "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-diactoros/", + "issues": "https://github.com/Intervention/gif/issues", + "source": "https://github.com/Intervention/gif/tree/5.0.1" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + }, + { + "url": "https://ko-fi.com/interventionphp", + "type": "ko_fi" + } + ], + "time": "2026-05-03T06:04:47+00:00", + "published-time": "2026-05-09T08:25:31+00:00" + }, + { + "name": "intervention/image", + "version": "4.4.1", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "3a47838f2e0f4ec6c8c9b43a5d73ac985b975830" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/3a47838f2e0f4ec6c8c9b43a5d73ac985b975830", + "reference": "3a47838f2e0f4ec6c8c9b43a5d73ac985b975830", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "intervention/gif": "^5", + "php": "^8.3" + }, + "require-dev": { + "intervention/coding-standard": "^1", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^12.0", + "psr/http-message": "^2" + }, + "suggest": { + "ext-exif": "Recommended to be able to read EXIF data properly." + }, + "type": "library", + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io" + } + ], + "description": "PHP Image Processing", + "homepage": "https://image.intervention.io", + "keywords": [ + "gd", + "image", + "imagick", + "resize", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/4.4.1" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + }, + { + "url": "https://ko-fi.com/interventionphp", + "type": "ko_fi" + } + ], + "time": "2026-10-30T13:38:01+00:00", + "published-time": "2026-10-30T13:41:47+00:00" + }, + { + "name": "laminas/laminas-diactoros", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "5939fbc03e9043e5d27050ed584de263b869c57f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/5939fbc03e9043e5d27050ed584de263b869c57f", + "reference": "5939fbc03e9043e5d27050ed584de263b869c57f", + "shasum": "" + }, + "require": { + "php": "~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "conflict": { + "amphp/amp": "<2.6.4" + }, + "provide": { + "psr/http-factory-implementation": "^1.0", + "psr/http-message-implementation": "^1.1 || ^2.0" + }, + "require-dev": { + "boundwize/structarmed": "^0.17.7", + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^2.2.0", + "laminas/laminas-coding-standard": "~3.1.0", + "php-http/psr7-integration-tests": "^1.4.0", + "phpunit/phpunit": "^10.5.36", + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.13" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\Diactoros", + "config-provider": "Laminas\\Diactoros\\ConfigProvider" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", "forum": "https://discourse.laminas.dev", "issues": "https://github.com/laminas/laminas-diactoros/issues", "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", @@ -2811,28 +3261,112 @@ }, "funding": [ { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" + "url": "https://crowdfunding.linuxfoundation.org/initiatives/laminas-project", + "type": "custom" + } + ], + "time": "2026-11-04T10:34:30+00:00", + "published-time": "2026-11-04T10:56:11+00:00" + }, + { + "name": "laravel/ai", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/ai.git", + "reference": "6837b4c557f67e04e8a13d882fe7724032278c27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/ai/zipball/6837b4c557f67e04e8a13d882fe7724032278c27", + "reference": "6837b4c557f67e04e8a13d882fe7724032278c27", + "shasum": "" + }, + "require": { + "illuminate/console": "^12.0|^13.0", + "illuminate/container": "^12.0|^13.0", + "illuminate/contracts": "^12.0|^13.0", + "illuminate/database": "^12.0|^13.0", + "illuminate/filesystem": "^12.0|^13.0", + "illuminate/json-schema": "^12.62|^13.15", + "illuminate/support": "^12.0|^13.0", + "laravel/prompts": "^0.3.6", + "laravel/serializable-closure": "^2.0", + "php": "^8.3", + "symfony/yaml": "^7.2|^8.0" + }, + "conflict": { + "aws/aws-sdk-php": "<3.369.1", + "laravel/mcp": "<1.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.369.1", + "driftingly/rector-laravel": "^2.5", + "jasonmccreary/double": "^1.0", + "laravel/mcp": "^1.0", + "laravel/pint": "^1.26", + "orchestra/testbench": "^10.6|^11.0", + "pestphp/pest": "^3.0|^4.0", + "pestphp/pest-plugin-laravel": "^3.0|^4.0", + "phpstan/phpstan": "^2.1", + "rector/rector": "^2.5" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the Bedrock provider.", + "laravel/mcp": "Required to use MCP client tools or MCP server tools with Laravel AI agents." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Ai\\AiServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" } + }, + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Laravel\\Ai\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The official AI SDK for Laravel.", + "homepage": "https://github.com/laravel/ai", + "keywords": [ + "ai", + "laravel" ], - "time": "2025-10-12T15:31:36+00:00" + "support": { + "issues": "https://github.com/laravel/ai/issues", + "source": "https://github.com/laravel/ai" + }, + "time": "2026-10-19T16:50:18+00:00", + "published-time": "2026-10-19T16:56:23+00:00" }, { "name": "laravel/framework", - "version": "v13.8.0", + "version": "v13.42.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e7db333a025a1e93ebca7744953069d7719f4bcf" + "reference": "f5c01f6b63803f16f38ebb31622c4fea412bd022" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e7db333a025a1e93ebca7744953069d7719f4bcf", - "reference": "e7db333a025a1e93ebca7744953069d7719f4bcf", + "url": "https://api.github.com/repos/laravel/framework/zipball/f5c01f6b63803f16f38ebb31622c4fea412bd022", + "reference": "f5c01f6b63803f16f38ebb31622c4fea412bd022", "shasum": "" }, "require": { - "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17", + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", @@ -2845,20 +3379,22 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8.2", - "guzzlehttp/promises": "^2.0.3", - "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.3.0", + "guzzlehttp/guzzle": "^7.8.2 || ^8.0", + "guzzlehttp/promises": "^2.0.3 || ^3.0", + "guzzlehttp/psr7": "^2.9 || ^3.0", + "guzzlehttp/uri-template": "^1.0 || ^2.0", + "laravel/prompts": "^0.3.25", "laravel/serializable-closure": "^2.0.10", "league/commonmark": "^2.8.1", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", - "league/uri": "^7.5.1", - "monolog/monolog": "^3.0", + "league/uri": "^7.6", + "monolog/monolog": "^3.10", "nesbot/carbon": "^3.8.4", "nunomaduro/termwind": "^2.0", "php": "^8.3", "psr/container": "^1.1.1 || ^2.0.1", + "psr/http-message": "^1.0 || ^2.0", "psr/log": "^1.0 || ^2.0 || ^3.0", "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "ramsey/uuid": "^4.7", @@ -2907,6 +3443,7 @@ "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", + "illuminate/image": "self.version", "illuminate/json-schema": "self.version", "illuminate/log": "self.version", "illuminate/macroable": "self.version", @@ -2928,11 +3465,12 @@ "spatie/once": "*" }, "require-dev": { - "ably/ably-php": "^1.0", + "ably/pubsub-server": "^1.0|^2.0", "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", "fakerphp/faker": "^1.24", - "guzzlehttp/psr7": "^2.4", + "intervention/image": "^4.2", + "jasonmccreary/double": "^1.1", "laravel/pint": "^1.18", "league/flysystem-aws-s3-v3": "^3.25.1", "league/flysystem-ftp": "^3.25.1", @@ -2941,21 +3479,23 @@ "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", "opis/json-schema": "^2.4.1", - "orchestra/testbench-core": "^11.0.0", + "orchestra/testbench-core": "^11.6.0", "pda/pheanstalk": "^7.0.0 || ^8.0.0", "php-http/discovery": "^1.15", - "phpstan/phpstan": "^2.0", + "phpstan/phpstan": "2.3.5", "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", "predis/predis": "^2.3 || ^3.0", - "rector/rector": "^2.3", + "rector/rector": "2.6.3", "resend/resend-php": "^1.0", "symfony/cache": "^7.4.0 || ^8.0.0", "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/mercure": "^0.8.0", "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", - "symfony/translation": "^7.4.0 || ^8.0.0" + "symfony/translation": "^7.4.0 || ^8.0.0", + "web-token/jwt-library": "^4.1" }, "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "ably/pubsub-server": "Required to use the Ably broadcast driver (^1.0|^2.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", "ext-apcu": "Required to use the APC cache driver.", @@ -2969,6 +3509,7 @@ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "intervention/image": "Required to use the image processing features (^4.2).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", @@ -2980,7 +3521,6 @@ "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", @@ -2988,8 +3528,10 @@ "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/mercure": "Required to use the Mercure broadcast driver (^0.8).", "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0).", + "web-token/jwt-library": "Required to sign Mercure JWTs and use end-to-end encrypted channels (^4.1)." }, "type": "library", "extra": { @@ -3039,36 +3581,37 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-05-05T21:01:14+00:00" + "time": "2026-11-10T15:54:30+00:00", + "published-time": "2026-11-10T15:55:04+00:00" }, { "name": "laravel/octane", - "version": "v2.17.3", + "version": "v2.24.0", "source": { "type": "git", "url": "https://github.com/laravel/octane.git", - "reference": "040bfbebfdf545a752376f4396d942cd6f7da036" + "reference": "d70840b9ae47a0003e814e15afcae83e016e5c16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/040bfbebfdf545a752376f4396d942cd6f7da036", - "reference": "040bfbebfdf545a752376f4396d942cd6f7da036", + "url": "https://api.github.com/repos/laravel/octane/zipball/d70840b9ae47a0003e814e15afcae83e016e5c16", + "reference": "d70840b9ae47a0003e814e15afcae83e016e5c16", "shasum": "" }, "require": { "laminas/laminas-diactoros": "^3.0", - "laravel/framework": "^10.10.1|^11.0|^12.0|^13.0", + "laravel/framework": "^12.69.0|^13.30.0", "laravel/prompts": "^0.1.24|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3|^2.0", "nesbot/carbon": "^2.66.0|^3.0", - "php": "^8.1.0", + "php": "^8.2.0", "symfony/console": "^6.0|^7.0|^8.0", "symfony/psr-http-message-bridge": "^2.2.0|^6.4|^7.0|^8.0" }, "conflict": { - "spiral/roadrunner": "<2023.1.0", + "spiral/roadrunner": ">=2020.1.0 <2023.1.0", "spiral/roadrunner-cli": "<2.6.0", - "spiral/roadrunner-http": "<3.3.0" + "spiral/roadrunner-http": "<3.4.0" }, "require-dev": { "guzzlehttp/guzzle": "^7.6.1", @@ -3077,11 +3620,11 @@ "laravel/socialite": "^5.6.1", "livewire/livewire": "^2.12.3|^3.0", "nunomaduro/collision": "^6.4.0|^7.5.2|^8.0", - "orchestra/testbench": "^8.21|^9.0|^10.0|^11.0", + "orchestra/testbench": "^10.0|^11.0", "phpstan/phpstan": "^2.1.7", "phpunit/phpunit": "^10.4|^11.5|^12.0|^13.0", "spiral/roadrunner-cli": "^2.6.0", - "spiral/roadrunner-http": "^3.3.0" + "spiral/roadrunner-http": "^4.2.0" }, "bin": [ "bin/roadrunner-worker", @@ -3128,20 +3671,98 @@ "issues": "https://github.com/laravel/octane/issues", "source": "https://github.com/laravel/octane" }, - "time": "2026-04-23T14:52:16+00:00" + "time": "2026-11-10T14:46:26+00:00", + "published-time": "2026-11-10T16:07:29+00:00" + }, + { + "name": "laravel/passport", + "version": "v13.11.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/passport.git", + "reference": "cd4755d6b80b9eae0ae290909750e8e73e8a4752" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/passport/zipball/cd4755d6b80b9eae0ae290909750e8e73e8a4752", + "reference": "cd4755d6b80b9eae0ae290909750e8e73e8a4752", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "firebase/php-jwt": "^6.4|^7.0", + "illuminate/auth": "^11.35|^12.0|^13.0", + "illuminate/console": "^11.35|^12.0|^13.0", + "illuminate/container": "^11.35|^12.0|^13.0", + "illuminate/contracts": "^11.35|^12.0|^13.0", + "illuminate/cookie": "^11.35|^12.0|^13.0", + "illuminate/database": "^11.35|^12.0|^13.0", + "illuminate/encryption": "^11.35|^12.0|^13.0", + "illuminate/http": "^11.35|^12.0|^13.0", + "illuminate/support": "^11.35|^12.0|^13.0", + "league/oauth2-server": "^9.2", + "php": "^8.2", + "php-http/discovery": "^1.20", + "phpseclib/phpseclib": "4.0.1", + "psr/http-factory-implementation": "*", + "symfony/console": "^7.1|^8.0", + "symfony/psr-http-message-bridge": "^7.1|^8.0" + }, + "require-dev": { + "jasonmccreary/double": "^1.0", + "orchestra/testbench": "^9.15|^10.8|^11.0", + "phpstan/phpstan": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Passport\\PassportServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Passport\\": "src/", + "Laravel\\Passport\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Passport provides OAuth2 server support to Laravel.", + "keywords": [ + "laravel", + "oauth", + "passport" + ], + "support": { + "issues": "https://github.com/laravel/passport/issues", + "source": "https://github.com/laravel/passport" + }, + "time": "2026-10-14T20:09:36+00:00", + "published-time": "2026-11-10T16:08:11+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.17", + "version": "v0.3.27", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "6a82ac19a28b916ae0885828795dbd4c59d9a818" + "reference": "abdfc75a1ae6c6f21522daed50da7124cbff09d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/6a82ac19a28b916ae0885828795dbd4c59d9a818", - "reference": "6a82ac19a28b916ae0885828795dbd4c59d9a818", + "url": "https://api.github.com/repos/laravel/prompts/zipball/abdfc75a1ae6c6f21522daed50da7124cbff09d2", + "reference": "abdfc75a1ae6c6f21522daed50da7124cbff09d2", "shasum": "" }, "require": { @@ -3184,23 +3805,23 @@ ], "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { - "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.17" + "source": "https://github.com/laravel/prompts/tree/v0.3.27" }, - "time": "2026-04-20T16:07:33+00:00" + "time": "2026-11-09T16:07:10+00:00", + "published-time": "2026-11-09T16:09:07+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.13", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce" + "reference": "2bfb44e8af009b553ed2c060c94b0bc3c67b4769" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce", - "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/2bfb44e8af009b553ed2c060c94b0bc3c67b4769", + "reference": "2bfb44e8af009b553ed2c060c94b0bc3c67b4769", "shasum": "" }, "require": { @@ -3248,20 +3869,21 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2026-04-16T14:03:50+00:00" + "time": "2026-10-14T21:20:29+00:00", + "published-time": "2026-11-10T16:11:08+00:00" }, { "name": "laravel/tinker", - "version": "v3.0.2", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "4faba77764bd33411735936acdf30446d058c78b" + "reference": "5fab2518167975b302e10d1fdf9a8c8113849201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", - "reference": "4faba77764bd33411735936acdf30446d058c78b", + "url": "https://api.github.com/repos/laravel/tinker/zipball/5fab2518167975b302e10d1fdf9a8c8113849201", + "reference": "5fab2518167975b302e10d1fdf9a8c8113849201", "shasum": "" }, "require": { @@ -3269,13 +3891,12 @@ "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "php": "^8.1", - "psy/psysh": "^0.12.0", + "psy/psysh": "^0.12.19", "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" }, "require-dev": { - "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5|^11.5" + "phpunit/phpunit": "^10.5|^11.5|^12.5|^13.4" }, "suggest": { "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." @@ -3315,22 +3936,23 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v3.0.2" + "source": "https://github.com/laravel/tinker/tree/v3.1.0" }, - "time": "2026-03-17T14:54:13+00:00" + "time": "2026-10-16T11:13:33+00:00", + "published-time": "2026-11-10T16:12:15+00:00" }, { "name": "laravel/wayfinder", - "version": "v0.1.18", + "version": "v0.1.23", "source": { "type": "git", "url": "https://github.com/laravel/wayfinder.git", - "reference": "29598f386cdeef2cf4144f32bdaefc7542ac38ce" + "reference": "e7b0914d194201e54ba320ef38137b47a7daca98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/wayfinder/zipball/29598f386cdeef2cf4144f32bdaefc7542ac38ce", - "reference": "29598f386cdeef2cf4144f32bdaefc7542ac38ce", + "url": "https://api.github.com/repos/laravel/wayfinder/zipball/e7b0914d194201e54ba320ef38137b47a7daca98", + "reference": "e7b0914d194201e54ba320ef38137b47a7daca98", "shasum": "" }, "require": { @@ -3341,6 +3963,9 @@ "php": "^8.2", "phpstan/phpdoc-parser": "^2.3" }, + "conflict": { + "laravel/boost": "<2.5.0" + }, "require-dev": { "laravel/pint": "^1.21", "orchestra/testbench": "^11.0|^10.1|^9.0" @@ -3380,49 +4005,124 @@ "issues": "https://github.com/laravel/wayfinder/issues", "source": "https://github.com/laravel/wayfinder" }, - "time": "2026-05-08T14:41:03+00:00" + "time": "2026-10-16T14:24:32+00:00", + "published-time": "2026-10-16T14:28:53+00:00" }, { - "name": "league/commonmark", - "version": "2.8.2", + "name": "lcobucci/jwt", + "version": "5.6.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "59fb075d2101740c337c7216e3f32b36c204218b" + "url": "https://github.com/lcobucci/jwt.git", + "reference": "482760068e5a55a9045feddb3e2fc3f878cbd577" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", - "reference": "59fb075d2101740c337c7216e3f32b36c204218b", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/482760068e5a55a9045feddb3e2fc3f878cbd577", + "reference": "482760068e5a55a9045feddb3e2fc3f878cbd577", "shasum": "" }, "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" + "ext-openssl": "*", + "ext-sodium": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "psr/clock": "^1.0" }, "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.31.1", - "commonmark/commonmark.js": "0.31.1", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", - "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + "infection/infection": "^0.29", + "lcobucci/clock": "^3.2", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^11.1" + }, + "suggest": { + "lcobucci/clock": ">= 3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/5.6.1" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2026-10-10T09:42:14+00:00", + "published-time": "2026-10-10T09:43:25+00:00" + }, + { + "name": "league/commonmark", + "version": "2.10.7", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "8eb53e906fd60c67038d22f1f1cab420ed58b8be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/8eb53e906fd60c67038d22f1f1cab420ed58b8be", + "reference": "8eb53e906fd60c67038d22f1f1cab420ed58b8be", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^2.0.0", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" }, "suggest": { "symfony/yaml": "v2.3+ required if using the Front Matter extension" @@ -3430,7 +4130,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.9-dev" + "dev-main": "2.11-dev" } }, "autoload": { @@ -3487,7 +4187,8 @@ "type": "tidelift" } ], - "time": "2026-03-19T13:16:38+00:00" + "time": "2026-10-31T13:35:37+00:00", + "published-time": "2026-10-31T13:35:57+00:00" }, { "name": "league/config", @@ -3569,20 +4270,81 @@ "type": "github" } ], - "time": "2022-12-11T20:36:23+00:00" + "time": "2022-12-11T20:36:23+00:00", + "published-time": "2022-12-11T20:36:45+00:00" + }, + { + "name": "league/event", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/event.git", + "reference": "ec38ff7ea10cad7d99a79ac937fbcffb9334c210" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/event/zipball/ec38ff7ea10cad7d99a79ac937fbcffb9334c210", + "reference": "ec38ff7ea10cad7d99a79ac937fbcffb9334c210", + "shasum": "" + }, + "require": { + "php": ">=7.2.0", + "psr/event-dispatcher": "^1.0" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12.45", + "phpunit/phpunit": "^8.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Event\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Event package", + "keywords": [ + "emitter", + "event", + "listener" + ], + "support": { + "issues": "https://github.com/thephpleague/event/issues", + "source": "https://github.com/thephpleague/event/tree/3.0.3" + }, + "time": "2024-09-04T16:06:53+00:00", + "published-time": "2024-09-04T20:43:40+00:00" }, { "name": "league/flysystem", - "version": "3.33.0", + "version": "3.36.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "570b8871e0ce693764434b29154c54b434905350" + "reference": "f7fb152932f30072d573510cbd4dd657d6475b25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/570b8871e0ce693764434b29154c54b434905350", - "reference": "570b8871e0ce693764434b29154c54b434905350", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f7fb152932f30072d573510cbd4dd657d6475b25", + "reference": "f7fb152932f30072d573510cbd4dd657d6475b25", "shasum": "" }, "require": { @@ -3650,22 +4412,23 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.33.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.36.0" }, - "time": "2026-03-25T07:59:30+00:00" + "time": "2026-09-02T08:00:27+00:00", + "published-time": "2026-09-02T08:01:40+00:00" }, { "name": "league/flysystem-local", - "version": "3.31.0", + "version": "3.35.3", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + "reference": "a099b24dce160f3b2239043d13d47c4a1a214ea4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", - "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/a099b24dce160f3b2239043d13d47c4a1a214ea4", + "reference": "a099b24dce160f3b2239043d13d47c4a1a214ea4", "shasum": "" }, "require": { @@ -3699,9 +4462,10 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.35.3" }, - "time": "2026-01-23T15:30:45+00:00" + "time": "2026-08-12T13:29:21+00:00", + "published-time": "2026-08-22T12:57:18+00:00" }, { "name": "league/flysystem-path-prefixing", @@ -3747,20 +4511,21 @@ "support": { "source": "https://github.com/thephpleague/flysystem-path-prefixing/tree/3.31.0" }, - "time": "2026-01-23T15:30:45+00:00" + "time": "2026-01-23T15:30:45+00:00", + "published-time": "2026-01-23T15:44:49+00:00" }, { "name": "league/mime-type-detection", - "version": "1.16.0", + "version": "1.17.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", - "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76", + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76", "shasum": "" }, "require": { @@ -3770,7 +4535,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0" }, "type": "library", "autoload": { @@ -3791,7 +4556,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0" }, "funding": [ { @@ -3803,24 +4568,124 @@ "type": "tidelift" } ], - "time": "2024-09-21T08:32:55+00:00" + "time": "2026-07-09T11:49:27+00:00", + "published-time": "2026-07-09T11:50:09+00:00" + }, + { + "name": "league/oauth2-server", + "version": "9.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-server.git", + "reference": "9d2f6fc0a0b5aa1bb02506971d3a4ecff2c6526c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/9d2f6fc0a0b5aa1bb02506971d3a4ecff2c6526c", + "reference": "9d2f6fc0a0b5aa1bb02506971d3a4ecff2c6526c", + "shasum": "" + }, + "require": { + "defuse/php-encryption": "^2.4", + "ext-json": "*", + "ext-openssl": "*", + "lcobucci/jwt": "^5.6", + "league/event": "^3.0", + "league/uri": "^7.8", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "psr/clock": "^1.0", + "psr/http-message": "^2.0", + "psr/http-server-middleware": "^1.0" + }, + "replace": { + "league/oauth2server": "*", + "lncd/oauth2": "*" + }, + "require-dev": { + "laminas/laminas-diactoros": "^3.8", + "paragonie/random_compat": "^9.99.100", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.38", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-phpunit": "^2.0.12", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11.5.50", + "roave/security-advisories": "dev-master", + "slevomat/coding-standard": "^8.27.1", + "squizlabs/php_codesniffer": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\OAuth2\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Andy Millington", + "email": "andrew@noexceptions.io", + "homepage": "https://www.noexceptions.io", + "role": "Developer" + } + ], + "description": "A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.", + "homepage": "https://oauth2.thephpleague.com/", + "keywords": [ + "Authentication", + "api", + "auth", + "authorisation", + "authorization", + "oauth", + "oauth 2", + "oauth 2.0", + "oauth2", + "protect", + "resource", + "secure", + "server" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth2-server/issues", + "source": "https://github.com/thephpleague/oauth2-server/tree/9.4.1" + }, + "funding": [ + { + "url": "https://github.com/sephster", + "type": "github" + } + ], + "time": "2026-06-25T15:24:07+00:00", + "published-time": "2026-06-25T15:28:46+00:00" }, { "name": "league/uri", - "version": "7.8.1", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + "reference": "be89e2382e37acdef232259071ade5180821397b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/be89e2382e37acdef232259071ade5180821397b", + "reference": "be89e2382e37acdef232259071ade5180821397b", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.8.1", + "ext-mbstring": "*", + "league/uri-interfaces": "^7.10.0", "php": "^8.1", "psr/http-factory": "^1" }, @@ -3893,7 +4758,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.8.1" + "source": "https://github.com/thephpleague/uri/tree/7.10.0" }, "funding": [ { @@ -3901,20 +4766,21 @@ "type": "github" } ], - "time": "2026-03-15T20:22:25+00:00" + "time": "2026-11-04T12:45:07+00:00", + "published-time": "2026-11-04T13:02:21+00:00" }, { "name": "league/uri-interfaces", - "version": "7.8.1", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + "reference": "ea66240cff4ae9a56ce85d577a04d038b771e51c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/ea66240cff4ae9a56ce85d577a04d038b771e51c", + "reference": "ea66240cff4ae9a56ce85d577a04d038b771e51c", "shasum": "" }, "require": { @@ -3977,7 +4843,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.8.1" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.10.0" }, "funding": [ { @@ -3985,7 +4851,8 @@ "type": "github" } ], - "time": "2026-03-08T20:05:35+00:00" + "time": "2026-11-04T12:45:07+00:00", + "published-time": "2026-11-04T13:02:27+00:00" }, { "name": "maennchen/zipstream-php", @@ -4063,7 +4930,8 @@ "type": "github" } ], - "time": "2026-04-11T18:38:28+00:00" + "time": "2026-04-11T18:38:28+00:00", + "published-time": "2026-04-11T18:40:08+00:00" }, { "name": "markbaker/complex", @@ -4114,7 +4982,8 @@ "issues": "https://github.com/MarkBaker/PHPComplex/issues", "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" }, - "time": "2022-12-06T16:21:08+00:00" + "time": "2022-12-06T16:21:08+00:00", + "published-time": "2022-12-06T16:27:52+00:00" }, { "name": "markbaker/matrix", @@ -4170,7 +5039,102 @@ "issues": "https://github.com/MarkBaker/PHPMatrix/issues", "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" }, - "time": "2022-12-02T22:17:43+00:00" + "time": "2022-12-02T22:17:43+00:00", + "published-time": "2022-12-02T22:55:17+00:00" + }, + { + "name": "mcp/sdk", + "version": "v0.9.0", + "source": { + "type": "git", + "url": "https://github.com/modelcontextprotocol/php-sdk.git", + "reference": "be71c78bc3bce25f50d6a7e592017b8af6a2120f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/modelcontextprotocol/php-sdk/zipball/be71c78bc3bce25f50d6a7e592017b8af6a2120f", + "reference": "be71c78bc3bce25f50d6a7e592017b8af6a2120f", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "opis/json-schema": "^2.4", + "php": "^8.1", + "php-http/discovery": "^1.20", + "phpdocumentor/reflection-docblock": "^5.6 || ^6.0", + "psr/clock": "^1.0", + "psr/container": "^1.0 || ^2.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^1.1 || ^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/uid": "^5.4 || ^6.4 || ^7.3 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "2.3.0" + }, + "require-dev": { + "composer/semver": "^3.0", + "ext-openssl": "*", + "firebase/php-jwt": "^6.10 || ^7.0", + "laminas/laminas-httphandlerrunner": "^2.12", + "nyholm/psr7": "^1.8", + "nyholm/psr7-server": "^1.1", + "phar-io/composer-distributor": "^1.0.2", + "php-cs-fixer/shim": "^3.91", + "phpdocumentor/shim": "^3", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^10.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^2.0 || ^3.0", + "symfony/cache": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/console": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/finder": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/http-client": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/lock": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/process": "^5.4 || ^6.4 || ^7.3 || ^8.0" + }, + "suggest": { + "firebase/php-jwt": "Required for the JwtTokenValidator.", + "psr/cache-implementation": "Required for JwtTokenValidator::fromIssuer() to cache metadata and keys.", + "symfony/finder": "Required for file-based discovery.", + "symfony/lock": "Required for the SymfonyLockSessionLock." + }, + "type": "library", + "autoload": { + "psr-4": { + "Mcp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Christopher Hertel", + "email": "mail@christopher-hertel.de" + }, + { + "name": "Kyrian Obikwelu", + "email": "koshnawaza@gmail.com" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "Model Context Protocol SDK for Client and Server applications in PHP", + "support": { + "issues": "https://github.com/modelcontextprotocol/php-sdk/issues", + "source": "https://github.com/modelcontextprotocol/php-sdk/tree/v0.9.0" + }, + "time": "2026-10-18T14:29:29+00:00", + "published-time": "2026-10-18T14:45:02+00:00" }, { "name": "moneyphp/money", @@ -4260,20 +5224,21 @@ "issues": "https://github.com/moneyphp/money/issues", "source": "https://github.com/moneyphp/money/tree/v4.9.0" }, - "time": "2026-05-04T20:23:15+00:00" + "time": "2026-05-04T20:23:15+00:00", + "published-time": "2026-05-04T20:25:20+00:00" }, { "name": "monolog/monolog", - "version": "3.10.0", + "version": "3.12.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7059e4c691d05ea1222b5124bed0f961be46e15", + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15", "shasum": "" }, "require": { @@ -4299,6 +5264,7 @@ "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", + "psr/clock": "^1.0", "rollbar/rollbar": "^4.0", "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", @@ -4317,6 +5283,7 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "psr/clock": "Required to pass a clock to the Logger and control the timestamp of log records", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, @@ -4351,7 +5318,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + "source": "https://github.com/Seldaek/monolog/tree/3.12.1" }, "funding": [ { @@ -4363,20 +5330,21 @@ "type": "tidelift" } ], - "time": "2026-01-02T08:56:05+00:00" + "time": "2026-09-29T19:21:12+00:00", + "published-time": "2026-09-29T19:21:44+00:00" }, { "name": "mtdowling/jmespath.php", - "version": "2.8.0", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" + "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", - "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", + "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", "shasum": "" }, "require": { @@ -4385,7 +5353,7 @@ }, "require-dev": { "composer/xdebug-handler": "^3.0.3", - "phpunit/phpunit": "^8.5.33" + "phpunit/phpunit": "^8.5.52" }, "bin": [ "bin/jp.php" @@ -4393,7 +5361,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "2.9-dev" } }, "autoload": { @@ -4427,22 +5395,23 @@ ], "support": { "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" + "source": "https://github.com/jmespath/jmespath.php/tree/2.9.2" }, - "time": "2024-09-04T18:46:31+00:00" + "time": "2026-07-06T18:56:19+00:00", + "published-time": "2026-07-06T18:56:41+00:00" }, { "name": "nesbot/carbon", - "version": "3.11.4", + "version": "3.15.1", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60" + "reference": "ce0e5636fae7d1e99856eb70cae4c719a284aa08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60", - "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ce0e5636fae7d1e99856eb70cae4c719a284aa08", + "reference": "ce0e5636fae7d1e99856eb70cae4c719a284aa08", "shasum": "" }, "require": { @@ -4452,6 +5421,7 @@ "psr/clock": "^1.0", "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-time": "^1.0", "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" }, "provide": { @@ -4462,7 +5432,7 @@ "doctrine/orm": "^2.15.2 || ^3.0", "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", - "phpmd/phpmd": "^2.15.0", + "phpmd/phpmd": "^3.0@dev", "phpstan/extension-installer": "^1.4.3", "phpstan/phpstan": "^2.1.22", "phpunit/phpunit": "^10.5.53", @@ -4534,37 +5504,38 @@ "type": "tidelift" } ], - "time": "2026-04-07T09:57:54+00:00" + "time": "2026-10-25T14:32:48+00:00", + "published-time": "2026-10-25T14:41:05+00:00" }, { "name": "nette/schema", - "version": "v1.3.5", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + "reference": "af9fa8a86bfca9b02b10346220db26e62ef942ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "url": "https://api.github.com/repos/nette/schema/zipball/af9fa8a86bfca9b02b10346220db26e62ef942ec", + "reference": "af9fa8a86bfca9b02b10346220db26e62ef942ec", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.5" + "php": "8.1 - 8.6" }, "require-dev": { - "nette/phpstan-rules": "^1.0", + "nette/phpstan-rules": "^1.0.7", "nette/tester": "^2.6", "phpstan/extension-installer": "^1.4@stable", - "phpstan/phpstan": "^2.1.39@stable", + "phpstan/phpstan": "^2.3@stable", "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -4585,40 +5556,41 @@ { "name": "David Grudl", "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" } ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", + "description": "📐 Nette Schema: validates and normalizes data such as configuration or API input against a schema described in a few readable lines of PHP, with precise error messages.", + "homepage": "https://doc.nette.org/schema", "keywords": [ - "config", - "nette" + "configuration", + "data validation", + "nette", + "normalization", + "schema", + "validation" ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.5" + "source": "https://github.com/nette/schema/tree/v1.4.0" }, - "time": "2026-02-23T03:47:12+00:00" + "time": "2026-10-22T02:12:50+00:00", + "published-time": "2026-10-22T02:14:45+00:00" }, { "name": "nette/utils", - "version": "v4.1.3", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe" + "reference": "6bf24518accf32cf845bca305e0b92078700fd01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe", - "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe", + "url": "https://api.github.com/repos/nette/utils/zipball/6bf24518accf32cf845bca305e0b92078700fd01", + "reference": "6bf24518accf32cf845bca305e0b92078700fd01", "shasum": "" }, "require": { - "php": "8.2 - 8.5" + "php": "8.2 - 8.6" }, "conflict": { "nette/finder": "<3", @@ -4634,7 +5606,7 @@ }, "suggest": { "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-iconv": "to use Strings::chr(), ord() and reverse()", "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", @@ -4690,26 +5662,26 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.1.3" + "source": "https://github.com/nette/utils/tree/v4.1.6" }, - "time": "2026-02-13T03:05:33+00:00" + "time": "2026-10-20T17:07:56+00:00", + "published-time": "2026-10-20T17:48:30+00:00" }, { "name": "nikic/php-parser", - "version": "v5.7.0", + "version": "v5.9.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-json": "*", "ext-tokenizer": "*", "php": ">=7.4" @@ -4748,37 +5720,38 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2026-09-13T18:51:52+00:00", + "published-time": "2026-09-13T18:53:16+00:00" }, { "name": "nunomaduro/termwind", - "version": "v2.4.0", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "712a31b768f5daea284c2169a7d227031001b9a8" + "reference": "9b85ae4d802403bfc004ea633ce542bc262ee5c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", - "reference": "712a31b768f5daea284c2169a7d227031001b9a8", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9b85ae4d802403bfc004ea633ce542bc262ee5c3", + "reference": "9b85ae4d802403bfc004ea633ce542bc262ee5c3", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.4.4 || ^8.0.4" + "symfony/console": "^7.4.23 || ^8.1.11" }, "require-dev": { - "illuminate/console": "^11.47.0", - "laravel/pint": "^1.27.1", - "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", - "phpstan/phpstan": "^1.12.32", + "illuminate/console": "^11.51 || ^12.70 || ^13.40", + "laravel/pint": "^1.30.4", + "mockery/mockery": "^1.6.15", + "pestphp/pest": "^2.36.1 || ^3.8.7 || ^4.7.8 || ^5.3.5", + "phpstan/phpstan": "^1.12.34", "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.3.5 || ^8.0.4", + "symfony/var-dumper": "^7.4.22 || ^8.1.10", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4821,7 +5794,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.1" }, "funding": [ { @@ -4837,7 +5810,8 @@ "type": "github" } ], - "time": "2026-02-16T23:10:27+00:00" + "time": "2026-11-07T03:57:16+00:00", + "published-time": "2026-11-07T04:01:24+00:00" }, { "name": "nyholm/psr7", @@ -4915,50 +5889,244 @@ "type": "github" } ], - "time": "2024-09-09T07:06:30+00:00" + "time": "2024-09-09T07:06:30+00:00", + "published-time": "2024-09-09T07:07:05+00:00" }, { - "name": "paragonie/constant_time_encoding", - "version": "v3.1.3", + "name": "opis/json-schema", + "version": "2.6.1", "source": { "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" + "url": "https://github.com/opis/json-schema.git", + "reference": "7d8685a78db131eb6a1571cc7b4db8f4b59e8628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", - "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "url": "https://api.github.com/repos/opis/json-schema/zipball/7d8685a78db131eb6a1571cc7b4db8f4b59e8628", + "reference": "7d8685a78db131eb6a1571cc7b4db8f4b59e8628", "shasum": "" }, "require": { - "php": "^8" + "ext-json": "*", + "opis/string": "^2.1", + "opis/uri": "^1.0", + "php": "^7.4 || ^8.0" }, "require-dev": { - "infection/infection": "^0", - "nikic/php-fuzzer": "^0", - "phpunit/phpunit": "^9|^10|^11", - "vimeo/psalm": "^4|^5|^6" + "ext-bcmath": "*", + "ext-intl": "*", + "phpunit/phpunit": "^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, "autoload": { "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" + "Opis\\JsonSchema\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" }, { - "name": "Steve 'Sc00bz' Thomas", + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + } + ], + "description": "Json Schema Validator for PHP", + "homepage": "https://opis.io/json-schema", + "keywords": [ + "json", + "json-schema", + "schema", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/opis/json-schema/issues", + "source": "https://github.com/opis/json-schema/tree/2.6.1" + }, + "time": "2026-11-06T04:25:16+00:00", + "published-time": "2026-11-06T04:35:54+00:00" + }, + { + "name": "opis/string", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/opis/string.git", + "reference": "3e4d2aaff518ac518530b89bb26ed40f4503635e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/string/zipball/3e4d2aaff518ac518530b89bb26ed40f4503635e", + "reference": "3e4d2aaff518ac518530b89bb26ed40f4503635e", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "ext-json": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\String\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "Multibyte strings as objects", + "homepage": "https://opis.io/string", + "keywords": [ + "multi-byte", + "opis", + "string", + "string manipulation", + "utf-8" + ], + "support": { + "issues": "https://github.com/opis/string/issues", + "source": "https://github.com/opis/string/tree/2.1.0" + }, + "time": "2025-10-17T12:38:41+00:00", + "published-time": "2025-10-17T12:40:48+00:00" + }, + { + "name": "opis/uri", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/opis/uri.git", + "reference": "0f3ca49ab1a5e4a6681c286e0b2cc081b93a7d5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/uri/zipball/0f3ca49ab1a5e4a6681c286e0b2cc081b93a7d5a", + "reference": "0f3ca49ab1a5e4a6681c286e0b2cc081b93a7d5a", + "shasum": "" + }, + "require": { + "opis/string": "^2.0", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "Build, parse and validate URIs and URI-templates", + "homepage": "https://opis.io", + "keywords": [ + "URI Template", + "parse url", + "punycode", + "uri", + "uri components", + "url", + "validate uri" + ], + "support": { + "issues": "https://github.com/opis/uri/issues", + "source": "https://github.com/opis/uri/tree/1.1.0" + }, + "time": "2021-05-22T15:57:08+00:00", + "published-time": "2021-05-22T16:01:15+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.1.4", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "5efef6e6cb43e088ccab7d0c1e2f2ab25b9e8b54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/5efef6e6cb43e088ccab7d0c1e2f2ab25b9e8b54", + "reference": "5efef6e6cb43e088ccab7d0c1e2f2ab25b9e8b54", + "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" @@ -4984,24 +6152,161 @@ "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" + "time": "2026-11-06T20:31:19+00:00", + "published-time": "2026-11-06T20:39:39+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00", + "published-time": "2020-10-15T08:34:16+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00", + "published-time": "2024-10-02T11:21:00+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "reference": "ee15a5a2022c8383906b225055e9496a6a5e6e3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/ee15a5a2022c8383906b225055e9496a6a5e6e3b", + "reference": "ee15a5a2022c8383906b225055e9496a6a5e6e3b", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -5025,7 +6330,7 @@ } ], "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "homepage": "https://www.phpdoc.org", "keywords": [ "FQSEN", "phpDocumentor", @@ -5035,22 +6340,23 @@ ], "support": { "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.2.1" }, - "time": "2020-06-27T09:03:43+00:00" + "time": "2025-11-10T21:21:55+00:00", + "published-time": "2026-09-27T10:14:49+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.7", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "31a105931bc8ffa3a123383829772e832fd8d903" + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/31a105931bc8ffa3a123383829772e832fd8d903", - "reference": "31a105931bc8ffa3a123383829772e832fd8d903", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", "shasum": "" }, "require": { @@ -5058,8 +6364,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": { @@ -5069,7 +6375,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": { @@ -5099,44 +6406,45 @@ "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.7" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3" }, - "time": "2026-03-18T20:47:46+00:00" + "time": "2026-03-18T20:49:53+00:00", + "published-time": "2026-03-18T20:51:16+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.12.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" + "reference": "dbe2133bb23e2e33a6834f4ed417f24a1b167769" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", - "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dbe2133bb23e2e33a6834f4ed417f24a1b167769", + "reference": "dbe2133bb23e2e33a6834f4ed417f24a1b167769", "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": { @@ -5157,22 +6465,23 @@ "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.1.0" }, - "time": "2025-11-21T15:09:14+00:00" + "time": "2026-09-27T19:32:54+00:00", + "published-time": "2026-09-28T18:39:55+00:00" }, { "name": "phpoffice/phpspreadsheet", - "version": "5.7.0", + "version": "5.11.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "9f55d3b9b7bcb1084fda8340e4b7ce4ed10cd0c8" + "reference": "3aa1f0d0f3c658b803c18050ac49244d07d96907" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/9f55d3b9b7bcb1084fda8340e4b7ce4ed10cd0c8", - "reference": "9f55d3b9b7bcb1084fda8340e4b7ce4ed10cd0c8", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/3aa1f0d0f3c658b803c18050ac49244d07d96907", + "reference": "3aa1f0d0f3c658b803c18050ac49244d07d96907", "shasum": "" }, "require": { @@ -5194,13 +6503,16 @@ "maennchen/zipstream-php": "^2.1 || ^3.0", "markbaker/complex": "^3.0", "markbaker/matrix": "^3.0", - "php": "^8.1", + "php": "^8.2", + "phpoffice/wmf": "^0.2.1", "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { + "cyclonedx/cyclonedx-php-composer": "^6.2", "dealerdirect/phpcodesniffer-composer-installer": "dev-main", "dompdf/dompdf": "^2.0 || ^3.0", "ext-intl": "*", + "ext-openssl": "*", "friendsofphp/php-cs-fixer": "^3.2", "mitoteam/jpgraph": "^10.5", "mpdf/mpdf": "^8.1.1", @@ -5208,13 +6520,14 @@ "phpstan/phpstan": "^1.1 || ^2.0", "phpstan/phpstan-deprecation-rules": "^1.0 || ^2.0", "phpstan/phpstan-phpunit": "^1.0 || ^2.0", - "phpunit/phpunit": "^10.5", + "phpunit/phpunit": "^10.5 || ^11.0", "squizlabs/php_codesniffer": "^3.7", - "tecnickcom/tcpdf": "^6.5" + "tecnickcom/tcpdf": ">=6.8.0 <7.0.0" }, "suggest": { "dompdf/dompdf": "Option for rendering PDF with PDF Writer", "ext-intl": "PHP Internationalization Functions, required for NumberFormat Wizard and StringHelper::setLocale()", + "ext-openssl": "Handline Agile-encrypted Xlsx spreadsheets", "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", "mpdf/mpdf": "Option for rendering PDF with PDF Writer", "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" @@ -5266,269 +6579,321 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.7.0" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.11.0" }, - "time": "2026-04-20T02:42:17+00:00" + "time": "2026-11-08T06:29:49+00:00", + "published-time": "2026-11-08T06:49:56+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.9.5", + "name": "phpoffice/wmf", + "version": "0.2.1", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + "url": "https://github.com/PHPOffice/WMF.git", + "reference": "d1eafbab74509ee2adfcdda3888737cd8d349820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "url": "https://api.github.com/repos/PHPOffice/WMF/zipball/d1eafbab74509ee2adfcdda3888737cd8d349820", + "reference": "d1eafbab74509ee2adfcdda3888737cd8d349820", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" + "ext-gd": "*", + "php": "^7.1|^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + "phpstan/phpstan": "^0.12.88 || ^1.0.0", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, "autoload": { "psr-4": { - "PhpOption\\": "src/PhpOption/" + "PhpOffice\\WMF\\": "src/WMF/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" + "name": "Progi1984", + "homepage": "https://lefevre.dev" } ], - "description": "Option Type for PHP", + "description": "WMF - Manipulate WMF Images", + "homepage": "https://phpoffice.github.io/WMF/", "keywords": [ - "language", - "option", + "emf", + "image", "php", - "type" + "wmf" ], "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + "issues": "https://github.com/PHPOffice/WMF/issues", + "source": "https://github.com/PHPOffice/WMF/tree/0.2.1" }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2025-12-27T19:41:33+00:00" + "time": "2026-10-08T19:34:28+00:00", + "published-time": "2026-10-08T19:36:12+00:00" }, { - "name": "phpstan/phpdoc-parser", - "version": "2.3.2", + "name": "phpoption/phpoption", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "67b192b6a42ec03944b972d6e633ddec78ad2c6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/67b192b6a42ec03944b972d6e633ddec78ad2c6d", + "reference": "67b192b6a42ec03944b972d6e633ddec78ad2c6d", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.54 || ^9.6.36 || ^10.5.64 || ^11.5.56 || ^12.5.33" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, "autoload": { "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] + "PhpOption\\": "src/PhpOption/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" ], - "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.2" + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.10.0" }, - "time": "2026-01-25T14:56:51+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2026-08-24T00:54:40+00:00", + "published-time": "2026-08-24T01:09:05+00:00" }, { - "name": "pixelandtonic/graphql-php", - "version": "v14.11.10.1", + "name": "phpseclib/phpseclib", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/pixelandtonic/graphql-php.git", - "reference": "fdb4a288878fc9ee449245e17209d676fc7c57fd" + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "bb7b959c8159957edae6f5084ebbac765d310e16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pixelandtonic/graphql-php/zipball/fdb4a288878fc9ee449245e17209d676fc7c57fd", - "reference": "fdb4a288878fc9ee449245e17209d676fc7c57fd", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/bb7b959c8159957edae6f5084ebbac765d310e16", + "reference": "bb7b959c8159957edae6f5084ebbac765d310e16", "shasum": "" }, "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^7.1 || ^8" + "paragonie/constant_time_encoding": "^2|^3", + "php": ">=8.1", + "symfony/polyfill-php82": "^1.26" }, "require-dev": { - "amphp/amp": "^2.3", - "doctrine/coding-standard": "^6.0", - "nyholm/psr7": "^1.2", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "0.12.82", - "phpstan/phpstan-phpunit": "0.12.18", - "phpstan/phpstan-strict-rules": "0.12.9", - "phpunit/phpunit": "^7.2 || ^8.5", - "psr/http-message": "^1.0", - "react/promise": "2.*", - "simpod/php-coveralls-mirror": "^3.0" + "brianium/paratest": "^7.22", + "ext-xml": "*", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpunit/phpunit": "^13", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "*" }, "suggest": { - "psr/http-message": "To use standard GraphQL server", - "react/promise": "To leverage async resolving on React PHP platform" + "ext-dom": "Install the DOM extension to load XML formatted public keys.", + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, "type": "library", "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], "psr-4": { - "GraphQL\\": "src/" + "phpseclib4\\": "phpseclib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A PHP port of GraphQL reference implementation", - "homepage": "https://github.com/webonyx/graphql-php", + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + }, + { + "name": "Jack Worman", + "email": "jack.worman@gmail.com", + "homepage": "https://jackworman.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "https://phpseclib.com/", "keywords": [ - "api", - "graphql" + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" ], "support": { - "source": "https://github.com/pixelandtonic/graphql-php/tree/v14.11.10.1" + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/4.0.1" }, "funding": [ { - "url": "https://opencollective.com/webonyx-graphql-php", - "type": "open_collective" + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" } ], - "time": "2026-04-14T15:27:52+00:00" + "time": "2026-08-26T12:15:13+00:00", + "published-time": "2026-08-26T12:17:11+00:00" }, { - "name": "pixelandtonic/imagine", - "version": "1.3.3.1", + "name": "phpstan/phpdoc-parser", + "version": "2.4.1", "source": { "type": "git", - "url": "https://github.com/pixelandtonic/Imagine.git", - "reference": "4d9bb596ff60504e37ccf9103c0bb705dba7fec6" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "af8e840551031d254cfdb3a18a62c3470a309c10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pixelandtonic/Imagine/zipball/4d9bb596ff60504e37ccf9103c0bb705dba7fec6", - "reference": "4d9bb596ff60504e37ccf9103c0bb705dba7fec6", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/af8e840551031d254cfdb3a18a62c3470a309c10", + "reference": "af8e840551031d254cfdb3a18a62c3470a309c10", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3" - }, - "suggest": { - "ext-exif": "to read EXIF metadata", - "ext-gd": "to use the GD implementation", - "ext-gmagick": "to use the Gmagick implementation", - "ext-imagick": "to use the Imagick implementation" + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Imagine\\": "src/" + "PHPStan\\PhpDocParser\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Bulat Shakirzyanov", - "email": "mallluhuct@gmail.com", - "homepage": "http://avalanche123.com" - } - ], - "description": "Image processing for PHP 5.3", - "homepage": "http://imagine.readthedocs.org/", - "keywords": [ - "drawing", - "graphics", - "image manipulation", - "image processing" - ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "source": "https://github.com/pixelandtonic/Imagine/tree/1.3.3.1" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.4.1" }, - "time": "2023-01-03T19:18:06+00:00" + "time": "2026-10-30T19:36:28+00:00", + "published-time": "2026-10-30T19:37:11+00:00" }, { "name": "pragmarx/google2fa", - "version": "v8.0.3", + "version": "v9.1.0", "source": { "type": "git", "url": "https://github.com/antonioribeiro/google2fa.git", - "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad" + "reference": "f00bc788c555adfb6765c437ff3538e59cd88af1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", - "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/f00bc788c555adfb6765c437ff3538e59cd88af1", + "reference": "f00bc788c555adfb6765c437ff3538e59cd88af1", "shasum": "" }, "require": { @@ -5536,8 +6901,11 @@ "php": "^7.1|^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^7.5.15|^8.5|^9.0" + "phpstan/phpstan": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.0|^2.0", + "phpunit/phpunit": "~9|~10|~11|~12|~13", + "psalm/plugin-phpunit": "^0.19|^0.20", + "vimeo/psalm": "^5.26|^6.13" }, "type": "library", "autoload": { @@ -5560,14 +6928,24 @@ "keywords": [ "2fa", "Authentication", + "MFA", "Two Factor Authentication", - "google2fa" + "google-authenticator", + "google2fa", + "hotp", + "otp", + "rfc4226", + "rfc6238", + "totp" ], "support": { + "docs": "https://github.com/antonioribeiro/google2fa#readme", "issues": "https://github.com/antonioribeiro/google2fa/issues", - "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.3" + "security": "https://github.com/antonioribeiro/google2fa/security/policy", + "source": "https://github.com/antonioribeiro/google2fa" }, - "time": "2024-09-05T11:56:40+00:00" + "time": "2026-08-15T13:22:01+00:00", + "published-time": "2026-08-15T13:28:13+00:00" }, { "name": "pragmarx/random", @@ -5634,7 +7012,8 @@ "issues": "https://github.com/antonioribeiro/random/issues", "source": "https://github.com/antonioribeiro/random/tree/master" }, - "time": "2017-11-21T05:26:22+00:00" + "time": "2017-11-21T05:26:22+00:00", + "published-time": "2017-11-21T05:30:14+00:00" }, { "name": "pragmarx/recovery", @@ -5702,7 +7081,8 @@ "issues": "https://github.com/antonioribeiro/recovery/issues", "source": "https://github.com/antonioribeiro/recovery/tree/v0.2.1" }, - "time": "2021-08-15T12:26:51+00:00" + "time": "2021-08-15T12:26:51+00:00", + "published-time": "2021-08-15T12:28:29+00:00" }, { "name": "psr/clock", @@ -5750,7 +7130,8 @@ "issues": "https://github.com/php-fig/clock/issues", "source": "https://github.com/php-fig/clock/tree/1.0.0" }, - "time": "2022-11-25T14:36:26+00:00" + "time": "2022-11-25T14:36:26+00:00", + "published-time": "2022-11-25T14:59:22+00:00" }, { "name": "psr/container", @@ -5803,7 +7184,8 @@ "issues": "https://github.com/php-fig/container/issues", "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2021-11-05T16:47:00+00:00", + "published-time": "2021-11-05T16:53:27+00:00" }, { "name": "psr/event-dispatcher", @@ -5853,7 +7235,8 @@ "issues": "https://github.com/php-fig/event-dispatcher/issues", "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" }, - "time": "2019-01-08T18:20:26+00:00" + "time": "2019-01-08T18:20:26+00:00", + "published-time": "2019-03-25T15:31:44+00:00" }, { "name": "psr/http-client", @@ -5905,7 +7288,8 @@ "support": { "source": "https://github.com/php-fig/http-client" }, - "time": "2023-09-23T14:17:50+00:00" + "time": "2023-09-23T14:17:50+00:00", + "published-time": "2023-09-23T14:18:12+00:00" }, { "name": "psr/http-factory", @@ -5960,7 +7344,8 @@ "support": { "source": "https://github.com/php-fig/http-factory" }, - "time": "2024-04-15T12:06:14+00:00" + "time": "2024-04-15T12:06:14+00:00", + "published-time": "2024-05-10T07:32:19+00:00" }, { "name": "psr/http-message", @@ -6013,7 +7398,8 @@ "support": { "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:54:51+00:00" + "time": "2023-04-04T09:54:51+00:00", + "published-time": "2023-04-04T09:55:35+00:00" }, { "name": "psr/http-server-handler", @@ -6069,7 +7455,66 @@ "support": { "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2" }, - "time": "2023-04-10T20:06:20+00:00" + "time": "2023-04-10T20:06:20+00:00", + "published-time": "2023-04-10T20:07:30+00:00" + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829", + "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/http-server-handler": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-middleware/issues", + "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2" + }, + "time": "2023-04-11T06:14:47+00:00", + "published-time": "2023-04-11T06:15:22+00:00" }, { "name": "psr/log", @@ -6119,7 +7564,8 @@ "support": { "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2024-09-11T13:17:53+00:00" + "time": "2024-09-11T13:17:53+00:00", + "published-time": "2024-09-11T13:21:14+00:00" }, { "name": "psr/simple-cache", @@ -6170,20 +7616,21 @@ "support": { "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2021-10-29T13:26:27+00:00" + "time": "2021-10-29T13:26:27+00:00", + "published-time": "2021-10-29T13:27:19+00:00" }, { "name": "psy/psysh", - "version": "v0.12.22", + "version": "v0.12.24", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f" + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f", - "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", "shasum": "" }, "require": { @@ -6247,9 +7694,10 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.22" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.24" }, - "time": "2026-03-22T23:03:24+00:00" + "time": "2026-06-29T15:41:09+00:00", + "published-time": "2026-06-29T15:41:53+00:00" }, { "name": "ralouphie/getallheaders", @@ -6293,7 +7741,8 @@ "issues": "https://github.com/ralouphie/getallheaders/issues", "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "time": "2019-03-08T08:55:37+00:00" + "time": "2019-03-08T08:55:37+00:00", + "published-time": "2019-03-08T09:01:32+00:00" }, { "name": "ramsey/collection", @@ -6369,24 +7818,25 @@ "issues": "https://github.com/ramsey/collection/issues", "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "time": "2025-03-22T05:38:12+00:00" + "time": "2025-03-22T05:38:12+00:00", + "published-time": "2025-03-22T05:39:22+00:00" }, { "name": "ramsey/uuid", - "version": "4.x-dev", + "version": "4.9.4", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "1a1f98b037d664d9093a620cfa85305c7e50b244" + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/1a1f98b037d664d9093a620cfa85305c7e50b244", - "reference": "1a1f98b037d664d9093a620cfa85305c7e50b244", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2", "shasum": "" }, "require": { - "brick/math": ">=0.8.16 <=0.17", + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -6419,7 +7869,6 @@ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, - "default-branch": true, "type": "library", "extra": { "captainhook": { @@ -6446,22 +7895,23 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.x" + "source": "https://github.com/ramsey/uuid/tree/4.9.4" }, - "time": "2026-04-27T22:11:13+00:00" + "time": "2026-09-16T11:39:30+00:00", + "published-time": "2026-09-16T11:41:15+00:00" }, { "name": "riverline/multipart-parser", - "version": "2.2.2", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/Riverline/multipart-parser.git", - "reference": "fadbb1c1f8e66f96eaa36ab8ed13cbc451c6ded7" + "reference": "abec534bc0b17e5a5462f0705e2e331458405595" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Riverline/multipart-parser/zipball/fadbb1c1f8e66f96eaa36ab8ed13cbc451c6ded7", - "reference": "fadbb1c1f8e66f96eaa36ab8ed13cbc451c6ded7", + "url": "https://api.github.com/repos/Riverline/multipart-parser/zipball/abec534bc0b17e5a5462f0705e2e331458405595", + "reference": "abec534bc0b17e5a5462f0705e2e331458405595", "shasum": "" }, "require": { @@ -6502,28 +7952,30 @@ ], "support": { "issues": "https://github.com/Riverline/multipart-parser/issues", - "source": "https://github.com/Riverline/multipart-parser/tree/2.2.2" + "source": "https://github.com/Riverline/multipart-parser/tree/2.3.0" }, - "time": "2026-01-15T11:08:16+00:00" + "time": "2026-11-05T15:12:49+00:00", + "published-time": "2026-11-05T15:16:23+00:00" }, { "name": "spomky-labs/cbor-php", - "version": "3.2.3", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/cbor-php.git", - "reference": "dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32" + "reference": "8f5ea00a07ad529d20886505cdbeb2b9ac7bb2d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32", - "reference": "dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32", + "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/8f5ea00a07ad529d20886505cdbeb2b9ac7bb2d6", + "reference": "8f5ea00a07ad529d20886505cdbeb2b9ac7bb2d6", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17", + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18|^0.19|^0.20|^1.0", "ext-mbstring": "*", - "php": ">=8.0" + "php": ">=8.0", + "symfony/polyfill-php81": "^1.32" }, "require-dev": { "ext-json": "*", @@ -6532,8 +7984,8 @@ "symfony/var-dumper": "^6.4|^7.1|^8.0" }, "suggest": { - "ext-bcmath": "GMP or BCMath extensions will drastically improve the library performance. BCMath extension needed to handle the Big Float and Decimal Fraction Tags", - "ext-gmp": "GMP or BCMath extensions will drastically improve the library performance" + "ext-bcmath": "Improves the library performance when ext-gmp is missing, and is required to handle the Big Float and Decimal Fraction Tags (4 and 5)", + "ext-gmp": "Strongly recommended when decoding untrusted input: without it, converting the byte string of a Big Number Tag (2 and 3) is quadratic in its length. Also improves the library performance overall" }, "type": "library", "autoload": { @@ -6563,7 +8015,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/cbor-php/issues", - "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.2.3" + "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.4.2" }, "funding": [ { @@ -6575,50 +8027,51 @@ "type": "patreon" } ], - "time": "2026-04-01T12:15:20+00:00" + "time": "2026-09-15T06:55:29+00:00", + "published-time": "2026-09-15T06:57:54+00:00" }, { "name": "spomky-labs/pki-framework", - "version": "1.4.2", + "version": "1.6.3", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/pki-framework.git", - "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8" + "reference": "792e909d4e387adffe3c4f404451c7d57a3d2022" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/aa576cbd07128075bef97ac2f8af9854e67513d8", - "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/792e909d4e387adffe3c4f404451c7d57a3d2022", + "reference": "792e909d4e387adffe3c4f404451c7d57a3d2022", "shasum": "" }, "require": { - "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17", + "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18|^0.19|^0.20|^1.0", "ext-mbstring": "*", - "php": ">=8.1", - "psr/clock": "^1.0" + "php": ">=8.1" }, "require-dev": { "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", "ext-gmp": "*", "ext-openssl": "*", - "infection/infection": "^0.28|^0.29|^0.31|^0.32", + "infection/infection": "^0.28|^0.29|^0.31", "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|^13.0", + "phpunit/phpunit": "^10.1|^11.0|^12.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|^13.0" + "symplify/easy-coding-standard": "^12.0 || ^13.0" }, "suggest": { "ext-bcmath": "For better performance (or GMP)", "ext-gmp": "For better performance (or BCMath)", - "ext-openssl": "For OpenSSL based cyphering" + "ext-openssl": "For OpenSSL based cyphering", + "ext-sodium": "To verify Ed25519 signatures where the OpenSSL extension has no EdDSA" }, "type": "library", "autoload": { @@ -6673,7 +8126,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/pki-framework/issues", - "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.2" + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.6.3" }, "funding": [ { @@ -6685,26 +8138,26 @@ "type": "patreon" } ], - "time": "2026-03-23T22:56:56+00:00" + "time": "2026-09-12T19:02:49+00:00", + "published-time": "2026-09-12T19:03:18+00:00" }, { "name": "symfony/clock", - "version": "v7.4.8", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111" + "reference": "945ea3b64d6da9c1c2c354fe5c07b27455df6442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/674fa3b98e21531dd040e613479f5f6fa8f32111", - "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111", + "url": "https://api.github.com/repos/symfony/clock/zipball/945ea3b64d6da9c1c2c354fe5c07b27455df6442", + "reference": "945ea3b64d6da9c1c2c354fe5c07b27455df6442", "shasum": "" }, "require": { - "php": ">=8.2", - "psr/clock": "^1.0", - "symfony/polyfill-php83": "^1.28" + "php": ">=8.4.1", + "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" @@ -6743,7 +8196,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.4.8" + "source": "https://github.com/symfony/clock/tree/v8.1.9" }, "funding": [ { @@ -6763,27 +8216,34 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-10-12T14:32:04+00:00", + "published-time": "2026-10-14T06:48:32+00:00" }, { "name": "symfony/console", - "version": "v8.0.9", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7113778e2e91f4709cb3194a75dfa9c0d028d94d" + "reference": "5a315b092b81f3e920e9daea1a2ae4c66ed298b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7113778e2e91f4709cb3194a75dfa9c0d028d94d", - "reference": "7113778e2e91f4709cb3194a75dfa9c0d028d94d", + "url": "https://api.github.com/repos/symfony/console/zipball/5a315b092b81f3e920e9daea1a2ae4c66ed298b9", + "reference": "5a315b092b81f3e920e9daea1a2ae4c66ed298b9", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.4|^8.0" + "symfony/string": "^7.4.6|^8.0.6" + }, + "conflict": { + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -6791,14 +8251,18 @@ "require-dev": { "psr/log": "^1|^2|^3", "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/http-kernel": "^7.4|^8.0", "symfony/lock": "^7.4|^8.0", "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", "symfony/process": "^7.4|^8.0", "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", @@ -6833,7 +8297,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.0.9" + "source": "https://github.com/symfony/console/tree/v8.1.11" }, "funding": [ { @@ -6853,24 +8317,25 @@ "type": "tidelift" } ], - "time": "2026-04-29T15:02:55+00:00" + "time": "2026-11-04T07:07:11+00:00", + "published-time": "2026-11-04T11:31:39+00:00" }, { "name": "symfony/css-selector", - "version": "v8.0.9", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "3665cfade90565430909b906394c73c8739e57d0" + "reference": "9cfd588b8b07cf83e3426b030dbafd2291c132d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/3665cfade90565430909b906394c73c8739e57d0", - "reference": "3665cfade90565430909b906394c73c8739e57d0", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/9cfd588b8b07cf83e3426b030dbafd2291c132d9", + "reference": "9cfd588b8b07cf83e3426b030dbafd2291c132d9", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -6902,7 +8367,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v8.0.9" + "source": "https://github.com/symfony/css-selector/tree/v8.1.10" }, "funding": [ { @@ -6922,20 +8387,21 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:51:42+00:00" + "time": "2026-10-18T14:56:39+00:00", + "published-time": "2026-10-28T18:24:46+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.7.0", + "version": "v3.8.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" + "reference": "feb1edf4e546af3b85c5caebe8359a20db230ca3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", - "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/feb1edf4e546af3b85c5caebe8359a20db230ca3", + "reference": "feb1edf4e546af3b85c5caebe8359a20db230ca3", "shasum": "" }, "require": { @@ -6948,7 +8414,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.7-dev" + "dev-main": "3.8-dev" } }, "autoload": { @@ -6973,7 +8439,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.7.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.8.1" }, "funding": [ { @@ -6993,24 +8459,25 @@ "type": "tidelift" } ], - "time": "2026-04-13T15:52:40+00:00" + "time": "2026-09-16T14:15:10+00:00", + "published-time": "2026-11-04T11:25:34+00:00" }, { "name": "symfony/dom-crawler", - "version": "v8.0.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "284ace90732b445b027728b5e0eec6418a17a364" + "reference": "aa0674b52e1bd00502756fbaba8c982b446472e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/284ace90732b445b027728b5e0eec6418a17a364", - "reference": "284ace90732b445b027728b5e0eec6418a17a364", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/aa0674b52e1bd00502756fbaba8c982b446472e6", + "reference": "aa0674b52e1bd00502756fbaba8c982b446472e6", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.0" }, @@ -7043,7 +8510,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v8.0.8" + "source": "https://github.com/symfony/dom-crawler/tree/v8.1.10" }, "funding": [ { @@ -7063,24 +8530,25 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-10-25T14:40:25+00:00", + "published-time": "2026-10-28T18:24:41+00:00" }, { "name": "symfony/error-handler", - "version": "v8.0.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517" + "reference": "84c6d73f990ae22dbd45625c056d7ff99ca6810d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1119fe8dcfc3825ec74ec061b96ef0c8f281517", - "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/84c6d73f990ae22dbd45625c056d7ff99ca6810d", + "reference": "84c6d73f990ae22dbd45625c056d7ff99ca6810d", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", "symfony/polyfill-php85": "^1.32", "symfony/var-dumper": "^7.4|^8.0" @@ -7124,7 +8592,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v8.0.8" + "source": "https://github.com/symfony/error-handler/tree/v8.1.10" }, "funding": [ { @@ -7144,24 +8612,26 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-10-25T14:40:25+00:00", + "published-time": "2026-10-28T18:24:13+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v8.0.9", + "version": "v8.1.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f" + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0c3c1a17604c4dbbec4b93fe162c538482096e1f", - "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7458da64220376b2e0dc2d8451bf43382c1ad297", + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { @@ -7209,7 +8679,7 @@ "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": { - "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.5" }, "funding": [ { @@ -7229,20 +8699,21 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:51:42+00:00" + "time": "2026-08-21T17:47:34+00:00", + "published-time": "2026-08-22T13:46:58+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.7.0", + "version": "v3.8.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" + "reference": "658e29751424da3ef4758c60f769e59d1b2981eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", - "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/658e29751424da3ef4758c60f769e59d1b2981eb", + "reference": "658e29751424da3ef4758c60f769e59d1b2981eb", "shasum": "" }, "require": { @@ -7256,7 +8727,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.7-dev" + "dev-main": "3.8-dev" } }, "autoload": { @@ -7289,7 +8760,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.8.1" }, "funding": [ { @@ -7309,24 +8780,26 @@ "type": "tidelift" } ], - "time": "2026-01-05T13:30:16+00:00" + "time": "2026-09-16T14:15:10+00:00", + "published-time": "2026-11-04T11:25:36+00:00" }, { "name": "symfony/filesystem", - "version": "v8.0.9", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40" + "reference": "58f57b6a33e3495f7f41e01258f1ae5ef76cccd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40", - "reference": "d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/58f57b6a33e3495f7f41e01258f1ae5ef76cccd2", + "reference": "58f57b6a33e3495f7f41e01258f1ae5ef76cccd2", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -7359,7 +8832,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.0.9" + "source": "https://github.com/symfony/filesystem/tree/v8.1.11" }, "funding": [ { @@ -7379,24 +8852,25 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:51:42+00:00" + "time": "2026-11-04T08:39:20+00:00", + "published-time": "2026-11-04T11:32:01+00:00" }, { "name": "symfony/finder", - "version": "v8.0.8", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8da41214757b87d97f181e3d14a4179286151007" + "reference": "a2902e479ba5691d20d51d100a715ea19ad2c837" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8da41214757b87d97f181e3d14a4179286151007", - "reference": "8da41214757b87d97f181e3d14a4179286151007", + "url": "https://api.github.com/repos/symfony/finder/zipball/a2902e479ba5691d20d51d100a715ea19ad2c837", + "reference": "a2902e479ba5691d20d51d100a715ea19ad2c837", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.4.1" }, "require-dev": { "symfony/filesystem": "^7.4|^8.0" @@ -7427,7 +8901,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v8.0.8" + "source": "https://github.com/symfony/finder/tree/v8.1.11" }, "funding": [ { @@ -7447,26 +8921,27 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-11-02T10:58:30+00:00", + "published-time": "2026-11-04T11:31:20+00:00" }, { "name": "symfony/html-sanitizer", - "version": "v8.0.8", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "b0e4a2d9a82ab6bdcc742a63398781f6dae64fe5" + "reference": "1ecf13d98b75f5d8a2dcc1ffecde7184d29506ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/b0e4a2d9a82ab6bdcc742a63398781f6dae64fe5", - "reference": "b0e4a2d9a82ab6bdcc742a63398781f6dae64fe5", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/1ecf13d98b75f5d8a2dcc1ffecde7184d29506ef", + "reference": "1ecf13d98b75f5d8a2dcc1ffecde7184d29506ef", "shasum": "" }, "require": { "ext-dom": "*", "league/uri": "^6.5|^7.0", - "php": ">=8.4" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -7499,7 +8974,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v8.0.8" + "source": "https://github.com/symfony/html-sanitizer/tree/v8.1.11" }, "funding": [ { @@ -7519,24 +8994,26 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-11-04T08:39:20+00:00", + "published-time": "2026-11-04T11:31:16+00:00" }, { "name": "symfony/http-foundation", - "version": "v8.0.8", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b" + "reference": "30fa3efe6e736b0d06f5331cc6abe813582c0a26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02656f7ebeae5c155d659e946f6b3a33df24051b", - "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/30fa3efe6e736b0d06f5331cc6abe813582c0a26", + "reference": "30fa3efe6e736b0d06f5331cc6abe813582c0a26", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "^1.1" }, "conflict": { @@ -7579,7 +9056,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v8.0.8" + "source": "https://github.com/symfony/http-foundation/tree/v8.1.11" }, "funding": [ { @@ -7599,34 +9076,40 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-11-04T08:39:20+00:00", + "published-time": "2026-11-04T11:31:54+00:00" }, { "name": "symfony/http-kernel", - "version": "v8.0.10", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "fb3f65b3d4ca2dad31c80d323819a762ca31d6ac" + "reference": "460658504e26a2794aa614b4fbe6cf9bac2076fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fb3f65b3d4ca2dad31c80d323819a762ca31d6ac", - "reference": "fb3f65b3d4ca2dad31c80d323819a762ca31d6ac", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/460658504e26a2794aa614b4fbe6cf9bac2076fe", + "reference": "460658504e26a2794aa614b4fbe6cf9bac2076fe", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^7.4|^8.0", "symfony/event-dispatcher": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { + "symfony/dependency-injection": "<8.1", "symfony/flex": "<2.10", "symfony/http-client-contracts": "<2.5", + "symfony/serializer": "<7.4.15|>=8.0,<8.0.15|>=8.1,<8.1.2", "symfony/translation-contracts": "<2.5", + "symfony/var-dumper": "<8.1", + "symfony/web-profiler-bundle": "<8.1", "twig/twig": "<3.21" }, "provide": { @@ -7639,13 +9122,14 @@ "symfony/config": "^7.4|^8.0", "symfony/console": "^7.4|^8.0", "symfony/css-selector": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", "symfony/dom-crawler": "^7.4|^8.0", "symfony/expression-language": "^7.4|^8.0", "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3", "symfony/process": "^7.4|^8.0", "symfony/property-access": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", "symfony/routing": "^7.4|^8.0", "symfony/serializer": "^7.4|^8.0", "symfony/stopwatch": "^7.4|^8.0", @@ -7653,9 +9137,9 @@ "symfony/translation-contracts": "^2.5|^3", "symfony/uid": "^7.4|^8.0", "symfony/validator": "^7.4|^8.0", - "symfony/var-dumper": "^7.4|^8.0", + "symfony/var-dumper": "^8.1", "symfony/var-exporter": "^7.4|^8.0", - "twig/twig": "^3.21" + "twig/twig": "^3.21|^4.0" }, "type": "library", "autoload": { @@ -7683,7 +9167,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v8.0.10" + "source": "https://github.com/symfony/http-kernel/tree/v8.1.11" }, "funding": [ { @@ -7703,25 +9187,26 @@ "type": "tidelift" } ], - "time": "2026-05-06T12:27:31+00:00" + "time": "2026-11-04T11:29:46+00:00", + "published-time": "2026-11-04T11:32:19+00:00" }, { "name": "symfony/mailer", - "version": "v8.0.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56" + "reference": "4ba81a8f04fbf0bb1691f7bff760b301f1956fd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/ca5f6edaf8780ece814404b58a4482b22b509c56", - "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56", + "url": "https://api.github.com/repos/symfony/mailer/zipball/4ba81a8f04fbf0bb1691f7bff760b301f1956fd7", + "reference": "4ba81a8f04fbf0bb1691f7bff760b301f1956fd7", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.4", + "php": ">=8.4.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^7.4|^8.0", @@ -7763,7 +9248,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v8.0.8" + "source": "https://github.com/symfony/mailer/tree/v8.1.10" }, "funding": [ { @@ -7783,24 +9268,25 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-10-23T17:06:53+00:00", + "published-time": "2026-10-28T18:23:52+00:00" }, { "name": "symfony/mime", - "version": "v8.0.9", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "a9fcb293650c054b62a5b406f4e92e7b711ea333" + "reference": "8d1232052c9cdef170ed9608b3147bca4f61ff69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/a9fcb293650c054b62a5b406f4e92e7b711ea333", - "reference": "a9fcb293650c054b62a5b406f4e92e7b711ea333", + "url": "https://api.github.com/repos/symfony/mime/zipball/8d1232052c9cdef170ed9608b3147bca4f61ff69", + "reference": "8d1232052c9cdef170ed9608b3147bca4f61ff69", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -7817,7 +9303,7 @@ "symfony/process": "^7.4|^8.0", "symfony/property-access": "^7.4|^8.0", "symfony/property-info": "^7.4|^8.0", - "symfony/serializer": "^7.4|^8.0" + "symfony/serializer": "^7.4.17|^8.1.5" }, "type": "library", "autoload": { @@ -7849,7 +9335,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v8.0.9" + "source": "https://github.com/symfony/mime/tree/v8.1.10" }, "funding": [ { @@ -7869,7 +9355,8 @@ "type": "tidelift" } ], - "time": "2026-04-29T15:02:55+00:00" + "time": "2026-10-28T17:58:38+00:00", + "published-time": "2026-10-28T18:23:55+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7952,20 +9439,21 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-04-10T16:19:22+00:00", + "published-time": "2026-04-26T14:44:50+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.37.0", + "version": "v1.43.3", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e" + "reference": "5a8f33c87aeecffce24e721b5064fab05f4becf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e", - "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5a8f33c87aeecffce24e721b5064fab05f4becf8", + "reference": "5a8f33c87aeecffce24e721b5064fab05f4becf8", "shasum": "" }, "require": { @@ -8014,7 +9502,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.43.3" }, "funding": [ { @@ -8034,20 +9522,21 @@ "type": "tidelift" } ], - "time": "2026-04-26T13:13:48+00:00" + "time": "2026-10-15T09:18:53+00:00", + "published-time": "2026-10-28T10:07:44+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.37.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + "reference": "533d68cf99c8f8ee2e8893c59ed59192e92cfd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", - "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/533d68cf99c8f8ee2e8893c59ed59192e92cfd74", + "reference": "533d68cf99c8f8ee2e8893c59ed59192e92cfd74", "shasum": "" }, "require": { @@ -8101,7 +9590,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.43.0" }, "funding": [ { @@ -8121,20 +9610,21 @@ "type": "tidelift" } ], - "time": "2024-09-10T14:38:51+00:00" + "time": "2026-09-23T14:40:04+00:00", + "published-time": "2026-09-30T10:23:39+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.37.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "3833d7255cc303546435cb650316bff708a1c75c" + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", - "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/ebd57ccc7edb93d632e184efbe7693d2517bab3b", + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b", "shasum": "" }, "require": { @@ -8186,7 +9676,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.43.0" }, "funding": [ { @@ -8206,20 +9696,21 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-09-23T22:02:09+00:00", + "published-time": "2026-09-30T10:23:47+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.37.0", + "version": "v1.43.3", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" + "reference": "122889ed24dc000165bcbfd77ec412f15cbdfc6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", - "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/122889ed24dc000165bcbfd77ec412f15cbdfc6a", + "reference": "122889ed24dc000165bcbfd77ec412f15cbdfc6a", "shasum": "" }, "require": { @@ -8271,7 +9762,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.3" }, "funding": [ { @@ -8291,20 +9782,21 @@ "type": "tidelift" } ], - "time": "2026-04-10T17:25:58+00:00" + "time": "2026-10-28T09:35:49+00:00", + "published-time": "2026-10-28T10:07:45+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.37.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", "shasum": "" }, "require": { @@ -8355,7 +9847,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.43.0" }, "funding": [ { @@ -8375,20 +9867,21 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-09-25T15:50:05+00:00", + "published-time": "2026-09-30T10:23:35+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.37.0", + "name": "symfony/polyfill-php81", + "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149", - "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", + "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", "shasum": "" }, "require": { @@ -8406,7 +9899,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, "classmap": [ "Resources/stubs" @@ -8426,7 +9919,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -8435,7 +9928,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.38.1" }, "funding": [ { @@ -8455,20 +9948,21 @@ "type": "tidelift" } ], - "time": "2026-04-10T17:25:58+00:00" + "time": "2026-05-26T12:45:58+00:00", + "published-time": "2026-05-26T13:40:34+00:00" }, { - "name": "symfony/polyfill-php84", - "version": "v1.37.0", + "name": "symfony/polyfill-php82", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", - "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/843bbe8b2a7934307b749751eede0f111f5d1cfc", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc", "shasum": "" }, "require": { @@ -8486,7 +9980,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" + "Symfony\\Polyfill\\Php82\\": "" }, "classmap": [ "Resources/stubs" @@ -8506,7 +10000,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -8515,7 +10009,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-php82/tree/v1.43.0" }, "funding": [ { @@ -8535,20 +10029,102 @@ "type": "tidelift" } ], - "time": "2026-04-10T18:47:49+00:00" + "time": "2026-09-25T15:50:05+00:00", + "published-time": "2026-09-30T10:23:32+00:00" }, { - "name": "symfony/polyfill-php85", - "version": "v1.37.0", + "name": "symfony/polyfill-php84", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/22c6548499cbe5c5bb072fc0c42312dff062a015", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-23T22:01:09+00:00", + "published-time": "2026-09-30T10:23:33+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee" + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/fcfa4973a9917cef23f2e38774da74a2b7d115ee", - "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", "shasum": "" }, "require": { @@ -8595,7 +10171,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.43.0" }, "funding": [ { @@ -8615,20 +10191,21 @@ "type": "tidelift" } ], - "time": "2026-04-26T13:10:57+00:00" + "time": "2026-09-25T15:46:47+00:00", + "published-time": "2026-09-30T10:23:32+00:00" }, { "name": "symfony/polyfill-php86", - "version": "v1.37.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php86.git", - "reference": "33d8fc5a705481e21fe3a81212b26f9b1f61749c" + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/33d8fc5a705481e21fe3a81212b26f9b1f61749c", - "reference": "33d8fc5a705481e21fe3a81212b26f9b1f61749c", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8", "shasum": "" }, "require": { @@ -8675,7 +10252,91 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php86/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-php86/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:46:47+00:00", + "published-time": "2026-09-30T10:23:43+00:00" + }, + { + "name": "symfony/polyfill-time", + "version": "v1.42.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-time.git", + "reference": "ac9f1ed802dd58f37e720388130c088434aa09fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-time/zipball/ac9f1ed802dd58f37e720388130c088434aa09fc", + "reference": "ac9f1ed802dd58f37e720388130c088434aa09fc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Time\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Philippe Nyamagana Butera", + "email": "nyamsprod@gmail.com" + }, + { + "name": "Tim Düsterhus", + "email": "tim@tideways-gmbh.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Time API added to PHP 8.6", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "duration", + "polyfill", + "portable", + "shim", + "time" + ], + "support": { + "source": "https://github.com/symfony/polyfill-time/tree/v1.42.0" }, "funding": [ { @@ -8695,20 +10356,21 @@ "type": "tidelift" } ], - "time": "2026-04-26T13:13:48+00:00" + "time": "2026-08-07T13:08:13+00:00", + "published-time": "2026-08-24T11:45:15+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.37.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/b23ff8245cc5c4479ea2be3d0132d2e6dd433993", + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993", "shasum": "" }, "require": { @@ -8758,7 +10420,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.43.0" }, "funding": [ { @@ -8778,24 +10440,25 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-09-24T05:20:52+00:00", + "published-time": "2026-09-30T10:23:49+00:00" }, { "name": "symfony/process", - "version": "v8.0.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc" + "reference": "08aa69fa0998bb65a089f9e148a2c0f8b391398e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "url": "https://api.github.com/repos/symfony/process/zipball/08aa69fa0998bb65a089f9e148a2c0f8b391398e", + "reference": "08aa69fa0998bb65a089f9e148a2c0f8b391398e", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -8823,7 +10486,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.0.8" + "source": "https://github.com/symfony/process/tree/v8.1.10" }, "funding": [ { @@ -8843,29 +10506,30 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-10-25T14:40:25+00:00", + "published-time": "2026-10-28T18:25:20+00:00" }, { "name": "symfony/property-access", - "version": "v7.4.8", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc" + "reference": "d080c2afa37114d46e4f950ed8593667f01f7cab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", + "url": "https://api.github.com/repos/symfony/property-access/zipball/d080c2afa37114d46e4f950ed8593667f01f7cab", + "reference": "d080c2afa37114d46e4f950ed8593667f01f7cab", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4|^8.0.4" + "php": ">=8.4.1", + "symfony/property-info": "^7.4.4|^8.0.4" }, "require-dev": { - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/var-exporter": "^6.4.1|^7.0.1|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8904,7 +10568,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.4.8" + "source": "https://github.com/symfony/property-access/tree/v8.1.11" }, "funding": [ { @@ -8924,41 +10588,38 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-11-01T19:30:44+00:00", + "published-time": "2026-11-04T11:32:16+00:00" }, { "name": "symfony/property-info", - "version": "v7.4.8", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175" + "reference": "b5afa379a5b54f15a594c1d45ceaa19969d38a16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/ac5e82528b986c4f7cfccbf7764b5d2e824d6175", - "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175", + "url": "https://api.github.com/repos/symfony/property-info/zipball/b5afa379a5b54f15a594c1d45ceaa19969d38a16", + "reference": "b5afa379a5b54f15a594c1d45ceaa19969d38a16", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0|^8.0", + "php": ">=8.4.1", + "symfony/string": "^7.4|^8.0", "symfony/type-info": "^7.4.7|^8.0.7" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2|>=7", - "phpdocumentor/type-resolver": "<1.5.1", - "symfony/cache": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/serializer": "<6.4" + "phpdocumentor/type-resolver": "<1.5.1" }, "require-dev": { "phpdocumentor/reflection-docblock": "^5.2|^6.0", "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4|^7.0|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8994,7 +10655,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.4.8" + "source": "https://github.com/symfony/property-info/tree/v8.1.11" }, "funding": [ { @@ -9014,24 +10675,25 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-11-02T10:58:30+00:00", + "published-time": "2026-11-04T11:32:11+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v8.0.8", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "94facc221260c1d5f20e31ee43cd6c6a824b4a19" + "reference": "cfa8f3ac693fec234a91d8745b45ed9a81a0b799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/94facc221260c1d5f20e31ee43cd6c6a824b4a19", - "reference": "94facc221260c1d5f20e31ee43cd6c6a824b4a19", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/cfa8f3ac693fec234a91d8745b45ed9a81a0b799", + "reference": "cfa8f3ac693fec234a91d8745b45ed9a81a0b799", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "psr/http-message": "^1.0|^2.0", "symfony/http-foundation": "^7.4|^8.0" }, @@ -9081,7 +10743,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v8.0.8" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v8.1.9" }, "funding": [ { @@ -9101,24 +10763,25 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-10-07T08:21:34+00:00", + "published-time": "2026-10-14T06:48:56+00:00" }, { "name": "symfony/routing", - "version": "v8.0.9", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038" + "reference": "f3fefc6cad3748d538be970ca81b71f06d7aa8b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038", - "reference": "75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038", + "url": "https://api.github.com/repos/symfony/routing/zipball/f3fefc6cad3748d538be970ca81b71f06d7aa8b3", + "reference": "f3fefc6cad3748d538be970ca81b71f06d7aa8b3", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { @@ -9161,7 +10824,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v8.0.9" + "source": "https://github.com/symfony/routing/tree/v8.1.11" }, "funding": [ { @@ -9181,63 +10844,59 @@ "type": "tidelift" } ], - "time": "2026-04-29T15:02:55+00:00" + "time": "2026-11-04T08:39:20+00:00", + "published-time": "2026-11-04T11:30:59+00:00" }, { "name": "symfony/serializer", - "version": "v7.4.10", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "268c5aa6c4bd675eddd89348e7ecac292a843ddd" + "reference": "05624c94507c3acf065b6486bb626f0d741af459" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/268c5aa6c4bd675eddd89348e7ecac292a843ddd", - "reference": "268c5aa6c4bd675eddd89348e7ecac292a843ddd", + "url": "https://api.github.com/repos/symfony/serializer/zipball/05624c94507c3acf065b6486bb626f0d741af459", + "reference": "05624c94507c3acf065b6486bb626f0d741af459", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php84": "^1.30" + "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2|>=7", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<6.4", - "symfony/property-access": "<6.4.31|>=7.0,<7.4.2|>=8.0,<8.0.2", - "symfony/property-info": "<6.4", - "symfony/type-info": "<7.2.5", - "symfony/uid": "<6.4", - "symfony/validator": "<6.4", - "symfony/yaml": "<6.4" + "symfony/property-access": "<8.1", + "symfony/property-info": "<7.4.15", + "symfony/type-info": "<7.4" }, "require-dev": { "phpdocumentor/reflection-docblock": "^5.2|^6.0", "phpstan/phpdoc-parser": "^1.0|^2.0", "seld/jsonlint": "^1.10", - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^7.2|^8.0", - "symfony/error-handler": "^6.4|^7.0|^8.0", - "symfony/filesystem": "^6.4|^7.0|^8.0", - "symfony/form": "^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/messenger": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/property-access": "^6.4.31|^7.4.2|^8.0.2", - "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/cache": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/filesystem": "^7.4|^8.0", + "symfony/form": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/property-access": "^8.1", + "symfony/property-info": "^7.4.15|~8.0.15|^8.1.2", "symfony/translation-contracts": "^2.5|^3", - "symfony/type-info": "^7.2.5|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", - "symfony/validator": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/type-info": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -9265,7 +10924,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.4.10" + "source": "https://github.com/symfony/serializer/tree/v8.1.11" }, "funding": [ { @@ -9285,20 +10944,21 @@ "type": "tidelift" } ], - "time": "2026-05-03T13:03:28+00:00" + "time": "2026-11-04T08:39:20+00:00", + "published-time": "2026-11-04T11:31:12+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.7.0", + "version": "v3.8.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" + "reference": "052852a96fd5e5ebdb617dba22031e41a3300fb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", - "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/052852a96fd5e5ebdb617dba22031e41a3300fb5", + "reference": "052852a96fd5e5ebdb617dba22031e41a3300fb5", "shasum": "" }, "require": { @@ -9316,7 +10976,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.7-dev" + "dev-main": "3.8-dev" } }, "autoload": { @@ -9352,7 +11012,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.8.1" }, "funding": [ { @@ -9372,24 +11032,25 @@ "type": "tidelift" } ], - "time": "2026-03-28T09:44:51+00:00" + "time": "2026-10-20T17:38:25+00:00", + "published-time": "2026-11-04T11:25:33+00:00" }, { "name": "symfony/string", - "version": "v8.0.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963" + "reference": "6c6110979c0150393bbb336170e286d51ab4d76c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963", + "url": "https://api.github.com/repos/symfony/string/zipball/6c6110979c0150393bbb336170e286d51ab4d76c", + "reference": "6c6110979c0150393bbb336170e286d51ab4d76c", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-intl-grapheme": "^1.33", "symfony/polyfill-intl-normalizer": "^1.0", @@ -9442,7 +11103,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.8" + "source": "https://github.com/symfony/string/tree/v8.1.10" }, "funding": [ { @@ -9462,24 +11123,25 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-10-23T17:06:53+00:00", + "published-time": "2026-10-28T18:24:27+00:00" }, { "name": "symfony/translation", - "version": "v8.0.10", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67" + "reference": "d065adf56e5508293e80d7c140b0a9e043b63e9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f63e9342e12646a57c91ef8a366a4f9d8e557b67", - "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67", + "url": "https://api.github.com/repos/symfony/translation/zipball/d065adf56e5508293e80d7c140b0a9e043b63e9c", + "reference": "d065adf56e5508293e80d7c140b0a9e043b63e9c", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-mbstring": "^1.0", "symfony/translation-contracts": "^3.6.1" }, @@ -9535,7 +11197,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v8.0.10" + "source": "https://github.com/symfony/translation/tree/v8.1.11" }, "funding": [ { @@ -9555,20 +11217,21 @@ "type": "tidelift" } ], - "time": "2026-05-06T11:30:54+00:00" + "time": "2026-11-01T22:27:46+00:00", + "published-time": "2026-11-04T11:31:54+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.7.0", + "version": "v3.8.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d" + "reference": "0a3ae917402632fcba2aeddae9c98332f3d7dd05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d", - "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0a3ae917402632fcba2aeddae9c98332f3d7dd05", + "reference": "0a3ae917402632fcba2aeddae9c98332f3d7dd05", "shasum": "" }, "require": { @@ -9581,7 +11244,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.7-dev" + "dev-main": "3.8-dev" } }, "autoload": { @@ -9617,7 +11280,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.7.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.8.1" }, "funding": [ { @@ -9637,24 +11300,25 @@ "type": "tidelift" } ], - "time": "2026-01-05T13:30:16+00:00" + "time": "2026-10-03T08:17:19+00:00", + "published-time": "2026-11-04T11:25:31+00:00" }, { "name": "symfony/type-info", - "version": "v8.0.9", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "08723aceb8c3271e8cb3db8b2565728b0c88e866" + "reference": "9fd1414061c4bbf953bcfc183b133cbfa0a73c73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/08723aceb8c3271e8cb3db8b2565728b0c88e866", - "reference": "08723aceb8c3271e8cb3db8b2565728b0c88e866", + "url": "https://api.github.com/repos/symfony/type-info/zipball/9fd1414061c4bbf953bcfc183b133cbfa0a73c73", + "reference": "9fd1414061c4bbf953bcfc183b133cbfa0a73c73", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "psr/container": "^1.1|^2.0" }, "conflict": { @@ -9699,7 +11363,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v8.0.9" + "source": "https://github.com/symfony/type-info/tree/v8.1.11" }, "funding": [ { @@ -9719,28 +11383,29 @@ "type": "tidelift" } ], - "time": "2026-04-29T15:02:55+00:00" + "time": "2026-11-02T10:58:30+00:00", + "published-time": "2026-11-04T11:31:29+00:00" }, { "name": "symfony/uid", - "version": "v7.4.9", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2676b524340abcfe4d6151ec698463cebafee439" + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2676b524340abcfe4d6151ec698463cebafee439", - "reference": "2676b524340abcfe4d6151ec698463cebafee439", + "url": "https://api.github.com/repos/symfony/uid/zipball/cb487cf30380f0b0b090973bb9c0588193c06685", + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -9777,7 +11442,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.4.9" + "source": "https://github.com/symfony/uid/tree/v8.1.9" }, "funding": [ { @@ -9797,24 +11462,25 @@ "type": "tidelift" } ], - "time": "2026-04-30T15:19:22+00:00" + "time": "2026-10-12T14:32:04+00:00", + "published-time": "2026-10-14T06:48:53+00:00" }, { "name": "symfony/var-dumper", - "version": "v8.0.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1" + "reference": "3412a5af7d34a19515a77890fc804fe8e50d1a4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", - "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3412a5af7d34a19515a77890fc804fe8e50d1a4f", + "reference": "3412a5af7d34a19515a77890fc804fe8e50d1a4f", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { @@ -9826,7 +11492,7 @@ "symfony/http-kernel": "^7.4|^8.0", "symfony/process": "^7.4|^8.0", "symfony/uid": "^7.4|^8.0", - "twig/twig": "^3.12" + "twig/twig": "^3.12|^4.0" }, "bin": [ "Resources/bin/var-dump-server" @@ -9864,7 +11530,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v8.0.8" + "source": "https://github.com/symfony/var-dumper/tree/v8.1.10" }, "funding": [ { @@ -9884,31 +11550,33 @@ "type": "tidelift" } ], - "time": "2026-03-31T07:15:36+00:00" + "time": "2026-10-26T21:55:04+00:00", + "published-time": "2026-10-28T18:25:26+00:00" }, { "name": "symfony/yaml", - "version": "v8.0.10", + "version": "v8.1.11", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "aa9ee60c41d9b20a2468c41ff0a32e2a7405ac05" + "reference": "e8266f55160f674f290a5f567cb55e11e21f921b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/aa9ee60c41d9b20a2468c41ff0a32e2a7405ac05", - "reference": "aa9ee60c41d9b20a2468c41ff0a32e2a7405ac05", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e8266f55160f674f290a5f567cb55e11e21f921b", + "reference": "e8266f55160f674f290a5f567cb55e11e21f921b", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/console": "<7.4" }, "require-dev": { - "symfony/console": "^7.4|^8.0" + "symfony/console": "^7.4|^8.0", + "yaml/yaml-test-suite": "*" }, "bin": [ "Resources/bin/yaml-lint" @@ -9939,7 +11607,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v8.0.10" + "source": "https://github.com/symfony/yaml/tree/v8.1.11" }, "funding": [ { @@ -9959,7 +11627,8 @@ "type": "tidelift" } ], - "time": "2026-05-05T08:10:04+00:00" + "time": "2026-11-04T08:39:20+00:00", + "published-time": "2026-11-04T11:31:03+00:00" }, { "name": "theiconic/name-parser", @@ -10007,7 +11676,8 @@ "issues": "https://github.com/theiconic/name-parser/issues", "source": "https://github.com/theiconic/name-parser/tree/v1.2.11" }, - "time": "2019-11-14T14:08:48+00:00" + "time": "2019-11-14T14:08:48+00:00", + "published-time": "2019-11-14T14:13:55+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10062,7 +11732,8 @@ "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" }, - "time": "2025-12-02T11:56:42+00:00" + "time": "2025-12-02T11:56:42+00:00", + "published-time": "2025-12-11T21:29:16+00:00" }, { "name": "tpetry/laravel-query-expressions", @@ -10118,20 +11789,21 @@ "issues": "https://github.com/tpetry/laravel-query-expressions/issues", "source": "https://github.com/tpetry/laravel-query-expressions/tree/1.6.0" }, - "time": "2026-03-13T08:48:18+00:00" + "time": "2026-03-13T08:48:18+00:00", + "published-time": "2026-03-13T08:48:31+00:00" }, { "name": "twig/twig", - "version": "v3.21.1", + "version": "v3.30.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" + "reference": "8c737079b726af72ff8ef3c595be9f6a810ea1ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/8c737079b726af72ff8ef3c595be9f6a810ea1ef", + "reference": "8c737079b726af72ff8ef3c595be9f6a810ea1ef", "shasum": "" }, "require": { @@ -10141,7 +11813,8 @@ "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpstan/phpstan": "^2.0", + "php-cs-fixer/shim": "^3.0@stable", + "phpstan/phpstan": "^2.0@stable", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, @@ -10185,7 +11858,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.21.1" + "source": "https://github.com/twigphp/Twig/tree/v3.30.0" }, "funding": [ { @@ -10197,27 +11870,28 @@ "type": "tidelift" } ], - "time": "2025-05-03T07:21:55+00:00" + "time": "2026-09-25T13:20:01+00:00", + "published-time": "2026-09-25T13:20:14+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.3", + "version": "v5.8.0", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "955e7815d677a3eaa7075231212f2110983adecc" + "url": "https://github.com/phpdotenv/phpdotenv.git", + "reference": "96149103e62ac67e915f6d2ef59b72dee2e011e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", - "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "url": "https://api.github.com/repos/phpdotenv/phpdotenv/zipball/96149103e62ac67e915f6d2ef59b72dee2e011e0", + "reference": "96149103e62ac67e915f6d2ef59b72dee2e011e0", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.4", + "graham-campbell/result-type": "^1.2", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.5", + "phpoption/phpoption": "^1.10", "symfony/polyfill-ctype": "^1.26", "symfony/polyfill-mbstring": "^1.26", "symfony/polyfill-php80": "^1.26" @@ -10237,7 +11911,7 @@ "forward-command": false }, "branch-alias": { - "dev-master": "5.6-dev" + "dev-master": "5.8-dev" } }, "autoload": { @@ -10261,15 +11935,15 @@ "homepage": "https://github.com/vlucas" } ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "description": "Loads environment variables from `.env` to `$_ENV` and `$_SERVER` automagically, and optionally to `getenv()`.", "keywords": [ "dotenv", "env", "environment" ], "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + "issues": "https://github.com/phpdotenv/phpdotenv/issues", + "source": "https://github.com/phpdotenv/phpdotenv/tree/v5.8.0" }, "funding": [ { @@ -10281,7 +11955,8 @@ "type": "tidelift" } ], - "time": "2025-12-27T19:49:13+00:00" + "time": "2026-10-25T16:26:19+00:00", + "published-time": "2026-10-25T16:26:50+00:00" }, { "name": "voku/portable-ascii", @@ -10355,36 +12030,41 @@ "type": "tidelift" } ], - "time": "2026-04-26T05:33:54+00:00" + "time": "2026-04-26T05:33:54+00:00", + "published-time": "2026-04-26T05:43:38+00:00" }, { "name": "web-auth/cose-lib", - "version": "4.5.2", + "version": "4.8.2", "source": { "type": "git", "url": "https://github.com/web-auth/cose-lib.git", - "reference": "5b38660f90070a8e45f3dbc9528ade3b608dd77d" + "reference": "8849e8bf043a2d42d0bec5bda5db2469ad376148" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/5b38660f90070a8e45f3dbc9528ade3b608dd77d", - "reference": "5b38660f90070a8e45f3dbc9528ade3b608dd77d", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/8849e8bf043a2d42d0bec5bda5db2469ad376148", + "reference": "8849e8bf043a2d42d0bec5bda5db2469ad376148", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17", + "brick/math": "^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", "ext-json": "*", "ext-openssl": "*", "php": ">=8.1", "spomky-labs/pki-framework": "^1.0" }, + "conflict": { + "spomky-labs/cbor-php": "<3.4.0" + }, "require-dev": { - "spomky-labs/cbor-php": "^3.2.2" + "spomky-labs/cbor-php": "^3.4" }, "suggest": { - "ext-bcmath": "For better performance, please install either GMP (recommended) or BCMath extension", - "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension", - "spomky-labs/cbor-php": "For COSE Signature support" + "ext-bcmath": "Recommended: without GMP or BCMath, signing with RSASSA-PSS (PS256/PS384/PS512) blinds its private exponentiation in pure PHP", + "ext-gmp": "Recommended: without GMP or BCMath, signing with RSASSA-PSS (PS256/PS384/PS512) blinds its private exponentiation in pure PHP", + "ext-sodium": "Required by the EdDSA/Ed25519 signature algorithms (-8, -19, -260, -261) and to recompute an OKP public key from its private key", + "spomky-labs/cbor-php": "Required by the RFC 9052 header reader and cryptographic structures. 3.4.0 or later: it ships the six COSE message classes (CBOR\\Tag\\CoseSign1Tag and its siblings) that replace the deprecated Cose\\...Tag classes, and its decoder is what enforces the RFC 9052 label uniqueness and nesting bounds this library relies on" }, "type": "library", "autoload": { @@ -10414,7 +12094,7 @@ ], "support": { "issues": "https://github.com/web-auth/cose-lib/issues", - "source": "https://github.com/web-auth/cose-lib/tree/4.5.2" + "source": "https://github.com/web-auth/cose-lib/tree/4.8.2" }, "funding": [ { @@ -10426,20 +12106,21 @@ "type": "patreon" } ], - "time": "2026-05-03T09:49:50+00:00" + "time": "2026-09-15T17:30:33+00:00", + "published-time": "2026-09-15T17:39:51+00:00" }, { "name": "web-auth/webauthn-lib", - "version": "5.2.6", + "version": "5.3.12", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "0785f55f242c1cc026ec24a9c8653eac59fe3493" + "reference": "c7aeeb1d35e39b7d32ab5146cce4b668f271a68e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/0785f55f242c1cc026ec24a9c8653eac59fe3493", - "reference": "0785f55f242c1cc026ec24a9c8653eac59fe3493", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/c7aeeb1d35e39b7d32ab5146cce4b668f271a68e", + "reference": "c7aeeb1d35e39b7d32ab5146cce4b668f271a68e", "shasum": "" }, "require": { @@ -10447,19 +12128,19 @@ "ext-openssl": "*", "paragonie/constant_time_encoding": "^2.6|^3.0", "php": ">=8.2", - "phpdocumentor/reflection-docblock": "^5.3", + "phpdocumentor/reflection-docblock": "^5.3|^6.0", "psr/clock": "^1.0", "psr/event-dispatcher": "^1.0", "psr/log": "^1.0|^2.0|^3.0", - "spomky-labs/cbor-php": "^3.0", + "spomky-labs/cbor-php": "^3.4", "spomky-labs/pki-framework": "^1.0", - "symfony/clock": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0|^8.0", "symfony/deprecation-contracts": "^3.2", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", - "web-auth/cose-lib": "^4.2.3" + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "web-auth/cose-lib": "^4.8" }, "suggest": { "psr/log-implementation": "Recommended to receive logs from the library", @@ -10500,7 +12181,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.6" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.12" }, "funding": [ { @@ -10512,20 +12193,21 @@ "type": "patreon" } ], - "time": "2026-03-23T22:13:50+00:00" + "time": "2026-11-03T09:21:08+00:00", + "published-time": "2026-11-03T09:27:24+00:00" }, { "name": "webmozart/assert", - "version": "2.3.0", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4" + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/eb0d790f735ba6cff25c683a85a1da0eadeff9e4", - "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/8a163706bbcac613733dba03f51e13b5eb1bb819", + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819", "shasum": "" }, "require": { @@ -10541,7 +12223,11 @@ }, "type": "library", "extra": { + "psalm": { + "pluginClass": "Webmozart\\Assert\\PsalmPlugin" + }, "branch-alias": { + "dev-master": "2.0-dev", "dev-feature/2-0": "2.0-dev" } }, @@ -10572,9 +12258,91 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.3.0" + "source": "https://github.com/webmozarts/assert/tree/2.5.0" + }, + "time": "2026-10-05T23:14:19+00:00", + "published-time": "2026-10-05T23:14:25+00:00" + }, + { + "name": "webonyx/graphql-php", + "version": "v15.33.1", + "source": { + "type": "git", + "url": "https://github.com/webonyx/graphql-php.git", + "reference": "e0f40ce40a527ee27413cceced4825aacbc7de5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/e0f40ce40a527ee27413cceced4825aacbc7de5b", + "reference": "e0f40ce40a527ee27413cceced4825aacbc7de5b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^7.4 || ^8" + }, + "require-dev": { + "amphp/amp": "^2.6 || ^3", + "amphp/http-server": "^2.1 || ^3", + "dms/phpunit-arraysubset-asserts": "dev-master", + "ergebnis/composer-normalize": "^2.28", + "friendsofphp/php-cs-fixer": "3.95.8", + "mll-lab/php-cs-fixer-config": "5.13.0", + "nyholm/psr7": "^1.5", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "2.2.2", + "phpstan/phpstan-phpunit": "2.0.16", + "phpstan/phpstan-strict-rules": "2.0.11", + "phpunit/phpunit": "^9.5 || ^10.5.21 || ^11", + "psr/http-message": "^1 || ^2", + "react/http": "^1.6", + "react/promise": "^2.0 || ^3.0", + "rector/rector": "^2.0", + "symfony/polyfill-php81": "^1.23", + "symfony/var-exporter": "^5 || ^6 || ^7 || ^8", + "thecodingmachine/safe": "^1.3 || ^2 || ^3", + "ticketswap/phpstan-error-formatter": "1.3.0" + }, + "suggest": { + "amphp/amp": "To leverage async resolving on AMPHP platform (v3 with AmpFutureAdapter, v2 with AmpPromiseAdapter)", + "amphp/http-server": "To leverage async resolving with webserver on AMPHP platform", + "psr/http-message": "To use standard GraphQL server", + "react/promise": "To leverage async resolving on React PHP platform" + }, + "type": "library", + "autoload": { + "psr-4": { + "GraphQL\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP port of GraphQL reference implementation", + "homepage": "https://github.com/webonyx/graphql-php", + "keywords": [ + "api", + "graphql" + ], + "support": { + "issues": "https://github.com/webonyx/graphql-php/issues", + "source": "https://github.com/webonyx/graphql-php/tree/v15.33.1" }, - "time": "2026-04-11T10:33:05+00:00" + "funding": [ + { + "url": "https://github.com/spawnia", + "type": "github" + }, + { + "url": "https://opencollective.com/webonyx-graphql-php", + "type": "open_collective" + } + ], + "time": "2026-06-17T06:05:59+00:00", + "published-time": "2026-06-17T06:08:29+00:00" }, { "name": "yiisoft/aliases", @@ -10651,7 +12419,8 @@ "type": "opencollective" } ], - "time": "2025-12-04T12:53:43+00:00" + "time": "2025-12-04T12:53:43+00:00", + "published-time": "2025-12-04T12:54:20+00:00" }, { "name": "yiisoft/arrays", @@ -10720,32 +12489,35 @@ "type": "opencollective" } ], - "time": "2025-11-26T12:25:21+00:00" + "time": "2025-11-26T12:25:21+00:00", + "published-time": "2025-11-26T12:25:49+00:00" }, { "name": "yiisoft/files", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/yiisoft/files.git", - "reference": "465650fd9e4295669f42ab7e9fec2386700540a7" + "reference": "6d1bd963afe514ec8be6e090e021659870bd2830" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/files/zipball/465650fd9e4295669f42ab7e9fec2386700540a7", - "reference": "465650fd9e4295669f42ab7e9fec2386700540a7", + "url": "https://api.github.com/repos/yiisoft/files/zipball/6d1bd963afe514ec8be6e090e021659870bd2830", + "reference": "6d1bd963afe514ec8be6e090e021659870bd2830", "shasum": "" }, "require": { - "php": "8.0 - 8.5", + "php": "8.0 - 8.6", "yiisoft/strings": "^2.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.3", + "bamarni/composer-bin-plugin": "^1.9.1", "ext-zlib": "*", - "maglnet/composer-require-checker": "^4.4", + "friendsofphp/php-cs-fixer": "^3.66", + "phpstan/phpstan": "^2.3", "phpunit/phpunit": "^9.6.22", "rector/rector": "^2.0.10", + "shipmonk/composer-dependency-analyser": "^1.8", "spatie/phpunit-watcher": "^1.23.6" }, "type": "library", @@ -10788,20 +12560,21 @@ "type": "opencollective" } ], - "time": "2025-12-01T06:30:27+00:00" + "time": "2026-10-30T07:44:19+00:00", + "published-time": "2026-10-30T07:45:26+00:00" }, { "name": "yiisoft/html", - "version": "3.13.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/yiisoft/html.git", - "reference": "d02c6bd9094d554afc0c4bffc291f8a2f57b3710" + "reference": "eeb0bea275c87c4ee0dbc444dbc24fbf44a5aa77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/html/zipball/d02c6bd9094d554afc0c4bffc291f8a2f57b3710", - "reference": "d02c6bd9094d554afc0c4bffc291f8a2f57b3710", + "url": "https://api.github.com/repos/yiisoft/html/zipball/eeb0bea275c87c4ee0dbc444dbc24fbf44a5aa77", + "reference": "eeb0bea275c87c4ee0dbc444dbc24fbf44a5aa77", "shasum": "" }, "require": { @@ -10851,7 +12624,8 @@ "type": "opencollective" } ], - "time": "2026-03-13T13:07:22+00:00" + "time": "2026-06-05T07:38:14+00:00", + "published-time": "2026-06-05T07:38:35+00:00" }, { "name": "yiisoft/i18n", @@ -10918,7 +12692,8 @@ "type": "opencollective" } ], - "time": "2025-11-29T15:57:19+00:00" + "time": "2025-11-29T15:57:19+00:00", + "published-time": "2025-11-29T15:57:38+00:00" }, { "name": "yiisoft/json", @@ -10986,33 +12761,37 @@ "type": "opencollective" } ], - "time": "2025-11-21T19:39:36+00:00" + "time": "2025-11-21T19:39:36+00:00", + "published-time": "2025-11-21T19:41:06+00:00" }, { "name": "yiisoft/strings", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/yiisoft/strings.git", - "reference": "9bc7fea56374619cccd4587848029fe97f98bb33" + "reference": "f11eb6562b09326602b02827d2f6f237154359a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/strings/zipball/9bc7fea56374619cccd4587848029fe97f98bb33", - "reference": "9bc7fea56374619cccd4587848029fe97f98bb33", + "url": "https://api.github.com/repos/yiisoft/strings/zipball/f11eb6562b09326602b02827d2f6f237154359a1", + "reference": "f11eb6562b09326602b02827d2f6f237154359a1", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "8.1 - 8.5" + "php": "8.1 - 8.6" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "maglnet/composer-require-checker": "^4.7.1", + "friendsofphp/php-cs-fixer": "^3.95", "phpbench/phpbench": "^1.4.1", + "phpstan/phpstan": "^2.3", "phpunit/phpunit": "^10.5.48", "rector/rector": "^2.1.2", - "spatie/phpunit-watcher": "^1.24" + "shipmonk/composer-dependency-analyser": "^1.8", + "spatie/phpunit-watcher": "^1.24", + "yiisoft/code-style": "^1.0" }, "type": "library", "extra": { @@ -11056,7 +12835,8 @@ "type": "opencollective" } ], - "time": "2025-11-23T18:00:58+00:00" + "time": "2026-10-30T06:57:22+00:00", + "published-time": "2026-10-30T06:57:49+00:00" }, { "name": "yiisoft/translator", @@ -11140,7 +12920,8 @@ "type": "opencollective" } ], - "time": "2025-12-06T05:18:44+00:00" + "time": "2025-12-06T05:18:44+00:00", + "published-time": "2025-12-06T05:19:17+00:00" }, { "name": "yiisoft/translator-message-php", @@ -11210,7 +12991,8 @@ "type": "opencollective" } ], - "time": "2025-12-06T14:38:12+00:00" + "time": "2025-12-06T14:38:12+00:00", + "published-time": "2025-12-06T14:38:39+00:00" } ], "packages-dev": [ @@ -11305,24 +13087,29 @@ "type": "paypal" } ], - "time": "2026-03-29T15:46:14+00:00" + "time": "2026-03-29T15:46:14+00:00", + "published-time": "2026-03-29T15:46:42+00:00" }, { "name": "carthage-software/mago", - "version": "1.26.0", + "version": "1.59.0", "source": { "type": "git", "url": "https://github.com/carthage-software/mago.git", - "reference": "9ae2f7ad58ffeeaa2ff890e736a8658f8e397cdf" + "reference": "95a25d686a2b584c387326e466d6ead8c885465d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/carthage-software/mago/zipball/9ae2f7ad58ffeeaa2ff890e736a8658f8e397cdf", - "reference": "9ae2f7ad58ffeeaa2ff890e736a8658f8e397cdf", + "url": "https://api.github.com/repos/carthage-software/mago/zipball/95a25d686a2b584c387326e466d6ead8c885465d", + "reference": "95a25d686a2b584c387326e466d6ead8c885465d", "shasum": "" }, "require": { - "php": "~8.1 || ~8.2 || ~8.3 || ~8.4 || ~8.5 || ~8.6" + "php": "~8.1 || ~8.2 || ~8.3 || ~8.4 || ~8.5 || ~8.6", + "revolt/event-loop": "^1.0.9" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" }, "suggest": { "ext-curl": "To show binary download progress" @@ -11333,9 +13120,12 @@ "type": "library", "autoload": { "files": [ - "composer/functions.php", - "composer/internal.php" - ] + "composer/src/functions.php", + "composer/src/internal.php" + ], + "psr-4": { + "Mago\\": "composer/src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -11343,7 +13133,7 @@ ], "authors": [ { - "name": "Saif Eddin Gmati", + "name": "Seifeddine Gmati", "email": "azjezz@carthage.software" } ], @@ -11353,7 +13143,7 @@ ], "support": { "issues": "https://github.com/carthage-software/mago/issues", - "source": "https://github.com/carthage-software/mago/tree/1.26.0" + "source": "https://github.com/carthage-software/mago/tree/1.59.0" }, "funding": [ { @@ -11361,7 +13151,8 @@ "type": "github" } ], - "time": "2026-05-06T21:44:02+00:00" + "time": "2026-10-25T00:59:15+00:00", + "published-time": "2026-10-25T00:59:29+00:00" }, { "name": "composer/xdebug-handler", @@ -11427,27 +13218,92 @@ "type": "tidelift" } ], - "time": "2024-05-06T16:37:16+00:00" + "time": "2024-05-06T16:37:16+00:00", + "published-time": "2024-05-06T17:01:42+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00", + "published-time": "2024-11-21T13:47:18+00:00" }, { "name": "fidry/cpu-core-counter", - "version": "1.3.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678" + "reference": "d384a7d0d6e67aa497327260ca95023e92dc2032" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/d384a7d0d6e67aa497327260ca95023e92dc2032", + "reference": "d384a7d0d6e67aa497327260ca95023e92dc2032", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "fidry/makefile": "^0.2.0", + "fidry/makefile": "^0.2.0 || ^1.1.2", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", "phpstan/phpstan": "^2.0", @@ -11455,6 +13311,7 @@ "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "symfony/polyfill-mbstring": "^1.33", "webmozarts/strict-phpunit": "^7.5" }, "type": "library", @@ -11480,7 +13337,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.4.1" }, "funding": [ { @@ -11488,20 +13345,21 @@ "type": "github" } ], - "time": "2025-08-14T07:29:31+00:00" + "time": "2026-09-29T22:11:39+00:00", + "published-time": "2026-09-29T22:12:43+00:00" }, { "name": "filp/whoops", - "version": "2.18.4", + "version": "2.19.3", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + "reference": "d5480d53f10069dc4620a39f87e38e8945d47322" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "url": "https://api.github.com/repos/filp/whoops/zipball/d5480d53f10069dc4620a39f87e38e8945d47322", + "reference": "d5480d53f10069dc4620a39f87e38e8945d47322", "shasum": "" }, "require": { @@ -11510,8 +13368,8 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^4.0 || ^5.0" + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3 || ^10.5.58", + "symfony/var-dumper": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -11551,7 +13409,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.4" + "source": "https://github.com/filp/whoops/tree/2.19.3" }, "funding": [ { @@ -11559,7 +13417,64 @@ "type": "github" } ], - "time": "2025-08-08T12:00:00+00:00" + "time": "2026-11-09T23:30:17+00:00", + "published-time": "2026-11-09T23:32:45+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b61cd040da1a4925bc90a51c074f5297e7c0fa52", + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v3.0.0" + }, + "time": "2026-03-17T11:56:53+00:00", + "published-time": "2026-06-16T10:52:40+00:00" }, { "name": "jean85/pretty-package-versions", @@ -11619,24 +13534,189 @@ "issues": "https://github.com/Jean85/pretty-package-versions/issues", "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" }, - "time": "2025-03-19T14:43:43+00:00" + "time": "2025-03-19T14:43:43+00:00", + "published-time": "2025-03-19T14:50:06+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "72d615ff1104717c1317c6d5d7eab679e43a0408" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/72d615ff1104717c1317c6d5d7eab679e43a0408", + "reference": "72d615ff1104717c1317c6d5d7eab679e43a0408", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^12.0|^13.0", + "illuminate/contracts": "^12.0|^13.0", + "illuminate/log": "^12.0|^13.0", + "illuminate/process": "^12.0|^13.0", + "illuminate/support": "^12.0|^13.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^12.69|^13.30", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^10.8|^11.0", + "pestphp/pest": "^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^7.0|^8.0", + "symfony/yaml": "^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-11-09T14:56:19+00:00", + "published-time": "2026-11-10T16:07:50+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.15", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/967a801bd188989a5669bd280f252d51c0fdc9ee", + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0 || ^3.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6.36", + "symplify/easy-coding-standard": "^13.2.17" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2026-08-19T19:37:52+00:00", + "published-time": "2026-08-19T19:38:57+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.13.4", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.0" }, "conflict": { "doctrine/collections": "<1.6.8", @@ -11669,68 +13749,507 @@ "object", "object graph" ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" - }, - "funding": [ + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + } + ], + "time": "2026-08-11T10:17:44+00:00", + "published-time": "2026-08-11T10:29:20+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.6", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "68806f9257968f23775bee62970cb90925b79d51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/68806f9257968f23775bee62970cb90925b79d51", + "reference": "68806f9257968f23775bee62970cb90925b79d51", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.19.3", + "nunomaduro/termwind": "^2.4.1", + "php": "^8.2.0", + "symfony/console": "^7.4.23 || ^8.1.11" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.6", + "larastan/larastan": "^3.14.0", + "laravel/framework": "^11.57.1 || ^12.72.0 || ^13.40.0", + "laravel/pint": "^1.30.4", + "orchestra/testbench-core": "^9.24.0 || ^10.16.0 || ^11.6.0", + "pestphp/pest": "^3.8.7 || ^4.7.8 || ^5.3.5", + "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2026-11-10T17:06:52+00:00", + "published-time": "2026-11-10T17:23:22+00:00" + }, + { + "name": "orchestra/canvas", + "version": "v11.1.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/canvas.git", + "reference": "d13e6ec66cb1a285fcc7f092c804abaaf2e24ede" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/canvas/zipball/d13e6ec66cb1a285fcc7f092c804abaaf2e24ede", + "reference": "d13e6ec66cb1a285fcc7f092c804abaaf2e24ede", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "composer/semver": "^3.0", + "illuminate/console": "^13.23.0", + "illuminate/database": "^13.23.0", + "illuminate/filesystem": "^13.23.0", + "illuminate/support": "^13.23.0", + "orchestra/canvas-core": "^11.0.0", + "orchestra/sidekick": "~1.1.23|~1.2.20", + "orchestra/testbench-core": "^11.0.0", + "php": "^8.3", + "symfony/yaml": "^7.4.0|^8.0.0" + }, + "require-dev": { + "laravel/doctor": "^0.1.0", + "laravel/framework": "^13.23.0", + "laravel/pint": "^1.24", + "mockery/mockery": "^1.6.10", + "phpstan/phpstan": "^2.1.14", + "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0" + }, + "bin": [ + "canvas" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Orchestra\\Canvas\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Orchestra\\Canvas\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com" + } + ], + "description": "Code Generators for Laravel Applications and Packages", + "support": { + "issues": "https://github.com/orchestral/canvas/issues", + "source": "https://github.com/orchestral/canvas/tree/v11.1.0" + }, + "time": "2026-08-04T15:06:43+00:00", + "published-time": "2026-08-04T16:09:55+00:00" + }, + { + "name": "orchestra/canvas-core", + "version": "v11.0.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/canvas-core.git", + "reference": "88d091ff989748e2ca447bca0cd06ab14671ba82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/88d091ff989748e2ca447bca0cd06ab14671ba82", + "reference": "88d091ff989748e2ca447bca0cd06ab14671ba82", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "composer/semver": "^3.0", + "illuminate/console": "^13.0", + "illuminate/support": "^13.0", + "orchestra/sidekick": "~1.1.23|~1.2.20", + "php": "^8.3" + }, + "require-dev": { + "laravel/framework": "^13.0", + "laravel/pint": "^1.24", + "mockery/mockery": "^1.6.10", + "orchestra/testbench-core": "^11.0", + "phpstan/phpstan": "^2.1.17", + "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", + "symfony/yaml": "^7.4|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Orchestra\\Canvas\\Core\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Orchestra\\Canvas\\Core\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com" + } + ], + "description": "Code Generators Builder for Laravel Applications and Packages", + "support": { + "issues": "https://github.com/orchestral/canvas/issues", + "source": "https://github.com/orchestral/canvas-core/tree/v11.0.0" + }, + "time": "2026-03-16T15:10:50+00:00", + "published-time": "2026-03-16T15:13:51+00:00" + }, + { + "name": "orchestra/sidekick", + "version": "v1.2.23", + "source": { + "type": "git", + "url": "https://github.com/orchestral/sidekick.git", + "reference": "cbdfe583afc069be2ca6790489e9dda007d14d00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/sidekick/zipball/cbdfe583afc069be2ca6790489e9dda007d14d00", + "reference": "cbdfe583afc069be2ca6790489e9dda007d14d00", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "composer/semver": "^3.0", + "php": "^8.1", + "symfony/polyfill-php83": "^1.32" + }, + "require-dev": { + "fakerphp/faker": "^1.21", + "laravel/framework": "^10.48.29|^11.44.7|^12.1.1|^13.0", + "laravel/pint": "^1.4", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^8.37.0|^9.14.0|^10.2.0|^11.0", + "phpstan/phpstan": "2.2.14", + "phpunit/phpunit": "^10.0|^11.0|^12.0|^13.0", + "symfony/process": "^6.0|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Eloquent/functions.php", + "src/Filesystem/functions.php", + "src/Http/functions.php", + "src/functions.php" + ], + "psr-4": { + "Orchestra\\Sidekick\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com" + } + ], + "description": "Packages Toolkit Utilities and Helpers for Laravel", + "support": { + "issues": "https://github.com/orchestral/sidekick/issues", + "source": "https://github.com/orchestral/sidekick/tree/v1.2.23" + }, + "time": "2026-09-29T13:27:26+00:00", + "published-time": "2026-09-29T13:36:25+00:00" + }, + { + "name": "orchestra/testbench", + "version": "v11.3.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench.git", + "reference": "7081895e5bbbdf2fd333fdf34e8ddec6cd4db713" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/7081895e5bbbdf2fd333fdf34e8ddec6cd4db713", + "reference": "7081895e5bbbdf2fd333fdf34e8ddec6cd4db713", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "fakerphp/faker": "^1.23", + "laravel/framework": "^13.32.0", + "mockery/mockery": "^1.6.10", + "orchestra/testbench-core": "^11.5.0", + "orchestra/workbench": "^11.3.0", + "php": "^8.3", + "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", + "symfony/process": "^7.4.5|^8.0.5", + "symfony/yaml": "^7.4|^8.0", + "vlucas/phpdotenv": "^5.6.1" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Laravel Testing Helper for Packages Development", + "homepage": "https://packages.tools/testbench/", + "keywords": [ + "BDD", + "TDD", + "dev", + "laravel", + "laravel-packages", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench/tree/v11.3.0" + }, + "time": "2026-09-24T07:19:57+00:00", + "published-time": "2026-09-24T07:24:17+00:00" + }, + { + "name": "orchestra/testbench-core", + "version": "v11.6.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "f139a4ee74638dc24e0b6f657b47226c8ba5ab05" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/f139a4ee74638dc24e0b6f657b47226c8ba5ab05", + "reference": "f139a4ee74638dc24e0b6f657b47226c8ba5ab05", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "orchestra/sidekick": "~1.1.25|~1.2.22", + "php": "^8.3", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-php84": "^1.34.0" + }, + "conflict": { + "brianium/paratest": "<7.3.0|>=8.0.0", + "laravel/framework": "<13.35.0|>=14.0.0", + "laravel/serializable-closure": ">=2.0.0 <2.0.10|>=3.0.0", + "nunomaduro/collision": "<8.9.0|>=9.0.0", + "phpunit/phpunit": "<11.5.50|>=12.0.0 <12.5.8|>=13.5.0" + }, + "require-dev": { + "fakerphp/faker": "^1.24", + "laravel/framework": "^13.35.0", + "laravel/pint": "^1.24", + "laravel/serializable-closure": "^2.0.10", + "mockery/mockery": "^1.6.10", + "phpstan/phpstan": "2.2.16", + "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", + "spatie/laravel-ray": "^1.43.6", + "symfony/process": "^7.4.5|^8.0.5", + "symfony/yaml": "^7.4.0|^8.0.0", + "vlucas/phpdotenv": "^5.6.1" + }, + "suggest": { + "brianium/paratest": "Allow using parallel testing (^7.3).", + "ext-pcntl": "Required to use all features of the console signal trapping.", + "fakerphp/faker": "Allow using Faker for testing (^1.23).", + "laravel/framework": "Required for testing (^13.35.0).", + "mockery/mockery": "Allow using Mockery for testing (^1.6).", + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^8.9).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^11.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^11.5.50|^12.5.8|^13.0.0).", + "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^7.4|^8.0).", + "symfony/yaml": "Required for Testbench CLI (^7.4|^8.0).", + "vlucas/phpdotenv": "Required for Testbench CLI (^5.6.1)." + }, + "bin": [ + "testbench" + ], + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" } ], - "time": "2025-08-01T08:46:24+00:00" + "description": "Testing Helper for Laravel Development", + "homepage": "https://packages.tools/testbench", + "keywords": [ + "BDD", + "TDD", + "dev", + "laravel", + "laravel-packages", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench-core" + }, + "time": "2026-10-07T23:31:28+00:00", + "published-time": "2026-10-08T23:27:14+00:00" }, { - "name": "nunomaduro/collision", - "version": "v8.9.4", + "name": "orchestra/workbench", + "version": "v11.3.0", "source": { "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "716af8f95a470e9094cfca09ed897b023be191a5" + "url": "https://github.com/orchestral/workbench.git", + "reference": "660046639af4538d6c56373c9222ca4c93055c42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5", - "reference": "716af8f95a470e9094cfca09ed897b023be191a5", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/660046639af4538d6c56373c9222ca4c93055c42", + "reference": "660046639af4538d6c56373c9222ca4c93055c42", "shasum": "" }, "require": { - "filp/whoops": "^2.18.4", - "nunomaduro/termwind": "^2.4.0", - "php": "^8.2.0", - "symfony/console": "^7.4.8 || ^8.0.8" - }, - "conflict": { - "laravel/framework": "<11.48.0 || >=14.0.0", - "phpunit/phpunit": "<11.5.50 || >=14.0.0" + "composer-runtime-api": "^2.2", + "fakerphp/faker": "^1.23", + "laravel/framework": "^13.0.0", + "laravel/pail": "^1.2.5", + "laravel/tinker": "^3.0.0", + "nunomaduro/collision": "^8.9", + "orchestra/canvas": "^11.0.1", + "orchestra/sidekick": "~1.1.23|~1.2.20", + "orchestra/testbench-core": "^11.5.0", + "php": "^8.3", + "symfony/process": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "require-dev": { - "brianium/paratest": "^7.8.5", - "larastan/larastan": "^3.9.6", - "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0", - "laravel/pint": "^1.29.1", - "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1", - "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", - "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0" + "laravel/pint": "^1.22.0", + "mockery/mockery": "^1.6.12", + "phpstan/phpstan": "^2.1.33", + "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", + "spatie/laravel-ray": "^1.43.6" }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-8.x": "8.x-dev" - } + "suggest": { + "ext-pcntl": "Required to use all features of the console signal trapping." }, + "type": "library", "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], "psr-4": { - "NunoMaduro\\Collision\\": "src/" + "Orchestra\\Workbench\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -11739,83 +14258,63 @@ ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com" } ], - "description": "Cli error handling for console/command-line PHP applications.", + "description": "Workbench Companion for Laravel Packages Development", "keywords": [ - "artisan", - "cli", - "command-line", - "console", "dev", - "error", - "handling", "laravel", - "laravel-zero", - "php", - "symfony" + "laravel-packages", + "testing" ], "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" + "issues": "https://github.com/orchestral/workbench/issues", + "source": "https://github.com/orchestral/workbench/tree/v11.3.0" }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2026-04-21T14:04:20+00:00" + "time": "2026-09-23T23:52:50+00:00", + "published-time": "2026-09-23T23:55:19+00:00" }, { "name": "pestphp/pest", - "version": "v4.7.0", + "version": "v4.7.8", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "2fc75cfcf03c041c804778fa894282234adc3c66" + "reference": "5b2293f67adcf1b2320b33f521b94a692d18f360" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/2fc75cfcf03c041c804778fa894282234adc3c66", - "reference": "2fc75cfcf03c041c804778fa894282234adc3c66", + "url": "https://api.github.com/repos/pestphp/pest/zipball/5b2293f67adcf1b2320b33f521b94a692d18f360", + "reference": "5b2293f67adcf1b2320b33f521b94a692d18f360", "shasum": "" }, "require": { "brianium/paratest": "^7.20.0", "composer/xdebug-handler": "^3.0.5", - "nunomaduro/collision": "^8.9.4", + "nunomaduro/collision": "^8.9.5", "nunomaduro/termwind": "^2.4.0", "pestphp/pest-plugin": "^4.0.0", "pestphp/pest-plugin-arch": "^4.0.2", "pestphp/pest-plugin-mutate": "^4.0.1", "pestphp/pest-plugin-profanity": "^4.2.1", "php": "^8.3.0", - "phpunit/phpunit": "^12.5.24", - "symfony/process": "^7.4.8|^8.0.8" + "phpunit/phpunit": "^12.5.33", + "symfony/process": "^7.4.13|^8.1.0" }, "conflict": { "filp/whoops": "<2.18.3", - "phpunit/phpunit": ">12.5.24", + "phpunit/phpunit": ">12.5.33", "sebastian/exporter": "<7.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { - "mrpunyapal/peststan": "^0.2.9", + "mrpunyapal/peststan": "^0.2.12", "pestphp/pest-dev-tools": "^4.1.0", "pestphp/pest-plugin-browser": "^4.3.1", "pestphp/pest-plugin-type-coverage": "^4.0.4", - "psy/psysh": "^0.12.22" + "psy/psysh": "^0.12.24" }, "bin": [ "bin/pest" @@ -11842,7 +14341,6 @@ "Pest\\Plugins\\Verbose", "Pest\\Plugins\\Version", "Pest\\Plugins\\Shard", - "Pest\\Plugins\\Tia", "Pest\\Plugins\\Parallel" ] }, @@ -11882,7 +14380,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v4.7.0" + "source": "https://github.com/pestphp/pest/tree/v4.7.8" }, "funding": [ { @@ -11894,7 +14392,8 @@ "type": "github" } ], - "time": "2026-05-03T16:09:32+00:00" + "time": "2026-08-03T20:49:44+00:00", + "published-time": "2026-08-03T20:50:30+00:00" }, { "name": "pestphp/pest-plugin", @@ -11964,7 +14463,8 @@ "type": "patreon" } ], - "time": "2025-08-20T12:35:58+00:00" + "time": "2025-08-20T12:35:58+00:00", + "published-time": "2025-08-20T12:36:18+00:00" }, { "name": "pestphp/pest-plugin-arch", @@ -12034,7 +14534,8 @@ "type": "github" } ], - "time": "2026-04-10T17:20:19+00:00" + "time": "2026-04-10T17:20:19+00:00", + "published-time": "2026-04-10T17:20:32+00:00" }, { "name": "pestphp/pest-plugin-mutate", @@ -12110,7 +14611,8 @@ "type": "github" } ], - "time": "2025-08-21T20:19:25+00:00" + "time": "2025-08-21T20:19:25+00:00", + "published-time": "2025-08-21T20:29:53+00:00" }, { "name": "pestphp/pest-plugin-profanity", @@ -12166,7 +14668,8 @@ "support": { "source": "https://github.com/pestphp/pest-plugin-profanity/tree/v4.2.1" }, - "time": "2025-12-08T00:13:17+00:00" + "time": "2025-12-08T00:13:17+00:00", + "published-time": "2025-12-08T00:14:31+00:00" }, { "name": "phar-io/manifest", @@ -12233,7 +14736,8 @@ "type": "github" } ], - "time": "2024-03-03T12:33:53+00:00" + "time": "2024-03-03T12:33:53+00:00", + "published-time": "2024-03-03T12:39:44+00:00" }, { "name": "phar-io/version", @@ -12284,37 +14788,38 @@ "issues": "https://github.com/phar-io/version/issues", "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2022-02-21T01:04:05+00:00" + "time": "2022-02-21T01:04:05+00:00", + "published-time": "2022-02-21T01:04:30+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "12.5.6", + "version": "12.5.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "876099a072646c7745f673d7aeab5382c4439691" + "reference": "7440368d94738d54f2c1de24dbd3871793bbb0dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/876099a072646c7745f673d7aeab5382c4439691", - "reference": "876099a072646c7745f673d7aeab5382c4439691", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7440368d94738d54f2c1de24dbd3871793bbb0dd", + "reference": "7440368d94738d54f2c1de24dbd3871793bbb0dd", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.7.0", + "nikic/php-parser": "^5.9.0", "php": ">=8.3", - "phpunit/php-text-template": "^5.0", + "phpunit/php-text-template": "^5.0.1", "sebastian/complexity": "^5.0", - "sebastian/environment": "^8.0.3", - "sebastian/lines-of-code": "^4.0", + "sebastian/environment": "^8.1.2", + "sebastian/lines-of-code": "^4.0.1", "sebastian/version": "^6.0", "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^12.5.1" + "phpunit/phpunit": "^12.5.37" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -12352,7 +14857,7 @@ "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/12.5.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.8" }, "funding": [ { @@ -12372,27 +14877,28 @@ "type": "tidelift" } ], - "time": "2026-04-15T08:23:17+00:00" + "time": "2026-10-03T14:03:50+00:00", + "published-time": "2026-10-03T14:04:33+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "6.0.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" + "reference": "a248d1640ab059b075f53a2ef0f9856e864e06b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a248d1640ab059b075f53a2ef0f9856e864e06b5", + "reference": "a248d1640ab059b075f53a2ef0f9856e864e06b5", "shasum": "" }, "require": { "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.33" }, "type": "library", "extra": { @@ -12425,7 +14931,7 @@ "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/6.0.1" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.2" }, "funding": [ { @@ -12445,7 +14951,8 @@ "type": "tidelift" } ], - "time": "2026-02-02T14:04:18+00:00" + "time": "2026-08-25T14:40:53+00:00", + "published-time": "2026-08-25T14:41:57+00:00" }, { "name": "phpunit/php-invoker", @@ -12509,27 +15016,28 @@ "type": "github" } ], - "time": "2025-02-07T04:58:58+00:00" + "time": "2025-02-07T04:58:58+00:00", + "published-time": "2025-02-07T04:59:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + "reference": "babab73b7ef9fae406f2eb3ee11323a61caa63d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/babab73b7ef9fae406f2eb3ee11323a61caa63d5", + "reference": "babab73b7ef9fae406f2eb3ee11323a61caa63d5", "shasum": "" }, "require": { "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.37" }, "type": "library", "extra": { @@ -12561,15 +15069,28 @@ "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/5.0.0" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.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-text-template", + "type": "tidelift" } ], - "time": "2025-02-07T04:59:16+00:00" + "time": "2026-10-03T04:51:29+00:00", + "published-time": "2026-10-03T04:54:39+00:00" }, { "name": "phpunit/php-timer", @@ -12629,47 +15150,48 @@ "type": "github" } ], - "time": "2025-02-07T04:59:38+00:00" + "time": "2025-02-07T04:59:38+00:00", + "published-time": "2025-02-07T04:59:52+00:00" }, { "name": "phpunit/phpunit", - "version": "12.5.24", + "version": "12.5.33", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d75dd30597caa80e72fad2ef7904601a30ef1046" + "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d75dd30597caa80e72fad2ef7904601a30ef1046", - "reference": "d75dd30597caa80e72fad2ef7904601a30ef1046", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b98e028a26c5c5ba7e4a54be96ccf35f2914d184", + "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184", "shasum": "" }, "require": { "ext-dom": "*", + "ext-filter": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", - "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.3", - "phpunit/php-code-coverage": "^12.5.6", + "phpunit/php-code-coverage": "^12.5.7", "phpunit/php-file-iterator": "^6.0.1", "phpunit/php-invoker": "^6.0.0", "phpunit/php-text-template": "^5.0.0", "phpunit/php-timer": "^8.0.0", - "sebastian/cli-parser": "^4.2.0", - "sebastian/comparator": "^7.1.6", + "sebastian/cli-parser": "^4.2.1", + "sebastian/comparator": "^7.1.8", "sebastian/diff": "^7.0.0", - "sebastian/environment": "^8.1.0", - "sebastian/exporter": "^7.0.2", - "sebastian/global-state": "^8.0.2", + "sebastian/environment": "^8.1.2", + "sebastian/exporter": "^7.0.3", + "sebastian/global-state": "^8.0.3", "sebastian/object-enumerator": "^7.0.0", "sebastian/recursion-context": "^7.0.1", - "sebastian/type": "^6.0.3", + "sebastian/type": "^6.0.4", "sebastian/version": "^6.0.0", "staabm/side-effects-detector": "^1.0.5" }, @@ -12711,7 +15233,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.24" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.33" }, "funding": [ { @@ -12719,27 +15241,101 @@ "type": "other" } ], - "time": "2026-05-01T04:21:04+00:00" + "time": "2026-07-28T13:58:09+00:00", + "published-time": "2026-07-28T14:01:28+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", + "published-time": "2026-05-16T18:04:08+00:00" }, { "name": "sebastian/cli-parser", - "version": "4.2.0", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15", "shasum": "" }, "require": { "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { @@ -12768,7 +15364,7 @@ "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/4.2.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1" }, "funding": [ { @@ -12788,20 +15384,21 @@ "type": "tidelift" } ], - "time": "2025-09-14T09:36:45+00:00" + "time": "2026-05-17T05:29:34+00:00", + "published-time": "2026-05-17T05:30:34+00:00" }, { "name": "sebastian/comparator", - "version": "7.1.6", + "version": "7.1.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "c769009dee98f494e0edc3fd4f4087501688f11e" + "reference": "7c65c1e79836812819705b473a90c12399542485" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c769009dee98f494e0edc3fd4f4087501688f11e", - "reference": "c769009dee98f494e0edc3fd4f4087501688f11e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485", + "reference": "7c65c1e79836812819705b473a90c12399542485", "shasum": "" }, "require": { @@ -12809,10 +15406,10 @@ "ext-mbstring": "*", "php": ">=8.3", "sebastian/diff": "^7.0", - "sebastian/exporter": "^7.0" + "sebastian/exporter": "^7.0.3" }, "require-dev": { - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^12.5.25" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -12860,7 +15457,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8" }, "funding": [ { @@ -12880,7 +15477,8 @@ "type": "tidelift" } ], - "time": "2026-04-14T08:23:15+00:00" + "time": "2026-05-21T04:45:25+00:00", + "published-time": "2026-05-21T04:45:36+00:00" }, { "name": "sebastian/complexity", @@ -12938,28 +15536,29 @@ "type": "github" } ], - "time": "2025-02-07T04:55:25+00:00" + "time": "2025-02-07T04:55:25+00:00", + "published-time": "2025-02-07T04:55:36+00:00" }, { "name": "sebastian/diff", - "version": "7.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + "reference": "cd4cabe39f8a4e8ee6818ba99f10a05561ea4ad6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/cd4cabe39f8a4e8ee6818ba99f10a05561ea4ad6", + "reference": "cd4cabe39f8a4e8ee6818ba99f10a05561ea4ad6", "shasum": "" }, "require": { "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^12.0", - "symfony/process": "^7.2" + "phpunit/phpunit": "^12.5.33", + "symfony/process": "^7.4.17" }, "type": "library", "extra": { @@ -12997,35 +15596,48 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.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/diff", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:46+00:00" + "time": "2026-08-25T15:35:54+00:00", + "published-time": "2026-08-25T15:37:16+00:00" }, { "name": "sebastian/environment", - "version": "8.1.0", + "version": "8.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6" + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b121608b28a13f721e76ffbbd386d08eff58f3f6", - "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439", "shasum": "" }, "require": { "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.26" }, "suggest": { "ext-posix": "*" @@ -13061,7 +15673,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/8.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2" }, "funding": [ { @@ -13081,29 +15693,30 @@ "type": "tidelift" } ], - "time": "2026-04-15T12:13:01+00:00" + "time": "2026-05-25T13:40:20+00:00", + "published-time": "2026-05-25T13:40:39+00:00" }, { "name": "sebastian/exporter", - "version": "7.0.2", + "version": "7.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7" + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", "shasum": "" }, "require": { "ext-mbstring": "*", "php": ">=8.3", - "sebastian/recursion-context": "^7.0" + "sebastian/recursion-context": "^7.0.1" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { @@ -13151,7 +15764,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3" }, "funding": [ { @@ -13171,30 +15784,31 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:16:11+00:00" + "time": "2026-05-20T04:37:17+00:00", + "published-time": "2026-05-20T04:37:31+00:00" }, { "name": "sebastian/global-state", - "version": "8.0.2", + "version": "8.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d" + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9", "shasum": "" }, "require": { "php": ">=8.3", "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" + "sebastian/recursion-context": "^7.0.1" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.28" }, "type": "library", "extra": { @@ -13225,7 +15839,7 @@ "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/8.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3" }, "funding": [ { @@ -13245,28 +15859,29 @@ "type": "tidelift" } ], - "time": "2025-08-29T11:29:25+00:00" + "time": "2026-06-01T15:10:33+00:00", + "published-time": "2026-06-01T15:20:45+00:00" }, { "name": "sebastian/lines-of-code", - "version": "4.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e", "shasum": "" }, "require": { - "nikic/php-parser": "^5.0", + "nikic/php-parser": "^5.7.0", "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { @@ -13295,15 +15910,28 @@ "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/4.0.0" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.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/lines-of-code", + "type": "tidelift" } ], - "time": "2025-02-07T04:57:28+00:00" + "time": "2026-05-19T16:22:07+00:00", + "published-time": "2026-05-19T16:22:47+00:00" }, { "name": "sebastian/object-enumerator", @@ -13361,7 +15989,8 @@ "type": "github" } ], - "time": "2025-02-07T04:57:48+00:00" + "time": "2025-02-07T04:57:48+00:00", + "published-time": "2025-02-07T04:58:08+00:00" }, { "name": "sebastian/object-reflector", @@ -13417,7 +16046,8 @@ "type": "github" } ], - "time": "2025-02-07T04:58:17+00:00" + "time": "2025-02-07T04:58:17+00:00", + "published-time": "2025-02-07T04:58:28+00:00" }, { "name": "sebastian/recursion-context", @@ -13493,27 +16123,28 @@ "type": "tidelift" } ], - "time": "2025-08-13T04:44:59+00:00" + "time": "2025-08-13T04:44:59+00:00", + "published-time": "2025-08-13T04:45:10+00:00" }, { "name": "sebastian/type", - "version": "6.0.3", + "version": "6.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" + "reference": "82ff822c2edc46724be9f7411d3163021f602773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773", + "reference": "82ff822c2edc46724be9f7411d3163021f602773", "shasum": "" }, "require": { "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { @@ -13542,7 +16173,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" + "source": "https://github.com/sebastianbergmann/type/tree/6.0.4" }, "funding": [ { @@ -13562,20 +16193,21 @@ "type": "tidelift" } ], - "time": "2025-08-09T06:57:12+00:00" + "time": "2026-05-20T06:45:45+00:00", + "published-time": "2026-05-20T06:50:13+00:00" }, { "name": "sebastian/version", - "version": "6.0.0", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + "reference": "a8b6643a19ba6c8125a473623e45fb8cbb0e4159" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/a8b6643a19ba6c8125a473623e45fb8cbb0e4159", + "reference": "a8b6643a19ba6c8125a473623e45fb8cbb0e4159", "shasum": "" }, "require": { @@ -13608,15 +16240,28 @@ "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/version/tree/6.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/version", + "type": "tidelift" } ], - "time": "2025-02-07T05:00:38+00:00" + "time": "2026-11-09T06:30:55+00:00", + "published-time": "2026-11-09T06:31:20+00:00" }, { "name": "staabm/side-effects-detector", @@ -13668,7 +16313,89 @@ "type": "github" } ], - "time": "2024-10-20T05:08:20+00:00" + "time": "2024-10-20T05:08:20+00:00", + "published-time": "2024-10-20T05:09:39+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/80ccff923a8d61f73ebe9da0aa94e25232f004ce", + "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:50:05+00:00", + "published-time": "2026-09-30T10:23:43+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", @@ -13727,7 +16454,8 @@ "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.7" }, - "time": "2026-02-17T17:25:14+00:00" + "time": "2026-02-17T17:25:14+00:00", + "published-time": "2026-02-17T17:26:32+00:00" }, { "name": "theseer/tokenizer", @@ -13777,7 +16505,8 @@ "type": "github" } ], - "time": "2025-12-08T11:19:18+00:00" + "time": "2025-12-08T11:19:18+00:00", + "published-time": "2025-12-08T11:19:39+00:00" } ], "aliases": [], @@ -13785,9 +16514,7 @@ "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, - "platform": { - "ext-curl": "*" - }, + "platform": {}, "platform-dev": {}, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.11.0" } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 653f567c..a34f45eb 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -11,12 +11,6 @@ ./tests/Feature - - ./tests/Unit - - - ./tests/Arch - diff --git a/src/Cloud.php b/src/Cloud.php new file mode 100644 index 00000000..cb5eabb0 --- /dev/null +++ b/src/Cloud.php @@ -0,0 +1,30 @@ +isCraftCloud()) { + if (!Cloud::isCraftCloud()) { return; } $this->configureQueue(); $this->configureCache(); $this->configureLogging(); + $this->configureSession(); } + /** + * Lambda only collects stderr. bref/laravel-bridge switches the default channel only when it's `stack`, so a + * project's `daily` or `single` channel would otherwise write to `/tmp` and be lost. + */ private function configureLogging(): void { Config::set('logging.default', 'stderr'); - Config::set('logging.channels.emergency.path', 'php://stderr'); + } + + /** + * Each Lambda container has its own `/tmp`, so `file` sessions don't work, and bref/laravel-bridge replaces them + * with `cookie` sessions, which are capped at 4 KB. Craft creates the `sessions` table, so use it. + */ + private function configureSession(): void + { + if (in_array(Config::get('session.driver'), ['file', 'cookie'], strict: true)) { + Config::set('session.driver', 'database'); + } } private function configureQueue(): void { - $queueUrl = $_SERVER['CRAFT_CLOUD_SQS_URL'] ?? null; + $queueUrl = Cloud::env('CRAFT_CLOUD_SQS_URL'); - if (!$queueUrl) { + if ($queueUrl === null) { return; } + // The SQS client gets its region and credentials from the function's AWS environment. Config::set('queue.default', self::SQS_CONNECTION); Config::set('queue.connections.' . self::SQS_CONNECTION, [ 'driver' => 'sqs', @@ -54,7 +75,7 @@ private function configureCache(): void $stores = ['database', 'array']; $redisUrl = $this->resolveRedisUrl(); - if ($redisUrl) { + if ($redisUrl !== null) { $this->configureRedisCache($redisUrl); array_unshift($stores, self::CACHE_REDIS_STORE); @@ -72,6 +93,8 @@ private function configureRedisCache(string $redisUrl): void Config::set('database.redis.' . self::REDIS_CONNECTION, [ 'url' => $redisUrl, 'database' => 0, + 'timeout' => self::REDIS_TIMEOUT_SECONDS, + 'read_timeout' => self::REDIS_TIMEOUT_SECONDS, ]); Config::set('cache.stores.' . self::CACHE_REDIS_STORE, [ @@ -83,24 +106,20 @@ private function configureRedisCache(string $redisUrl): void private function resolveRedisUrl(): ?string { - $srv = $_SERVER['CRAFT_CLOUD_CACHE_SRV'] ?? null; + $srv = Cloud::env('CRAFT_CLOUD_CACHE_SRV'); - if ($srv) { - $records = dns_get_record($srv, DNS_SRV); + if ($srv === null) { + return null; + } - $target = is_array($records) ? $records[0]['target'] ?? null : null; - $port = is_array($records) ? $records[0]['port'] ?? null : null; + $records = dns_get_record($srv, DNS_SRV); + $target = is_array($records) ? $records[0]['target'] ?? null : null; + $port = is_array($records) ? $records[0]['port'] ?? null : null; - if ($target !== null && $port !== null) { - return 'redis://' . $target . ':' . $port; - } + if ($target === null || $port === null) { + return null; } - return null; - } - - private function isCraftCloud(): bool - { - return ($_SERVER['CRAFT_CLOUD'] ?? null) !== null || ($_SERVER['AWS_LAMBDA_RUNTIME_API'] ?? null) !== null; + return 'redis://' . $target . ':' . $port; } } diff --git a/src/Lambda/CommandSqsHandler.php b/src/Lambda/CommandSqsHandler.php new file mode 100644 index 00000000..92e120c5 --- /dev/null +++ b/src/Lambda/CommandSqsHandler.php @@ -0,0 +1,123 @@ +getRecords() as $record) { + $message = $record->getBody(); + $payload = json_decode($message, associative: true, flags: JSON_THROW_ON_ERROR); + $callback = $payload['callback'] ?? throw new RuntimeException( + "Callback URL not found. Message: [{$message}]", + ); + $command = $payload['command'] ?? throw new RuntimeException('Command not found'); + + $this->sendResult($callback, $this->runCommand($command, $context)); + } + } + + /** + * @return array{exit_code: int|null, output: string, duration?: float} + */ + private function runCommand(string $command, Context $context): array + { + try { + $process = Process::fromShellCommandline( + '"${:PHP_BINARY}" "${:CRAFT_PATH}" ' . $command, + env: [ + 'PHP_BINARY' => PHP_BINARY, + 'CRAFT_PATH' => (Cloud::env('LAMBDA_TASK_ROOT') ?? '/var/task') . '/craft', + 'LAMBDA_INVOCATION_CONTEXT' => json_encode($context, JSON_THROW_ON_ERROR), + ], + timeout: self::COMMAND_TIMEOUT_SECONDS, + ); + + $process->run(static function (string $type, string $buffer): void { + echo $buffer; + }); + + return [ + 'exit_code' => $process->getExitCode(), + 'output' => $process->getErrorOutput() . $process->getOutput(), + 'duration' => microtime(true) - $process->getStartTime(), + ]; + } catch (Throwable $e) { + return [ + 'exit_code' => 1, + 'output' => "Error running command [{$command}]: " . $e->getMessage(), + ]; + } + } + + private function sendResult(string $url, array $result): void + { + try { + $response = $this->post($url, $result); + } catch (GuzzleException $e) { + fwrite(STDERR, json_encode($result) . "\n"); + $this->post($url, [ + 'exit_code' => 255, + 'output' => 'Request failed: ' . $e->getMessage(), + ]); + + return; + } + + $status = $response->getStatusCode(); + + if ($status >= 200 && $status < 300) { + return; + } + + fwrite(STDERR, json_encode($result) . "\n"); + $this->post($url, [ + 'exit_code' => 255, + 'output' => "Failed to send command output: [{$status}] [{$response->getBody()}]", + ]); + } + + private function post(string $url, array $body): \Psr\Http\Message\ResponseInterface + { + $project = Cloud::env('CRAFT_CLOUD_PROJECT_ID'); + $environment = Cloud::env('CRAFT_CLOUD_ENVIRONMENT_ID'); + + return $this->client->post($url, [ + RequestOptions::JSON => $body, + RequestOptions::HTTP_ERRORS => false, + RequestOptions::HEADERS => [ + 'User-Agent' => "Craft/Cloud/{$project}/{$environment}", + ], + ]); + } +} diff --git a/src/bref/craft/CraftCliEntrypoint.php b/src/bref/craft/CraftCliEntrypoint.php deleted file mode 100644 index f9a02bbe..00000000 --- a/src/bref/craft/CraftCliEntrypoint.php +++ /dev/null @@ -1,61 +0,0 @@ - PHP_BINARY, - ], - null, - $timeout, - ); - - $process->run(static function ($type, $buffer): void { - echo $buffer; - }); - - return [ - 'exit_code' => $process->getExitCode(), - 'output' => $process->getErrorOutput() . $process->getOutput(), - 'duration' => microtime(true) - $process->getStartTime(), - ]; - } - - public function lambdaCommand(string $command, Context $context): array - { - $environment = $this->invocationContext($context); - - return $this->command($command, $environment, self::PROCESS_TIMEOUT_SECONDS); - } - - public function craftJob(string $jobId, Context $context): array - { - $environment = $this->invocationContext($context); - - return $this->command("cloud/queue/exec {$jobId}", $environment, self::PROCESS_TIMEOUT_SECONDS); - } - - private function invocationContext(Context $context): array - { - return ['LAMBDA_INVOCATION_CONTEXT' => json_encode($context, JSON_THROW_ON_ERROR)]; - } -} diff --git a/src/bref/curl/CurlClient.php b/src/bref/curl/CurlClient.php deleted file mode 100644 index 567ae7f5..00000000 --- a/src/bref/curl/CurlClient.php +++ /dev/null @@ -1,39 +0,0 @@ -statusCode >= 200 && $this->statusCode < 300; - } -} diff --git a/src/bref/handlers/CommandHandler.php b/src/bref/handlers/CommandHandler.php deleted file mode 100644 index 7041f171..00000000 --- a/src/bref/handlers/CommandHandler.php +++ /dev/null @@ -1,32 +0,0 @@ -lambdaCommand($command, $context); - } -} diff --git a/src/bref/handlers/CommandSqsHandler.php b/src/bref/handlers/CommandSqsHandler.php deleted file mode 100644 index 0acd4e3b..00000000 --- a/src/bref/handlers/CommandSqsHandler.php +++ /dev/null @@ -1,97 +0,0 @@ -entrypoint = new CraftCliEntrypoint(); - } - - public function handleSqs(SqsEvent $event, Context $context): void - { - foreach ($event->getRecords() as $record) { - $message = $record->getBody(); - - $payload = json_decode($message, associative: true, flags: JSON_THROW_ON_ERROR); - - $callback = $payload['callback'] ?? throw new RuntimeException( - "Callback URL not found. Message: [{$message}]", - ); - - $command = $payload['command'] ?? throw new RuntimeException('Command not found'); - - $result = $this->runCommand($command, $context); - - $this->sendResultBack($callback, $result); - } - } - - public function runCommand(string $command, Context $context): array - { - try { - return $this->entrypoint->lambdaCommand($command, $context); - } catch (Throwable $t) { - return [ - 'exit_code' => 1, - 'output' => "Error running command [{$command}]: " . $t->getMessage(), - ]; - } - } - - private function sendResultBack(string $url, array $body): void - { - $client = new CurlClient(); - - $body = $this->encodeResult($body); - - $response = $client->post($url, $body); - - if ($response->curlError) { - fwrite(STDERR, $body . "\n"); - - $body = $this->encodeResult([ - 'exit_code' => 255, - 'output' => "cURL request failed: {$response->curlError}", - ]); - - $client->post($url, $body); - - return; - } - - if (!$response->successful()) { - fwrite(STDERR, $body . "\n"); - - $body = $this->encodeResult([ - 'exit_code' => 255, - 'output' => "Failed to send command output: [{$response->statusCode}] [{$response->body}]", - ]); - - $client->post($url, $body); - - return; - } - } - - private function encodeResult(array $body): string - { - return json_encode($body, JSON_INVALID_UTF8_SUBSTITUTE | JSON_THROW_ON_ERROR); - } -} diff --git a/src/bref/handlers/JobSqsHandler.php b/src/bref/handlers/JobSqsHandler.php deleted file mode 100644 index 48a353aa..00000000 --- a/src/bref/handlers/JobSqsHandler.php +++ /dev/null @@ -1,37 +0,0 @@ -entrypoint = new CraftCliEntrypoint(); - } - - public function handleSqs(SqsEvent $event, Context $context): void - { - foreach ($event->getRecords() as $record) { - $message = $record->getBody(); - - $payload = json_decode($message, associative: true, flags: JSON_THROW_ON_ERROR); - - $jobId = $payload['jobId'] ?? throw new RuntimeException("Job ID not found. Message: [{$message}]"); - - $this->entrypoint->craftJob($jobId, $context); - } - } -} diff --git a/src/bref/handlers/command-cmd.php b/src/bref/handlers/command-cmd.php deleted file mode 100644 index e8670302..00000000 --- a/src/bref/handlers/command-cmd.php +++ /dev/null @@ -1,7 +0,0 @@ -get(QueueHandler::class); diff --git a/tests/Feature/CloudServiceProviderTest.php b/tests/Feature/CloudServiceProviderTest.php index 3a20d06d..0e0663b6 100644 --- a/tests/Feature/CloudServiceProviderTest.php +++ b/tests/Feature/CloudServiceProviderTest.php @@ -2,45 +2,61 @@ declare(strict_types=1); -use craft\cloud\tests\Support\DnsRecords; +use CraftCms\Cloud\Tests\Support\DnsRecords; -it('does not configure cloud services outside Craft Cloud', function (): void { - $this->registerProvider(); +it('leaves the app alone outside Craft Cloud', function (): void { + $this->boot(['SESSION_DRIVER' => 'file', 'LOG_CHANNEL' => 'stack']); - expect($this->config->get('queue.default')) - ->toBe('sync') - ->and($this->config->get('cache.default')) - ->toBe('array') - ->and($this->config->get('logging.default')) - ->toBe('stack') - ->and($this->config->get('logging.channels.emergency.path')) - ->toBe('/var/task/storage/logs/laravel.log') - ->and($this->config->get('queue.connections.craft-cloud-sqs')) + expect(config('cache.default')) + ->not + ->toBe('craft-cloud-failover') + ->and(config('cache.stores.craft-cloud-failover')) ->toBeNull() - ->and($this->config->get('cache.stores.craft-cloud-failover')) - ->toBeNull(); + ->and(config('queue.connections.craft-cloud-sqs')) + ->toBeNull() + ->and(config('logging.default')) + ->toBe('stack') + ->and(config('session.driver')) + ->toBe('file'); }); -it('configures Laravel logging to use stderr on Craft Cloud', function (): void { - $this->server('CRAFT_CLOUD', '1'); +it('detects Craft Cloud from CRAFT_CLOUD or the Lambda runtime', function (array $env): void { + $this->boot($env); - $this->registerProvider(); + expect(config('cache.default'))->toBe('craft-cloud-failover'); +})->with([ + 'CRAFT_CLOUD' => [['CRAFT_CLOUD' => '1']], + 'AWS_LAMBDA_RUNTIME_API' => [['AWS_LAMBDA_RUNTIME_API' => '127.0.0.1:9001']], +]); - expect($this->config->get('logging.default')) - ->toBe('stderr') - ->and($this->config->get('logging.channels.emergency.path')) - ->toBe('php://stderr'); +it('sends logs to stderr on Craft Cloud, whatever the project chose', function (): void { + $this->boot(['CRAFT_CLOUD' => '1', 'LOG_CHANNEL' => 'daily']); + + expect(config('logging.default'))->toBe('stderr'); }); -it('configures the Craft Cloud SQS queue connection', function (): void { - $this->server('CRAFT_CLOUD', '1'); - $this->server('CRAFT_CLOUD_SQS_URL', 'https://sqs.us-east-1.amazonaws.com/123456789012/craft-cloud'); +it('uses database sessions instead of file or cookie sessions on Craft Cloud', function ( + string $driver, + string $expected, +): void { + $this->boot(['CRAFT_CLOUD' => '1', 'SESSION_DRIVER' => $driver]); - $this->registerProvider(); + expect(config('session.driver'))->toBe($expected); +})->with([ + 'file' => ['file', 'database'], + 'cookie' => ['cookie', 'database'], + 'redis is kept' => ['redis', 'redis'], +]); + +it('configures the Craft Cloud SQS queue connection', function (): void { + $this->boot([ + 'CRAFT_CLOUD' => '1', + 'CRAFT_CLOUD_SQS_URL' => 'https://sqs.us-east-1.amazonaws.com/123456789012/craft-cloud', + ]); - expect($this->config->get('queue.default')) + expect(config('queue.default')) ->toBe('craft-cloud-sqs') - ->and($this->config->get('queue.connections.craft-cloud-sqs')) + ->and(config('queue.connections.craft-cloud-sqs')) ->toBe([ 'driver' => 'sqs', 'prefix' => '', @@ -50,49 +66,42 @@ ]); }); -it('configures the fallback cache without Redis when no cache SRV record is available', function (): void { - $this->server('CRAFT_CLOUD', '1'); +it('leaves the queue alone on Craft Cloud without an SQS URL', function (): void { + $this->boot(['CRAFT_CLOUD' => '1']); - $this->registerProvider(); + expect(config('queue.connections.craft-cloud-sqs'))->toBeNull(); +}); - expect($this->config->get('cache.default')) - ->toBe('craft-cloud-failover') - ->and($this->config->get('cache.stores.craft-cloud-failover')) +it('falls back from the database to memory when there is no cache SRV record', function (): void { + $this->boot(['CRAFT_CLOUD' => '1', 'CRAFT_CLOUD_CACHE_SRV' => '_cache._tcp.example.test']); + + expect(config('cache.stores.craft-cloud-failover')) ->toBe([ 'driver' => 'failover', 'stores' => ['database', 'array'], ]) - ->and($this->config->get('cache.stores.craft-cloud-redis')) + ->and(config('cache.stores.craft-cloud-redis')) ->toBeNull(); }); -it('prepends Redis to the fallback cache when the cache SRV record is available', function (): void { - $this->server('CRAFT_CLOUD', '1'); - $this->server('CRAFT_CLOUD_CACHE_SRV', '_cache._tcp.example.test'); +it('puts Valkey first, with short timeouts, when the cache SRV record resolves', function (): void { + DnsRecords::fake([['target' => 'valkey.internal', 'port' => 6380]]); - DnsRecords::fake([ - [ - 'target' => 'redis.internal', - 'port' => 6379, - ], - ]); + $this->boot(['CRAFT_CLOUD' => '1', 'CRAFT_CLOUD_CACHE_SRV' => '_cache._tcp.example.test']); - $this->registerProvider(); - - expect($this->config->get('database.redis.craft-cloud')) + expect(config('database.redis.craft-cloud')) ->toBe([ - 'url' => 'redis://redis.internal:6379', + 'url' => 'redis://valkey.internal:6380', 'database' => 0, + 'timeout' => 1, + 'read_timeout' => 1, ]) - ->and($this->config->get('cache.stores.craft-cloud-redis')) + ->and(config('cache.stores.craft-cloud-redis')) ->toBe([ 'driver' => 'redis', 'connection' => 'craft-cloud', 'lock_connection' => 'craft-cloud', ]) - ->and($this->config->get('cache.stores.craft-cloud-failover')) - ->toBe([ - 'driver' => 'failover', - 'stores' => ['craft-cloud-redis', 'database', 'array'], - ]); + ->and(config('cache.stores.craft-cloud-failover.stores')) + ->toBe(['craft-cloud-redis', 'database', 'array']); }); diff --git a/tests/Feature/CommandSqsHandlerTest.php b/tests/Feature/CommandSqsHandlerTest.php new file mode 100644 index 00000000..a22abd29 --- /dev/null +++ b/tests/Feature/CommandSqsHandlerTest.php @@ -0,0 +1,93 @@ + $responses + * @return list + */ +function run_command_handler(string $command, array $responses, string $script): array +{ + $root = sys_get_temp_dir() . '/cloud-task-' . bin2hex(random_bytes(4)); + mkdir($root); + file_put_contents("{$root}/craft", $script); + test()->boot([ + 'LAMBDA_TASK_ROOT' => $root, + 'CRAFT_CLOUD_PROJECT_ID' => 'project', + 'CRAFT_CLOUD_ENVIRONMENT_ID' => 'environment', + ]); + + $history = []; + $stack = HandlerStack::create(new MockHandler($responses)); + $stack->push(Middleware::history($history)); + + $event = new SqsEvent([ + 'Records' => [[ + 'eventSource' => 'aws:sqs', + 'messageId' => '1', + 'body' => json_encode(['callback' => 'https://api.test/callback', 'command' => $command]), + ]], + ]); + + ob_start(); + new CommandSqsHandler(new Client(['handler' => $stack]))->handleSqs( + $event, + new Context('request', 0, 'arn', 'trace'), + ); + ob_end_clean(); + + unlink("{$root}/craft"); + rmdir($root); + + return array_map(static fn(array $entry): array => [ + 'url' => (string) $entry['request']->getUri(), + 'body' => json_decode((string) $entry['request']->getBody(), associative: true), + 'userAgent' => $entry['request']->getHeaderLine('User-Agent'), + ], $history); +} + +it('runs the command and posts its exit code and output to the callback', function (): void { + $requests = run_command_handler( + "up --interactive=0 'quoted arg'", + [new Response(200)], + script: 'toHaveCount(1) + ->and($requests[0]['url']) + ->toBe('https://api.test/callback') + ->and($requests[0]['userAgent']) + ->toBe('Craft/Cloud/project/environment') + ->and($requests[0]['body']['exit_code']) + ->toBe(3) + ->and($requests[0]['body']['output']) + ->toBe('up|--interactive=0|quoted arg'); +}); + +it('reports a failed callback to the callback URL', function (): void { + $requests = run_command_handler( + 'help', + [new Response(500, body: 'nope'), new Response(200)], + script: 'toHaveCount(2) + ->and($requests[1]['body']) + ->toBe([ + 'exit_code' => 255, + 'output' => 'Failed to send command output: [500] [nope]', + ]); +}); diff --git a/tests/Pest.php b/tests/Pest.php index e8bbf65b..0f08ba0b 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -2,6 +2,6 @@ declare(strict_types=1); -use craft\cloud\tests\TestCase; +use CraftCms\Cloud\Tests\TestCase; -uses(TestCase::class)->in('Feature', 'Unit'); +uses(TestCase::class)->in('Feature'); diff --git a/tests/Support/DnsRecords.php b/tests/Support/DnsRecords.php index 704692b6..99491e69 100644 --- a/tests/Support/DnsRecords.php +++ b/tests/Support/DnsRecords.php @@ -2,9 +2,12 @@ declare(strict_types=1); -namespace craft\cloud\tests\Support; +namespace CraftCms\Cloud\Tests\Support; -class DnsRecords +/** + * Fake DNS answers for {@see \CraftCms\Cloud\dns_get_record()}. + */ +final class DnsRecords { private static array|false $records = false; diff --git a/tests/Support/functions.php b/tests/Support/functions.php index 649ff35a..15675a22 100644 --- a/tests/Support/functions.php +++ b/tests/Support/functions.php @@ -2,10 +2,13 @@ declare(strict_types=1); -namespace craft\cloud; +namespace CraftCms\Cloud; -use craft\cloud\tests\Support\DnsRecords; +use CraftCms\Cloud\Tests\Support\DnsRecords; +/** + * Shadows PHP's `dns_get_record()` for unqualified calls in the `CraftCms\Cloud` namespace. + */ function dns_get_record(string $hostname, int $type = DNS_ANY): array|false { return DnsRecords::get(); diff --git a/tests/TestCase.php b/tests/TestCase.php index 183be666..1f216984 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -2,116 +2,108 @@ declare(strict_types=1); -namespace craft\cloud\tests; - -use craft\cloud\CloudServiceProvider; -use craft\cloud\tests\Support\DnsRecords; -use Illuminate\Config\Repository; -use Illuminate\Container\Container; -use Illuminate\Support\Facades\Facade; -use PHPUnit\Framework\TestCase as BaseTestCase; - +namespace CraftCms\Cloud\Tests; + +use CraftCms\Cloud\CloudServiceProvider; +use CraftCms\Cloud\Tests\Support\DnsRecords; +use CraftCms\Cms\Providers\CraftServiceProvider; +use Orchestra\Testbench\TestCase as BaseTestCase; + +/** + * Boots a real Laravel app with Craft's and Cloud's service providers. + * + * Cloud's provider reads the function's environment when it registers, so tests set environment variables with + * {@see self::boot()}, which then recreates the app. + */ abstract class TestCase extends BaseTestCase { - private const SERVER_KEYS = [ + /** + * Environment variables cleared before each test and restored after it. + */ + private const ENV_KEYS = [ + 'AWS_LAMBDA_RUNTIME_API', 'CRAFT_CLOUD', 'CRAFT_CLOUD_CACHE_SRV', + 'CRAFT_CLOUD_ENVIRONMENT_ID', + 'CRAFT_CLOUD_PROJECT_ID', 'CRAFT_CLOUD_SQS_URL', + 'LAMBDA_TASK_ROOT', + 'LOG_CHANNEL', + 'SESSION_DRIVER', ]; - protected Container $app; - - protected Repository $config; - - private array $serverValues = []; + /** @var array */ + private array $originalEnv = []; protected function setUp(): void { - parent::setUp(); - - $this->serverValues = []; - - foreach (self::SERVER_KEYS as $key) { - if (array_key_exists($key, $_SERVER)) { - $this->serverValues[$key] = $_SERVER[$key]; - } - - unset($_SERVER[$key]); + foreach (self::ENV_KEYS as $key) { + $this->originalEnv[$key] = getenv($key); + $this->unsetEnv($key); } DnsRecords::reset(); - $this->app = new Container(); - $this->config = new Repository([ - 'cache' => [ - 'default' => 'array', - 'stores' => [ - 'array' => [ - 'driver' => 'array', - ], - 'database' => [ - 'driver' => 'database', - ], - ], - ], - 'database' => [ - 'redis' => [], - ], - 'logging' => [ - 'default' => 'stack', - 'channels' => [ - 'stack' => [ - 'driver' => 'stack', - 'channels' => ['single'], - ], - 'stderr' => [ - 'driver' => 'monolog', - ], - 'emergency' => [ - 'path' => '/var/task/storage/logs/laravel.log', - ], - ], - ], - 'queue' => [ - 'default' => 'sync', - 'connections' => [ - 'sync' => [ - 'driver' => 'sync', - ], - ], - ], - ]); - - $this->app->instance('config', $this->config); - - Facade::clearResolvedInstances(); - Facade::setFacadeApplication($this->app); + parent::setUp(); } protected function tearDown(): void { - foreach (self::SERVER_KEYS as $key) { - unset($_SERVER[$key]); - } + parent::tearDown(); - foreach ($this->serverValues as $key => $value) { - $_SERVER[$key] = $value; + foreach ($this->originalEnv as $key => $value) { + $value === false ? $this->unsetEnv($key) : $this->setEnv($key, $value); } DnsRecords::reset(); - Facade::clearResolvedInstances(); - Facade::setFacadeApplication(null); + } - parent::tearDown(); + /** + * Sets environment variables and recreates the app, so providers register with them. + * + * @param array $env + */ + protected function boot(array $env = []): void + { + foreach ($env as $key => $value) { + $this->setEnv($key, $value); + } + + $this->refreshApplication(); } - protected function registerProvider(): void + protected function defineEnvironment($app): void { - new CloudServiceProvider($this->app)->register(); + // Craft logs that it isn't installed on every boot. Keep that out of test output, including on Craft Cloud, + // where the provider switches the default channel to stderr. + $app['config']->set('logging.channels.stderr', [ + 'driver' => 'monolog', + 'handler' => \Monolog\Handler\NullHandler::class, + ]); + $app['config']->set('logging.channels.stack', [ + 'driver' => 'monolog', + 'handler' => \Monolog\Handler\NullHandler::class, + ]); } - protected function server(string $key, string $value): void + protected function getPackageProviders($app): array + { + return [ + CraftServiceProvider::class, + CloudServiceProvider::class, + ]; + } + + private function setEnv(string $key, string $value): void { $_SERVER[$key] = $value; + $_ENV[$key] = $value; + putenv("{$key}={$value}"); + } + + private function unsetEnv(string $key): void + { + unset($_SERVER[$key], $_ENV[$key]); + putenv($key); } } From bad36d54675e10968543db956546fd730cdd8db9 Mon Sep 17 00:00:00 2001 From: Tim Kelty Date: Tue, 10 Nov 2026 18:44:59 +0000 Subject: [PATCH 2/5] Never fail a command record after the command has run The callback post no longer throws when both attempts fail at the transport layer, so SQS won't redeliver and rerun a completed command. Output that isn't valid UTF-8 is substituted instead of failing to encode, as in 3.x. Amp-Thread-ID: https://ampcode.com/threads/T-5e08134f-736d-4bda-8b28-d21654023ef7 Co-authored-by: Amp --- src/Lambda/CommandSqsHandler.php | 65 +++++++++++++++---------- tests/Feature/CommandSqsHandlerTest.php | 21 ++++++++ 2 files changed, 61 insertions(+), 25 deletions(-) diff --git a/src/Lambda/CommandSqsHandler.php b/src/Lambda/CommandSqsHandler.php index 92e120c5..e95b199b 100644 --- a/src/Lambda/CommandSqsHandler.php +++ b/src/Lambda/CommandSqsHandler.php @@ -80,44 +80,59 @@ private function runCommand(string $command, Context $context): array } } + /** + * Posts the result, falling back to posting the failure. It never throws, because the command has already run + * and a failed SQS record would be delivered again. + */ private function sendResult(string $url, array $result): void { - try { - $response = $this->post($url, $result); - } catch (GuzzleException $e) { - fwrite(STDERR, json_encode($result) . "\n"); - $this->post($url, [ - 'exit_code' => 255, - 'output' => 'Request failed: ' . $e->getMessage(), - ]); + $error = $this->post($url, $result); + if ($error === null) { return; } - $status = $response->getStatusCode(); + fwrite(STDERR, self::encode($result) . "\n"); + $error = $this->post($url, ['exit_code' => 255, 'output' => $error]); - if ($status >= 200 && $status < 300) { - return; + if ($error !== null) { + fwrite(STDERR, $error . "\n"); } - - fwrite(STDERR, json_encode($result) . "\n"); - $this->post($url, [ - 'exit_code' => 255, - 'output' => "Failed to send command output: [{$status}] [{$response->getBody()}]", - ]); } - private function post(string $url, array $body): \Psr\Http\Message\ResponseInterface + /** + * @return string|null A description of the failure, or null if the callback accepted the body. + */ + private function post(string $url, array $body): ?string { $project = Cloud::env('CRAFT_CLOUD_PROJECT_ID'); $environment = Cloud::env('CRAFT_CLOUD_ENVIRONMENT_ID'); - return $this->client->post($url, [ - RequestOptions::JSON => $body, - RequestOptions::HTTP_ERRORS => false, - RequestOptions::HEADERS => [ - 'User-Agent' => "Craft/Cloud/{$project}/{$environment}", - ], - ]); + try { + $response = $this->client->post($url, [ + RequestOptions::BODY => self::encode($body), + RequestOptions::HTTP_ERRORS => false, + RequestOptions::HEADERS => [ + 'Content-Type' => 'application/json', + 'User-Agent' => "Craft/Cloud/{$project}/{$environment}", + ], + ]); + } catch (GuzzleException $e) { + return 'Request failed: ' . $e->getMessage(); + } + + $status = $response->getStatusCode(); + + return $status >= 200 && $status < 300 + ? null + : "Failed to send command output: [{$status}] [{$response->getBody()}]"; + } + + /** + * Command output can contain invalid UTF-8, which would otherwise make encoding fail and lose the output. + */ + private static function encode(array $body): string + { + return json_encode($body, JSON_INVALID_UTF8_SUBSTITUTE | JSON_THROW_ON_ERROR); } } diff --git a/tests/Feature/CommandSqsHandlerTest.php b/tests/Feature/CommandSqsHandlerTest.php index a22abd29..f30c0e58 100644 --- a/tests/Feature/CommandSqsHandlerTest.php +++ b/tests/Feature/CommandSqsHandlerTest.php @@ -6,9 +6,11 @@ use Bref\Event\Sqs\SqsEvent; use CraftCms\Cloud\Lambda\CommandSqsHandler; use GuzzleHttp\Client; +use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; use GuzzleHttp\Middleware; +use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\Response; /** @@ -76,6 +78,25 @@ function run_command_handler(string $command, array $responses, string $script): ->toBe('up|--interactive=0|quoted arg'); }); +it('sends output that is not valid UTF-8', function (): void { + $requests = run_command_handler('help', [new Response(200)], script: 'toHaveCount(1)->and($requests[0]['body']['output'])->toBe("a\u{FFFD}b"); +}); + +it('does not throw when the callback cannot be reached', function (): void { + $requests = run_command_handler( + 'help', + [ + new ConnectException('down', new Request('POST', 'https://api.test/callback')), + new ConnectException('still down', new Request('POST', 'https://api.test/callback')), + ], + script: 'toHaveCount(2); +}); + it('reports a failed callback to the callback URL', function (): void { $requests = run_command_handler( 'help', From 03f172727bdb2eb610b5f17cac91f45c1e2d089e Mon Sep 17 00:00:00 2001 From: Tim Kelty Date: Tue, 10 Nov 2026 20:42:23 +0000 Subject: [PATCH 3/5] Add a Testbench workbench and orb setup The workbench serves a Craft 6 site with this package installed, on SQLite, from Testbench's skeleton. `composer build` installs Craft and `composer serve` serves it. In Amp orbs, .agents/setup installs PHP 8.5 and dependencies and .amp/services.yaml runs the workbench behind a portal. Also relocks craftcms/cms and craftcms/cms-assets at 6.0.0-beta.1, now that Packagist has indexed the cms-assets tag. Amp-Thread-ID: https://ampcode.com/threads/T-5e08134f-736d-4bda-8b28-d21654023ef7 Co-authored-by: Amp --- .agents/setup | 47 +++++++++++++++++++++++++++++++ .amp/services.yaml | 8 ++++++ .gitattributes | 5 ++++ AGENTS.md | 22 +++++++++++++++ composer.json | 15 ++++++++++ composer.lock | 29 +++++++++---------- testbench.yaml | 26 +++++++++++++++++ workbench/.env.example | 9 ++++++ workbench/config/trustedproxy.php | 8 ++++++ 9 files changed, 154 insertions(+), 15 deletions(-) create mode 100755 .agents/setup create mode 100644 .amp/services.yaml create mode 100644 AGENTS.md create mode 100644 testbench.yaml create mode 100644 workbench/.env.example create mode 100644 workbench/config/trustedproxy.php diff --git a/.agents/setup b/.agents/setup new file mode 100755 index 00000000..c3cd2fef --- /dev/null +++ b/.agents/setup @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# Prepares an Amp orb: PHP 8.5, Composer, and PHP dependencies. The workbench +# (Craft on SQLite) builds itself when its service starts; see .amp/services.yaml. +set -euo pipefail + +cd "$(dirname "${BASH_SOURCE[0]}")/.." +export COMPOSER_NO_INTERACTION=1 COMPOSER_ALLOW_SUPERUSER=1 + +scratch=$(mktemp -d) +trap 'rm -rf -- "$scratch"' EXIT + +# Debian's PHP is too old for Craft 6, so use the Sury packages. +if [[ ! -f /usr/share/keyrings/debsuryorg-archive-keyring.gpg ]]; then + curl -fsSL https://packages.sury.org/debsuryorg-archive-keyring.deb -o "$scratch/sury.deb" + sudo dpkg -i "$scratch/sury.deb" +fi +if [[ ! -f /etc/apt/sources.list.d/php.list ]]; then + . /etc/os-release + echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $VERSION_CODENAME main" | + sudo tee /etc/apt/sources.list.d/php.list >/dev/null +fi + +# The extensions CI installs, plus what Craft needs to serve the workbench. +packages=(php8.5-cli php8.5-bcmath php8.5-curl php8.5-gd php8.5-intl php8.5-mbstring + php8.5-sqlite3 php8.5-xml php8.5-zip unzip) +missing=() +for package in "${packages[@]}"; do + if [[ $(dpkg-query -W -f='${Status}' "$package" 2>/dev/null || true) != 'install ok installed' ]]; then + missing+=("$package") + fi +done +if ((${#missing[@]})); then + sudo apt-get update -qq + sudo env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "${missing[@]}" +fi +sudo update-alternatives --set php /usr/bin/php8.5 + +if ! command -v composer >/dev/null; then + curl -fsSL https://getcomposer.org/installer -o "$scratch/composer-setup.php" + expected=$(curl -fsSL https://composer.github.io/installer.sig) + actual=$(php -r 'echo hash_file("sha384", $argv[1]);' "$scratch/composer-setup.php") + [[ $actual == "$expected" ]] || { echo 'Composer installer checksum mismatch' >&2; exit 1; } + php "$scratch/composer-setup.php" --2 --install-dir="$scratch" --filename=composer + sudo install -m 755 "$scratch/composer" /usr/local/bin/composer +fi + +composer install --prefer-dist --no-progress diff --git a/.amp/services.yaml b/.amp/services.yaml new file mode 100644 index 00000000..49ad7e9b --- /dev/null +++ b/.amp/services.yaml @@ -0,0 +1,8 @@ +services: + workbench: + command: >- + composer build --no-interaction && + APP_URL="$PUBLIC_URL" exec php vendor/bin/testbench serve --host=127.0.0.1 --port="$PORT" --no-reload --no-interaction + portal: + title: Craft Cloud workbench + description: Craft 6 with craftcms/cloud. Sign in as admin / password. diff --git a/.gitattributes b/.gitattributes index 3fb5bfac..c958a289 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,3 +10,8 @@ /package.json export-ignore /phpunit.xml.dist export-ignore /tests/ export-ignore +/.agents/ export-ignore +/.amp/ export-ignore +/AGENTS.md export-ignore +/testbench.yaml export-ignore +/workbench/ export-ignore diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..76566d08 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,22 @@ +# craftcms/cloud + +Laravel package that runs Craft CMS 6 on Craft Cloud. Namespace `CraftCms\Cloud`, PHP 8.5. + +## Commands + +- `composer test`: Pest, with Orchestra Testbench booting Craft's and Cloud's providers (`tests/TestCase.php`). +- `composer lint` / `composer fix`: Mago. CI runs `composer validate --strict`, lint, and tests. +- `composer serve`: builds and serves the workbench on `127.0.0.1:8000`. + +## Workbench + +`testbench.yaml` plus `workbench/` make a Craft 6 site with this package installed, on SQLite, in Testbench's skeleton under `vendor/orchestra/testbench-core/laravel`. `composer build` creates the database and runs `craft:install` (admin / password); it's a no-op once Craft is installed. + +In an orb, run `amp orb services ensure` to start it behind a portal. `composer install` and `composer dump-autoload` purge the skeleton, including the database, so run `amp orb service restart workbench` afterwards. + +Craft Cloud is detected from `CRAFT_CLOUD` or `AWS_LAMBDA_RUNTIME_API`, so the workbench runs the off-Cloud code paths. + +## Constraints + +- `src/bref/handlers/*.php` are Lambda handler paths referenced by Cloud's infrastructure. Don't move or rename them. +- Read `CRAFT_CLOUD_*` variables through `CraftCms\Cloud\Cloud::env()`. diff --git a/composer.json b/composer.json index 50a18c5a..5b37184a 100644 --- a/composer.json +++ b/composer.json @@ -23,6 +23,21 @@ "test": [ "Composer\\Config::disableProcessTimeout", "./vendor/bin/pest --compact" + ], + "post-autoload-dump": [ + "@clear", + "@prepare" + ], + "clear": "@php vendor/bin/testbench package:purge-skeleton --ansi", + "prepare": "@php vendor/bin/testbench package:discover --ansi", + "build": [ + "@php vendor/bin/testbench package:create-sqlite-db --ansi", + "@php vendor/bin/testbench workbench:build --ansi" + ], + "serve": [ + "Composer\\Config::disableProcessTimeout", + "@build", + "@php vendor/bin/testbench serve --ansi" ] }, "autoload": { diff --git a/composer.lock b/composer.lock index 9d87aade..f4f5d397 100644 --- a/composer.lock +++ b/composer.lock @@ -896,7 +896,7 @@ }, { "name": "craftcms/cms", - "version": "6.x-dev", + "version": "6.0.0-beta.1", "source": { "type": "git", "url": "https://github.com/craftcms/cms.git", @@ -1096,19 +1096,18 @@ }, { "name": "craftcms/cms-assets", - "version": "6.x-dev", + "version": "6.0.0-beta.1", "source": { "type": "git", "url": "https://github.com/craftcms/cms-assets.git", - "reference": "2d0fdf2712c51d6dc0bc77900af0debe6a343ee6" + "reference": "87acafef481f17c12a10170211bbccda42588dbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/cms-assets/zipball/2d0fdf2712c51d6dc0bc77900af0debe6a343ee6", - "reference": "2d0fdf2712c51d6dc0bc77900af0debe6a343ee6", + "url": "https://api.github.com/repos/craftcms/cms-assets/zipball/87acafef481f17c12a10170211bbccda42588dbd", + "reference": "87acafef481f17c12a10170211bbccda42588dbd", "shasum": "" }, - "default-branch": true, "type": "library", "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1116,10 +1115,10 @@ ], "description": "Built assets for Craft CMS.", "support": { - "source": "https://github.com/craftcms/cms-assets/tree/6.x" + "source": "https://github.com/craftcms/cms-assets/tree/6.0.0-beta.1" }, - "time": "2026-11-10T15:34:49+00:00", - "published-time": "2026-11-10T15:35:00+00:00" + "time": "2026-11-10T18:11:32+00:00", + "published-time": "2026-11-10T18:17:49+00:00" }, { "name": "craftcms/laravel-aliases", @@ -3270,16 +3269,16 @@ }, { "name": "laravel/ai", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/laravel/ai.git", - "reference": "6837b4c557f67e04e8a13d882fe7724032278c27" + "reference": "307b218665592ab5532f682175e9dfa52e5647ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ai/zipball/6837b4c557f67e04e8a13d882fe7724032278c27", - "reference": "6837b4c557f67e04e8a13d882fe7724032278c27", + "url": "https://api.github.com/repos/laravel/ai/zipball/307b218665592ab5532f682175e9dfa52e5647ee", + "reference": "307b218665592ab5532f682175e9dfa52e5647ee", "shasum": "" }, "require": { @@ -3348,8 +3347,8 @@ "issues": "https://github.com/laravel/ai/issues", "source": "https://github.com/laravel/ai" }, - "time": "2026-10-19T16:50:18+00:00", - "published-time": "2026-10-19T16:56:23+00:00" + "time": "2026-11-09T13:10:36+00:00", + "published-time": "2026-11-10T19:25:19+00:00" }, { "name": "laravel/framework", diff --git a/testbench.yaml b/testbench.yaml new file mode 100644 index 00000000..b5f0cc9b --- /dev/null +++ b/testbench.yaml @@ -0,0 +1,26 @@ +laravel: '@testbench' + +# Craft's providers come from package discovery. This package is the root package, so list its own provider. +providers: + - CraftCms\Cloud\CloudServiceProvider + + +workbench: + start: /admin + install: false + user: 1 + sync: + - from: vendor/craftcms/cms-assets/resources + to: public/vendor/craft + build: + - craft:install: + --username: admin + --password: password + --email: admin@example.test + --siteName: Craft Cloud workbench + --siteUrl: '$APP_URL' + --language: en-US + discovers: + web: false + commands: false + config: true diff --git a/workbench/.env.example b/workbench/.env.example new file mode 100644 index 00000000..b5cd02e7 --- /dev/null +++ b/workbench/.env.example @@ -0,0 +1,9 @@ +APP_NAME="Craft Cloud workbench" +APP_ENV=local +APP_DEBUG=true +APP_KEY=base64:6BDzvwO4hrN7Twv6/gaQ6oZMB/CvpUArZXho189U75E= +APP_URL=http://127.0.0.1:8000 + +AUTH_MODEL=\CraftCms\Cms\User\Models\User +DB_CONNECTION=sqlite +SESSION_DRIVER=database diff --git a/workbench/config/trustedproxy.php b/workbench/config/trustedproxy.php new file mode 100644 index 00000000..6c7f7d9c --- /dev/null +++ b/workbench/config/trustedproxy.php @@ -0,0 +1,8 @@ + '*', +]; From 721ffeb2d1465738ace6880cafc7a91a5cef1407 Mon Sep 17 00:00:00 2001 From: Tim Kelty Date: Wed, 11 Nov 2026 16:52:25 +0000 Subject: [PATCH 4/5] Use the Valkey URL cloud-api sets, and time commands from the invocation - Read CRAFT_CLOUD_REDIS_URL, which is what cloud-api sets. CRAFT_CLOUD_CACHE_SRV was never set, so Valkey was never used. This also drops the per-boot DNS lookup. - Give console commands the invocation's remaining time, less a buffer to send the result, instead of assuming a 900-second function timeout. - Drop bref/extra-php-extensions. It only ships serverless.yml layer metadata, and Cloud's builder copies the extension images itself. Amp-Thread-ID: https://ampcode.com/threads/T-5e08134f-736d-4bda-8b28-d21654023ef7 Co-authored-by: Amp --- README.md | 2 +- composer.json | 6 +-- composer.lock | 63 +--------------------- src/CloudServiceProvider.php | 21 +------- src/Lambda/CommandSqsHandler.php | 6 +-- tests/Feature/CloudServiceProviderTest.php | 12 ++--- tests/Feature/CommandSqsHandlerTest.php | 13 ++++- tests/Support/DnsRecords.php | 28 ---------- tests/Support/functions.php | 15 ------ tests/TestCase.php | 7 +-- 10 files changed, 23 insertions(+), 150 deletions(-) delete mode 100644 tests/Support/DnsRecords.php delete mode 100644 tests/Support/functions.php diff --git a/README.md b/README.md index d40a771e..5a039344 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Laravel discovers `CraftCms\Cloud\CloudServiceProvider` automatically. Outside C Craft Cloud is detected from `CRAFT_CLOUD` or `AWS_LAMBDA_RUNTIME_API`. When either is set, the provider: - **Queue:** uses the environment's SQS queue (`CRAFT_CLOUD_SQS_URL`) as the default connection, dispatching after commit. -- **Cache:** uses a failover store: Valkey (found with the `CRAFT_CLOUD_CACHE_SRV` SRV record, with 1-second timeouts), then the database, then memory. +- **Cache:** uses Laravel's `failover` store: Valkey (`CRAFT_CLOUD_REDIS_URL`, with 1-second timeouts), then the database, then memory. Valkey needs the `redis` PHP extension, which Craft Cloud's PHP configuration enables. - **Logging:** sends the default channel to stderr, which is all Lambda collects. - **Sessions:** replaces `file` or `cookie` sessions with `database` sessions. Other drivers are left alone. diff --git a/composer.json b/composer.json index 5b37184a..ab816d59 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,6 @@ "type": "library", "require": { "bref/bref": "^3", - "bref/extra-php-extensions": "^3", "bref/laravel-bridge": "^3.1", "craftcms/cms": "^6.0.0-beta.1", "symfony/process": "^7.4.5 || ^8.0.5", @@ -48,10 +47,7 @@ "autoload-dev": { "psr-4": { "CraftCms\\Cloud\\Tests\\": "tests/" - }, - "files": [ - "tests/Support/functions.php" - ] + } }, "prefer-stable": true, "config": { diff --git a/composer.lock b/composer.lock index f4f5d397..2c193a88 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "371cadc2f29074674aeafc34289a79c8", + "content-hash": "f6e3afc79d08edd3bbc490567e8d584d", "packages": [ { "name": "aws/aws-crt-php", @@ -293,67 +293,6 @@ "time": "2026-11-05T16:08:15+00:00", "published-time": "2026-11-05T16:14:17+00:00" }, - { - "name": "bref/extra-php-extensions", - "version": "3.0.13", - "source": { - "type": "git", - "url": "https://github.com/brefphp/extra-php-extensions.git", - "reference": "4ef259132dfa1dbe26bcb890fe539a24903b3119" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brefphp/extra-php-extensions/zipball/4ef259132dfa1dbe26bcb890fe539a24903b3119", - "reference": "4ef259132dfa1dbe26bcb890fe539a24903b3119", - "shasum": "" - }, - "conflict": { - "bref/bref": "<3.0.0" - }, - "require-dev": { - "async-aws/core": "^1.7", - "async-aws/lambda": "^1.1", - "bref/logger": "^2.0", - "mnapoli/silly": "^1.7", - "mnapoli/silly-php-di": "^1.2", - "php-di/php-di": "^6.3", - "symfony/finder": "^5.4", - "symfony/http-client": "^5.4", - "symfony/process": "^5.4" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com" - } - ], - "description": "Extra PHP extensions for your lambda application.", - "support": { - "issues": "https://github.com/brefphp/extra-php-extensions/issues", - "source": "https://github.com/brefphp/extra-php-extensions/tree/3.0.13" - }, - "funding": [ - { - "url": "https://bref.sh/#enterprise", - "type": "custom" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://github.com/mnapoli", - "type": "github" - } - ], - "time": "2026-09-18T09:37:31+00:00", - "published-time": "2026-09-18T09:37:40+00:00" - }, { "name": "bref/laravel-bridge", "version": "3.1.6", diff --git a/src/CloudServiceProvider.php b/src/CloudServiceProvider.php index 5996c443..57387989 100644 --- a/src/CloudServiceProvider.php +++ b/src/CloudServiceProvider.php @@ -73,7 +73,7 @@ private function configureQueue(): void private function configureCache(): void { $stores = ['database', 'array']; - $redisUrl = $this->resolveRedisUrl(); + $redisUrl = Cloud::env('CRAFT_CLOUD_REDIS_URL'); if ($redisUrl !== null) { $this->configureRedisCache($redisUrl); @@ -103,23 +103,4 @@ private function configureRedisCache(string $redisUrl): void 'lock_connection' => self::REDIS_CONNECTION, ]); } - - private function resolveRedisUrl(): ?string - { - $srv = Cloud::env('CRAFT_CLOUD_CACHE_SRV'); - - if ($srv === null) { - return null; - } - - $records = dns_get_record($srv, DNS_SRV); - $target = is_array($records) ? $records[0]['target'] ?? null : null; - $port = is_array($records) ? $records[0]['port'] ?? null : null; - - if ($target === null || $port === null) { - return null; - } - - return 'redis://' . $target . ':' . $port; - } } diff --git a/src/Lambda/CommandSqsHandler.php b/src/Lambda/CommandSqsHandler.php index e95b199b..ef4048a2 100644 --- a/src/Lambda/CommandSqsHandler.php +++ b/src/Lambda/CommandSqsHandler.php @@ -25,9 +25,9 @@ final class CommandSqsHandler extends SqsHandler { /** - * Lambda's 900-second limit, less a buffer so the command times out first and its result is still sent. + * Time kept back from the invocation's remaining time, so the command times out first and its result is still sent. */ - private const COMMAND_TIMEOUT_SECONDS = 900 - 5; + private const RESULT_BUFFER_SECONDS = 5; public function __construct( private readonly Client $client = new Client(), @@ -60,7 +60,7 @@ private function runCommand(string $command, Context $context): array 'CRAFT_PATH' => (Cloud::env('LAMBDA_TASK_ROOT') ?? '/var/task') . '/craft', 'LAMBDA_INVOCATION_CONTEXT' => json_encode($context, JSON_THROW_ON_ERROR), ], - timeout: self::COMMAND_TIMEOUT_SECONDS, + timeout: max(1, ($context->getRemainingTimeInMillis() / 1000) - self::RESULT_BUFFER_SECONDS), ); $process->run(static function (string $type, string $buffer): void { diff --git a/tests/Feature/CloudServiceProviderTest.php b/tests/Feature/CloudServiceProviderTest.php index 0e0663b6..a5a48f7b 100644 --- a/tests/Feature/CloudServiceProviderTest.php +++ b/tests/Feature/CloudServiceProviderTest.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use CraftCms\Cloud\Tests\Support\DnsRecords; - it('leaves the app alone outside Craft Cloud', function (): void { $this->boot(['SESSION_DRIVER' => 'file', 'LOG_CHANNEL' => 'stack']); @@ -72,8 +70,8 @@ expect(config('queue.connections.craft-cloud-sqs'))->toBeNull(); }); -it('falls back from the database to memory when there is no cache SRV record', function (): void { - $this->boot(['CRAFT_CLOUD' => '1', 'CRAFT_CLOUD_CACHE_SRV' => '_cache._tcp.example.test']); +it('falls back from the database to memory when the environment has no Valkey', function (): void { + $this->boot(['CRAFT_CLOUD' => '1']); expect(config('cache.stores.craft-cloud-failover')) ->toBe([ @@ -84,10 +82,8 @@ ->toBeNull(); }); -it('puts Valkey first, with short timeouts, when the cache SRV record resolves', function (): void { - DnsRecords::fake([['target' => 'valkey.internal', 'port' => 6380]]); - - $this->boot(['CRAFT_CLOUD' => '1', 'CRAFT_CLOUD_CACHE_SRV' => '_cache._tcp.example.test']); +it('puts Valkey first, with short timeouts, when the environment has a Valkey URL', function (): void { + $this->boot(['CRAFT_CLOUD' => '1', 'CRAFT_CLOUD_REDIS_URL' => 'redis://valkey.internal:6380']); expect(config('database.redis.craft-cloud')) ->toBe([ diff --git a/tests/Feature/CommandSqsHandlerTest.php b/tests/Feature/CommandSqsHandlerTest.php index f30c0e58..5ec63db5 100644 --- a/tests/Feature/CommandSqsHandlerTest.php +++ b/tests/Feature/CommandSqsHandlerTest.php @@ -19,7 +19,7 @@ * @param list $responses * @return list */ -function run_command_handler(string $command, array $responses, string $script): array +function run_command_handler(string $command, array $responses, string $script, int $secondsLeft = 60): array { $root = sys_get_temp_dir() . '/cloud-task-' . bin2hex(random_bytes(4)); mkdir($root); @@ -45,7 +45,7 @@ function run_command_handler(string $command, array $responses, string $script): ob_start(); new CommandSqsHandler(new Client(['handler' => $stack]))->handleSqs( $event, - new Context('request', 0, 'arn', 'trace'), + new Context('request', intval(microtime(true) * 1000) + ($secondsLeft * 1000), 'arn', 'trace'), ); ob_end_clean(); @@ -97,6 +97,15 @@ function run_command_handler(string $command, array $responses, string $script): expect($requests)->toHaveCount(2); }); +it('stops the command before the invocation runs out of time', function (): void { + $requests = run_command_handler('help', [new Response(200)], script: 'toBe(1) + ->and($requests[0]['body']['output']) + ->toContain('exceeded the timeout'); +}); + it('reports a failed callback to the callback URL', function (): void { $requests = run_command_handler( 'help', diff --git a/tests/Support/DnsRecords.php b/tests/Support/DnsRecords.php deleted file mode 100644 index 99491e69..00000000 --- a/tests/Support/DnsRecords.php +++ /dev/null @@ -1,28 +0,0 @@ -unsetEnv($key); } - DnsRecords::reset(); - parent::setUp(); } @@ -54,8 +51,6 @@ protected function tearDown(): void foreach ($this->originalEnv as $key => $value) { $value === false ? $this->unsetEnv($key) : $this->setEnv($key, $value); } - - DnsRecords::reset(); } /** From 01bbc42c661065ab6f6a208d06fe37ccfe1f71dc Mon Sep 17 00:00:00 2001 From: Tim Kelty Date: Thu, 12 Nov 2026 14:28:13 +0000 Subject: [PATCH 5/5] Require bref/laravel-bridge 3.1.7 for GHSA-qmwm-25jf-8mpw Amp-Thread-ID: https://ampcode.com/threads/T-5e08134f-736d-4bda-8b28-d21654023ef7 Co-authored-by: Amp --- composer.json | 2 +- composer.lock | 62 +++++++++++++++++++++++++-------------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/composer.json b/composer.json index ab816d59..c1110849 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "type": "library", "require": { "bref/bref": "^3", - "bref/laravel-bridge": "^3.1", + "bref/laravel-bridge": "^3.1.7", "craftcms/cms": "^6.0.0-beta.1", "symfony/process": "^7.4.5 || ^8.0.5", "guzzlehttp/guzzle": "^7.8" diff --git a/composer.lock b/composer.lock index 2c193a88..4c65647a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f6e3afc79d08edd3bbc490567e8d584d", + "content-hash": "266e3bf0bf6cd0e71b2e4ea211461e59", "packages": [ { "name": "aws/aws-crt-php", @@ -63,16 +63,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.403.2", + "version": "3.403.4", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "20e883c6952986c3de686515a99b63caeb8dfafe" + "reference": "2d01207539928fe943a3f8d8981952b3655e2fc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/20e883c6952986c3de686515a99b63caeb8dfafe", - "reference": "20e883c6952986c3de686515a99b63caeb8dfafe", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2d01207539928fe943a3f8d8981952b3655e2fc1", + "reference": "2d01207539928fe943a3f8d8981952b3655e2fc1", "shasum": "" }, "require": { @@ -154,10 +154,10 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.403.2" + "source": "https://github.com/aws/aws-sdk-php/tree/3.403.4" }, - "time": "2026-11-09T19:36:28+00:00", - "published-time": "2026-11-09T19:45:32+00:00" + "time": "2026-11-11T19:03:26+00:00", + "published-time": "2026-11-11T19:12:26+00:00" }, { "name": "bacon/bacon-qr-code", @@ -217,16 +217,16 @@ }, { "name": "bref/bref", - "version": "3.0.15", + "version": "3.0.16", "source": { "type": "git", "url": "https://github.com/brefphp/bref.git", - "reference": "18776f2f9bcf6be47736a33b9dfa301085ee827e" + "reference": "f5c68987dfb29f46cf79540ac494a8f8e74783d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brefphp/bref/zipball/18776f2f9bcf6be47736a33b9dfa301085ee827e", - "reference": "18776f2f9bcf6be47736a33b9dfa301085ee827e", + "url": "https://api.github.com/repos/brefphp/bref/zipball/f5c68987dfb29f46cf79540ac494a8f8e74783d4", + "reference": "f5c68987dfb29f46cf79540ac494a8f8e74783d4", "shasum": "" }, "require": { @@ -278,7 +278,7 @@ ], "support": { "issues": "https://github.com/brefphp/bref/issues", - "source": "https://github.com/brefphp/bref/tree/3.0.15" + "source": "https://github.com/brefphp/bref/tree/3.0.16" }, "funding": [ { @@ -290,26 +290,26 @@ "type": "github" } ], - "time": "2026-11-05T16:08:15+00:00", - "published-time": "2026-11-05T16:14:17+00:00" + "time": "2026-11-11T15:58:48+00:00", + "published-time": "2026-11-11T16:00:26+00:00" }, { "name": "bref/laravel-bridge", - "version": "3.1.6", + "version": "3.1.7", "source": { "type": "git", "url": "https://github.com/brefphp/laravel-bridge.git", - "reference": "4cec0e7d8d804d8cdd5af80259a275edd53abb23" + "reference": "c9841cfa7196cfb76dcb11adc401c90367f6084e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brefphp/laravel-bridge/zipball/4cec0e7d8d804d8cdd5af80259a275edd53abb23", - "reference": "4cec0e7d8d804d8cdd5af80259a275edd53abb23", + "url": "https://api.github.com/repos/brefphp/laravel-bridge/zipball/c9841cfa7196cfb76dcb11adc401c90367f6084e", + "reference": "c9841cfa7196cfb76dcb11adc401c90367f6084e", "shasum": "" }, "require": { "aws/aws-sdk-php": "^3.222", - "bref/bref": "^3.0.13", + "bref/bref": "^3.0.16", "bref/laravel-health-check": "^1", "bref/monolog-bridge": "^1.0 || ^2.0", "illuminate/container": "^10.0 || ^11.0 || ^12.0 || ^13.0", @@ -361,10 +361,10 @@ ], "support": { "issues": "https://github.com/brefphp/laravel-bridge/issues", - "source": "https://github.com/brefphp/laravel-bridge/tree/3.1.6" + "source": "https://github.com/brefphp/laravel-bridge/tree/3.1.7" }, - "time": "2026-11-05T16:08:07+00:00", - "published-time": "2026-11-05T16:09:10+00:00" + "time": "2026-11-12T13:20:53+00:00", + "published-time": "2026-11-12T13:23:19+00:00" }, { "name": "bref/laravel-health-check", @@ -1768,20 +1768,20 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.6", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" + "reference": "d2e16653a734c8784c1851ad68b02f997b53ca82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d2e16653a734c8784c1851ad68b02f997b53ca82", + "reference": "d2e16653a734c8784c1851ad68b02f997b53ca82", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "conflict": { "phpunit/phpunit": "<=7.5 || >=14" @@ -1810,10 +1810,10 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.6" + "source": "https://github.com/doctrine/deprecations/tree/1.2.0" }, - "time": "2026-02-07T07:09:04+00:00", - "published-time": "2026-02-07T07:10:09+00:00" + "time": "2026-11-11T10:04:49+00:00", + "published-time": "2026-11-11T10:12:24+00:00" }, { "name": "doctrine/inflector",