From eb822d7ff156cf8c34069ae4781434d37b2bc0e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Subiabre=20Garc=C3=ADa?= Date: Mon, 26 Oct 2026 12:52:19 +0100 Subject: [PATCH] feat: Mail integration (#259) * feat: composer require symfony/mailer * feat: add entities for massive emailing * feat: expose mail API resources * feat: add BatchStatus::SentErrors * fix: show client status after consent command * feat: define shape of audiences criteria * fix: missing map entity provider for mail entities * fix: unsupported array/object conversion of audience criterias * fix: rename MailBatch to MailBroadcast and MailBatchRecipient to MailDispatch * feat: add command to process broadcasts * feat: add lock to broadcast process command * fix: remove dispatchCursor from Broadcast * fix: make broadcasts-process command fast * feat: update mailpit config for local dev * feat: add app:mail:dispatches-process command * feat: it was fun to play with a massive mailing prototype * feat: composer require symfonycasts/reset-password-bundle * feat: make reset-password * fix: bad ALTER on migration down op * feat: add migration for reset password bundle * fix: update forms style * feat: configure mailer address via env var * fix: remove missing asset reference * feat: translate /auth/reset-password * feat: translate email message * fix: calendar minimum optimum deadline not being set when release was given * feat: translate /check-email * feat: translate /reset * fix: rename main SecurityController path to /auth * feat: add known oauth2 clients controllr * fix: deprecated custom responses openapi context definitions * fix: projects not in campaign can still have a calendar * fix: weird af regression out of the blue, fuck software * feat: fuck my life --- .env | 5 + .github/workflows/phpunit.yaml | 2 +- composer.json | 3 + composer.lock | 3043 +++++++++++------ config/bundles.php | 1 + config/packages/mailer.yaml | 3 + config/packages/reset_password.yaml | 2 + docker-compose.override.yml | 12 + migrations/Version20260812124026.php | 2 +- migrations/Version20261021102456.php | 28 + src/ApiResource/Gateway/ChargeApiResource.php | 12 +- .../Project/SupportApiResource.php | 12 +- src/Command/OAuth2ConsentClientCommand.php | 1 + src/Controller/OAuthClientsController.php | 62 + src/Controller/ResetPasswordController.php | 181 + src/Controller/SecurityController.php | 2 +- src/Entity/ResetPasswordRequest.php | 40 + src/Form/ChangePasswordFormType.php | 62 + src/Form/ResetPasswordRequestFormType.php | 31 + .../ResetPasswordRequestRepository.php | 32 + src/State/Project/ProjectStateProcessor.php | 10 +- symfony.lock | 24 + templates/clients/clients.html.twig | 25 + templates/footer.html.twig | 2 +- .../reset_password/check_email.html.twig | 21 + templates/reset_password/email.html.twig | 8 + templates/reset_password/request.html.twig | 62 + templates/reset_password/reset.html.twig | 75 + tests/Entity/ProjectCalendarTest.php | 55 +- tests/Entity/ProjectCampaignReviewTest.php | 49 +- translations/messages.en.yaml | 30 + 31 files changed, 2763 insertions(+), 1134 deletions(-) create mode 100644 config/packages/mailer.yaml create mode 100644 config/packages/reset_password.yaml create mode 100644 migrations/Version20261021102456.php create mode 100644 src/Controller/OAuthClientsController.php create mode 100644 src/Controller/ResetPasswordController.php create mode 100644 src/Entity/ResetPasswordRequest.php create mode 100644 src/Form/ChangePasswordFormType.php create mode 100644 src/Form/ResetPasswordRequestFormType.php create mode 100644 src/Repository/ResetPasswordRequestRepository.php create mode 100644 templates/clients/clients.html.twig create mode 100644 templates/reset_password/check_email.html.twig create mode 100644 templates/reset_password/email.html.twig create mode 100644 templates/reset_password/request.html.twig create mode 100644 templates/reset_password/reset.html.twig diff --git a/.env b/.env index 4b7704a..7f2de4c 100644 --- a/.env +++ b/.env @@ -44,6 +44,11 @@ DOCTRINE_ENCRYPTION_BLIND_INDEX_KEY="" CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$' ###< nelmio/cors-bundle ### +###> symfony/mailer ### +MAILER_DSN=smtp://mailer:1025 +MAILER_ADDRESS=system@example.com +###< symfony/mailer ### + ###> App\Gateway\Stripe\StripeGateway ### STRIPE_API_KEY="!ChangeMe!" STRIPE_WEBHOOK_SECRET="" diff --git a/.github/workflows/phpunit.yaml b/.github/workflows/phpunit.yaml index b1f1fcf..870d947 100644 --- a/.github/workflows/phpunit.yaml +++ b/.github/workflows/phpunit.yaml @@ -41,6 +41,6 @@ jobs: php -r 'echo "PHP_VERSION=", PHP_VERSION, PHP_EOL;' - name: PHPUnit - run: php -d memory_limit=128M bin/phpunit -c phpunit.xml.dist + run: XDEBUG_MODE=off php -d memory_limit=128M bin/phpunit -c phpunit.xml.dist env: DATABASE_URL: mysql://root:goteo@127.0.0.1:${{ job.services.mariadb.ports['3306'] }}/goteo diff --git a/composer.json b/composer.json index d7de959..168bfa1 100644 --- a/composer.json +++ b/composer.json @@ -40,9 +40,11 @@ "symfony/dotenv": "6.4.*", "symfony/expression-language": "6.4.*", "symfony/flex": "^2", + "symfony/form": "6.4.*", "symfony/framework-bundle": "6.4.*", "symfony/http-client": "6.4.*", "symfony/intl": "6.4.*", + "symfony/mailer": "6.4.*", "symfony/maker-bundle": "^1.62", "symfony/monolog-bundle": "^3.10", "symfony/property-access": "6.4.*", @@ -58,6 +60,7 @@ "symfony/validator": "6.4.*", "symfony/webpack-encore-bundle": "^2.4", "symfony/yaml": "6.4.*", + "symfonycasts/reset-password-bundle": "^1.25", "zenstruck/foundry": "^2.4" }, "config": { diff --git a/composer.lock b/composer.lock index 732cfc5..5b8b363 100644 --- a/composer.lock +++ b/composer.lock @@ -4,26 +4,26 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "882ee0e2413f397594749458366da4cd", + "content-hash": "de4c86ba20ca0c2b7513c3594346b7a7", "packages": [ { "name": "api-platform/doctrine-common", - "version": "v4.2.3", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", - "reference": "8acbed7c2768f7c15a5b030018132e454f895e55" + "reference": "202b4e6626c01a593e61b89028f89348e7190dd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/8acbed7c2768f7c15a5b030018132e454f895e55", - "reference": "8acbed7c2768f7c15a5b030018132e454f895e55", + "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/202b4e6626c01a593e61b89028f89348e7190dd9", + "reference": "202b4e6626c01a593e61b89028f89348e7190dd9", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.11", - "api-platform/state": "^4.1.11", - "doctrine/collections": "^2.1", + "api-platform/metadata": "^4.2.6", + "api-platform/state": "^4.2.4", + "doctrine/collections": "^2.1 || ^3.0", "doctrine/common": "^3.2.2", "doctrine/persistence": "^3.2 || ^4.0", "php": ">=8.2" @@ -35,8 +35,8 @@ "doctrine/mongodb-odm": "^2.10", "doctrine/orm": "^2.17 || ^3.0", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev", - "symfony/type-info": "^7.3" + "phpunit/phpunit": "^11.5 || ^12.2", + "symfony/type-info": "^7.3 || ^8.0" }, "suggest": { "api-platform/graphql": "For GraphQl mercure subscriptions.", @@ -53,13 +53,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -92,45 +92,48 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.2.3" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.21" }, - "time": "2025-08-27T12:34:14+00:00" + "time": "2026-09-12T13:19:57+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.1.28", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", - "reference": "f796384bf4208c1a3c9132b8f79fd2475c119aec" + "reference": "997fa78bf13ddc5cb3951eea61bd23f425e91486" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/f796384bf4208c1a3c9132b8f79fd2475c119aec", - "reference": "f796384bf4208c1a3c9132b8f79fd2475c119aec", + "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/997fa78bf13ddc5cb3951eea61bd23f425e91486", + "reference": "997fa78bf13ddc5cb3951eea61bd23f425e91486", "shasum": "" }, "require": { - "api-platform/doctrine-common": "^4.1.11", - "api-platform/metadata": "^4.1.11", - "api-platform/state": "^4.1.11", - "doctrine/orm": "^2.17 || ^3.0", - "php": ">=8.2", - "symfony/property-info": "^6.4 || ^7.1" + "api-platform/doctrine-common": "^4.2.23", + "api-platform/metadata": "^4.2", + "api-platform/serializer": "^4.2.16", + "api-platform/state": "^4.2.4", + "composer/semver": "^3.4", + "doctrine/orm": "^2.17 || ^3.0.1", + "php": ">=8.2" }, "require-dev": { - "doctrine/doctrine-bundle": "^2.11", + "doctrine/doctrine-bundle": "^2.11 || ^3.1", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev", + "phpunit/phpunit": "^11.5 || ^12.2", "ramsey/uuid": "^4.7", "ramsey/uuid-doctrine": "^2.0", - "symfony/cache": "^6.4 || ^7.0", - "symfony/framework-bundle": "^6.4 || ^7.0", - "symfony/property-access": "^6.4 || ^7.0", - "symfony/serializer": "^6.4 || ^7.0", - "symfony/uid": "^6.4 || ^7.0", - "symfony/validator": "^6.4.11 || ^7.0", - "symfony/yaml": "^6.4 || ^7.0" + "symfony/cache": "^6.4 || ^7.0 || ^8.0", + "symfony/framework-bundle": "^6.4 || ^7.0 || ^8.0", + "symfony/property-access": "^6.4 || ^7.0 || ^8.0", + "symfony/property-info": "^6.4 || ^7.1 || ^8.0", + "symfony/serializer": "^6.4 || ^7.0 || ^8.0", + "symfony/type-info": "^7.3 || ^8.0", + "symfony/uid": "^6.4 || ^7.0 || ^8.0", + "symfony/validator": "^6.4.11 || ^7.0 || ^8.0", + "symfony/yaml": "^6.4 || ^7.0 || ^8.0" }, "type": "library", "extra": { @@ -139,12 +142,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", - "dev-main": "4.2.x-dev" + "dev-4.2": "4.2.x-dev", + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -177,30 +181,30 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.1.28" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.21" }, - "time": "2025-11-13T15:57:28+00:00" + "time": "2026-09-09T07:14:18+00:00" }, { "name": "api-platform/documentation", - "version": "v4.2.3", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", - "reference": "c5a54336d8c51271aa5d54e57147cdee7162ab3a" + "reference": "f07b444aef1f75bb07beb9f8d799213f05070e5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/documentation/zipball/c5a54336d8c51271aa5d54e57147cdee7162ab3a", - "reference": "c5a54336d8c51271aa5d54e57147cdee7162ab3a", + "url": "https://api.github.com/repos/api-platform/documentation/zipball/f07b444aef1f75bb07beb9f8d799213f05070e5f", + "reference": "f07b444aef1f75bb07beb9f8d799213f05070e5f", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.11", + "api-platform/metadata": "^4.3", "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "11.5.x-dev" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "project", "extra": { @@ -209,13 +213,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -240,37 +244,37 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.2.3" + "source": "https://github.com/api-platform/documentation/tree/v4.4.0-alpha.1" }, - "time": "2025-08-19T08:04:29+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.2.3", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", - "reference": "aef434b026b861ea451d814c86838b5470b8bfb4" + "reference": "8e71916de766f503dd60f1a1e886b4d704f881a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/http-cache/zipball/aef434b026b861ea451d814c86838b5470b8bfb4", - "reference": "aef434b026b861ea451d814c86838b5470b8bfb4", + "url": "https://api.github.com/repos/api-platform/http-cache/zipball/8e71916de766f503dd60f1a1e886b4d704f881a8", + "reference": "8e71916de766f503dd60f1a1e886b4d704f881a8", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.11", - "api-platform/state": "^4.1.11", + "api-platform/metadata": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", - "symfony/http-foundation": "^6.4 || ^7.0" + "symfony/http-foundation": "^6.4.14 || ^7.0 || ^8.0" }, "require-dev": { - "guzzlehttp/guzzle": "^6.0 || ^7.0", + "guzzlehttp/guzzle": "^6.0 || ^7.0 || ^8.0", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev", - "symfony/dependency-injection": "^6.4 || ^7.0", - "symfony/http-client": "^6.4 || ^7.0", - "symfony/type-info": "^7.3" + "phpunit/phpunit": "^11.5 || ^12.2", + "symfony/dependency-injection": "^6.4 || ^7.0 || ^8.0", + "symfony/http-client": "^6.4 || ^7.0 || ^8.0", + "symfony/type-info": "^7.3 || ^8.0" }, "type": "library", "extra": { @@ -279,13 +283,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -320,41 +324,42 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.2.3" + "source": "https://github.com/api-platform/http-cache/tree/v4.4.0-alpha.1" }, - "time": "2025-09-16T12:51:08+00:00" + "time": "2026-06-09T14:20:49+00:00" }, { "name": "api-platform/hydra", - "version": "v4.1.28", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", - "reference": "8c75b814af143c95ffc1857565169ff5b6f1b421" + "reference": "6498a597510fbd6aa46a25cdfa867d415b28ed9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/hydra/zipball/8c75b814af143c95ffc1857565169ff5b6f1b421", - "reference": "8c75b814af143c95ffc1857565169ff5b6f1b421", + "url": "https://api.github.com/repos/api-platform/hydra/zipball/6498a597510fbd6aa46a25cdfa867d415b28ed9f", + "reference": "6498a597510fbd6aa46a25cdfa867d415b28ed9f", "shasum": "" }, "require": { - "api-platform/documentation": "^4.1.11", - "api-platform/json-schema": "^4.1.11", - "api-platform/jsonld": "^4.1.11", - "api-platform/metadata": "^4.1.11", - "api-platform/serializer": "^4.1.11", - "api-platform/state": "^4.1.11", + "api-platform/documentation": "^4.3", + "api-platform/json-schema": "^4.3", + "api-platform/jsonld": "^4.3", + "api-platform/metadata": "^4.3", + "api-platform/serializer": "^4.3.12", + "api-platform/state": "^4.3", "php": ">=8.2", - "symfony/web-link": "^6.4 || ^7.1" + "symfony/type-info": "^7.3 || ^8.0", + "symfony/web-link": "^6.4 || ^7.1 || ^8.0" }, "require-dev": { - "api-platform/doctrine-common": "^4.1", - "api-platform/doctrine-odm": "^4.1", - "api-platform/doctrine-orm": "^4.1", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", "phpspec/prophecy": "^1.19", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "library", "extra": { @@ -363,12 +368,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", - "dev-main": "4.2.x-dev" + "dev-4.2": "4.2.x-dev", + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -405,35 +411,36 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.1.28" + "source": "https://github.com/api-platform/hydra/tree/v4.3.21" }, - "time": "2025-07-15T14:10:59+00:00" + "time": "2026-08-16T15:12:48+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.1.28", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", - "reference": "1d1c6eaa4841f3989e2bec4cdf8167fb0ca42a8f" + "reference": "b97491371c40f9080bf0a4d24799d7779e1eb0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-schema/zipball/1d1c6eaa4841f3989e2bec4cdf8167fb0ca42a8f", - "reference": "1d1c6eaa4841f3989e2bec4cdf8167fb0ca42a8f", + "url": "https://api.github.com/repos/api-platform/json-schema/zipball/b97491371c40f9080bf0a4d24799d7779e1eb0b2", + "reference": "b97491371c40f9080bf0a4d24799d7779e1eb0b2", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.11", + "api-platform/metadata": "^4.3", "php": ">=8.2", - "symfony/console": "^6.4 || ^7.0", - "symfony/property-info": "^6.4 || ^7.1", - "symfony/serializer": "^6.4 || ^7.0", - "symfony/uid": "^6.4 || ^7.0" + "symfony/console": "^6.4 || ^7.0 || ^8.0", + "symfony/property-info": "^6.4 || ^7.1 || ^8.0", + "symfony/serializer": "^6.4 || ^7.0 || ^8.0", + "symfony/type-info": "^7.3 || ^8.0", + "symfony/uid": "^6.4 || ^7.0 || ^8.0" }, "require-dev": { "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "library", "extra": { @@ -442,12 +449,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", - "dev-main": "4.2.x-dev" + "dev-4.2": "4.2.x-dev", + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -484,33 +492,33 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.1.28" + "source": "https://github.com/api-platform/json-schema/tree/v4.3.21" }, - "time": "2025-06-29T12:24:14+00:00" + "time": "2026-09-02T08:21:34+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.2.3", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", - "reference": "774b460273177983c52540a479ea9e9f940d7a1b" + "reference": "026a380c3c85c4210028da43e0cea1b64211bbf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/jsonld/zipball/774b460273177983c52540a479ea9e9f940d7a1b", - "reference": "774b460273177983c52540a479ea9e9f940d7a1b", + "url": "https://api.github.com/repos/api-platform/jsonld/zipball/026a380c3c85c4210028da43e0cea1b64211bbf5", + "reference": "026a380c3c85c4210028da43e0cea1b64211bbf5", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.11", - "api-platform/serializer": "^4.1.11", - "api-platform/state": "^4.1.11", + "api-platform/metadata": "^4.3", + "api-platform/serializer": "^4.3.12", + "api-platform/state": "^4.3", "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "11.5.x-dev", - "symfony/type-info": "^7.3" + "phpunit/phpunit": "^11.5 || ^12.2", + "symfony/type-info": "^7.3 || ^8.0" }, "type": "library", "extra": { @@ -519,13 +527,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -564,22 +572,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.2.3" + "source": "https://github.com/api-platform/jsonld/tree/v4.3.21" }, - "time": "2025-09-25T19:30:56+00:00" + "time": "2026-06-13T05:11:46+00:00" }, { "name": "api-platform/metadata", - "version": "v4.1.18", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", - "reference": "5df40a760eef56963c151181dc9498bbc260e7ae" + "reference": "6493d73e04649e07cff914db3f2c178abeae3278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/metadata/zipball/5df40a760eef56963c151181dc9498bbc260e7ae", - "reference": "5df40a760eef56963c151181dc9498bbc260e7ae", + "url": "https://api.github.com/repos/api-platform/metadata/zipball/6493d73e04649e07cff914db3f2c178abeae3278", + "reference": "6493d73e04649e07cff914db3f2c178abeae3278", "shasum": "" }, "require": { @@ -587,22 +595,22 @@ "php": ">=8.2", "psr/cache": "^1.0 || ^2.0 || ^3.0", "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/property-info": "^6.4 || ^7.1", - "symfony/string": "^6.4 || ^7.0", - "symfony/type-info": "^7.2" + "symfony/property-info": "^6.4 || ^7.1 || ^8.0", + "symfony/string": "^6.4 || ^7.0 || ^8.0", + "symfony/type-info": "^7.3 || ^8.0" }, "require-dev": { - "api-platform/json-schema": "^4.1.11", - "api-platform/openapi": "^4.1.11", - "api-platform/state": "^4.1.11", + "api-platform/json-schema": "^4.3", + "api-platform/openapi": "^4.3", + "api-platform/state": "^4.3", "phpspec/prophecy-phpunit": "^2.2", "phpstan/phpdoc-parser": "^1.29 || ^2.0", - "phpunit/phpunit": "11.5.x-dev", - "symfony/config": "^6.4 || ^7.0", - "symfony/routing": "^6.4 || ^7.0", - "symfony/var-dumper": "^6.4 || ^7.0", - "symfony/web-link": "^6.4 || ^7.1", - "symfony/yaml": "^6.4 || ^7.0" + "phpunit/phpunit": "^11.5 || ^12.2", + "symfony/config": "^6.4 || ^7.0 || ^8.0", + "symfony/routing": "^6.4 || ^7.0 || ^8.0", + "symfony/var-dumper": "^6.4 || ^7.0 || ^8.0", + "symfony/web-link": "^6.4 || ^7.1 || ^8.0", + "symfony/yaml": "^6.4 || ^7.0 || ^8.0" }, "suggest": { "phpstan/phpdoc-parser": "For PHP documentation support.", @@ -616,12 +624,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", - "dev-main": "4.2.x-dev" + "dev-4.2": "4.2.x-dev", + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -661,40 +670,43 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.1.18" + "source": "https://github.com/api-platform/metadata/tree/v4.3.21" }, - "time": "2025-07-03T13:06:55+00:00" + "time": "2026-09-29T18:57:50+00:00" }, { "name": "api-platform/openapi", - "version": "v4.1.28", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", - "reference": "793b53e51a5c24076d4024b6aa77de29e74015cd" + "reference": "c72470132f2eb35a4f8f252e60342f0f7c487704" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/openapi/zipball/793b53e51a5c24076d4024b6aa77de29e74015cd", - "reference": "793b53e51a5c24076d4024b6aa77de29e74015cd", + "url": "https://api.github.com/repos/api-platform/openapi/zipball/c72470132f2eb35a4f8f252e60342f0f7c487704", + "reference": "c72470132f2eb35a4f8f252e60342f0f7c487704", "shasum": "" }, "require": { - "api-platform/json-schema": "^4.1.11", - "api-platform/metadata": "^4.1.11", - "api-platform/state": "^4.1.11", + "api-platform/json-schema": "^4.3", + "api-platform/metadata": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", - "symfony/console": "^6.4 || ^7.0", - "symfony/filesystem": "^6.4 || ^7.0", - "symfony/property-access": "^6.4 || ^7.0", - "symfony/serializer": "^6.4 || ^7.0" + "symfony/console": "^6.4 || ^7.0 || ^8.0", + "symfony/filesystem": "^6.4 || ^7.0 || ^8.0", + "symfony/property-access": "^6.4 || ^7.0 || ^8.0", + "symfony/serializer": "^6.4 || ^7.0 || ^8.0", + "symfony/type-info": "^7.3 || ^8.0" }, "require-dev": { - "api-platform/doctrine-common": "^4.1", - "api-platform/doctrine-odm": "^4.1", - "api-platform/doctrine-orm": "^4.1", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", + "api-platform/serializer": "^4.3.12", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev" + "phpunit/phpunit": "^11.5 || ^12.2", + "symfony/type-info": "^7.3 || ^8.0" }, "type": "library", "extra": { @@ -703,12 +715,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", - "dev-main": "4.2.x-dev" + "dev-4.2": "4.2.x-dev", + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -748,46 +761,47 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.1.28" + "source": "https://github.com/api-platform/openapi/tree/v4.3.21" }, - "time": "2025-07-29T08:53:27+00:00" + "time": "2026-06-16T10:01:53+00:00" }, { "name": "api-platform/serializer", - "version": "v4.2.0", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "8c94416556df14fd20203975d000c0213a308e2d" + "reference": "d6984c417ca6c0ea22b31269c274564577ad71c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/8c94416556df14fd20203975d000c0213a308e2d", - "reference": "8c94416556df14fd20203975d000c0213a308e2d", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/d6984c417ca6c0ea22b31269c274564577ad71c6", + "reference": "d6984c417ca6c0ea22b31269c274564577ad71c6", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.16", - "api-platform/state": "^4.1.11", + "api-platform/metadata": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", - "symfony/property-access": "^6.4 || ^7.0", - "symfony/property-info": "^6.4 || ^7.1", - "symfony/serializer": "^6.4 || ^7.0", - "symfony/validator": "^6.4 || ^7.0" + "symfony/property-access": "^6.4 || ^7.0 || ^8.0", + "symfony/property-info": "^6.4 || ^7.1 || ^8.0", + "symfony/serializer": "^6.4.37 || ^7.4.9 || ^8.0.9", + "symfony/validator": "^6.4.11 || ^7.0 || ^8.0" }, "require-dev": { - "api-platform/doctrine-common": "^4.1", - "api-platform/doctrine-odm": "^4.1", - "api-platform/doctrine-orm": "^4.1", - "api-platform/json-schema": "^4.1", - "api-platform/openapi": "^4.1", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", + "api-platform/json-schema": "^4.3", + "api-platform/openapi": "^4.3", "doctrine/collections": "^2.1", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev", - "symfony/mercure-bundle": "*", - "symfony/type-info": "^7.3", - "symfony/var-dumper": "^6.4 || ^7.0", - "symfony/yaml": "^6.4 || ^7.0" + "phpunit/phpunit": "^11.5 || ^12.2", + "sebastian/exporter": "^6.3.2 || ^7.0.2", + "symfony/mercure-bundle": "^0.4.3|^0.5", + "symfony/type-info": "^7.3 || ^8.0", + "symfony/var-dumper": "^6.4 || ^7.0 || ^8.0", + "symfony/yaml": "^6.4 || ^7.0 || ^8.0" }, "suggest": { "api-platform/doctrine-odm": "To support Doctrine MongoDB ODM state options.", @@ -800,13 +814,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -841,40 +855,41 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.2.0" + "source": "https://github.com/api-platform/serializer/tree/v4.3.21" }, - "time": "2025-09-15T13:20:40+00:00" + "time": "2026-09-09T07:14:58+00:00" }, { "name": "api-platform/state", - "version": "v4.2.3", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "5a74ea2ca36d0651bf637b0da6c10db4383172bf" + "reference": "e5b1b7fa70fa8a8de2065ab4fc960db035723c0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/5a74ea2ca36d0651bf637b0da6c10db4383172bf", - "reference": "5a74ea2ca36d0651bf637b0da6c10db4383172bf", + "url": "https://api.github.com/repos/api-platform/state/zipball/e5b1b7fa70fa8a8de2065ab4fc960db035723c0b", + "reference": "e5b1b7fa70fa8a8de2065ab4fc960db035723c0b", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.18", + "api-platform/metadata": "^4.3", "php": ">=8.2", "psr/container": "^1.0 || ^2.0", - "symfony/http-kernel": "^6.4 || ^7.0", - "symfony/serializer": "^6.4 || ^7.0", + "symfony/deprecation-contracts": "^3.1", + "symfony/http-kernel": "^6.4.13 || ^7.0 || ^8.0", + "symfony/serializer": "^6.4 || ^7.0 || ^8.0", "symfony/translation-contracts": "^3.0" }, "require-dev": { - "api-platform/serializer": "^4.1", - "api-platform/validator": "^4.1", - "phpunit/phpunit": "11.5.x-dev", - "symfony/http-foundation": "^6.4 || ^7.0", - "symfony/object-mapper": "^7.3", - "symfony/type-info": "^7.3", - "symfony/web-link": "^6.4 || ^7.1", + "api-platform/serializer": "^4.3.12", + "api-platform/validator": "^4.3.1", + "phpunit/phpunit": "^11.5 || ^12.2", + "symfony/http-foundation": "^6.4.14 || ^7.0 || ^8.0", + "symfony/object-mapper": "^7.4 || ^8.0", + "symfony/type-info": "^7.4 || ^8.0", + "symfony/web-link": "^6.4 || ^7.1 || ^8.0", "willdurand/negotiation": "^3.1" }, "suggest": { @@ -891,13 +906,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -937,55 +952,61 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.2.3" + "source": "https://github.com/api-platform/state/tree/v4.3.21" }, - "time": "2025-10-31T10:04:25+00:00" + "time": "2026-09-12T13:42:25+00:00" }, { "name": "api-platform/symfony", - "version": "v4.1.28", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "86081ee780321aab6abd5ecf4eb3e7da7dba2f3f" + "reference": "04aec51ec642c202cce0c476cf93ff0b0ce76ab9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/86081ee780321aab6abd5ecf4eb3e7da7dba2f3f", - "reference": "86081ee780321aab6abd5ecf4eb3e7da7dba2f3f", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/04aec51ec642c202cce0c476cf93ff0b0ce76ab9", + "reference": "04aec51ec642c202cce0c476cf93ff0b0ce76ab9", "shasum": "" }, "require": { - "api-platform/documentation": "^4.1.11", - "api-platform/http-cache": "^4.1.11", - "api-platform/hydra": "^4.1.11", - "api-platform/json-schema": "^4.1.11", - "api-platform/jsonld": "^4.1.11", - "api-platform/metadata": "^4.1.11", - "api-platform/openapi": "^4.1.11", - "api-platform/serializer": "^4.1.11", - "api-platform/state": "^4.1.11", - "api-platform/validator": "^4.1.11", + "api-platform/documentation": "^4.3", + "api-platform/http-cache": "^4.3", + "api-platform/hydra": "^4.3", + "api-platform/json-schema": "^4.3", + "api-platform/jsonld": "^4.3", + "api-platform/metadata": "^4.3", + "api-platform/openapi": "^4.3", + "api-platform/serializer": "^4.3.12", + "api-platform/state": "^4.3", + "api-platform/validator": "^4.3.1", "php": ">=8.2", - "symfony/property-access": "^6.4 || ^7.0", - "symfony/property-info": "^6.4 || ^7.1", - "symfony/security-core": "^6.4 || ^7.0", - "symfony/serializer": "^6.4 || ^7.0", + "symfony/asset": "^6.4 || ^7.0 || ^8.0", + "symfony/finder": "^6.4 || ^7.0 || ^8.0", + "symfony/http-kernel": "^6.4.13 || ^7.0 || ^8.0", + "symfony/property-access": "^6.4 || ^7.0 || ^8.0", + "symfony/property-info": "^6.4 || ^7.0 || ^8.0", + "symfony/security-core": "^6.4 || ^7.0 || ^8.0", + "symfony/serializer": "^6.4 || ^7.0 || ^8.0", "willdurand/negotiation": "^3.1" }, "require-dev": { - "api-platform/doctrine-common": "^4.1", - "api-platform/doctrine-odm": "^4.1", - "api-platform/doctrine-orm": "^4.1", - "api-platform/elasticsearch": "^4.1", - "api-platform/graphql": "^4.1", - "api-platform/parameter-validator": "^3.1", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", + "api-platform/elasticsearch": "^4.3", + "api-platform/graphql": "^4.3", + "api-platform/hal": "^4.3", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev", - "symfony/expression-language": "^6.4 || ^7.0", - "symfony/mercure-bundle": "*", - "symfony/routing": "^6.4 || ^7.0", - "symfony/validator": "^6.4.11 || ^7.0", + "phpunit/phpunit": "^11.5 || ^12.2", + "symfony/expression-language": "^6.4 || ^7.0 || ^8.0", + "symfony/intl": "^6.4 || ^7.0 || ^8.0", + "symfony/mercure-bundle": "^0.4.3|^0.5", + "symfony/object-mapper": "^7.0 || ^8.0", + "symfony/routing": "^6.4 || ^7.0 || ^8.0", + "symfony/type-info": "^7.3 || ^8.0", + "symfony/validator": "^6.4.11 || ^7.0 || ^8.0", "webonyx/graphql-php": "^15.0" }, "suggest": { @@ -993,8 +1014,9 @@ "api-platform/doctrine-orm": "To support Doctrine ORM.", "api-platform/elasticsearch": "To support Elasticsearch.", "api-platform/graphql": "To support GraphQL.", + "api-platform/hal": "to support the HAL format", + "api-platform/json-api": "to support the JSON-API format", "api-platform/ramsey-uuid": "To support Ramsey's UUID identifiers.", - "ocramius/package-versions": "To display the API Platform's version in the debug bar.", "phpstan/phpdoc-parser": "To support extracting metadata from PHPDoc.", "psr/cache-implementation": "To use metadata caching.", "symfony/cache": "To have metadata caching when using Symfony integration.", @@ -1015,12 +1037,10 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { - "dev-3.4": "3.4.x-dev", - "dev-4.1": "4.1.x-dev", - "dev-main": "4.2.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1061,36 +1081,36 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.1.28" + "source": "https://github.com/api-platform/symfony/tree/v4.3.21" }, - "time": "2025-12-04T13:39:09+00:00" + "time": "2026-09-29T14:56:10+00:00" }, { "name": "api-platform/validator", - "version": "v4.1.28", + "version": "v4.3.21", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", - "reference": "049b6d122fdc13fe430826f0df3bac3f9ce72286" + "reference": "b7a35b2a15216229ef93271b1fdd4a4d691d2ba7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/validator/zipball/049b6d122fdc13fe430826f0df3bac3f9ce72286", - "reference": "049b6d122fdc13fe430826f0df3bac3f9ce72286", + "url": "https://api.github.com/repos/api-platform/validator/zipball/b7a35b2a15216229ef93271b1fdd4a4d691d2ba7", + "reference": "b7a35b2a15216229ef93271b1fdd4a4d691d2ba7", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.11", + "api-platform/metadata": "^4.3", "php": ">=8.2", - "symfony/http-kernel": "^6.4 || ^7.1", - "symfony/serializer": "^6.4 || ^7.1", - "symfony/type-info": "^7.2", - "symfony/validator": "^6.4.11 || ^7.1", - "symfony/web-link": "^6.4 || ^7.1" + "symfony/http-kernel": "^6.4.13 || ^7.1 || ^8.0", + "symfony/serializer": "^6.4 || ^7.1 || ^8.0", + "symfony/type-info": "^7.3 || ^8.0", + "symfony/validator": "^6.4.11 || ^7.1 || ^8.0", + "symfony/web-link": "^6.4 || ^7.1 || ^8.0" }, "require-dev": { "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "11.5.x-dev" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "library", "extra": { @@ -1099,12 +1119,13 @@ "name": "api-platform/api-platform" }, "symfony": { - "require": "^6.4 || ^7.0" + "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", - "dev-main": "4.2.x-dev" + "dev-4.2": "4.2.x-dev", + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1136,9 +1157,9 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.1.28" + "source": "https://github.com/api-platform/validator/tree/v4.3.21" }, - "time": "2025-11-13T15:57:28+00:00" + "time": "2026-09-05T06:05:04+00:00" }, { "name": "beberlei/doctrineextensions", @@ -1321,16 +1342,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.10", + "version": "1.5.14", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63" + "reference": "0c8abba0634f637bd78c4e451981da368d403463" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/0c8abba0634f637bd78c4e451981da368d403463", + "reference": "0c8abba0634f637bd78c4e451981da368d403463", "shasum": "" }, "require": { @@ -1377,7 +1398,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.10" + "source": "https://github.com/composer/ca-bundle/tree/1.5.14" }, "funding": [ { @@ -1389,7 +1410,84 @@ "type": "github" } ], - "time": "2025-12-08T15:06:51+00:00" + "time": "2026-08-21T14:57:29+00:00" + }, + { + "name": "composer/semver", + "version": "3.5.1", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "528948210cc46f967a4b98e83b19e76f2b504993" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/528948210cc46f967a4b98e83b19e76f2b504993", + "reference": "528948210cc46f967a4b98e83b19e76f2b504993", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Version comparison library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.5.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2026-10-05T13:12:12+00:00" }, { "name": "defuse/php-encryption", @@ -1799,16 +1897,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.19.0", + "version": "2.19.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "07b90f707b82981097731c419f546e7ba97fba3c" + "reference": "72b53688c30451a7c65addd50b2167d31459724a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/07b90f707b82981097731c419f546e7ba97fba3c", - "reference": "07b90f707b82981097731c419f546e7ba97fba3c", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/72b53688c30451a7c65addd50b2167d31459724a", + "reference": "72b53688c30451a7c65addd50b2167d31459724a", "shasum": "" }, "require": { @@ -1903,7 +2001,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.19.0" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.19.1" }, "funding": [ { @@ -1919,28 +2017,36 @@ "type": "tidelift" } ], - "time": "2026-07-23T14:52:05+00:00" + "time": "2026-09-08T11:48:41+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.7.0", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b" + "reference": "00056695242a3e88369fe7a6e10669d8f6d7496a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1e380c6dd8ac8488217f39cff6b77e367f1a644b", - "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/00056695242a3e88369fe7a6e10669d8f6d7496a", + "reference": "00056695242a3e88369fe7a6e10669d8f6d7496a", "shasum": "" }, "require": { + "doctrine/dbal": "^2 || ^3 || ^4", "doctrine/doctrine-bundle": "^2.4 || ^3.0", "doctrine/migrations": "^3.2", "php": "^7.2 || ^8.0", + "psr/log": "^1 || ^2 || ^3", + "symfony/config": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0 || ^8.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/service-contracts": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { "composer/semver": "^3.0", @@ -1988,7 +2094,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.0" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.1" }, "funding": [ { @@ -2004,7 +2110,7 @@ "type": "tidelift" } ], - "time": "2025-11-15T19:02:59+00:00" + "time": "2026-08-26T05:40:19+00:00" }, { "name": "doctrine/event-manager", @@ -2259,27 +2365,25 @@ }, { "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": { @@ -2316,7 +2420,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": [ { @@ -2332,20 +2436,20 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:56:58+00:00" + "time": "2026-10-01T06:59:29+00:00" }, { "name": "doctrine/migrations", - "version": "3.9.7", + "version": "3.9.8", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec" + "reference": "eb0b9ce3f999d720fa73037bbd06977ea34b76a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", - "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/eb0b9ce3f999d720fa73037bbd06977ea34b76a0", + "reference": "eb0b9ce3f999d720fa73037bbd06977ea34b76a0", "shasum": "" }, "require": { @@ -2419,7 +2523,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.9.7" + "source": "https://github.com/doctrine/migrations/tree/3.9.8" }, "funding": [ { @@ -2435,28 +2539,28 @@ "type": "tidelift" } ], - "time": "2026-04-23T19:33:20+00:00" + "time": "2026-10-04T12:35:58+00:00" }, { "name": "doctrine/orm", - "version": "3.6.8", + "version": "3.7.5", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "a4d13ed5b11e7f7b4d654b1adf95432031ae3ffc" + "reference": "00c2fd70da291cca1ec75f4dae5344fe3df588fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/a4d13ed5b11e7f7b4d654b1adf95432031ae3ffc", - "reference": "a4d13ed5b11e7f7b4d654b1adf95432031ae3ffc", + "url": "https://api.github.com/repos/doctrine/orm/zipball/00c2fd70da291cca1ec75f4dae5344fe3df588fa", + "reference": "00c2fd70da291cca1ec75f4dae5344fe3df588fa", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/collections": "^2.2", + "doctrine/collections": "^2.2 || ^3.1", "doctrine/dbal": "^3.8.2 || ^4", "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.2 || ^2", + "doctrine/event-manager": "^2.1.1", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3 || ^2", "doctrine/lexer": "^3", @@ -2465,13 +2569,14 @@ "php": "^8.1", "psr/cache": "^1 || ^2 || ^3", "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/polyfill-php86": "^1.37", "symfony/var-exporter": "^6.3.9 || ^7.0 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^14.0", "phpbench/phpbench": "^1.0", "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "2.1.23", + "phpstan/phpstan": "2.2.14", "phpstan/phpstan-deprecation-rules": "^2", "phpunit/phpunit": "^10.5.0 || ^11.5", "psr/log": "^1 || ^2 || ^3", @@ -2522,22 +2627,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.6.8" + "source": "https://github.com/doctrine/orm/tree/3.7.5" }, - "time": "2026-08-05T19:05:32+00:00" + "time": "2026-10-09T05:58:13+00:00" }, { "name": "doctrine/persistence", - "version": "4.2.0", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b" + "reference": "d8293831c5b99449b2f63eb1e1bbdc202118daa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", - "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/d8293831c5b99449b2f63eb1e1bbdc202118daa6", + "reference": "d8293831c5b99449b2f63eb1e1bbdc202118daa6", "shasum": "" }, "require": { @@ -2602,7 +2707,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/4.2.0" + "source": "https://github.com/doctrine/persistence/tree/4.2.1" }, "funding": [ { @@ -2618,7 +2723,7 @@ "type": "tidelift" } ], - "time": "2026-04-26T12:12:52+00:00" + "time": "2026-10-03T14:15:35+00:00" }, { "name": "doctrine/sql-formatter", @@ -2676,17 +2781,84 @@ "time": "2026-02-08T16:21:46+00:00" }, { - "name": "embed/embed", - "version": "v4.4.17", + "name": "egulias/email-validator", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/php-embed/Embed.git", - "reference": "b2ea091a5586c14ea5f2c5bf52fb0ef38e5aef87" + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-embed/Embed/zipball/b2ea091a5586c14ea5f2c5bf52fb0ef38e5aef87", - "reference": "b2ea091a5586c14ea5f2c5bf52fb0ef38e5aef87", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "embed/embed", + "version": "v4.5.0", + "source": { + "type": "git", + "url": "https://github.com/php-embed/Embed.git", + "reference": "0015e5e75198ddcbad2295ab19547e9df3b04bff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-embed/Embed/zipball/0015e5e75198ddcbad2295ab19547e9df3b04bff", + "reference": "0015e5e75198ddcbad2295ab19547e9df3b04bff", "shasum": "" }, "require": { @@ -2707,10 +2879,13 @@ "friendsofphp/php-cs-fixer": "^2.0", "nyholm/psr7": "^1.2", "oscarotero/php-cs-fixer-config": "^1.0", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^9.0", "symfony/css-selector": "^5.0" }, "suggest": { + "ext-intl": "To resolve internationalized domain names when protecting against SSRF", "symfony/css-selector": "If you want to get elements using css selectors" }, "type": "library", @@ -2746,7 +2921,7 @@ "support": { "email": "oom@oscarotero.com", "issues": "https://github.com/oscarotero/Embed/issues", - "source": "https://github.com/php-embed/Embed/tree/v4.4.17" + "source": "https://github.com/php-embed/Embed/tree/v4.5.0" }, "funding": [ { @@ -2762,7 +2937,7 @@ "type": "patreon" } ], - "time": "2025-05-13T12:42:29+00:00" + "time": "2026-10-19T23:29:48+00:00" }, { "name": "fakerphp/faker", @@ -2829,20 +3004,20 @@ }, { "name": "gedmo/doctrine-extensions", - "version": "v3.22.1", + "version": "v3.22.2", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "a973a68a990392b96f5ccbd4d713ae33e4bde95f" + "reference": "486719169b3042dd4cdb801f70651f30723aab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/a973a68a990392b96f5ccbd4d713ae33e4bde95f", - "reference": "a973a68a990392b96f5ccbd4d713ae33e4bde95f", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/486719169b3042dd4cdb801f70651f30723aab9e", + "reference": "486719169b3042dd4cdb801f70651f30723aab9e", "shasum": "" }, "require": { - "doctrine/collections": "^1.2 || ^2.0", + "doctrine/collections": "^1.2 || ^2.0 || ^3.1", "doctrine/deprecations": "^1.0", "doctrine/event-manager": "^1.2 || ^2.0", "doctrine/persistence": "^2.2 || ^3.0 || ^4.0", @@ -2937,7 +3112,7 @@ "support": { "docs": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/main/doc", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.22.1" + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.22.2" }, "funding": [ { @@ -2957,7 +3132,7 @@ "type": "github" } ], - "time": "2026-08-01T13:57:40+00:00" + "time": "2026-09-29T18:56:23+00:00" }, { "name": "goteo/benzina", @@ -3021,26 +3196,27 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.14.0", + "version": "8.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "aef242412e13128b5049864867bb49fc37dd39de" + "reference": "b920e5fcaf81d761b8fabe600ca90999beaefdb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/aef242412e13128b5049864867bb49fc37dd39de", - "reference": "aef242412e13128b5049864867bb49fc37dd39de", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b920e5fcaf81d761b8fabe600ca90999beaefdb7", + "reference": "b920e5fcaf81d761b8fabe600ca90999beaefdb7", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.5.1", - "guzzlehttp/psr7": "^2.12.4", - "php": "^7.2.5 || ^8.0", + "guzzlehttp/promises": "^3.1", + "guzzlehttp/psr7": "^3.2", + "php": "^7.4 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/polyfill-php80": "^1.25" + "psr/http-factory": "^1.0", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php82": "^1.27" }, "provide": { "psr/http-client-implementation": "1.0" @@ -3048,10 +3224,10 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.3", - "guzzlehttp/test-server": "^0.6", + "guzzle/client-integration-tests": "4.0.1", + "guzzlehttp/test-server": "^1.1", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "phpunit/phpunit": "^9.6.34", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -3067,9 +3243,6 @@ } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" } @@ -3129,7 +3302,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.14.0" + "source": "https://github.com/guzzle/guzzle/tree/8.3.0" }, "funding": [ { @@ -3145,29 +3318,29 @@ "type": "tidelift" } ], - "time": "2026-07-08T22:54:09+00:00" + "time": "2026-10-18T13:38:43+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.5.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29" + "reference": "094d0ec418eb3b1411ea271a180ec95cae6ae933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29", - "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29", + "url": "https://api.github.com/repos/guzzle/promises/zipball/094d0ec418eb3b1411ea271a180ec95cae6ae933", + "reference": "094d0ec418eb3b1411ea271a180ec95cae6ae933", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", + "php": "^7.4 || ^8.0", "symfony/deprecation-contracts": "^2.5 || ^3.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.52 || ^9.6.34" + "phpunit/phpunit": "^9.6.34" }, "type": "library", "extra": { @@ -3213,7 +3386,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.5.1" + "source": "https://github.com/guzzle/promises/tree/3.1.0" }, "funding": [ { @@ -3229,39 +3402,39 @@ "type": "tidelift" } ], - "time": "2026-07-08T15:48:39+00:00" + "time": "2026-10-18T12:48:16+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.12.4", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c" + "reference": "cdc139396207a5eba10c242d241fb014cb098390" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c", - "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/cdc139396207a5eba10c242d241fb014cb098390", + "reference": "cdc139396207a5eba10c242d241fb014cb098390", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/polyfill-php80": "^1.25" + "php": "^7.4 || ^8.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^2.0", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php82": "^1.27" }, "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" + "psr/http-factory-implementation": "1.1", + "psr/http-message-implementation": "2.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "1.1.0", "jshttp/mime-db": "1.54.0.1", - "phpunit/phpunit": "^8.5.52 || ^9.6.34" + "php-http/psr7-integration-tests": "^1.5.1", + "phpunit/phpunit": "^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -3332,7 +3505,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.12.4" + "source": "https://github.com/guzzle/psr7/tree/3.2.0" }, "funding": [ { @@ -3348,7 +3521,7 @@ "type": "tidelift" } ], - "time": "2026-07-08T15:56:20+00:00" + "time": "2026-10-17T23:57:19+00:00" }, { "name": "jolicode/automapper", @@ -3567,16 +3740,16 @@ }, { "name": "lcobucci/jwt", - "version": "5.6.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "bb3e9f21e4196e8afc41def81ef649c164bca25e" + "reference": "482760068e5a55a9045feddb3e2fc3f878cbd577" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/bb3e9f21e4196e8afc41def81ef649c164bca25e", - "reference": "bb3e9f21e4196e8afc41def81ef649c164bca25e", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/482760068e5a55a9045feddb3e2fc3f878cbd577", + "reference": "482760068e5a55a9045feddb3e2fc3f878cbd577", "shasum": "" }, "require": { @@ -3624,7 +3797,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/5.6.0" + "source": "https://github.com/lcobucci/jwt/tree/5.6.1" }, "funding": [ { @@ -3636,7 +3809,7 @@ "type": "patreon" } ], - "time": "2025-10-17T11:30:53+00:00" + "time": "2026-10-10T09:42:14+00:00" }, { "name": "league/event", @@ -3699,21 +3872,22 @@ }, { "name": "league/oauth2-client", - "version": "2.9.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-client.git", - "reference": "26e8c5da4f3d78cede7021e09b1330a0fc093d5e" + "reference": "8cedfef9d01a8d1fd2ecfabb41734b17592c4b71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/26e8c5da4f3d78cede7021e09b1330a0fc093d5e", - "reference": "26e8c5da4f3d78cede7021e09b1330a0fc093d5e", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/8cedfef9d01a8d1fd2ecfabb41734b17592c4b71", + "reference": "8cedfef9d01a8d1fd2ecfabb41734b17592c4b71", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/guzzle": "^6.5.8 || ^7.8.2 || ^8.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.6.3 || ^3.0", "php": "^7.1 || >=8.0.0 <8.6.0" }, "require-dev": { @@ -3758,9 +3932,9 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-client/issues", - "source": "https://github.com/thephpleague/oauth2-client/tree/2.9.0" + "source": "https://github.com/thephpleague/oauth2-client/tree/2.9.1" }, - "time": "2025-11-25T22:17:17+00:00" + "time": "2026-09-16T13:14:31+00:00" }, { "name": "league/oauth2-google", @@ -3916,16 +4090,16 @@ }, { "name": "league/oauth2-server-bundle", - "version": "v1.2.2", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server-bundle.git", - "reference": "db8d6a267b3bb76451816751539d50aa56588247" + "reference": "cbe2ab7e47b071b5f0f5c1011798e4c4c823b6d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server-bundle/zipball/db8d6a267b3bb76451816751539d50aa56588247", - "reference": "db8d6a267b3bb76451816751539d50aa56588247", + "url": "https://api.github.com/repos/thephpleague/oauth2-server-bundle/zipball/cbe2ab7e47b071b5f0f5c1011798e4c4c823b6d8", + "reference": "cbe2ab7e47b071b5f0f5c1011798e4c4c823b6d8", "shasum": "" }, "require": { @@ -3935,12 +4109,12 @@ "php": "^8.1", "psr/http-factory": "^1.0", "symfony/deprecation-contracts": "^3.0", - "symfony/event-dispatcher": "^6.4|^7.4|^8.0", - "symfony/filesystem": "^6.4|^7.4|^8.0", - "symfony/framework-bundle": "^6.4|^7.4|^8.0", - "symfony/password-hasher": "^6.4|^7.4|^8.0", - "symfony/psr-http-message-bridge": "^6.4|^7.4|^8.0", - "symfony/security-bundle": "^6.4|^7.4|^8.0" + "symfony/event-dispatcher": "^6.4|^7.4|^8.1", + "symfony/filesystem": "^6.4|^7.4|^8.1", + "symfony/framework-bundle": "^6.4|^7.4|^8.1", + "symfony/password-hasher": "^6.4|^7.4|^8.1", + "symfony/psr-http-message-bridge": "^6.4|^7.4|^8.1", + "symfony/security-bundle": "^6.4|^7.4|^8.1" }, "conflict": { "doctrine/doctrine-bundle": "<2.8.0", @@ -3956,7 +4130,7 @@ "phpstan/phpstan": "^2.1", "phpstan/phpstan-symfony": "^2.0", "rector/rector": "^2.5", - "symfony/browser-kit": "^6.4|^7.4|^8.0", + "symfony/browser-kit": "^6.4|^7.4|^8.1", "symfony/phpunit-bridge": "^8.1" }, "suggest": { @@ -3994,26 +4168,27 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server-bundle/issues", - "source": "https://github.com/thephpleague/oauth2-server-bundle/tree/v1.2.2" + "source": "https://github.com/thephpleague/oauth2-server-bundle/tree/v1.2.3" }, - "time": "2026-07-26T12:46:32+00:00" + "time": "2026-09-27T15:50:17+00:00" }, { "name": "league/uri", - "version": "7.8.1", + "version": "7.9.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + "reference": "fcc872a3d872aa13f935e0cd1887b9abb06da07f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/fcc872a3d872aa13f935e0cd1887b9abb06da07f", + "reference": "fcc872a3d872aa13f935e0cd1887b9abb06da07f", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.8.1", + "ext-mbstring": "*", + "league/uri-interfaces": "^7.9.0", "php": "^8.1", "psr/http-factory": "^1" }, @@ -4086,7 +4261,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.9.0" }, "funding": [ { @@ -4094,20 +4269,20 @@ "type": "github" } ], - "time": "2026-03-15T20:22:25+00:00" + "time": "2026-10-16T15:19:33+00:00" }, { "name": "league/uri-interfaces", - "version": "7.8.1", + "version": "7.9.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + "reference": "eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58" }, "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/eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58", + "reference": "eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58", "shasum": "" }, "require": { @@ -4170,7 +4345,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.9.0" }, "funding": [ { @@ -4178,7 +4353,7 @@ "type": "github" } ], - "time": "2026-03-08T20:05:35+00:00" + "time": "2026-10-16T15:19:33+00:00" }, { "name": "ml/iri", @@ -4286,16 +4461,16 @@ }, { "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": { @@ -4321,6 +4496,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", @@ -4339,6 +4515,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" }, @@ -4373,7 +4550,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": [ { @@ -4385,7 +4562,7 @@ "type": "tidelift" } ], - "time": "2026-01-02T08:56:05+00:00" + "time": "2026-09-29T19:21:12+00:00" }, { "name": "nelmio/cors-bundle", @@ -4454,20 +4631,19 @@ }, { "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" @@ -4506,9 +4682,9 @@ ], "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" }, { "name": "nyholm/psr7", @@ -4772,20 +4948,25 @@ }, { "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": { @@ -4809,7 +4990,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", @@ -4819,22 +5000,22 @@ ], "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" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.6", + "version": "5.6.7", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" + "reference": "31a105931bc8ffa3a123383829772e832fd8d903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", - "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/31a105931bc8ffa3a123383829772e832fd8d903", + "reference": "31a105931bc8ffa3a123383829772e832fd8d903", "shasum": "" }, "require": { @@ -4883,9 +5064,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.7" }, - "time": "2025-12-22T21:13:58+00:00" + "time": "2026-03-18T20:47:46+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -5628,50 +5809,6 @@ }, "time": "2024-09-11T13:17:53+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "sokil/php-isocodes", "version": "4.4.0", @@ -5735,16 +5872,16 @@ }, { "name": "sokil/php-isocodes-db-only", - "version": "4.0.8", + "version": "4.0.9", "source": { "type": "git", "url": "https://github.com/sokil/php-isocodes-db-only.git", - "reference": "43ca965e4c781d743d0ac7c531258d2e9c6d4371" + "reference": "2d8a525132c24da55b26d4000ed9f059510c60b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sokil/php-isocodes-db-only/zipball/43ca965e4c781d743d0ac7c531258d2e9c6d4371", - "reference": "43ca965e4c781d743d0ac7c531258d2e9c6d4371", + "url": "https://api.github.com/repos/sokil/php-isocodes-db-only/zipball/2d8a525132c24da55b26d4000ed9f059510c60b2", + "reference": "2d8a525132c24da55b26d4000ed9f059510c60b2", "shasum": "" }, "require": { @@ -5769,9 +5906,9 @@ "description": "Database for ISO country, subdivision, language, currency and script definitions and their translations. Based on pythons pycountry and Debian's iso-codes.", "support": { "issues": "https://github.com/sokil/php-isocodes-db-only/issues", - "source": "https://github.com/sokil/php-isocodes-db-only/tree/4.0.8" + "source": "https://github.com/sokil/php-isocodes-db-only/tree/4.0.9" }, - "time": "2025-12-21T22:28:31+00:00" + "time": "2026-09-19T13:50:58+00:00" }, { "name": "stof/doctrine-extensions-bundle", @@ -5989,16 +6126,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.46", + "version": "v6.4.47", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "b001ef092224de1358462ceabfbdf4d4c2d4c9d2" + "reference": "7ce0de35c828d29a5602134cdcf82b9c301b198f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/b001ef092224de1358462ceabfbdf4d4c2d4c9d2", - "reference": "b001ef092224de1358462ceabfbdf4d4c2d4c9d2", + "url": "https://api.github.com/repos/symfony/cache/zipball/7ce0de35c828d29a5602134cdcf82b9c301b198f", + "reference": "7ce0de35c828d29a5602134cdcf82b9c301b198f", "shasum": "" }, "require": { @@ -6065,7 +6202,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.46" + "source": "https://github.com/symfony/cache/tree/v6.4.47" }, "funding": [ { @@ -6085,7 +6222,7 @@ "type": "tidelift" } ], - "time": "2026-09-08T06:25:25+00:00" + "time": "2026-09-29T12:25:26+00:00" }, { "name": "symfony/cache-contracts", @@ -6169,16 +6306,16 @@ }, { "name": "symfony/clock", - "version": "v6.4.30", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "fb2df4bc9e3037c4765ba7fd29e00167001a9b68" + "reference": "907397721c27e69c93220bab59ee3261f6714391" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/fb2df4bc9e3037c4765ba7fd29e00167001a9b68", - "reference": "fb2df4bc9e3037c4765ba7fd29e00167001a9b68", + "url": "https://api.github.com/repos/symfony/clock/zipball/907397721c27e69c93220bab59ee3261f6714391", + "reference": "907397721c27e69c93220bab59ee3261f6714391", "shasum": "" }, "require": { @@ -6223,7 +6360,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v6.4.30" + "source": "https://github.com/symfony/clock/tree/v6.4.48" }, "funding": [ { @@ -6243,7 +6380,7 @@ "type": "tidelift" } ], - "time": "2025-11-11T21:24:34+00:00" + "time": "2026-10-12T15:42:14+00:00" }, { "name": "symfony/config", @@ -6326,16 +6463,16 @@ }, { "name": "symfony/console", - "version": "v6.4.43", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3b643aa587acbc42f967a429af088a56ed8f046d" + "reference": "c9c4cf6745e8b25db27466f59cf126ac8d3db3a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3b643aa587acbc42f967a429af088a56ed8f046d", - "reference": "3b643aa587acbc42f967a429af088a56ed8f046d", + "url": "https://api.github.com/repos/symfony/console/zipball/c9c4cf6745e8b25db27466f59cf126ac8d3db3a4", + "reference": "c9c4cf6745e8b25db27466f59cf126ac8d3db3a4", "shasum": "" }, "require": { @@ -6400,7 +6537,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.43" + "source": "https://github.com/symfony/console/tree/v6.4.48" }, "funding": [ { @@ -6420,20 +6557,20 @@ "type": "tidelift" } ], - "time": "2026-07-26T14:44:19+00:00" + "time": "2026-10-07T08:10:34+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.44", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "675b2dfaf70bdca37d13816582023e3bac5fc2d1" + "reference": "3d340875612e33d1969437eb0e88a499426b2343" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/675b2dfaf70bdca37d13816582023e3bac5fc2d1", - "reference": "675b2dfaf70bdca37d13816582023e3bac5fc2d1", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3d340875612e33d1969437eb0e88a499426b2343", + "reference": "3d340875612e33d1969437eb0e88a499426b2343", "shasum": "" }, "require": { @@ -6485,7 +6622,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.44" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.48" }, "funding": [ { @@ -6505,7 +6642,7 @@ "type": "tidelift" } ], - "time": "2026-08-21T15:20:39+00:00" + "time": "2026-10-13T12:43:54+00:00" }, { "name": "symfony/deprecation-contracts", @@ -6580,16 +6717,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.43", + "version": "v6.4.47", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "653001640a2ba86bb5fcec7f58832b74e6b3aa76" + "reference": "1fa8f2328ad79314c036bc61754d2f86112e7360" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/653001640a2ba86bb5fcec7f58832b74e6b3aa76", - "reference": "653001640a2ba86bb5fcec7f58832b74e6b3aa76", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/1fa8f2328ad79314c036bc61754d2f86112e7360", + "reference": "1fa8f2328ad79314c036bc61754d2f86112e7360", "shasum": "" }, "require": { @@ -6615,7 +6752,7 @@ "symfony/property-info": "<5.4|>=8", "symfony/security-bundle": "<5.4", "symfony/security-core": "<6.4", - "symfony/validator": "<6.4" + "symfony/validator": "<6.4.44|>=7.0,<7.4.17|>=8.0,<8.1.5" }, "require-dev": { "doctrine/collections": "^1.0|^2.0", @@ -6668,7 +6805,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.43" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.47" }, "funding": [ { @@ -6688,11 +6825,11 @@ "type": "tidelift" } ], - "time": "2026-07-21T10:19:36+00:00" + "time": "2026-09-28T17:32:40+00:00" }, { "name": "symfony/dotenv", - "version": "v6.4.43", + "version": "v6.4.45", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", @@ -6746,7 +6883,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.43" + "source": "https://github.com/symfony/dotenv/tree/v6.4.45" }, "funding": [ { @@ -6770,16 +6907,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.44", + "version": "v6.4.47", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8fa59eb915a14b2881993565a122c9dd1b0f8a19" + "reference": "0b7be4e3f15ad53b46941bed1e59863245de8647" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8fa59eb915a14b2881993565a122c9dd1b0f8a19", - "reference": "8fa59eb915a14b2881993565a122c9dd1b0f8a19", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b7be4e3f15ad53b46941bed1e59863245de8647", + "reference": "0b7be4e3f15ad53b46941bed1e59863245de8647", "shasum": "" }, "require": { @@ -6825,7 +6962,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/v6.4.44" + "source": "https://github.com/symfony/error-handler/tree/v6.4.47" }, "funding": [ { @@ -6845,7 +6982,7 @@ "type": "tidelift" } ], - "time": "2026-08-20T17:31:15+00:00" + "time": "2026-09-22T18:37:41+00:00" }, { "name": "symfony/event-dispatcher", @@ -7013,16 +7150,16 @@ }, { "name": "symfony/expression-language", - "version": "v6.4.42", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "728f0c48560a851e83681dc03efefa65d5fc076e" + "reference": "4a38ae0e9352b1b6de25dbb428db93f94a3976bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/728f0c48560a851e83681dc03efefa65d5fc076e", - "reference": "728f0c48560a851e83681dc03efefa65d5fc076e", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/4a38ae0e9352b1b6de25dbb428db93f94a3976bb", + "reference": "4a38ae0e9352b1b6de25dbb428db93f94a3976bb", "shasum": "" }, "require": { @@ -7057,7 +7194,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.4.42" + "source": "https://github.com/symfony/expression-language/tree/v6.4.48" }, "funding": [ { @@ -7077,20 +7214,20 @@ "type": "tidelift" } ], - "time": "2026-06-08T07:06:12+00:00" + "time": "2026-10-09T13:10:46+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.45", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "6dabf41c21957a2060f101bd7bf7e322989866bd" + "reference": "e3ff48b19ac71ee79f89021122211710b892ae0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/6dabf41c21957a2060f101bd7bf7e322989866bd", - "reference": "6dabf41c21957a2060f101bd7bf7e322989866bd", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e3ff48b19ac71ee79f89021122211710b892ae0b", + "reference": "e3ff48b19ac71ee79f89021122211710b892ae0b", "shasum": "" }, "require": { @@ -7127,7 +7264,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.45" + "source": "https://github.com/symfony/filesystem/tree/v6.4.48" }, "funding": [ { @@ -7147,20 +7284,20 @@ "type": "tidelift" } ], - "time": "2026-08-23T07:59:31+00:00" + "time": "2026-10-06T17:30:58+00:00" }, { "name": "symfony/finder", - "version": "v6.4.46", + "version": "v6.4.47", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "04db08efd85558162ef43fba10c299871b60d60b" + "reference": "c8d1b2a09bb820175d1f2f9a3cf30303200b10a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/04db08efd85558162ef43fba10c299871b60d60b", - "reference": "04db08efd85558162ef43fba10c299871b60d60b", + "url": "https://api.github.com/repos/symfony/finder/zipball/c8d1b2a09bb820175d1f2f9a3cf30303200b10a7", + "reference": "c8d1b2a09bb820175d1f2f9a3cf30303200b10a7", "shasum": "" }, "require": { @@ -7195,7 +7332,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.46" + "source": "https://github.com/symfony/finder/tree/v6.4.47" }, "funding": [ { @@ -7215,7 +7352,7 @@ "type": "tidelift" } ], - "time": "2026-09-10T14:17:24+00:00" + "time": "2026-09-25T09:03:59+00:00" }, { "name": "symfony/flex", @@ -7291,17 +7428,118 @@ "time": "2026-05-29T17:25:22+00:00" }, { - "name": "symfony/framework-bundle", - "version": "v6.4.46", + "name": "symfony/form", + "version": "v6.4.48", "source": { "type": "git", - "url": "https://github.com/symfony/framework-bundle.git", - "reference": "407e77216969a366fd2bbf6d96a84c6b4a6500a2" + "url": "https://github.com/symfony/form.git", + "reference": "16c818e6e1fcd4a35fbc7be919b77298aaf28684" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/407e77216969a366fd2bbf6d96a84c6b4a6500a2", - "reference": "407e77216969a366fd2bbf6d96a84c6b4a6500a2", + "url": "https://api.github.com/repos/symfony/form/zipball/16c818e6e1fcd4a35fbc7be919b77298aaf28684", + "reference": "16c818e6e1fcd4a35fbc7be919b77298aaf28684", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/options-resolver": "^5.4|^6.0|^7.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7", + "symfony/error-handler": "<5.4", + "symfony/framework-bundle": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.3" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/security-core": "^6.2|^7.0", + "symfony/security-csrf": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows to easily create, process and reuse HTML forms", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v6.4.48" + }, + "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-10-13T15:03:32+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v6.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "53c3853a101acdec6fae4fa8bec2afd9d3b17e1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/53c3853a101acdec6fae4fa8bec2afd9d3b17e1f", + "reference": "53c3853a101acdec6fae4fa8bec2afd9d3b17e1f", "shasum": "" }, "require": { @@ -7355,7 +7593,7 @@ }, "require-dev": { "doctrine/annotations": "^1.13.1|^2", - "doctrine/persistence": "^1.3|^2|^3", + "doctrine/persistence": "^1.3|^2|^3|^4", "dragonmantank/cron-expression": "^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "seld/jsonlint": "^1.10", @@ -7421,7 +7659,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.46" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.48" }, "funding": [ { @@ -7441,20 +7679,20 @@ "type": "tidelift" } ], - "time": "2026-09-13T09:15:59+00:00" + "time": "2026-10-11T14:32:22+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.43", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "38540911e9e3c3ca12e562dcce758d9bfcfa7cdd" + "reference": "8d00de4cfe747c706296426314ce3417ae5a8169" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/38540911e9e3c3ca12e562dcce758d9bfcfa7cdd", - "reference": "38540911e9e3c3ca12e562dcce758d9bfcfa7cdd", + "url": "https://api.github.com/repos/symfony/http-client/zipball/8d00de4cfe747c706296426314ce3417ae5a8169", + "reference": "8d00de4cfe747c706296426314ce3417ae5a8169", "shasum": "" }, "require": { @@ -7519,7 +7757,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.43" + "source": "https://github.com/symfony/http-client/tree/v6.4.48" }, "funding": [ { @@ -7539,20 +7777,20 @@ "type": "tidelift" } ], - "time": "2026-07-29T06:36:08+00:00" + "time": "2026-10-13T14:38:31+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.7.1", + "version": "v3.7.3", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "41fc42d276aeff21192465331ebbab7d83a743c0" + "reference": "35be0019e2c2c9fba80f9dc033290a5240f7b44f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41fc42d276aeff21192465331ebbab7d83a743c0", - "reference": "41fc42d276aeff21192465331ebbab7d83a743c0", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/35be0019e2c2c9fba80f9dc033290a5240f7b44f", + "reference": "35be0019e2c2c9fba80f9dc033290a5240f7b44f", "shasum": "" }, "require": { @@ -7601,7 +7839,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.7.1" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.7.3" }, "funding": [ { @@ -7621,20 +7859,20 @@ "type": "tidelift" } ], - "time": "2026-06-05T06:23:12+00:00" + "time": "2026-08-04T08:41:16+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.46", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "08bbdd5cf09248785442c41929aabe42f8ef5cfd" + "reference": "b1721caa556f32d150d9a14bb0a3fc4b86dfda33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/08bbdd5cf09248785442c41929aabe42f8ef5cfd", - "reference": "08bbdd5cf09248785442c41929aabe42f8ef5cfd", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b1721caa556f32d150d9a14bb0a3fc4b86dfda33", + "reference": "b1721caa556f32d150d9a14bb0a3fc4b86dfda33", "shasum": "" }, "require": { @@ -7682,7 +7920,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.46" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.48" }, "funding": [ { @@ -7702,20 +7940,20 @@ "type": "tidelift" } ], - "time": "2026-09-14T17:40:49+00:00" + "time": "2026-10-08T07:59:58+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.46", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "c662aa16f2a6b078800ef5302444043c38932213" + "reference": "2eff8dba4978c294d994607441c06ebd5d867086" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c662aa16f2a6b078800ef5302444043c38932213", - "reference": "c662aa16f2a6b078800ef5302444043c38932213", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2eff8dba4978c294d994607441c06ebd5d867086", + "reference": "2eff8dba4978c294d994607441c06ebd5d867086", "shasum": "" }, "require": { @@ -7800,7 +8038,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/v6.4.46" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.48" }, "funding": [ { @@ -7820,20 +8058,20 @@ "type": "tidelift" } ], - "time": "2026-09-15T07:06:31+00:00" + "time": "2026-10-14T06:41:42+00:00" }, { "name": "symfony/intl", - "version": "v6.4.42", + "version": "v6.4.44", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "65e85c6665bb4b4b1c2214a8e89eb30acc20468a" + "reference": "d79905d256652f1353b26e1a59d89f835b2d31cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/65e85c6665bb4b4b1c2214a8e89eb30acc20468a", - "reference": "65e85c6665bb4b4b1c2214a8e89eb30acc20468a", + "url": "https://api.github.com/repos/symfony/intl/zipball/d79905d256652f1353b26e1a59d89f835b2d31cf", + "reference": "d79905d256652f1353b26e1a59d89f835b2d31cf", "shasum": "" }, "require": { @@ -7887,7 +8125,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.42" + "source": "https://github.com/symfony/intl/tree/v6.4.44" }, "funding": [ { @@ -7907,20 +8145,20 @@ "type": "tidelift" } ], - "time": "2026-06-08T07:06:12+00:00" + "time": "2026-08-20T17:31:16+00:00" }, { "name": "symfony/lock", - "version": "v6.4.42", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "b9e0464c0085b12fb50924f87883421e67917b33" + "reference": "bb18c2ad3b61bcddb4385b50f1c86e17a7dac035" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/b9e0464c0085b12fb50924f87883421e67917b33", - "reference": "b9e0464c0085b12fb50924f87883421e67917b33", + "url": "https://api.github.com/repos/symfony/lock/zipball/bb18c2ad3b61bcddb4385b50f1c86e17a7dac035", + "reference": "bb18c2ad3b61bcddb4385b50f1c86e17a7dac035", "shasum": "" }, "require": { @@ -7970,7 +8208,7 @@ "semaphore" ], "support": { - "source": "https://github.com/symfony/lock/tree/v6.4.42" + "source": "https://github.com/symfony/lock/tree/v6.4.48" }, "funding": [ { @@ -7990,7 +8228,91 @@ "type": "tidelift" } ], - "time": "2026-06-16T10:12:24+00:00" + "time": "2026-10-04T13:21:49+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "21cc391f6f6a20b8765125cabee0c6195b5b8f10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/21cc391f6f6a20b8765125cabee0c6195b5b8f10", + "reference": "21cc391f6f6a20b8765125cabee0c6195b5b8f10", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.4.46" + }, + "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-14T23:26:17+00:00" }, { "name": "symfony/maker-bundle", @@ -8092,17 +8414,106 @@ "time": "2026-03-18T13:39:06+00:00" }, { - "name": "symfony/monolog-bridge", - "version": "v6.4.43", + "name": "symfony/mime", + "version": "v6.4.46", "source": { "type": "git", - "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "68e9e40663e8af73901653f49ca149d13b6b581e" + "url": "https://github.com/symfony/mime.git", + "reference": "e700a9819829e1395ae95b508c6355053b5644fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/68e9e40663e8af73901653f49ca149d13b6b581e", - "reference": "68e9e40663e8af73901653f49ca149d13b6b581e", + "url": "https://api.github.com/repos/symfony/mime/zipball/e700a9819829e1395ae95b508c6355053b5644fe", + "reference": "e700a9819829e1395ae95b508c6355053b5644fe", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.4|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.44|^7.4.17" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.4.46" + }, + "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-04T10:11:03+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v6.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "d3f5dd9133dc5723c7ee77e37b3db07e6934576d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/d3f5dd9133dc5723c7ee77e37b3db07e6934576d", + "reference": "d3f5dd9133dc5723c7ee77e37b3db07e6934576d", "shasum": "" }, "require": { @@ -8123,6 +8534,7 @@ "symfony/mailer": "^5.4|^6.0|^7.0", "symfony/messenger": "^5.4|^6.0|^7.0", "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/notifier": "^5.4|^6.0|^7.0", "symfony/security-core": "^5.4|^6.0|^7.0", "symfony/var-dumper": "^5.4|^6.0|^7.0" }, @@ -8152,7 +8564,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.43" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.45" }, "funding": [ { @@ -8172,7 +8584,7 @@ "type": "tidelift" } ], - "time": "2026-07-26T13:45:43+00:00" + "time": "2026-08-30T01:18:12+00:00" }, { "name": "symfony/monolog-bundle", @@ -8254,6 +8666,77 @@ ], "time": "2026-04-02T18:23:01+00:00" }, + { + "name": "symfony/options-resolver", + "version": "v6.4.30", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", + "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.4.30" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-12T13:06:53+00:00" + }, { "name": "symfony/password-hasher", "version": "v6.4.32", @@ -8331,17 +8814,104 @@ "time": "2026-01-01T21:24:53+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.41.0", + "name": "symfony/polyfill-deepclone", + "version": "v1.43.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" + "url": "https://github.com/symfony/polyfill-deepclone.git", + "reference": "82274308b59f6e96f53a3fb37fc40877d843e5a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", - "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/82274308b59f6e96f53a3fb37fc40877d843e5a5", + "reference": "82274308b59f6e96f53a3fb37fc40877d843e5a5", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "provide": { + "ext-deepclone": "*" + }, + "suggest": { + "ext-deepclone": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\DeepClone\\": "" + }, + "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 for the deepclone extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "deepclone", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.43.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-10-14T07:17:09+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5cac8f4db97208823aa353f59a01faad2da52c75", + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75", "shasum": "" }, "require": { @@ -8390,7 +8960,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.43.0" }, "funding": [ { @@ -8410,20 +8980,195 @@ "type": "tidelift" } ], - "time": "2026-07-28T08:25:59+00:00" + "time": "2026-09-25T15:46:47+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.42.0", + "name": "symfony/polyfill-intl-icu", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "aa20edea75bd9c48cfecc8360922e5a6e5c44502" + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "d13cf82f40af144e5e5a867dc54ec3c7b4544b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/aa20edea75bd9c48cfecc8360922e5a6e5c44502", - "reference": "aa20edea75bd9c48cfecc8360922e5a6e5c44502", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d13cf82f40af144e5e5a867dc54ec3c7b4544b2e", + "reference": "d13cf82f40af144e5e5a867dc54ec3c7b4544b2e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/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" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "533d68cf99c8f8ee2e8893c59ed59192e92cfd74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/533d68cf99c8f8ee2e8893c59ed59192e92cfd74", + "reference": "533d68cf99c8f8ee2e8893c59ed59192e92cfd74", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/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-23T14:40:04+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/ebd57ccc7edb93d632e184efbe7693d2517bab3b", + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b", "shasum": "" }, "require": { @@ -8475,7 +9220,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.42.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.43.0" }, "funding": [ { @@ -8495,20 +9240,20 @@ "type": "tidelift" } ], - "time": "2026-08-07T06:33:24+00:00" + "time": "2026-09-23T22:02:09+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.38.2", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", "shasum": "" }, "require": { @@ -8560,7 +9305,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" }, "funding": [ { @@ -8580,20 +9325,100 @@ "type": "tidelift" } ], - "time": "2026-05-27T06:59:30+00:00" + "time": "2026-09-24T15:19:04+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.41.0", + "name": "symfony/polyfill-php82", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6" + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/5ea99087fb99c273a9b9236ed4c31e78b16103c6", - "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/843bbe8b2a7934307b749751eede0f111f5d1cfc", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php82\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php82/tree/v1.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" + }, + { + "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": { @@ -8640,7 +9465,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.41.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0" }, "funding": [ { @@ -8660,20 +9485,20 @@ "type": "tidelift" } ], - "time": "2026-07-01T12:47:55+00:00" + "time": "2026-09-25T15:50:05+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.38.1", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/22c6548499cbe5c5bb072fc0c42312dff062a015", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015", "shasum": "" }, "require": { @@ -8720,7 +9545,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.43.0" }, "funding": [ { @@ -8740,20 +9565,180 @@ "type": "tidelift" } ], - "time": "2026-05-26T12:51:13+00:00" + "time": "2026-09-23T22:01:09+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.37.0", + "name": "symfony/polyfill-php85", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", + "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\\Php85\\": "" + }, + "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.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/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" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8", + "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\\Php86\\": "" + }, + "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.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "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" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/b23ff8245cc5c4479ea2be3d0132d2e6dd433993", + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993", "shasum": "" }, "require": { @@ -8803,7 +9788,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": [ { @@ -8823,20 +9808,20 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-09-24T05:20:52+00:00" }, { "name": "symfony/process", - "version": "v6.4.46", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b9f3d9ddf67543b92dbfa6d210c407d7a7982781" + "reference": "2a0cb83994a4b8a5f92fc91b8b4527e6e227c6f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b9f3d9ddf67543b92dbfa6d210c407d7a7982781", - "reference": "b9f3d9ddf67543b92dbfa6d210c407d7a7982781", + "url": "https://api.github.com/repos/symfony/process/zipball/2a0cb83994a4b8a5f92fc91b8b4527e6e227c6f5", + "reference": "2a0cb83994a4b8a5f92fc91b8b4527e6e227c6f5", "shasum": "" }, "require": { @@ -8868,7 +9853,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.46" + "source": "https://github.com/symfony/process/tree/v6.4.48" }, "funding": [ { @@ -8888,7 +9873,7 @@ "type": "tidelift" } ], - "time": "2026-09-02T12:35:55+00:00" + "time": "2026-10-08T05:06:07+00:00" }, { "name": "symfony/property-access", @@ -9063,16 +10048,16 @@ }, { "name": "symfony/psr-http-message-bridge", - "version": "v6.4.32", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "740017f61ce31b4aca485a18a25c0310ebd0190f" + "reference": "6bd9a17b93251bae90be84e6f26f0657687cfe06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/740017f61ce31b4aca485a18a25c0310ebd0190f", - "reference": "740017f61ce31b4aca485a18a25c0310ebd0190f", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/6bd9a17b93251bae90be84e6f26f0657687cfe06", + "reference": "6bd9a17b93251bae90be84e6f26f0657687cfe06", "shasum": "" }, "require": { @@ -9126,7 +10111,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.32" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.48" }, "funding": [ { @@ -9146,20 +10131,20 @@ "type": "tidelift" } ], - "time": "2026-01-02T11:59:06+00:00" + "time": "2026-10-07T05:59:40+00:00" }, { "name": "symfony/routing", - "version": "v6.4.45", + "version": "v6.4.47", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "6fe2ed5b356beec41d5720dd73db72887c3f9d6d" + "reference": "641a94df9ad73671abd86bc4303aa301ca555b2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/6fe2ed5b356beec41d5720dd73db72887c3f9d6d", - "reference": "6fe2ed5b356beec41d5720dd73db72887c3f9d6d", + "url": "https://api.github.com/repos/symfony/routing/zipball/641a94df9ad73671abd86bc4303aa301ca555b2b", + "reference": "641a94df9ad73671abd86bc4303aa301ca555b2b", "shasum": "" }, "require": { @@ -9213,7 +10198,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.45" + "source": "https://github.com/symfony/routing/tree/v6.4.47" }, "funding": [ { @@ -9233,7 +10218,7 @@ "type": "tidelift" } ], - "time": "2026-08-16T17:07:07+00:00" + "time": "2026-09-28T18:59:50+00:00" }, { "name": "symfony/runtime", @@ -9320,16 +10305,16 @@ }, { "name": "symfony/security-bundle", - "version": "v6.4.45", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "de06cd0f756ca8fe4894c7e95bac71d90bb94e64" + "reference": "6f8b750516002633751d1e7d219504bce2546b02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/de06cd0f756ca8fe4894c7e95bac71d90bb94e64", - "reference": "de06cd0f756ca8fe4894c7e95bac71d90bb94e64", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/6f8b750516002633751d1e7d219504bce2546b02", + "reference": "6f8b750516002633751d1e7d219504bce2546b02", "shasum": "" }, "require": { @@ -9412,7 +10397,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.4.45" + "source": "https://github.com/symfony/security-bundle/tree/v6.4.48" }, "funding": [ { @@ -9432,20 +10417,20 @@ "type": "tidelift" } ], - "time": "2026-08-30T06:17:28+00:00" + "time": "2026-10-13T14:28:57+00:00" }, { "name": "symfony/security-core", - "version": "v6.4.45", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "8f74c37460002b97c1318007629c8be37681498a" + "reference": "52df430fa99ad42143fdc47f759e26f5c8ad78a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/8f74c37460002b97c1318007629c8be37681498a", - "reference": "8f74c37460002b97c1318007629c8be37681498a", + "url": "https://api.github.com/repos/symfony/security-core/zipball/52df430fa99ad42143fdc47f759e26f5c8ad78a7", + "reference": "52df430fa99ad42143fdc47f759e26f5c8ad78a7", "shasum": "" }, "require": { @@ -9503,7 +10488,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.45" + "source": "https://github.com/symfony/security-core/tree/v6.4.48" }, "funding": [ { @@ -9523,7 +10508,7 @@ "type": "tidelift" } ], - "time": "2026-08-30T00:30:12+00:00" + "time": "2026-10-05T08:15:58+00:00" }, { "name": "symfony/security-csrf", @@ -9599,16 +10584,16 @@ }, { "name": "symfony/security-http", - "version": "v6.4.46", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "a8ad51e48f20b515e589b5927ee7cde7e1e37453" + "reference": "47b573c7a7bb47178647a6c534dc2eb9c3b6775b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/a8ad51e48f20b515e589b5927ee7cde7e1e37453", - "reference": "a8ad51e48f20b515e589b5927ee7cde7e1e37453", + "url": "https://api.github.com/repos/symfony/security-http/zipball/47b573c7a7bb47178647a6c534dc2eb9c3b6775b", + "reference": "47b573c7a7bb47178647a6c534dc2eb9c3b6775b", "shasum": "" }, "require": { @@ -9667,7 +10652,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.4.46" + "source": "https://github.com/symfony/security-http/tree/v6.4.48" }, "funding": [ { @@ -9687,20 +10672,20 @@ "type": "tidelift" } ], - "time": "2026-09-15T05:55:29+00:00" + "time": "2026-10-12T12:24:17+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.43", + "version": "v6.4.47", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "9a74371980b9eea34a39804fcfd7d0e4c81ccff1" + "reference": "67e177a3fe8cae15decfb004563f9b4988296be3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/9a74371980b9eea34a39804fcfd7d0e4c81ccff1", - "reference": "9a74371980b9eea34a39804fcfd7d0e4c81ccff1", + "url": "https://api.github.com/repos/symfony/serializer/zipball/67e177a3fe8cae15decfb004563f9b4988296be3", + "reference": "67e177a3fe8cae15decfb004563f9b4988296be3", "shasum": "" }, "require": { @@ -9769,7 +10754,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/v6.4.43" + "source": "https://github.com/symfony/serializer/tree/v6.4.47" }, "funding": [ { @@ -9789,7 +10774,7 @@ "type": "tidelift" } ], - "time": "2026-07-29T07:59:11+00:00" + "time": "2026-09-28T08:44:55+00:00" }, { "name": "symfony/service-contracts", @@ -10019,16 +11004,16 @@ }, { "name": "symfony/string", - "version": "v6.4.46", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "4513ab2b0ad2d7845a2f920e2f30b61633c9e606" + "reference": "9459a27a00b1f0fec1954e9eb362d00aedcfe048" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/4513ab2b0ad2d7845a2f920e2f30b61633c9e606", - "reference": "4513ab2b0ad2d7845a2f920e2f30b61633c9e606", + "url": "https://api.github.com/repos/symfony/string/zipball/9459a27a00b1f0fec1954e9eb362d00aedcfe048", + "reference": "9459a27a00b1f0fec1954e9eb362d00aedcfe048", "shasum": "" }, "require": { @@ -10084,7 +11069,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.46" + "source": "https://github.com/symfony/string/tree/v6.4.48" }, "funding": [ { @@ -10104,20 +11089,20 @@ "type": "tidelift" } ], - "time": "2026-09-11T09:03:57+00:00" + "time": "2026-10-03T14:51:46+00:00" }, { "name": "symfony/translation", - "version": "v6.4.42", + "version": "v6.4.44", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "fef99cef37890b350976f5f492854faefadd4e15" + "reference": "fa2235501e2cf6b1d38ab42954b248a5e93c8e89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/fef99cef37890b350976f5f492854faefadd4e15", - "reference": "fef99cef37890b350976f5f492854faefadd4e15", + "url": "https://api.github.com/repos/symfony/translation/zipball/fa2235501e2cf6b1d38ab42954b248a5e93c8e89", + "reference": "fa2235501e2cf6b1d38ab42954b248a5e93c8e89", "shasum": "" }, "require": { @@ -10183,7 +11168,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.42" + "source": "https://github.com/symfony/translation/tree/v6.4.44" }, "funding": [ { @@ -10203,7 +11188,7 @@ "type": "tidelift" } ], - "time": "2026-06-05T16:46:18+00:00" + "time": "2026-08-20T19:22:13+00:00" }, { "name": "symfony/translation-contracts", @@ -10289,16 +11274,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.43", + "version": "v6.4.46", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "a94c869d1dd4df385a30cf8a9a86d1f7ba70466b" + "reference": "5b38d19f327f32507f96c9316aef90e7ad4962ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/a94c869d1dd4df385a30cf8a9a86d1f7ba70466b", - "reference": "a94c869d1dd4df385a30cf8a9a86d1f7ba70466b", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5b38d19f327f32507f96c9316aef90e7ad4962ac", + "reference": "5b38d19f327f32507f96c9316aef90e7ad4962ac", "shasum": "" }, "require": { @@ -10342,7 +11327,7 @@ "symfony/security-core": "^5.4|^6.0|^7.0", "symfony/security-csrf": "^5.4|^6.0|^7.0", "symfony/security-http": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/serializer": "^6.4.44|^7.4.17", "symfony/stopwatch": "^5.4|^6.0|^7.0", "symfony/translation": "^6.1|^7.0", "symfony/web-link": "^5.4|^6.0|^7.0", @@ -10378,7 +11363,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.43" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.46" }, "funding": [ { @@ -10398,20 +11383,20 @@ "type": "tidelift" } ], - "time": "2026-07-21T10:37:57+00:00" + "time": "2026-09-14T10:25:06+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.43", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "15bad71434a8bbc64db852a14ac6360af7f4ea4a" + "reference": "031fe1000fd630bc3c1fd055f9599c748ec47f63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/15bad71434a8bbc64db852a14ac6360af7f4ea4a", - "reference": "15bad71434a8bbc64db852a14ac6360af7f4ea4a", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/031fe1000fd630bc3c1fd055f9599c748ec47f63", + "reference": "031fe1000fd630bc3c1fd055f9599c748ec47f63", "shasum": "" }, "require": { @@ -10466,7 +11451,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.4.43" + "source": "https://github.com/symfony/twig-bundle/tree/v6.4.48" }, "funding": [ { @@ -10486,20 +11471,20 @@ "type": "tidelift" } ], - "time": "2026-07-06T08:03:42+00:00" + "time": "2026-10-09T15:33:37+00:00" }, { "name": "symfony/type-info", - "version": "v7.4.9", + "version": "v7.4.20", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "cafeedbf157b890e94ac5b83eaed85595106d5d6" + "reference": "bbaaf3366400f5c85f66800b955c77b46e8abad2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/cafeedbf157b890e94ac5b83eaed85595106d5d6", - "reference": "cafeedbf157b890e94ac5b83eaed85595106d5d6", + "url": "https://api.github.com/repos/symfony/type-info/zipball/bbaaf3366400f5c85f66800b955c77b46e8abad2", + "reference": "bbaaf3366400f5c85f66800b955c77b46e8abad2", "shasum": "" }, "require": { @@ -10549,7 +11534,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.4.9" + "source": "https://github.com/symfony/type-info/tree/v7.4.20" }, "funding": [ { @@ -10569,20 +11554,20 @@ "type": "tidelift" } ], - "time": "2026-04-22T15:21:55+00:00" + "time": "2026-09-28T12:19:37+00:00" }, { "name": "symfony/uid", - "version": "v6.4.32", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "6b973c385f00341b246f697d82dc01a09107acdd" + "reference": "357c45dd54432a5062b2707685800109374c80bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/6b973c385f00341b246f697d82dc01a09107acdd", - "reference": "6b973c385f00341b246f697d82dc01a09107acdd", + "url": "https://api.github.com/repos/symfony/uid/zipball/357c45dd54432a5062b2707685800109374c80bb", + "reference": "357c45dd54432a5062b2707685800109374c80bb", "shasum": "" }, "require": { @@ -10627,7 +11612,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.32" + "source": "https://github.com/symfony/uid/tree/v6.4.48" }, "funding": [ { @@ -10647,20 +11632,20 @@ "type": "tidelift" } ], - "time": "2025-12-23T15:07:59+00:00" + "time": "2026-10-12T14:16:54+00:00" }, { "name": "symfony/validator", - "version": "v6.4.43", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "ddde49bfa032b6c7f7b70fd3c82310d3d8cf952e" + "reference": "01eea7f7cfbb3547f761a6e0d2f0fd72fb7bfad1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/ddde49bfa032b6c7f7b70fd3c82310d3d8cf952e", - "reference": "ddde49bfa032b6c7f7b70fd3c82310d3d8cf952e", + "url": "https://api.github.com/repos/symfony/validator/zipball/01eea7f7cfbb3547f761a6e0d2f0fd72fb7bfad1", + "reference": "01eea7f7cfbb3547f761a6e0d2f0fd72fb7bfad1", "shasum": "" }, "require": { @@ -10728,7 +11713,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.43" + "source": "https://github.com/symfony/validator/tree/v6.4.48" }, "funding": [ { @@ -10748,20 +11733,20 @@ "type": "tidelift" } ], - "time": "2026-07-28T13:57:03+00:00" + "time": "2026-10-13T15:03:32+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.45", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "86a9b2f1bd81c9780a809632238ab6ba10292166" + "reference": "7db9224bcf74d1306d2062cb8b124fbe0efeb714" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86a9b2f1bd81c9780a809632238ab6ba10292166", - "reference": "86a9b2f1bd81c9780a809632238ab6ba10292166", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7db9224bcf74d1306d2062cb8b124fbe0efeb714", + "reference": "7db9224bcf74d1306d2062cb8b124fbe0efeb714", "shasum": "" }, "require": { @@ -10816,7 +11801,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.45" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.48" }, "funding": [ { @@ -10836,7 +11821,7 @@ "type": "tidelift" } ], - "time": "2026-08-30T20:10:39+00:00" + "time": "2026-10-13T05:38:27+00:00" }, { "name": "symfony/var-exporter", @@ -11008,16 +11993,16 @@ }, { "name": "symfony/webpack-encore-bundle", - "version": "v2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/symfony/webpack-encore-bundle.git", - "reference": "cac8d6c722999c8add9272f9de6e8079628df4f5" + "reference": "0cbc3485f127cd9f85e395f8177607ef00535634" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/cac8d6c722999c8add9272f9de6e8079628df4f5", - "reference": "cac8d6c722999c8add9272f9de6e8079628df4f5", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/0cbc3485f127cd9f85e395f8177607ef00535634", + "reference": "0cbc3485f127cd9f85e395f8177607ef00535634", "shasum": "" }, "require": { @@ -11060,7 +12045,7 @@ "description": "Integration of your Symfony app with Webpack Encore", "support": { "issues": "https://github.com/symfony/webpack-encore-bundle/issues", - "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.4.1" + "source": "https://github.com/symfony/webpack-encore-bundle/tree/2.4.2" }, "funding": [ { @@ -11080,20 +12065,20 @@ "type": "tidelift" } ], - "time": "2026-06-24T07:21:58+00:00" + "time": "2026-09-17T12:45:02+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.43", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d2ee2daa59be8cd0864835ea918ea209149796a3" + "reference": "91288fddb497a598b564343ea663ea272370a7dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d2ee2daa59be8cd0864835ea918ea209149796a3", - "reference": "d2ee2daa59be8cd0864835ea918ea209149796a3", + "url": "https://api.github.com/repos/symfony/yaml/zipball/91288fddb497a598b564343ea663ea272370a7dc", + "reference": "91288fddb497a598b564343ea663ea272370a7dc", "shasum": "" }, "require": { @@ -11136,7 +12121,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.43" + "source": "https://github.com/symfony/yaml/tree/v6.4.48" }, "funding": [ { @@ -11156,20 +12141,68 @@ "type": "tidelift" } ], - "time": "2026-07-20T15:18:49+00:00" + "time": "2026-10-12T09:18:28+00:00" }, { - "name": "twig/twig", - "version": "v3.23.0", + "name": "symfonycasts/reset-password-bundle", + "version": "v1.25.0", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9" + "url": "https://github.com/SymfonyCasts/reset-password-bundle.git", + "reference": "084aac1cc40ef75b26134c7967d1e423eeff72f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", - "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", + "url": "https://api.github.com/repos/SymfonyCasts/reset-password-bundle/zipball/084aac1cc40ef75b26134c7967d1e423eeff72f4", + "reference": "084aac1cc40ef75b26134c7967d1e423eeff72f4", + "shasum": "" + }, + "require": { + "php": ">=8.1.10", + "symfony/clock": "^6.3 | ^7.0 | ^8.0", + "symfony/config": "^5.4 | ^6.0 | ^7.0 | ^8.0", + "symfony/dependency-injection": "^5.4 | ^6.0 | ^7.0 | ^8.0", + "symfony/deprecation-contracts": "^2.2 | ^3.0", + "symfony/http-kernel": "^5.4 | ^6.0 | ^7.0 | ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^1.0 | ^2.0", + "doctrine/doctrine-bundle": "^2.13 | ^3.0", + "doctrine/orm": "^2.20 | ^3.0", + "symfony/framework-bundle": "^5.4 | ^6.0 | ^7.0 | ^8.0", + "symfony/phpunit-bridge": "^5.4 | ^6.0 | ^7.0 | ^8.0", + "symfony/process": "^6.4 | ^7.0 | ^8.0", + "symfonycasts/internal-test-helpers": "dev-main" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "SymfonyCasts\\Bundle\\ResetPassword\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Symfony bundle that adds password reset functionality.", + "support": { + "issues": "https://github.com/SymfonyCasts/reset-password-bundle/issues", + "source": "https://github.com/SymfonyCasts/reset-password-bundle/tree/v1.25.0" + }, + "time": "2026-03-26T10:16:40+00:00" + }, + { + "name": "twig/twig", + "version": "v3.30.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "8c737079b726af72ff8ef3c595be9f6a810ea1ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/8c737079b726af72ff8ef3c595be9f6a810ea1ef", + "reference": "8c737079b726af72ff8ef3c595be9f6a810ea1ef", "shasum": "" }, "require": { @@ -11179,7 +12212,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" }, @@ -11223,7 +12257,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.23.0" + "source": "https://github.com/twigphp/Twig/tree/v3.30.0" }, "funding": [ { @@ -11235,20 +12269,20 @@ "type": "tidelift" } ], - "time": "2026-01-23T21:00:41+00:00" + "time": "2026-09-25T13:20:01+00:00" }, { "name": "webmozart/assert", - "version": "2.1.2", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/8a163706bbcac613733dba03f51e13b5eb1bb819", + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819", "shasum": "" }, "require": { @@ -11264,7 +12298,11 @@ }, "type": "library", "extra": { + "psalm": { + "pluginClass": "Webmozart\\Assert\\PsalmPlugin" + }, "branch-alias": { + "dev-master": "2.0-dev", "dev-feature/2-0": "2.0-dev" } }, @@ -11295,9 +12333,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.2" + "source": "https://github.com/webmozarts/assert/tree/2.5.0" }, - "time": "2026-01-13T14:02:24+00:00" + "time": "2026-10-05T23:14:19+00:00" }, { "name": "willdurand/negotiation", @@ -11357,27 +12395,27 @@ }, { "name": "zenstruck/assert", - "version": "v1.5.1", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/zenstruck/assert.git", - "reference": "39554ce3a275fbf8c870b251e620101f644e9277" + "reference": "1e32d48847d4e82c345112ca226b21a1a792af0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zenstruck/assert/zipball/39554ce3a275fbf8c870b251e620101f644e9277", - "reference": "39554ce3a275fbf8c870b251e620101f644e9277", + "url": "https://api.github.com/repos/zenstruck/assert/zipball/1e32d48847d4e82c345112ca226b21a1a792af0a", + "reference": "1e32d48847d4e82c345112ca226b21a1a792af0a", "shasum": "" }, "require": { - "php": ">=8.0", + "php": ">=8.1", "symfony/polyfill-php81": "^1.23", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0|^8.0" }, "require-dev": { "phpstan/phpstan": "^1.4", "phpunit/phpunit": "^9.5.21", - "symfony/phpunit-bridge": "^6.3|^7.0" + "symfony/phpunit-bridge": "^6.3|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11404,72 +12442,86 @@ ], "support": { "issues": "https://github.com/zenstruck/assert/issues", - "source": "https://github.com/zenstruck/assert/tree/v1.5.1" + "source": "https://github.com/zenstruck/assert/tree/v1.7.0" }, "funding": [ { "url": "https://github.com/kbond", "type": "github" + }, + { + "url": "https://github.com/nikophil", + "type": "github" } ], - "time": "2024-10-28T18:08:12+00:00" + "time": "2025-12-07T01:59:12+00:00" }, { "name": "zenstruck/foundry", - "version": "v2.6.0", + "version": "v2.14.1", "source": { "type": "git", "url": "https://github.com/zenstruck/foundry.git", - "reference": "830d5a5243b5b81e79b2b91b67654836490ed833" + "reference": "8b6feea05407f2edf4970312119167cfd9828e10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zenstruck/foundry/zipball/830d5a5243b5b81e79b2b91b67654836490ed833", - "reference": "830d5a5243b5b81e79b2b91b67654836490ed833", + "url": "https://api.github.com/repos/zenstruck/foundry/zipball/8b6feea05407f2edf4970312119167cfd9828e10", + "reference": "8b6feea05407f2edf4970312119167cfd9828e10", "shasum": "" }, "require": { - "fakerphp/faker": "^1.23", + "fakerphp/faker": "^1.24", "php": ">=8.1", "symfony/deprecation-contracts": "^2.2|^3.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/var-exporter": "^6.4.9|~7.0.9|^7.1.2", + "symfony/polyfill-deepclone": "^1.42", + "symfony/polyfill-php84": "^1.32", + "symfony/polyfill-php85": "^1.33", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4.9|~7.0.9|^7.1.2|^8.0", "zenstruck/assert": "^1.4" }, "conflict": { - "doctrine/persistence": "<2.0", - "symfony/framework-bundle": "<6.4" + "doctrine/cache": "<1.12.1", + "doctrine/persistence": "<2.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8", - "brianium/paratest": "^6|^7", "dama/doctrine-test-bundle": "^8.0", "doctrine/collections": "^1.7|^2.0", "doctrine/common": "^3.2.2", - "doctrine/doctrine-bundle": "^2.10", - "doctrine/doctrine-migrations-bundle": "^2.2|^3.0", + "doctrine/doctrine-bundle": "^2.10|^3.0", + "doctrine/doctrine-migrations-bundle": "^2.2|^3.0|^4.0", "doctrine/mongodb-odm": "^2.4", "doctrine/mongodb-odm-bundle": "^4.6|^5.0", "doctrine/orm": "^2.16|^3.0", "doctrine/persistence": "^2.0|^3.0|^4.0", - "phpunit/phpunit": "^9.5.0 || ^10.0 || ^11.0 || ^12.0", - "symfony/console": "^6.4|^7.0", - "symfony/dotenv": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", + "phpunit/phpunit": "^9.5.0 || ^10.0 || ^11.0 || ^12.0 || ~13.1.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dotenv": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/flex": "^2.10", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", "symfony/maker-bundle": "^1.55", - "symfony/phpunit-bridge": "^6.4|^7.0", - "symfony/runtime": "^6.4|^7.0", + "symfony/phpunit-bridge": "^6.4.26|^7.0|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^3.4", - "symfony/uid": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0", + "webmozart/assert": "^1.11" }, "type": "library", "extra": { "psalm": { "pluginClass": "Zenstruck\\Foundry\\Psalm\\FoundryPlugin" }, + "symfony": { + "allow-contrib": false + }, "bamarni-bin": { "bin-links": true, "forward-command": false, @@ -11484,8 +12536,12 @@ ], "psr-4": { "Zenstruck\\Foundry\\": "src/", - "Zenstruck\\Foundry\\Psalm\\": "utils/psalm" - } + "Zenstruck\\Foundry\\Psalm\\": "utils/psalm", + "Zenstruck\\Foundry\\Utils\\Rector\\": "utils/rector/src/" + }, + "exclude-from-classmap": [ + "src/Test/Behat/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -11514,15 +12570,19 @@ ], "support": { "issues": "https://github.com/zenstruck/foundry/issues", - "source": "https://github.com/zenstruck/foundry/tree/v2.6.0" + "source": "https://github.com/zenstruck/foundry/tree/v2.14.1" }, "funding": [ { "url": "https://github.com/kbond", "type": "github" + }, + { + "url": "https://github.com/nikophil", + "type": "github" } ], - "time": "2025-06-05T08:34:41+00:00" + "time": "2026-10-08T09:06:47+00:00" } ], "packages-dev": [ @@ -11592,28 +12652,29 @@ }, { "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": { @@ -11651,88 +12712,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-11-12T16:29:46+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.4", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "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/pcre/tree/3.4.0" }, "funding": [ { @@ -11744,7 +12724,7 @@ "type": "github" } ], - "time": "2025-08-20T19:15:30+00:00" + "time": "2026-06-07T11:47:49+00:00" }, { "name": "composer/xdebug-handler", @@ -11812,6 +12792,75 @@ ], "time": "2024-05-06T16:37:16+00:00" }, + { + "name": "ergebnis/agent-detector", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/agent-detector.git", + "reference": "0cd815cec1207873c37624d33f0f2853523152f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/agent-detector/zipball/0cd815cec1207873c37624d33f0f2853523152f3", + "reference": "0cd815cec1207873c37624d33f0f2853523152f3", + "shasum": "" + }, + "require": { + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.54.0", + "ergebnis/license": "^2.8.0", + "ergebnis/php-cs-fixer-config": "^6.60.2", + "ergebnis/phpstan-rules": "^2.14.0", + "ergebnis/phpunit-slow-test-detector": "^2.26.0", + "ergebnis/rector-rules": "^1.18.5", + "fakerphp/faker": "^1.24.1", + "infection/infection": "^0.26.6", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.2.14", + "phpstan/phpstan-deprecation-rules": "^2.0.5", + "phpstan/phpstan-phpunit": "^2.1.1", + "phpstan/phpstan-strict-rules": "^2.1.0", + "phpunit/phpunit": "^9.6.34", + "rector/rector": "^2.7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3-dev" + }, + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides a detector for detecting the presence of an agent.", + "homepage": "https://github.com/ergebnis/agent-detector", + "support": { + "issues": "https://github.com/ergebnis/agent-detector/issues", + "security": "https://github.com/ergebnis/agent-detector/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/agent-detector" + }, + "time": "2026-10-15T11:13:32+00:00" + }, { "name": "evenement/evenement", "version": "v3.0.2", @@ -11861,23 +12910,23 @@ }, { "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", @@ -11885,6 +12934,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", @@ -11910,7 +12960,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": [ { @@ -11918,26 +12968,27 @@ "type": "github" } ], - "time": "2025-08-14T07:29:31+00:00" + "time": "2026-09-29T22:11:39+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.93.1", + "version": "v3.95.27", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a" + "reference": "1d0c68ee5f37446d8ad5970b82384cd1bb0a3317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b3546ab487c0762c39f308dc1ec0ea2c461fc21a", - "reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1d0c68ee5f37446d8ad5970b82384cd1bb0a3317", + "reference": "1d0c68ee5f37446d8ad5970b82384cd1bb0a3317", "shasum": "" }, "require": { "clue/ndjson-react": "^1.3", "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.5", + "ergebnis/agent-detector": "^1.2", "ext-filter": "*", "ext-hash": "*", "ext-json": "*", @@ -11948,32 +12999,31 @@ "react/event-loop": "^1.5", "react/socket": "^1.16", "react/stream": "^1.4", - "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0 || ^9.0", "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.33", - "symfony/polyfill-php80": "^1.33", - "symfony/polyfill-php81": "^1.33", - "symfony/polyfill-php84": "^1.33", + "symfony/polyfill-mbstring": "^1.37", + "symfony/polyfill-php80": "^1.37", + "symfony/polyfill-php81": "^1.37", + "symfony/polyfill-php84": "^1.37", "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.7", - "infection/infection": "^0.32", - "justinrainbow/json-schema": "^6.6", + "facile-it/paraunit": "^1.3.1 || ^2.11.0", + "infection/infection": "^0.32.7", + "justinrainbow/json-schema": "^6.12.0", "keradus/cli-executor": "^2.3", - "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.9", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.31 || ^10.5.60 || ^11.5.48", - "symfony/polyfill-php85": "^1.33", - "symfony/var-dumper": "^5.4.48 || ^6.4.26 || ^7.4.0 || ^8.0", - "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0" + "php-coveralls/php-coveralls": "^2.9.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8", + "phpunit/phpunit": "^9.6.36 || ^10.5.64 || ^11.5.56 || ^12.5.35 || ^13.3.3", + "symfony/polyfill-php85": "^1.41", + "symfony/var-dumper": "^5.4.48 || ^6.4.45 || ^7.4.18 || ^8.1.7", + "symfony/yaml": "^5.4.53 || ^6.4.45 || ^7.4.18 || ^8.1.6" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -12014,7 +13064,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.93.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.27" }, "funding": [ { @@ -12022,28 +13072,28 @@ "type": "github" } ], - "time": "2026-01-28T23:50:50+00:00" + "time": "2026-09-22T09:54:55+00:00" }, { "name": "masterminds/html5", - "version": "2.10.0", + "version": "2.11.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "fcf91eb64359852f00d921887b219479b4f21251" + "reference": "a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", - "reference": "fcf91eb64359852f00d921887b219479b4f21251", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7", + "reference": "a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7", "shasum": "" }, "require": { "ext-dom": "*", - "php": ">=5.3.0" + "php": ">=7.4" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + "phpunit/phpunit": "^6 || ^7 || ^8 || ^9 || ^10" }, "type": "library", "extra": { @@ -12087,26 +13137,26 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.11.0" }, - "time": "2025-07-25T09:04:22+00:00" + "time": "2026-08-18T06:18:41+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", @@ -12141,15 +13191,15 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/mnapoli", + "type": "github" } ], - "time": "2025-08-01T08:46:24+00:00" + "time": "2026-08-11T10:17:44+00:00" }, { "name": "phar-io/manifest", @@ -12590,25 +13640,25 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.34", + "version": "9.6.38", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b36f02317466907a230d3aa1d34467041271ef4a" + "reference": "8b5f757e8e92071bfdbfa93943f94f84c4e31007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a", - "reference": "b36f02317466907a230d3aa1d34467041271ef4a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8b5f757e8e92071bfdbfa93943f94f84c4e31007", + "reference": "8b5f757e8e92071bfdbfa93943f94f84c4e31007", "shasum": "" }, "require": { "doctrine/instantiator": "^1.5.0 || ^2", "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", @@ -12624,7 +13674,7 @@ "sebastian/comparator": "^4.0.10", "sebastian/diff": "^4.0.6", "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.8", + "sebastian/exporter": "^4.0.9", "sebastian/global-state": "^5.0.8", "sebastian/object-enumerator": "^4.0.4", "sebastian/resource-operations": "^3.0.4", @@ -12673,31 +13723,15 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.38" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "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/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2026-01-27T05:45:00+00:00" + "time": "2026-10-05T05:44:26+00:00" }, { "name": "react/cache", @@ -13666,16 +14700,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.8", + "version": "4.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c" + "reference": "4352c1a3df741a7ba9e61af6fed51d1fee41cbf7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c", - "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/4352c1a3df741a7ba9e61af6fed51d1fee41cbf7", + "reference": "4352c1a3df741a7ba9e61af6fed51d1fee41cbf7", "shasum": "" }, "require": { @@ -13731,7 +14765,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.9" }, "funding": [ { @@ -13751,7 +14785,7 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:03:27+00:00" + "time": "2026-08-11T04:55:59+00:00" }, { "name": "sebastian/global-state", @@ -14000,16 +15034,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.6", + "version": "4.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "539c6691e0623af6dc6f9c20384c120f963465a0" + "reference": "c85be6922b7fd365942b986b9a50397d65407611" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0", - "reference": "539c6691e0623af6dc6f9c20384c120f963465a0", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/c85be6922b7fd365942b986b9a50397d65407611", + "reference": "c85be6922b7fd365942b986b9a50397d65407611", "shasum": "" }, "require": { @@ -14051,7 +15085,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.7" }, "funding": [ { @@ -14071,7 +15105,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T06:57:39+00:00" + "time": "2026-08-11T05:25:24+00:00" }, { "name": "sebastian/resource-operations", @@ -14238,16 +15272,16 @@ }, { "name": "symfony/browser-kit", - "version": "v6.4.42", + "version": "v6.4.48", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "94d0d5413126d81bffcd0de509fb9daf0363babd" + "reference": "a8658479673299e4830acdb7bce9279a66dbec35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/94d0d5413126d81bffcd0de509fb9daf0363babd", - "reference": "94d0d5413126d81bffcd0de509fb9daf0363babd", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a8658479673299e4830acdb7bce9279a66dbec35", + "reference": "a8658479673299e4830acdb7bce9279a66dbec35", "shasum": "" }, "require": { @@ -14286,7 +15320,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.4.42" + "source": "https://github.com/symfony/browser-kit/tree/v6.4.48" }, "funding": [ { @@ -14306,20 +15340,20 @@ "type": "tidelift" } ], - "time": "2026-06-08T07:06:12+00:00" + "time": "2026-10-13T07:35:04+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.34", + "version": "v6.4.45", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0314c186f1464de048cce58979ff1625ca88bbb" + "reference": "5484e316cd8125f5215bbf829151e2211aa6d101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0314c186f1464de048cce58979ff1625ca88bbb", - "reference": "b0314c186f1464de048cce58979ff1625ca88bbb", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/5484e316cd8125f5215bbf829151e2211aa6d101", + "reference": "5484e316cd8125f5215bbf829151e2211aa6d101", "shasum": "" }, "require": { @@ -14355,7 +15389,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.34" + "source": "https://github.com/symfony/css-selector/tree/v6.4.45" }, "funding": [ { @@ -14375,20 +15409,20 @@ "type": "tidelift" } ], - "time": "2026-02-16T08:37:21+00:00" + "time": "2026-08-23T07:35:46+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.4.40", + "version": "v6.4.44", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "7e65f76c28f5ed8d933f2c86698a3e2bf0de1b10" + "reference": "998855f6c3699f148b54096d1d7d2b8b0b0fc298" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7e65f76c28f5ed8d933f2c86698a3e2bf0de1b10", - "reference": "7e65f76c28f5ed8d933f2c86698a3e2bf0de1b10", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/998855f6c3699f148b54096d1d7d2b8b0b0fc298", + "reference": "998855f6c3699f148b54096d1d7d2b8b0b0fc298", "shasum": "" }, "require": { @@ -14426,7 +15460,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.40" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.44" }, "funding": [ { @@ -14446,91 +15480,20 @@ "type": "tidelift" } ], - "time": "2026-05-19T20:33:22+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v6.4.30", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", - "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.30" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-11-12T13:06:53+00:00" + "time": "2026-08-20T17:31:07+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v7.4.16", + "version": "v7.4.21", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "49757f773056f1180f16667e0a5a533d262cbe9a" + "reference": "8bf5eb51869e7606588a454030cb106fa33bc04c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/49757f773056f1180f16667e0a5a533d262cbe9a", - "reference": "49757f773056f1180f16667e0a5a533d262cbe9a", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8bf5eb51869e7606588a454030cb106fa33bc04c", + "reference": "8bf5eb51869e7606588a454030cb106fa33bc04c", "shasum": "" }, "require": { @@ -14582,7 +15545,7 @@ "testing" ], "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.16" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.21" }, "funding": [ { @@ -14602,7 +15565,7 @@ "type": "tidelift" } ], - "time": "2026-08-07T14:56:57+00:00" + "time": "2026-09-30T22:00:01+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/bundles.php b/config/bundles.php index 1641123..912032a 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -19,4 +19,5 @@ return [ Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], KnpU\OAuth2ClientBundle\KnpUOAuth2ClientBundle::class => ['all' => true], Kyzegs\DoctrineEncryptionBundle\DoctrineEncryptionBundle::class => ['all' => true], + SymfonyCasts\Bundle\ResetPassword\SymfonyCastsResetPasswordBundle::class => ['all' => true], ]; diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml new file mode 100644 index 0000000..56a650d --- /dev/null +++ b/config/packages/mailer.yaml @@ -0,0 +1,3 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' diff --git a/config/packages/reset_password.yaml b/config/packages/reset_password.yaml new file mode 100644 index 0000000..796ff0c --- /dev/null +++ b/config/packages/reset_password.yaml @@ -0,0 +1,2 @@ +symfonycasts_reset_password: + request_password_repository: App\Repository\ResetPasswordRequestRepository diff --git a/docker-compose.override.yml b/docker-compose.override.yml index b06cbb2..838e4c0 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -10,3 +10,15 @@ services: ports: - "9000:9000" - "9003:9003" + +###> symfony/mailer ### + mailer: + image: axllent/mailpit + container_name: goteo-api-mailpit + ports: + - "1025:1025" + - "8025:8025" + environment: + MP_SMTP_AUTH_ACCEPT_ANY: 1 + MP_SMTP_AUTH_ALLOW_INSECURE: 1 +###< symfony/mailer ### diff --git a/migrations/Version20260812124026.php b/migrations/Version20260812124026.php index 0ea0a06..c65f878 100644 --- a/migrations/Version20260812124026.php +++ b/migrations/Version20260812124026.php @@ -25,6 +25,6 @@ final class Version20260812124026 extends AbstractMigration { $this->addSql('ALTER TABLE user CHANGE territory_address territory_address VARCHAR(255) DEFAULT NULL'); $this->addSql('ALTER TABLE project CHANGE territory_address territory_address VARCHAR(255) DEFAULT NULL'); - $this->addSql('ALTER TABLE ext_translations CHANGE foreign_key foreign_key INT NOT NULL'); + $this->addSql('ALTER TABLE match_call CHANGE territory_address territory_address VARCHAR(255) DEFAULT NULL'); } } diff --git a/migrations/Version20261021102456.php b/migrations/Version20261021102456.php new file mode 100644 index 0000000..a808afe --- /dev/null +++ b/migrations/Version20261021102456.php @@ -0,0 +1,28 @@ +addSql('CREATE TABLE reset_password_request (id INT AUTO_INCREMENT NOT NULL, user_id INT NOT NULL, selector VARCHAR(20) NOT NULL, hashed_token VARCHAR(100) NOT NULL, requested_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', expires_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_7CE748AA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE reset_password_request ADD CONSTRAINT FK_7CE748AA76ED395 FOREIGN KEY (user_id) REFERENCES user (id)'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE reset_password_request DROP FOREIGN KEY FK_7CE748AA76ED395'); + $this->addSql('DROP TABLE reset_password_request'); + } +} diff --git a/src/ApiResource/Gateway/ChargeApiResource.php b/src/ApiResource/Gateway/ChargeApiResource.php index 45d7d64..ab1a0c9 100644 --- a/src/ApiResource/Gateway/ChargeApiResource.php +++ b/src/ApiResource/Gateway/ChargeApiResource.php @@ -36,17 +36,17 @@ use Symfony\Component\Validator\Constraints as Assert; summary: 'Get charges totals', description: 'Returns a single ChargesTotals object with totalized metrics for the charges matching the same filters as the charges collection.', responses: [ - '200' => [ - 'description' => 'Charges totals', - 'content' => [ + '200' => new \ApiPlatform\OpenApi\Model\Response( + description: 'Charges totals', + content: new \ArrayObject([ 'application/json' => [ 'schema' => [ '$ref' => '#/components/schemas/GatewayCharge.ChargesTotalsDto', ], ], - ], - ], - ] + ]), + ), + ], ), )] #[API\Get()] diff --git a/src/ApiResource/Project/SupportApiResource.php b/src/ApiResource/Project/SupportApiResource.php index af64ae5..c7fdcca 100644 --- a/src/ApiResource/Project/SupportApiResource.php +++ b/src/ApiResource/Project/SupportApiResource.php @@ -40,17 +40,17 @@ use Symfony\Component\Validator\Constraints as Assert; summary: 'Get money total', description: 'Returns a single TotalizedMoney object', responses: [ - '200' => [ - 'description' => 'Totalized money', - 'content' => [ + '200' => new \ApiPlatform\Openapi\Model\Response( + description: 'Totalized money', + content: new \ArrayObject([ 'application/json' => [ 'schema' => [ '$ref' => '#/components/schemas/ProjectSupport.TotalizedMoney', ], ], - ], - ], - ] + ]), + ), + ], ) )] #[API\Get()] diff --git a/src/Command/OAuth2ConsentClientCommand.php b/src/Command/OAuth2ConsentClientCommand.php index a58ad8c..5225665 100644 --- a/src/Command/OAuth2ConsentClientCommand.php +++ b/src/Command/OAuth2ConsentClientCommand.php @@ -54,6 +54,7 @@ class OAuth2ConsentClientCommand extends Command $this->clientManager->save($client); $io->success('OAuth2 client updated successfully.'); + $io->table(['Identifier', 'Is consented?'], [[$client->getIdentifier(), $client->isConsented()]]); return 0; } diff --git a/src/Controller/OAuthClientsController.php b/src/Controller/OAuthClientsController.php new file mode 100644 index 0000000..f4e1948 --- /dev/null +++ b/src/Controller/OAuthClientsController.php @@ -0,0 +1,62 @@ +getActiveClients(); + + return $this->render('clients/clients.html.twig', [ + 'oauth_clients' => $clients, + ]); + } + + private function getActiveClients(): array + { + $clients = []; + foreach ($this->clientManager->list(null) as $managedClient) { + $activeClient = $this->clientRepository->getClientEntity($managedClient->getIdentifier()); + if (!$activeClient) { + continue; + } + + $clients[] = [ + 'name' => $activeClient->getName(), + 'identifier' => $activeClient->getIdentifier(), + 'baseUri' => $this->getBaseUri($activeClient->getRedirectUri()), + ]; + } + + return $clients; + } + + private function getBaseUri(string|array $url): string + { + if (is_array($url)) { + $url = $url[0]; + } + + $uri = new Uri($url); + + return (string) $uri + ->withPath('') + ->withQuery('') + ->withFragment(''); + } +} diff --git a/src/Controller/ResetPasswordController.php b/src/Controller/ResetPasswordController.php new file mode 100644 index 0000000..f0b165e --- /dev/null +++ b/src/Controller/ResetPasswordController.php @@ -0,0 +1,181 @@ +createForm(ResetPasswordRequestFormType::class); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + /** @var string $email */ + $email = $form->get('email')->getData(); + + return $this->processSendingPasswordResetEmail( + $email, + $mailer, + $translator + ); + } + + return $this->render('reset_password/request.html.twig', [ + 'requestForm' => $form, + ]); + } + + /** + * Confirmation page after a user has requested a password reset. + */ + #[Route('/check-email', name: 'app_check_email')] + public function checkEmail(): Response + { + // Generate a fake token if the user does not exist or someone hit this page directly. + // This prevents exposing whether or not a user was found with the given email address or not + if (null === ($resetToken = $this->getTokenObjectFromSession())) { + $resetToken = $this->resetPasswordHelper->generateFakeResetToken(); + } + + return $this->render('reset_password/check_email.html.twig', [ + 'resetToken' => $resetToken, + 'mailerAddress' => $this->mailerAddress, + ]); + } + + /** + * Validates and process the reset URL that the user clicked in their email. + */ + #[Route('/reset/{token}', name: 'app_reset_password')] + public function reset(Request $request, UserPasswordHasherInterface $passwordHasher, TranslatorInterface $translator, ?string $token = null): Response + { + if ($token) { + // We store the token in session and remove it from the URL, to avoid the URL being + // loaded in a browser and potentially leaking the token to 3rd party JavaScript. + $this->storeTokenInSession($token); + + return $this->redirectToRoute('app_reset_password'); + } + + $token = $this->getTokenFromSession(); + if ($token === null) { + throw $this->createNotFoundException('No reset password token found in the URL or in the session.'); + } + + try { + /** @var User $user */ + $user = $this->resetPasswordHelper->validateTokenAndFetchUser($token); + } catch (ResetPasswordExceptionInterface $e) { + $this->addFlash('reset_password_error', sprintf( + '%s - %s', + $translator->trans(ResetPasswordExceptionInterface::MESSAGE_PROBLEM_VALIDATE, [], 'ResetPasswordBundle'), + $translator->trans($e->getReason(), [], 'ResetPasswordBundle') + )); + + return $this->redirectToRoute('app_forgot_password_request'); + } + + // The token is valid; allow the user to change their password. + $form = $this->createForm(ChangePasswordFormType::class); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + // A password reset token should be used only once, remove it. + $this->resetPasswordHelper->removeResetRequest($token); + + /** @var string $plainPassword */ + $plainPassword = $form->get('plainPassword')->getData(); + + // Encode(hash) the plain password, and set it. + $user->setPassword($passwordHasher->hashPassword($user, $plainPassword)); + $this->entityManager->flush(); + + // The session is cleaned up after the password has been changed. + $this->cleanSessionAfterReset(); + + return $this->redirectToRoute('app_clients'); + } + + return $this->render('reset_password/reset.html.twig', [ + 'resetForm' => $form, + ]); + } + + private function processSendingPasswordResetEmail(string $emailFormData, MailerInterface $mailer, TranslatorInterface $translator): RedirectResponse + { + $user = $this->entityManager->getRepository(User::class)->findOneBy([ + 'email' => $emailFormData, + ]); + + // Do not reveal whether a user account was found or not. + if (!$user) { + return $this->redirectToRoute('app_check_email'); + } + + try { + $resetToken = $this->resetPasswordHelper->generateResetToken($user); + } catch (ResetPasswordExceptionInterface $e) { + // If you want to tell the user why a reset email was not sent, uncomment + // the lines below and change the redirect to 'app_forgot_password_request'. + // Caution: This may reveal if a user is registered or not. + // + // $this->addFlash('reset_password_error', sprintf( + // '%s - %s', + // $translator->trans(ResetPasswordExceptionInterface::MESSAGE_PROBLEM_HANDLE, [], 'ResetPasswordBundle'), + // $translator->trans($e->getReason(), [], 'ResetPasswordBundle') + // )); + + return $this->redirectToRoute('app_check_email'); + } + + $email = (new TemplatedEmail()) + ->from(new Address($this->mailerAddress, 'Goteo')) + ->to((string) $user->getEmail()) + ->subject($translator->trans('password_reset.email.subject')) + ->htmlTemplate('reset_password/email.html.twig') + ->context([ + 'user' => $user, + 'resetToken' => $resetToken, + ]); + + $mailer->send($email); + + // Store the token object in session for retrieval in check-email route. + $this->setTokenObjectInSession($resetToken); + + return $this->redirectToRoute('app_check_email'); + } +} diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index 1290062..b642099 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -11,7 +11,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; -#[Route('/security')] +#[Route('/auth')] class SecurityController extends AbstractController { public function __construct( diff --git a/src/Entity/ResetPasswordRequest.php b/src/Entity/ResetPasswordRequest.php new file mode 100644 index 0000000..2214b7c --- /dev/null +++ b/src/Entity/ResetPasswordRequest.php @@ -0,0 +1,40 @@ +user = $user; + $this->initialize($expiresAt, $selector, $hashedToken); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getUser(): User + { + return $this->user; + } +} diff --git a/src/Form/ChangePasswordFormType.php b/src/Form/ChangePasswordFormType.php new file mode 100644 index 0000000..e4eeece --- /dev/null +++ b/src/Form/ChangePasswordFormType.php @@ -0,0 +1,62 @@ +add('plainPassword', RepeatedType::class, [ + 'type' => PasswordType::class, + 'options' => [ + 'attr' => [ + 'autocomplete' => 'new-password', + ], + ], + 'first_options' => [ + 'constraints' => [ + new NotBlank( + message: $this->translator->trans('password_reset.reset.errorEmpty'), + ), + new Length( + min: 8, + minMessage: $this->translator->trans('password_reset.reset.errorLength'), + // max length allowed by Symfony for security reasons + max: 4096, + ), + new PasswordStrength(), + new NotCompromisedPassword(), + ], + 'label' => $this->translator->trans('password_reset.reset.labelNew'), + ], + 'second_options' => [ + 'label' => $this->translator->trans('password_reset.reset.labelRepeat'), + ], + 'invalid_message' => $this->translator->trans('password_reset.reset.errorNoMatch'), + // Instead of being set onto the object directly, + // this is read and encoded in the controller + 'mapped' => false, + ]); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([]); + } +} diff --git a/src/Form/ResetPasswordRequestFormType.php b/src/Form/ResetPasswordRequestFormType.php new file mode 100644 index 0000000..69b6e94 --- /dev/null +++ b/src/Form/ResetPasswordRequestFormType.php @@ -0,0 +1,31 @@ +add('email', EmailType::class, [ + 'attr' => ['autocomplete' => 'email'], + 'constraints' => [ + new NotBlank( + message: 'Please enter your email', + ), + ], + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([]); + } +} diff --git a/src/Repository/ResetPasswordRequestRepository.php b/src/Repository/ResetPasswordRequestRepository.php new file mode 100644 index 0000000..45d14eb --- /dev/null +++ b/src/Repository/ResetPasswordRequestRepository.php @@ -0,0 +1,32 @@ + + */ +class ResetPasswordRequestRepository extends ServiceEntityRepository implements ResetPasswordRequestRepositoryInterface +{ + use ResetPasswordRequestRepositoryTrait; + + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ResetPasswordRequest::class); + } + + /** + * @param User $user + */ + public function createResetPasswordRequest(object $user, \DateTimeInterface $expiresAt, string $selector, string $hashedToken): ResetPasswordRequestInterface + { + return new ResetPasswordRequest($user, $expiresAt, $selector, $hashedToken); + } +} diff --git a/src/State/Project/ProjectStateProcessor.php b/src/State/Project/ProjectStateProcessor.php index 8aeb4dd..6f25da1 100644 --- a/src/State/Project/ProjectStateProcessor.php +++ b/src/State/Project/ProjectStateProcessor.php @@ -66,12 +66,14 @@ class ProjectStateProcessor implements ProcessorInterface $project->setOwner($owner); if (!isset($data->calendar->release)) { - $project->setCalendar($this->calendarService->makeCalendar( - $project->getDeadline(), - new \DateTimeImmutable('+28 days') - )); + $data->calendar->release = new \DateTimeImmutable('+28 days'); } + $project->setCalendar($this->calendarService->makeCalendar( + $project->getDeadline(), + $data->calendar->release, + )); + return $project; } diff --git a/symfony.lock b/symfony.lock index 9f9f6f7..f6507a0 100644 --- a/symfony.lock +++ b/symfony.lock @@ -211,6 +211,18 @@ "config/packages/lock.yaml" ] }, + "symfony/mailer": { + "version": "6.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "4.3", + "ref": "09051cfde49476e3c12cd3a0e44289ace1c75a4f" + }, + "files": [ + "config/packages/mailer.yaml" + ] + }, "symfony/maker-bundle": { "version": "1.51", "recipe": { @@ -352,6 +364,18 @@ "webpack.config.js" ] }, + "symfonycasts/reset-password-bundle": { + "version": "1.25", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "97c1627c0384534997ae1047b93be517ca16de43" + }, + "files": [ + "config/packages/reset_password.yaml" + ] + }, "zenstruck/foundry": { "version": "2.4", "recipe": { diff --git a/templates/clients/clients.html.twig b/templates/clients/clients.html.twig new file mode 100644 index 0000000..f377ca7 --- /dev/null +++ b/templates/clients/clients.html.twig @@ -0,0 +1,25 @@ +{% extends 'base.html.twig' %} + +{% block title %} + {{ 'clients.title' | trans }} +{% endblock %} + +{% block body %} +
+ +
+{% endblock %} diff --git a/templates/footer.html.twig b/templates/footer.html.twig index 9eda2c3..dddfe3c 100644 --- a/templates/footer.html.twig +++ b/templates/footer.html.twig @@ -1,7 +1,7 @@