From 0a4b05108b1a5087f94e59b5a25c08e0c083875f Mon Sep 17 00:00:00 2001 From: Imani Manyara Date: Wed, 26 Aug 2026 09:33:17 -0400 Subject: [PATCH 1/2] Rename to laranail/authkit and adopt the org naming conventions The package family is unifying under the authkit-* slug, so laranail/auth-kit becomes laranail/authkit and the PSR-4 root moves from Simtabi\Laranail\Auth to Simtabi\Laranail\AuthKit. The rename is the occasion for the naming work the package had not done. Every name a package registers into a host-owned registry has to carry the vendor and the slug, because those registries are flat maps: a second package claiming the same key does not collide loudly, it silently replaces the first, and the damage surfaces far away as a missing view or the wrong config. Three keys were bare: config key auth-kit -> laranail.authkit config file config/auth-kit.php -> config/laranail/authkit.php publish tags auth-kit-config -> laranail::authkit-config auth-kit-social-migrations -> laranail::authkit-social-migrations auth-kit-passkey-migrations -> laranail::authkit-passkey-migrations Environment variables move with the slug: AUTH_KIT_* -> AUTHKIT_*. A NamingConventionTest asserts the config namespace and the absence of any bare publish tag against the live registries rather than the provider source, so the guard survives a refactor of the registration code. Also declares the standard laranail VCS repositories block and a branch-alias so a path or dev checkout satisfies its own constraint, and untracks composer.lock, which the org conventions forbid for a library. Breaking for anyone reading the old config key, publishing by the old tags, or importing the old namespace. --- .gitignore | 1 + README.md | 44 +- composer.json | 23 +- composer.lock | 12045 ---------------- config/auth-kit.php | 72 - config/laranail/authkit.php | 72 + database/factories/SocialFactory.php | 8 +- docs/configuration.md | 6 +- docs/email-verification.md | 2 +- docs/login.md | 2 +- docs/passkeys.md | 6 +- docs/password-reset.md | 4 +- docs/password-updates.md | 2 +- docs/profile-management.md | 2 +- docs/security.md | 4 +- docs/social-login.md | 24 +- src/Actions/AttemptEmailPasswordLogin.php | 10 +- src/Actions/CheckEmailExists.php | 4 +- src/Actions/CreateNewUser.php | 8 +- src/Actions/CreateSocialAccountAction.php | 8 +- src/Actions/FindUserByEmail.php | 4 +- src/Actions/IssueTokenForUser.php | 6 +- src/Actions/LoginUser.php | 4 +- src/Actions/LogoutUser.php | 4 +- src/Actions/ResetUserPassword.php | 2 +- src/Actions/ResolveSocialIdentity.php | 12 +- src/Actions/SocialCallbackAction.php | 10 +- src/Actions/SocialRedirectAction.php | 8 +- src/Actions/UpdateUserPassword.php | 4 +- src/Actions/UpdateUserProfileInformation.php | 2 +- src/AuthKitServiceProvider.php | 28 +- .../AttemptEmailPasswordLoginInterface.php | 4 +- src/Contracts/CheckEmailExistsInterface.php | 2 +- .../CreateSocialAccountActionInterface.php | 6 +- src/Contracts/FindUserByEmailInterface.php | 2 +- src/Contracts/IssueTokenForUserInterface.php | 4 +- src/Contracts/LoginUserInterface.php | 2 +- src/Contracts/LogoutUserInterface.php | 2 +- .../ResolveSocialIdentityInterface.php | 4 +- .../SocialCallbackActionInterface.php | 4 +- .../SocialRedirectActionInterface.php | 4 +- src/Enums/AuthStatus.php | 2 +- src/Enums/SocialProvider.php | 2 +- ...actAttemptEmailPasswordLoginController.php | 14 +- .../Controllers/AbstractAuthController.php | 4 +- .../AbstractCheckEmailExistsController.php | 6 +- ...mailVerificationNotificationController.php | 4 +- ...tractEmailVerificationPromptController.php | 4 +- .../Controllers/AbstractLogoutController.php | 6 +- .../AbstractNewPasswordController.php | 6 +- .../AbstractPasswordResetLinkController.php | 6 +- .../AbstractRegisterController.php | 6 +- .../AbstractSocialCallbackController.php | 12 +- .../AbstractSocialRedirectController.php | 4 +- .../AbstractVerifyEmailController.php | 4 +- src/Http/Middleware/ValidateTurnstile.php | 6 +- .../AttemptEmailPasswordLoginRequest.php | 2 +- src/Http/Requests/CheckEmailExistsRequest.php | 2 +- src/Models/Passkey.php | 2 +- src/Models/Social.php | 6 +- src/PasskeyAuthenticatable.php | 4 +- src/Relations/PasskeyMorphMany.php | 2 +- src/Rules/TurnstileRule.php | 4 +- src/Services/PayPalSocialProvider.php | 4 +- src/Services/Turnstile.php | 2 +- src/Support/AuthKit.php | 10 +- src/Support/AuthResult.php | 4 +- src/Support/SocialRedirectResult.php | 2 +- src/Support/TokenResult.php | 2 +- src/Support/UserModelResolver.php | 6 +- .../Feature/AttemptEmailPasswordLoginTest.php | 12 +- tests/Feature/CheckEmailExistsTest.php | 4 +- tests/Feature/CreateNewUserTest.php | 8 +- .../Feature/CreateSocialAccountActionTest.php | 6 +- tests/Feature/FindUserByEmailTest.php | 4 +- tests/Feature/IssueTokenForUserTest.php | 4 +- tests/Feature/LoginUserTest.php | 2 +- tests/Feature/LogoutUserTest.php | 4 +- tests/Feature/NamingConventionTest.php | 33 + tests/Feature/PasskeyTest.php | 8 +- .../PasswordResetLinkControllerTest.php | 2 +- tests/Feature/ResetUserPasswordTest.php | 2 +- tests/Feature/ResolveSocialIdentityTest.php | 6 +- tests/Feature/SocialCallbackActionTest.php | 6 +- tests/Feature/SocialRedirectActionTest.php | 4 +- tests/Feature/TurnstileTest.php | 10 +- tests/Feature/UpdateUserPasswordTest.php | 2 +- .../UpdateUserProfileInformationTest.php | 2 +- tests/Pest.php | 2 +- tests/TestCase.php | 4 +- tests/Unit/AuthResultTest.php | 4 +- workbench/app/Models/User.php | 2 +- 92 files changed, 367 insertions(+), 12367 deletions(-) delete mode 100644 composer.lock delete mode 100644 config/auth-kit.php create mode 100644 config/laranail/authkit.php create mode 100644 tests/Feature/NamingConventionTest.php diff --git a/.gitignore b/.gitignore index 390d138..5539078 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /.vscode laravel-fortify-auth-packages.md .DS_Store +/composer.lock diff --git a/README.md b/README.md index b2b51fe..1ae463c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Laravel Auth Kit +# laranail/authkit Headless authentication for Laravel 13+. No views, routes, or controllers. @@ -17,8 +17,8 @@ PHP 8.4+ / Laravel 13.x ## Installation ```bash -composer require laranail/auth-kit -php artisan vendor:publish --tag=auth-kit-config +composer require laranail/authkit +php artisan vendor:publish --tag=laranail::authkit-config ``` For a ready-made Blade UI, install `laranail/auth-preset` instead. @@ -43,24 +43,24 @@ For a ready-made Blade UI, install `laranail/auth-preset` instead. `.env`: ```env -AUTH_KIT_GUARD=web -AUTH_KIT_RATE_LIMIT_MAX_ATTEMPTS=5 -AUTH_KIT_RATE_LIMIT_DECAY_MINUTES=1 +AUTHKIT_GUARD=web +AUTHKIT_RATE_LIMIT_MAX_ATTEMPTS=5 +AUTHKIT_RATE_LIMIT_DECAY_MINUTES=1 -AUTH_KIT_GOOGLE_CLIENT_ID= -AUTH_KIT_GOOGLE_CLIENT_SECRET= -AUTH_KIT_GOOGLE_REDIRECT=${APP_URL}/auth/google/callback +AUTHKIT_GOOGLE_CLIENT_ID= +AUTHKIT_GOOGLE_CLIENT_SECRET= +AUTHKIT_GOOGLE_REDIRECT=${APP_URL}/auth/google/callback ``` -`config/auth-kit.php`: +`config/laranail/authkit.php`: ```php return [ - 'guard' => env('AUTH_KIT_GUARD', 'web'), + 'guard' => env('AUTHKIT_GUARD', 'web'), 'rate_limit' => [ - 'max_attempts' => (int) env('AUTH_KIT_RATE_LIMIT_MAX_ATTEMPTS', 5), - 'decay_minutes' => (int) env('AUTH_KIT_RATE_LIMIT_DECAY_MINUTES', 1), + 'max_attempts' => (int) env('AUTHKIT_RATE_LIMIT_MAX_ATTEMPTS', 5), + 'decay_minutes' => (int) env('AUTHKIT_RATE_LIMIT_DECAY_MINUTES', 1), ], 'fortify' => [ @@ -70,9 +70,9 @@ return [ 'social' => [ 'google' => [ - 'client_id' => env('AUTH_KIT_GOOGLE_CLIENT_ID'), - 'client_secret' => env('AUTH_KIT_GOOGLE_CLIENT_SECRET'), - 'redirect' => env('AUTH_KIT_GOOGLE_REDIRECT'), + 'client_id' => env('AUTHKIT_GOOGLE_CLIENT_ID'), + 'client_secret' => env('AUTHKIT_GOOGLE_CLIENT_SECRET'), + 'redirect' => env('AUTHKIT_GOOGLE_REDIRECT'), 'scopes' => ['openid', 'profile', 'email'], ], // facebook, twitter, linkedin, paypal ... @@ -80,14 +80,14 @@ return [ ]; ``` -Remove `passkeys` from `auth-kit.fortify.features` to disable Fortify's passkey routes. Auth Kit only enables and configures Fortify; passkey ceremonies, responses, and persistence remain provided by Fortify and `laravel/passkeys`. +Remove `passkeys` from `laranail.authkit.fortify.features` to disable Fortify's passkey routes. Auth Kit only enables and configures Fortify; passkey ceremonies, responses, and persistence remain provided by Fortify and `laravel/passkeys`. ### Security defaults - Two-factor authentication is not enabled by default. MFA is still work in progress. - Social sign-in only provisions or auto-links accounts when Google, LinkedIn, or PayPal supplies a trusted `email_verified` claim. Facebook and X identities can still be linked by an authenticated user, but cannot establish trust through an email-verification claim. - Before production, configure HTTPS, secure session cookies, a working mail transport, and Turnstile keys when bot protection is enabled. -- PayPal uses sandbox mode by default. Set `AUTH_KIT_PAYPAL_SANDBOX_MODE=false` with production PayPal credentials before enabling it in production. +- PayPal uses sandbox mode by default. Set `AUTHKIT_PAYPAL_SANDBOX_MODE=false` with production PayPal credentials before enabling it in production. ## Passkeys @@ -95,7 +95,7 @@ Passkey support uses Fortify's native integration with `laravel/passkeys`. It is ```php use Laravel\Fortify\Contracts\PasskeyUser; -use Simtabi\Laranail\Auth\PasskeyAuthenticatable; +use Simtabi\Laranail\AuthKit\PasskeyAuthenticatable; class User extends Authenticatable implements PasskeyUser { @@ -108,7 +108,7 @@ The published migration stores ownership in `passkeyable_type` and `passkeyable_ Publish Auth Kit's passkeys migration in the consuming application and run it: ```bash -php artisan vendor:publish --tag=auth-kit-passkey-migrations +php artisan vendor:publish --tag=laranail::authkit-passkey-migrations php artisan migrate ``` @@ -206,7 +206,7 @@ Extend these to wire up your own routes. JSON responses are handled automaticall Add to your `User` model: ```php -use Simtabi\Laranail\Auth\Models\Social; +use Simtabi\Laranail\AuthKit\Models\Social; use Illuminate\Database\Eloquent\Relations\MorphMany; public function socials(): MorphMany @@ -218,7 +218,7 @@ public function socials(): MorphMany Publish the migration: ```bash -php artisan vendor:publish --tag=auth-kit-social-migrations +php artisan vendor:publish --tag=laranail::authkit-social-migrations ``` ## Usage diff --git a/composer.json b/composer.json index 099bd05..0b1d4c8 100644 --- a/composer.json +++ b/composer.json @@ -1,8 +1,8 @@ { "$schema": "https://getcomposer.org/schema.json", - "name": "laranail/auth-kit", + "name": "laranail/authkit", "type": "library", - "description": "A publish-first Laravel authentication scaffolding package.", + "description": "Headless Laravel authentication core: actions, contracts, result objects and the REST API.", "keywords": [ "laravel", "authentication", @@ -34,13 +34,13 @@ }, "autoload": { "psr-4": { - "Simtabi\\Laranail\\Auth\\": "src/" + "Simtabi\\Laranail\\AuthKit\\": "src/" } }, "autoload-dev": { "psr-4": { - "Simtabi\\Laranail\\Auth\\Tests\\": "tests/", - "Simtabi\\Laranail\\Auth\\Database\\Factories\\": "database/factories/", + "Simtabi\\Laranail\\AuthKit\\Tests\\": "tests/", + "Simtabi\\Laranail\\AuthKit\\Database\\Factories\\": "database/factories/", "Workbench\\App\\": "workbench/app/", "Workbench\\Database\\Factories\\": "workbench/database/factories/", "Workbench\\Database\\Seeders\\": "workbench/database/seeders/" @@ -49,8 +49,11 @@ "extra": { "laravel": { "providers": [ - "Simtabi\\Laranail\\Auth\\AuthKitServiceProvider" + "Simtabi\\Laranail\\AuthKit\\AuthKitServiceProvider" ] + }, + "branch-alias": { + "dev-main": "0.1.x-dev" } }, "repositories": [ @@ -65,6 +68,14 @@ { "type": "vcs", "url": "https://github.com/laranail/package-tools.git" + }, + { + "type": "vcs", + "url": "https://github.com/laranail/captcha.git" + }, + { + "type": "vcs", + "url": "https://github.com/laranail/db-tools.git" } ], "scripts": { diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 510a794..0000000 --- a/composer.lock +++ /dev/null @@ -1,12045 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "672b098591604aaff3d996544643e12e", - "packages": [ - { - "name": "bacon/bacon-qr-code", - "version": "v3.1.1", - "source": { - "type": "git", - "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2", - "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2", - "shasum": "" - }, - "require": { - "dasprid/enum": "^1.0.3", - "ext-iconv": "*", - "php": "^8.1" - }, - "require-dev": { - "phly/keep-a-changelog": "^2.12", - "phpunit/phpunit": "^10.5.11 || ^11.0.4", - "spatie/phpunit-snapshot-assertions": "^5.1.5", - "spatie/pixelmatch-php": "^1.2.0", - "squizlabs/php_codesniffer": "^3.9" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "type": "library", - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "BaconQrCode is a QR code generator for PHP.", - "homepage": "https://github.com/Bacon/BaconQrCode", - "support": { - "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/v3.1.1" - }, - "time": "2026-04-05T21:06:35+00:00" - }, - { - "name": "brick/math", - "version": "0.18.0", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/82944324d1c1bdb2c2618e89978d4e2ad78d69ad", - "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad", - "shasum": "" - }, - "require": { - "php": "^8.2" - }, - "require-dev": { - "phpstan/phpstan": "2.1.22", - "phpunit/phpunit": "^11.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "bignumber", - "brick", - "decimal", - "integer", - "math", - "mathematics", - "rational" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.18.0" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2026-06-14T18:21:03+00:00" - }, - { - "name": "carbonphp/carbon-doctrine-types", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/dbal": "<4.0.0 || >=5.0.0" - }, - "require-dev": { - "doctrine/dbal": "^4.0.0", - "nesbot/carbon": "^2.71.0 || ^3.0.0", - "phpunit/phpunit": "^10.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "KyleKatarn", - "email": "kylekatarnls@gmail.com" - } - ], - "description": "Types to use Carbon in Doctrine", - "keywords": [ - "carbon", - "date", - "datetime", - "doctrine", - "time" - ], - "support": { - "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], - "time": "2024-02-09T16:56:22+00:00" - }, - { - "name": "dasprid/enum", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/DASPRiD/Enum.git", - "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", - "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", - "shasum": "" - }, - "require": { - "php": ">=7.1 <9.0" - }, - "require-dev": { - "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", - "squizlabs/php_codesniffer": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "PHP 7.1 enum implementation", - "keywords": [ - "enum", - "map" - ], - "support": { - "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" - }, - "time": "2025-09-16T12:23:56+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.3", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" - }, - "time": "2024-07-08T12:26:09+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.6", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<=7.5 || >=14" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^14", - "phpstan/phpstan": "1.4.10 || 2.1.30", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.6" - }, - "time": "2026-02-07T07:09:04+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", - "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0 || ^13.0", - "phpstan/phpstan": "^1.12 || ^2.0", - "phpstan/phpstan-phpunit": "^1.4 || ^2.0", - "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", - "phpunit/phpunit": "^8.5 || ^12.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.1.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2025-08-10T19:31:58+00:00" - }, - { - "name": "doctrine/lexer", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "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" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2024-02-05T11:56:58+00:00" - }, - { - "name": "dragonmantank/cron-expression", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", - "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", - "shasum": "" - }, - "require": { - "php": "^8.2|^8.3|^8.4|^8.5" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.32|^2.1.31", - "phpunit/phpunit": "^8.5.48|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2025-10-31T18:51:33+00:00" - }, - { - "name": "egulias/email-validator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" - }, - "dist": { - "type": "zip", - "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": "firebase/php-jwt", - "version": "v7.1.0", - "source": { - "type": "git", - "url": "https://github.com/googleapis/php-jwt.git", - "reference": "b374a5d1a4f1f67fadc2165cdb284645945e2fc0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/googleapis/php-jwt/zipball/b374a5d1a4f1f67fadc2165cdb284645945e2fc0", - "reference": "b374a5d1a4f1f67fadc2165cdb284645945e2fc0", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.4", - "phpfastcache/phpfastcache": "^9.2", - "phpseclib/phpseclib": "~3.0", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "psr/cache": "^2.0||^3.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0" - }, - "suggest": { - "ext-sodium": "Support EdDSA (Ed25519) signatures", - "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present", - "phpseclib/phpseclib": "Support PS256 (RSASSA-PSS) signatures" - }, - "type": "library", - "autoload": { - "psr-4": { - "Firebase\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" - }, - { - "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" - } - ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/googleapis/php-jwt", - "keywords": [ - "jwt", - "php" - ], - "support": { - "issues": "https://github.com/googleapis/php-jwt/issues", - "source": "https://github.com/googleapis/php-jwt/tree/v7.1.0" - }, - "time": "2026-06-11T17:54:14+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.4.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", - "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", - "shasum": "" - }, - "require": { - "php": "^8.1", - "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" - }, - "require-dev": { - "phpstan/phpstan": "^2", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2025-12-03T09:33:47+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.4", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", - "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.5" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2025-12-27T19:43:20+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.15.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc", - "reference": "ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^2.5.2", - "guzzlehttp/psr7": "^2.13", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/polyfill-php80": "^1.25" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.3", - "guzzlehttp/test-server": "^0.7", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.52 || ^9.6.34", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.15.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2026-08-05T19:48:21+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "2823687acff28b2dbe67b2508a6b300e2c3fa4ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/2823687acff28b2dbe67b2508a6b300e2c3fa4ce", - "reference": "2823687acff28b2dbe67b2508a6b300e2c3fa4ce", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.52 || ^9.6.34" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.5.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2026-08-05T19:30:54+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.13.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dad89620b7a6edb60c15858442eb2e408b45d8f4", - "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4", - "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" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.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" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.13.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2026-07-16T22:23:49+00:00" - }, - { - "name": "guzzlehttp/uri-template", - "version": "v1.0.10", - "source": { - "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "f6c24c21f42b990e9a58912b332d0874df6ba839" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/f6c24c21f42b990e9a58912b332d0874df6ba839", - "reference": "f6c24c21f42b990e9a58912b332d0874df6ba839", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.25" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.52 || ^9.6.34", - "uri-template/tests": "1.0.0" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.10" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2026-07-17T13:53:03+00:00" - }, - { - "name": "laranail/console", - "version": "v0.1.0", - "source": { - "type": "git", - "url": "https://github.com/laranail/console.git", - "reference": "80abd5a834fd8a5570939475fe153e64ab805eb9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laranail/console/zipball/80abd5a834fd8a5570939475fe153e64ab805eb9", - "reference": "80abd5a834fd8a5570939475fe153e64ab805eb9", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "illuminate/console": "^13.0", - "illuminate/contracts": "^13.0", - "illuminate/support": "^13.0", - "laravel/prompts": "^0.3.18|^1.0", - "php": "^8.4.1 || ^8.5", - "symfony/console": "^8.0" - }, - "replace": { - "laranail/console-tools": "*", - "laranail/prompter": "*" - }, - "require-dev": { - "infection/infection": "^0.34", - "larastan/larastan": "^3.0", - "laravel/pint": "^1.18", - "mockery/mockery": "^1.6", - "orchestra/testbench": "^11.0", - "pestphp/pest": "^4.0", - "phpbench/phpbench": "^1.4", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^12.0", - "rector/rector": "^2.0", - "roave/security-advisories": "dev-latest", - "symfony/tui": "^8.2@dev" - }, - "suggest": { - "symfony/tui": "(experimental, PHP >= 8.4.1) Enables the full-screen TUI integration — Console::tui() + Console\\Tui\\RenderableWidget." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.1.x-dev" - }, - "laravel": { - "providers": [ - "Simtabi\\Laranail\\Console\\Providers\\ConsoleServiceProvider" - ], - "aliases": { - "Console": "Simtabi\\Laranail\\Console\\Facades\\Console", - "Prompter": "Simtabi\\Laranail\\Console\\Prompter\\Facades\\PrompterFacade" - } - } - }, - "autoload": { - "psr-4": { - "Simtabi\\Laranail\\Console\\": "src/Console/" - }, - "files": [ - "helpers/helpers.php" - ] - }, - "autoload-dev": { - "psr-4": { - "Simtabi\\Laranail\\Console\\Tools\\Tests\\": "tests/Tools/", - "Simtabi\\Laranail\\Console\\Prompter\\Tests\\": "tests/Prompter/", - "Simtabi\\Laranail\\Console\\Progress\\Tests\\": "tests/Progress/", - "Simtabi\\Laranail\\Console\\Benchmarks\\": "benchmarks/" - } - }, - "scripts": { - "test": [ - "vendor/bin/pest --no-coverage --colors=always" - ], - "bench": [ - "vendor/bin/phpbench run --report=aggregate" - ], - "test-coverage": [ - "vendor/bin/pest --coverage --colors=always" - ], - "test-dirty": [ - "@test --dirty --compact" - ], - "examples": [ - "php examples/tools/widgets.php > /dev/null", - "php examples/tools/design_system.php > /dev/null", - "php examples/tools/colors.php > /dev/null", - "php examples/tools/typography.php > /dev/null", - "php examples/tools/markdown.php > /dev/null", - "php examples/tools/theming.php > /dev/null", - "php examples/tools/barchart.php > /dev/null", - "php examples/tools/charts.php > /dev/null", - "php examples/tools/emoji.php > /dev/null", - "php examples/tools/symbols.php > /dev/null", - "php examples/tools/writing.php > /dev/null 2>&1", - "php examples/tools/interactive.php > /dev/null", - "php examples/tools/menu.php > /dev/null", - "php examples/tools/tui.php > /dev/null", - "php examples/prompter/validators.php > /dev/null" - ], - "lint": [ - "@pint", - "@phpstan", - "@rector" - ], - "pint": [ - "vendor/bin/pint --test" - ], - "pint-fix": [ - "vendor/bin/pint" - ], - "phpstan": [ - "vendor/bin/phpstan analyse --no-progress" - ], - "rector": [ - "vendor/bin/rector process --dry-run" - ], - "rector-fix": [ - "vendor/bin/rector process" - ], - "audit": [ - "@composer-audit" - ], - "composer-audit": [ - "@composer audit" - ] - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Simtabi LLC", - "email": "opensource@simtabi.com", - "homepage": "https://opensource.simtabi.com", - "role": "Organization" - }, - { - "name": "Imani Manyara", - "email": "imani@simtabi.com", - "role": "Maintainer" - } - ], - "description": "A Rich-class console toolkit for Laravel — fluent output formatter, spinners, progress bars, boxes, trees and tables, plus a fluent prompts/forms layer with validators.", - "homepage": "https://opensource.simtabi.com/products/laranail/console", - "keywords": [ - "artisan", - "console", - "formatter", - "forms", - "laranail", - "laravel", - "progress", - "prompts", - "spinner", - "terminal", - "tui" - ], - "support": { - "issues": "https://github.com/laranail/console/issues", - "source": "https://github.com/laranail/console", - "docs": "https://opensource.simtabi.com/documentation/laranail/console/" - }, - "time": "2026-08-15T07:40:05+00:00" - }, - { - "name": "laranail/enumerator", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/laranail/enumerator.git", - "reference": "f98664eed2e09952077d8898b1a837a9bf01df5d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laranail/enumerator/zipball/f98664eed2e09952077d8898b1a837a9bf01df5d", - "reference": "f98664eed2e09952077d8898b1a837a9bf01df5d", - "shasum": "" - }, - "require": { - "illuminate/console": "^13.0", - "illuminate/contracts": "^13.0", - "illuminate/database": "^13.0", - "illuminate/support": "^13.0", - "illuminate/validation": "^13.0", - "illuminate/view": "^13.0", - "php": "^8.3" - }, - "require-dev": { - "infection/infection": "^0.29 || ^0.34", - "larastan/larastan": "~3.10.0", - "laravel/pint": "^1.18", - "livewire/livewire": "^3.5 || ^4.0", - "orchestra/testbench": "^10.0|^11.0", - "pestphp/pest": "^3.0 || ^4.0", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.0", - "rector/rector": "^2.0" - }, - "suggest": { - "filament/filament": "Use the Filament integration (columns, form fields, filters).", - "inertiajs/inertia-laravel": "Use the Inertia transformer for typed SPA responses.", - "laravel/nova": "Use the Nova integration (field, filter).", - "laravel/octane": "Use the Octane module (Modules/Octane) for per-worker reflection-cache warmup.", - "livewire/livewire": "Use the Livewire enum-aware property casts and rule helpers.", - "nuwave/lighthouse": "Use the Lighthouse module (Modules/Lighthouse) for GraphQL scalar registration.", - "rector/rector": "Use the Rector migration rules (src/Rector/) to migrate from BenSampo/Spatie enums to laranail/enumerator.", - "saloonphp/saloon": "Use the Saloon module (Modules/Saloon) to serialize enum instances in API request payloads." - }, - "default-branch": true, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Simtabi\\Laranail\\Enumerator\\EnumeratorServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-main": "0.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Simtabi\\Laranail\\Enumerator\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Simtabi\\Laranail\\Enumerator\\Tests\\": "tests/" - } - }, - "scripts": { - "test": [ - "pest" - ], - "test:coverage": [ - "pest --coverage --min=85" - ], - "analyse": [ - "phpstan analyse" - ], - "format": [ - "pint" - ], - "format:check": [ - "pint --test" - ] - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Simtabi LLC", - "email": "opensource@simtabi.com", - "homepage": "https://simtabi.com", - "role": "Maintainer" - }, - { - "name": "Imani Manyara", - "email": "imani@simtabi.com", - "role": "Lead developer" - } - ], - "description": "The integration-rich Laravel enum toolkit — attributes, state machines, bitmasks, validation, casts, Blade components, and Filament / Livewire / Nova / Inertia integrations. PHP 8.3+, Laravel 13+.", - "homepage": "https://opensource.simtabi.com/products/laranail/enumerator", - "keywords": [ - "bitmask", - "enum", - "enumerator", - "enums", - "filament", - "inertia", - "laranail", - "laravel", - "laravel-13", - "livewire", - "nova", - "php-8.3", - "simtabi", - "state-machine", - "typescript" - ], - "support": { - "email": "opensource@simtabi.com", - "issues": "https://github.com/laranail/enumerator/issues", - "source": "https://github.com/laranail/enumerator", - "docs": "https://opensource.simtabi.com/documentation/laranail/enumerator/" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/simtabi" - }, - { - "type": "custom", - "url": "https://simtabi.com/sponsor" - } - ], - "time": "2026-08-15T07:30:58+00:00" - }, - { - "name": "laranail/package-tools", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/laranail/package-tools.git", - "reference": "c9b7a368584e0752bda65d12fc2e21c795a194bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laranail/package-tools/zipball/c9b7a368584e0752bda65d12fc2e21c795a194bd", - "reference": "c9b7a368584e0752bda65d12fc2e21c795a194bd", - "shasum": "" - }, - "require": { - "illuminate/bus": "^13.0", - "illuminate/console": "^13.0", - "illuminate/contracts": "^13.0", - "illuminate/database": "^13.0", - "illuminate/filesystem": "^13.0", - "illuminate/http": "^13.0", - "illuminate/log": "^13.0", - "illuminate/queue": "^13.0", - "illuminate/support": "^13.0", - "laranail/console": "^0.1", - "php": "^8.4.1 || ^8.5", - "symfony/process": "^8.0" - }, - "require-dev": { - "fakerphp/faker": "^1.23", - "larastan/larastan": "^3.0", - "laravel/pint": "^1.18", - "mockery/mockery": "^1.6", - "orchestra/testbench": "^11.0", - "pestphp/pest": "^3.0", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^11.0", - "rector/rector": "^2.0", - "roave/security-advisories": "dev-latest", - "spatie/pest-plugin-test-time": "^2.2" - }, - "suggest": { - "fakerphp/faker": "Required by the InteractsWithSeedFiles trait's fake() generator (^1.23)." - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.1.x-dev" - }, - "laravel": { - "providers": [ - "Simtabi\\Laranail\\Package\\Tools\\Providers\\PackageToolsServiceProvider" - ], - "aliases": { - "PackageSeeder": "Simtabi\\Laranail\\Package\\Tools\\Facades\\PackageSeeder" - } - } - }, - "autoload": { - "psr-4": { - "Simtabi\\Laranail\\Package\\Tools\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Simtabi\\Laranail\\Package\\Tools\\Tests\\": "tests/" - }, - "classmap": [ - "tests/fixtures/" - ] - }, - "scripts": { - "setup": [ - "bash .scripts/init.sh" - ], - "test": [ - "vendor/bin/pest --colors=always" - ], - "test-coverage": [ - "@test --coverage" - ], - "test-dirty": [ - "@test --dirty --compact" - ], - "lint": [ - "@pint", - "@phpstan", - "@rector", - "@sync-check" - ], - "sync-check": [ - "@php tools/generate-timezone-enum.php --check" - ], - "pint": [ - "vendor/bin/pint --test" - ], - "pint-fix": [ - "vendor/bin/pint" - ], - "phpstan": [ - "vendor/bin/phpstan analyse --no-progress" - ], - "rector": [ - "vendor/bin/rector process --dry-run" - ], - "rector-fix": [ - "vendor/bin/rector process" - ], - "audit": [ - "@composer-audit" - ], - "composer-audit": [ - "@composer audit" - ] - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Simtabi LLC", - "email": "opensource@simtabi.com", - "homepage": "https://opensource.simtabi.com", - "role": "Organization" - }, - { - "name": "Imani Manyara", - "email": "imani@simtabi.com", - "role": "Maintainer" - } - ], - "description": "Runtime base library for building Laravel packages — fluent Package builder + abstract PackageServiceProvider with attribute-driven discovery, package-tools.doctor, and isolation testing.", - "homepage": "https://opensource.simtabi.com/products/laranail/package-tools", - "keywords": [ - "fluent-api", - "laranail", - "laravel", - "package-builder", - "package-tools", - "service-provider" - ], - "support": { - "issues": "https://github.com/laranail/package-tools/issues", - "source": "https://github.com/laranail/package-tools", - "docs": "https://opensource.simtabi.com/documentation/laranail/package-tools/" - }, - "time": "2026-08-15T07:41:08+00:00" - }, - { - "name": "laravel/fortify", - "version": "v1.38.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/fortify.git", - "reference": "c04ca2998631e1816f2e94a78b668f3a59b3962d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/fortify/zipball/c04ca2998631e1816f2e94a78b668f3a59b3962d", - "reference": "c04ca2998631e1816f2e94a78b668f3a59b3962d", - "shasum": "" - }, - "require": { - "bacon/bacon-qr-code": "^3.0", - "ext-json": "*", - "illuminate/console": "^11.0|^12.0|^13.0", - "illuminate/support": "^11.0|^12.0|^13.0", - "laravel/passkeys": "^0.2.0", - "php": "^8.2", - "pragmarx/google2fa": "^9.0" - }, - "require-dev": { - "orchestra/testbench": "^9.15|^10.8|^11.0", - "phpstan/phpstan": "^2.2.6" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Fortify\\FortifyServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Fortify\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Backend controllers and scaffolding for Laravel authentication.", - "keywords": [ - "auth", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/fortify/issues", - "source": "https://github.com/laravel/fortify" - }, - "time": "2026-08-07T14:07:45+00:00" - }, - { - "name": "laravel/framework", - "version": "v13.25.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "ed36fe882bd4eed4e6ff75343cbad8dbda03fdba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ed36fe882bd4eed4e6ff75343cbad8dbda03fdba", - "reference": "ed36fe882bd4eed4e6ff75343cbad8dbda03fdba", - "shasum": "" - }, - "require": { - "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19", - "composer-runtime-api": "^2.2", - "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.4", - "egulias/email-validator": "^4.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-session": "*", - "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8.2", - "guzzlehttp/promises": "^2.0.3", - "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.3.11", - "laravel/serializable-closure": "^2.0.10", - "league/commonmark": "^2.8.1", - "league/flysystem": "^3.25.1", - "league/flysystem-local": "^3.25.1", - "league/uri": "^7.5.1", - "monolog/monolog": "^3.10", - "nesbot/carbon": "^3.8.4", - "nunomaduro/termwind": "^2.0", - "php": "^8.3", - "psr/container": "^1.1.1 || ^2.0.1", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", - "ramsey/uuid": "^4.7", - "symfony/console": "^7.4.0 || ^8.0.0", - "symfony/error-handler": "^7.4.0 || ^8.0.0", - "symfony/finder": "^7.4.0 || ^8.0.0", - "symfony/http-foundation": "^7.4.0 || ^8.0.0", - "symfony/http-kernel": "^7.4.0 || ^8.0.0", - "symfony/mailer": "^7.4.0 || ^8.0.0", - "symfony/mime": "^7.4.0 || ^8.0.0", - "symfony/polyfill-php84": "^1.36", - "symfony/polyfill-php85": "^1.36", - "symfony/polyfill-php86": "^1.36", - "symfony/process": "^7.4.5 || ^8.0.5", - "symfony/routing": "^7.4.0 || ^8.0.0", - "symfony/uid": "^7.4.0 || ^8.0.0", - "symfony/var-dumper": "^7.4.0 || ^8.0.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.6.1", - "voku/portable-ascii": "^2.0.2" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.1 || 2.0", - "psr/log-implementation": "1.0 || 2.0 || 3.0", - "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/concurrency": "self.version", - "illuminate/conditionable": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/image": "self.version", - "illuminate/json-schema": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/process": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/reflection": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "spatie/once": "*" - }, - "require-dev": { - "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.322.9", - "ext-gmp": "*", - "fakerphp/faker": "^1.24", - "guzzlehttp/psr7": "^2.9", - "intervention/image": "^4.0", - "laravel/pint": "^1.18", - "league/flysystem-aws-s3-v3": "^3.25.1", - "league/flysystem-ftp": "^3.25.1", - "league/flysystem-path-prefixing": "^3.25.1", - "league/flysystem-read-only": "^3.25.1", - "league/flysystem-sftp-v3": "^3.25.1", - "mockery/mockery": "^1.6.10", - "opis/json-schema": "^2.4.1", - "orchestra/testbench-core": "^11.0.0", - "pda/pheanstalk": "^7.0.0 || ^8.0.0", - "php-http/discovery": "^1.15", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", - "predis/predis": "^2.3 || ^3.0", - "rector/rector": "^2.3", - "resend/resend-php": "^1.0", - "symfony/cache": "^7.4.0 || ^8.0.0", - "symfony/http-client": "^7.4.0 || ^8.0.0", - "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", - "symfony/translation": "^7.4.0 || ^8.0.0" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", - "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", - "ext-apcu": "Required to use the APC cache driver.", - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", - "ext-pdo": "Required to use all database features.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", - "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "intervention/image": "Required to use the image processing features (^4.0).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", - "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", - "mockery/mockery": "Required to use mocking (^1.6).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", - "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", - "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", - "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "13.0.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/functions.php", - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Filesystem/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Log/functions.php", - "src/Illuminate/Reflection/helpers.php", - "src/Illuminate/Support/functions.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/", - "src/Illuminate/Reflection/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2026-08-11T13:56:22+00:00" - }, - { - "name": "laravel/passkeys", - "version": "v0.2.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/passkeys-server.git", - "reference": "a76656ada41b2b4a591f075eddae5ddc67e8ab9c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/passkeys-server/zipball/a76656ada41b2b4a591f075eddae5ddc67e8ab9c", - "reference": "a76656ada41b2b4a591f075eddae5ddc67e8ab9c", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^11.0|^12.0|^13.0", - "illuminate/database": "^11.0|^12.0|^13.0", - "illuminate/http": "^11.0|^12.0|^13.0", - "illuminate/routing": "^11.0|^12.0|^13.0", - "illuminate/support": "^11.0|^12.0|^13.0", - "php": "^8.2", - "web-auth/webauthn-lib": "5.3.x" - }, - "require-dev": { - "laravel/pint": "^1.28.0", - "orchestra/testbench": "^9.0|^10.0|^11.0", - "pestphp/pest": "^3.0|^4.0", - "phpstan/phpstan": "^2.0", - "rector/rector": "^2.3" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Passkeys\\PasskeysServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Passkeys\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Passwordless authentication using WebAuthn/passkeys for Laravel", - "homepage": "https://github.com/laravel/passkeys-server", - "keywords": [ - "Authentication", - "Passwordless", - "laravel", - "passkeys", - "webauthn" - ], - "support": { - "issues": "https://github.com/laravel/passkeys-server/issues", - "source": "https://github.com/laravel/passkeys-server" - }, - "time": "2026-05-18T16:26:00+00:00" - }, - { - "name": "laravel/prompts", - "version": "v0.3.22", - "source": { - "type": "git", - "url": "https://github.com/laravel/prompts.git", - "reference": "02b89b39e8972a998db4d5d4ad4719239dd4aee4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/02b89b39e8972a998db4d5d4ad4719239dd4aee4", - "reference": "02b89b39e8972a998db4d5d4ad4719239dd4aee4", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "ext-mbstring": "*", - "php": "^8.1", - "symfony/console": "^6.2|^7.0|^8.0" - }, - "conflict": { - "illuminate/console": ">=10.17.0 <10.25.0", - "laravel/framework": ">=10.17.0 <10.25.0" - }, - "require-dev": { - "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", - "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3|^3.4|^4.0", - "phpstan/phpstan": "^1.12.28", - "phpstan/phpstan-mockery": "^1.1.3" - }, - "suggest": { - "ext-pcntl": "Required for the spinner to be animated." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Laravel\\Prompts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Add beautiful and user-friendly forms to your command-line applications.", - "support": { - "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.22" - }, - "time": "2026-08-04T14:50:50+00:00" - }, - { - "name": "laravel/sanctum", - "version": "v4.3.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/sanctum.git", - "reference": "fee27a573d1a013af3721d86153a65e0b11927e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/fee27a573d1a013af3721d86153a65e0b11927e6", - "reference": "fee27a573d1a013af3721d86153a65e0b11927e6", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^11.0|^12.0|^13.0", - "illuminate/contracts": "^11.0|^12.0|^13.0", - "illuminate/database": "^11.0|^12.0|^13.0", - "illuminate/support": "^11.0|^12.0|^13.0", - "php": "^8.2", - "symfony/console": "^7.0|^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.6", - "orchestra/testbench": "^9.15|^10.8|^11.0", - "phpstan/phpstan": "^1.10" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Sanctum\\SanctumServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sanctum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", - "keywords": [ - "auth", - "laravel", - "sanctum" - ], - "support": { - "issues": "https://github.com/laravel/sanctum/issues", - "source": "https://github.com/laravel/sanctum" - }, - "time": "2026-06-23T18:26:55+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v2.0.15", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/dccd8bcb851bb03fcc005df650b708b57cc52661", - "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0|^11.0|^12.0|^13.0", - "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36|^3.0|^4.0", - "phpstan/phpstan": "^2.0", - "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\SerializableClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "nuno@laravel.com" - } - ], - "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], - "support": { - "issues": "https://github.com/laravel/serializable-closure/issues", - "source": "https://github.com/laravel/serializable-closure" - }, - "time": "2026-07-21T16:49:22+00:00" - }, - { - "name": "laravel/socialite", - "version": "v5.29.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/socialite.git", - "reference": "cd343a5841f02292af119ee607edc71300c9ae4f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/cd343a5841f02292af119ee607edc71300c9ae4f", - "reference": "cd343a5841f02292af119ee607edc71300c9ae4f", - "shasum": "" - }, - "require": { - "ext-json": "*", - "firebase/php-jwt": "^6.4|^7.0", - "guzzlehttp/guzzle": "^6.0|^7.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "league/oauth1-client": "^1.11", - "php": "^7.2|^8.0", - "phpseclib/phpseclib": "^3.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^4.18|^5.20|^6.47|^7.55|^8.36|^9.15|^10.8|^11.0", - "phpstan/phpstan": "^1.12.23", - "phpunit/phpunit": "^8.0|^9.3|^10.4|^11.5|^12.0" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Socialite": "Laravel\\Socialite\\Facades\\Socialite" - }, - "providers": [ - "Laravel\\Socialite\\SocialiteServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Socialite\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", - "homepage": "https://laravel.com", - "keywords": [ - "laravel", - "oauth" - ], - "support": { - "issues": "https://github.com/laravel/socialite/issues", - "source": "https://github.com/laravel/socialite" - }, - "time": "2026-07-01T13:50:23+00:00" - }, - { - "name": "league/commonmark", - "version": "2.10.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d2d1aa8b35e072966c89bc0c66cf926e56767dc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d2d1aa8b35e072966c89bc0c66cf926e56767dc4", - "reference": "d2d1aa8b35e072966c89bc0c66cf926e56767dc4", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.31.1", - "commonmark/commonmark.js": "0.31.1", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^2.0.0", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", - "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.11-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2026-08-11T16:06:25+00:00" - }, - { - "name": "league/config", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2022-12-11T20:36:23+00:00" - }, - { - "name": "league/flysystem", - "version": "3.35.2", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "b277b5dc3d56650b68904117124e79c851e12376" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b277b5dc3d56650b68904117124e79c851e12376", - "reference": "b277b5dc3d56650b68904117124e79c851e12376", - "shasum": "" - }, - "require": { - "league/flysystem-local": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "async-aws/core": "<1.19.0", - "async-aws/s3": "<1.14.0", - "aws/aws-sdk-php": "3.209.31 || 3.210.0", - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1", - "phpseclib/phpseclib": "3.0.15", - "symfony/http-client": "<5.2" - }, - "require-dev": { - "async-aws/s3": "^1.5 || ^2.0", - "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.295.10", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "ext-mongodb": "^1.3|^2", - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.5", - "google/cloud-storage": "^1.23", - "guzzlehttp/psr7": "^2.6", - "microsoft/azure-storage-blob": "^1.1", - "mongodb/mongodb": "^1.2|^2", - "phpseclib/phpseclib": "^3.0.36", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "File storage abstraction for PHP", - "keywords": [ - "WebDAV", - "aws", - "cloud", - "file", - "files", - "filesystem", - "filesystems", - "ftp", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.35.2" - }, - "time": "2026-07-06T14:42:07+00:00" - }, - { - "name": "league/flysystem-local", - "version": "3.31.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", - "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/flysystem": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\Local\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Local filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "file", - "files", - "filesystem", - "local" - ], - "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" - }, - "time": "2026-01-23T15:30:45+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.17.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76", - "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2026-07-09T11:49:27+00:00" - }, - { - "name": "league/oauth1-client", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/oauth1-client.git", - "reference": "f9c94b088837eb1aae1ad7c4f23eb65cc6993055" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/f9c94b088837eb1aae1ad7c4f23eb65cc6993055", - "reference": "f9c94b088837eb1aae1ad7c4f23eb65cc6993055", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-openssl": "*", - "guzzlehttp/guzzle": "^6.0|^7.0", - "guzzlehttp/psr7": "^1.7|^2.0", - "php": ">=7.1||>=8.0" - }, - "require-dev": { - "ext-simplexml": "*", - "friendsofphp/php-cs-fixer": "^2.17", - "mockery/mockery": "^1.3.3", - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5||9.5" - }, - "suggest": { - "ext-simplexml": "For decoding XML-based responses." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev", - "dev-develop": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "League\\OAuth1\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Corlett", - "email": "bencorlett@me.com", - "homepage": "http://www.webcomm.com.au", - "role": "Developer" - } - ], - "description": "OAuth 1.0 Client Library", - "keywords": [ - "Authentication", - "SSO", - "authorization", - "bitbucket", - "identity", - "idp", - "oauth", - "oauth1", - "single sign on", - "trello", - "tumblr", - "twitter" - ], - "support": { - "issues": "https://github.com/thephpleague/oauth1-client/issues", - "source": "https://github.com/thephpleague/oauth1-client/tree/v1.11.0" - }, - "time": "2024-12-10T19:59:05+00:00" - }, - { - "name": "league/uri", - "version": "7.8.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", - "shasum": "" - }, - "require": { - "league/uri-interfaces": "^7.8.1", - "php": "^8.1", - "psr/http-factory": "^1" - }, - "conflict": { - "league/uri-schemes": "^1.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-dom": "to convert the URI into an HTML anchor tag", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "ext-uri": "to use the PHP native URI class", - "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", - "league/uri-components": "to provide additional tools to manipulate URI objects components", - "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "URN", - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc2141", - "rfc3986", - "rfc3987", - "rfc6570", - "rfc8141", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "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" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-15T20:22:25+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "7.8.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-message": "^1.1 || ^2.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" - ], - "support": { - "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" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-08T20:05:35+00:00" - }, - { - "name": "monolog/monolog", - "version": "3.10.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8 || ^2.0", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.8", - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^10.5.17 || ^11.0.7", - "predis/predis": "^1.1 || ^2", - "rollbar/rollbar": "^4.0", - "ruflin/elastica": "^7 || ^8", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "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", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.10.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2026-01-02T08:56:05+00:00" - }, - { - "name": "nesbot/carbon", - "version": "3.13.2", - "source": { - "type": "git", - "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "a1c54919f5fff9800cd03c32bd01defd5a4061cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/a1c54919f5fff9800cd03c32bd01defd5a4061cb", - "reference": "a1c54919f5fff9800cd03c32bd01defd5a4061cb", - "shasum": "" - }, - "require": { - "carbonphp/carbon-doctrine-types": "<100.0", - "ext-json": "*", - "php": "^8.1", - "psr/clock": "^1.0", - "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "doctrine/dbal": "^3.6.3 || ^4.0", - "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^v3.87.1", - "kylekatarnls/multi-tester": "^2.5.3", - "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.22", - "phpunit/phpunit": "^10.5.53", - "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev", - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbonphp.github.io/carbon/", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", - "issues": "https://github.com/CarbonPHP/carbon/issues", - "source": "https://github.com/CarbonPHP/carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2026-08-08T11:40:35+00:00" - }, - { - "name": "nette/schema", - "version": "v1.3.5", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", - "shasum": "" - }, - "require": { - "nette/utils": "^4.0", - "php": "8.1 - 8.5" - }, - "require-dev": { - "nette/phpstan-rules": "^1.0", - "nette/tester": "^2.6", - "phpstan/extension-installer": "^1.4@stable", - "phpstan/phpstan": "^2.1.39@stable", - "tracy/tracy": "^2.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Nette\\": "src" - }, - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.5" - }, - "time": "2026-02-23T03:47:12+00:00" - }, - { - "name": "nette/utils", - "version": "v4.1.5", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/b043439dbdf954e6c28b5ea7e34b0100f83165e0", - "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0", - "shasum": "" - }, - "require": { - "php": "8.2 - 8.5" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "^1.2", - "nette/phpstan-rules": "^1.0", - "nette/tester": "^2.5", - "phpstan/extension-installer": "^1.4@stable", - "phpstan/phpstan": "^2.1@stable", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::chr(), ord() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" - } - }, - "autoload": { - "psr-4": { - "Nette\\": "src" - }, - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.1.5" - }, - "time": "2026-07-17T23:02:45+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "712a31b768f5daea284c2169a7d227031001b9a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", - "reference": "712a31b768f5daea284c2169a7d227031001b9a8", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2", - "symfony/console": "^7.4.4 || ^8.0.4" - }, - "require-dev": { - "illuminate/console": "^11.47.0", - "laravel/pint": "^1.27.1", - "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", - "phpstan/phpstan": "^1.12.32", - "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.3.5 || ^8.0.4", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "It's like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2026-02-16T23:10:27+00:00" - }, - { - "name": "paragonie/constant_time_encoding", - "version": "v3.1.3", - "source": { - "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", - "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", - "shasum": "" - }, - "require": { - "php": "^8" - }, - "require-dev": { - "infection/infection": "^0", - "nikic/php-fuzzer": "^0", - "phpunit/phpunit": "^9|^10|^11", - "vimeo/psalm": "^4|^5|^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" - }, - { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" - } - ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" - }, - "time": "2025-09-24T15:06:41+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "shasum": "" - }, - "require": { - "php": ">= 7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "6.0.3", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^2.0", - "phpstan/phpdoc-parser": "^2.0", - "webmozart/assert": "^1.9.1 || ^2" - }, - "require-dev": { - "mockery/mockery": "~1.3.5 || ~1.6.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26", - "shipmonk/dead-code-detector": "^0.5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "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/6.0.3" - }, - "time": "2026-03-18T20:49:53+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" - }, - "time": "2026-01-06T21:53:42+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.5", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2025-12-27T19:41:33+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "3.0.56", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "7adbbe38cde25e2df2116dbf2673c407e24fa305" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7adbbe38cde25e2df2116dbf2673c407e24fa305", - "reference": "7adbbe38cde25e2df2116dbf2673c407e24fa305", - "shasum": "" - }, - "require": { - "paragonie/constant_time_encoding": "^1|^2|^3", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": ">=5.6.1" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-dom": "Install the DOM extension to load XML formatted public keys.", - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib3\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "support": { - "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.56" - }, - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], - "time": "2026-08-03T04:36:50+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "2.3.3", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", - "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3" - }, - "time": "2026-07-08T07:01:06+00:00" - }, - { - "name": "pragmarx/google2fa", - "version": "v9.1.0", - "source": { - "type": "git", - "url": "https://github.com/antonioribeiro/google2fa.git", - "reference": "f00bc788c555adfb6765c437ff3538e59cd88af1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/f00bc788c555adfb6765c437ff3538e59cd88af1", - "reference": "f00bc788c555adfb6765c437ff3538e59cd88af1", - "shasum": "" - }, - "require": { - "paragonie/constant_time_encoding": "^1.0|^2.0|^3.0", - "php": "^7.1|^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.0|^2.0", - "phpstan/phpstan-phpunit": "^1.0|^2.0", - "phpunit/phpunit": "~9|~10|~11|~12|~13", - "psalm/plugin-phpunit": "^0.19|^0.20", - "vimeo/psalm": "^5.26|^6.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "PragmaRX\\Google2FA\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Antonio Carlos Ribeiro", - "email": "acr@antoniocarlosribeiro.com", - "role": "Creator & Designer" - } - ], - "description": "A One Time Password Authentication package, compatible with Google Authenticator.", - "keywords": [ - "2fa", - "Authentication", - "MFA", - "Two Factor Authentication", - "google-authenticator", - "google2fa", - "hotp", - "otp", - "rfc4226", - "rfc6238", - "totp" - ], - "support": { - "docs": "https://github.com/antonioribeiro/google2fa#readme", - "issues": "https://github.com/antonioribeiro/google2fa/issues", - "security": "https://github.com/antonioribeiro/google2fa/security/policy", - "source": "https://github.com/antonioribeiro/google2fa" - }, - "time": "2026-08-15T13:22:01+00:00" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+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": "ramsey/collection", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.45", - "fakerphp/faker": "^1.24", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^2.1", - "mockery/mockery": "^1.6", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.4", - "phpspec/prophecy-phpunit": "^2.3", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^10.5", - "ramsey/coding-standard": "^2.3", - "ramsey/conventional-commits": "^1.6", - "roave/security-advisories": "dev-latest" - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.1.1" - }, - "time": "2025-03-22T05:38:12+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.9.3", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/1df15849d00943a67d677dc9cfd80795f038c9f8", - "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8", - "shasum": "" - }, - "require": { - "brick/math": ">=0.8.16 <=0.18", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.25", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^1.0", - "ergebnis/composer-normalize": "^2.47", - "mockery/mockery": "^1.6", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.6", - "php-mock/php-mock-mockery": "^1.5", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpbench/phpbench": "^1.2.14", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.6", - "slevomat/coding-standard": "^8.18", - "squizlabs/php_codesniffer": "^3.13" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.3" - }, - "time": "2026-06-18T03:57:49+00:00" - }, - { - "name": "socialiteproviders/manager", - "version": "4.10.0", - "source": { - "type": "git", - "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "65ad770276875682e246e5435566146bf0baebf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/65ad770276875682e246e5435566146bf0baebf2", - "reference": "65ad770276875682e246e5435566146bf0baebf2", - "shasum": "" - }, - "require": { - "illuminate/support": "^12.0 || ^13.0", - "laravel/socialite": "^5.29", - "php": "^8.3" - }, - "require-dev": { - "mockery/mockery": "^1.6", - "phpunit/phpunit": "^12.5" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "SocialiteProviders\\Manager\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "SocialiteProviders\\Manager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andy Wendt", - "email": "andy@awendt.com" - }, - { - "name": "Anton Komarev", - "email": "a.komarev@cybercog.su" - }, - { - "name": "Miguel Piedrafita", - "email": "soy@miguelpiedrafita.com" - }, - { - "name": "atymic", - "email": "atymicq@gmail.com", - "homepage": "https://atymic.dev" - } - ], - "description": "Easily add new or override built-in providers in Laravel Socialite.", - "homepage": "https://socialiteproviders.com", - "keywords": [ - "laravel", - "manager", - "oauth", - "providers", - "socialite" - ], - "support": { - "issues": "https://github.com/socialiteproviders/manager/issues", - "source": "https://github.com/socialiteproviders/manager" - }, - "time": "2026-08-16T00:16:22+00:00" - }, - { - "name": "spomky-labs/cbor-php", - "version": "3.3.0", - "source": { - "type": "git", - "url": "https://github.com/Spomky-Labs/cbor-php.git", - "reference": "013d13da69cf28b1ae501887daceccc850ca1c76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/013d13da69cf28b1ae501887daceccc850ca1c76", - "reference": "013d13da69cf28b1ae501887daceccc850ca1c76", - "shasum": "" - }, - "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18", - "ext-mbstring": "*", - "php": ">=8.0" - }, - "require-dev": { - "ext-json": "*", - "roave/security-advisories": "dev-latest", - "symfony/error-handler": "^6.4|^7.1|^8.0", - "symfony/var-dumper": "^6.4|^7.1|^8.0" - }, - "suggest": { - "ext-bcmath": "GMP or BCMath extensions will drastically improve the library performance. BCMath extension needed to handle the Big Float and Decimal Fraction Tags", - "ext-gmp": "GMP or BCMath extensions will drastically improve the library performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "CBOR\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/Spomky-Labs/cbor-php/contributors" - } - ], - "description": "CBOR Encoder/Decoder for PHP", - "keywords": [ - "Concise Binary Object Representation", - "RFC7049", - "cbor" - ], - "support": { - "issues": "https://github.com/Spomky-Labs/cbor-php/issues", - "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.3.0" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2026-07-15T18:56:27+00:00" - }, - { - "name": "spomky-labs/pki-framework", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/Spomky-Labs/pki-framework.git", - "reference": "80778a25426288acd2e3a7cde2def41a3d59cddf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/80778a25426288acd2e3a7cde2def41a3d59cddf", - "reference": "80778a25426288acd2e3a7cde2def41a3d59cddf", - "shasum": "" - }, - "require": { - "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18|^0.19", - "ext-mbstring": "*", - "php": ">=8.1" - }, - "require-dev": { - "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", - "ext-gmp": "*", - "ext-openssl": "*", - "infection/infection": "^0.28|^0.29|^0.31", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.3|^2.0", - "phpstan/phpstan": "^1.8|^2.0", - "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", - "phpstan/phpstan-phpunit": "^1.1|^2.0", - "phpstan/phpstan-strict-rules": "^1.3|^2.0", - "phpunit/phpunit": "^10.1|^11.0|^12.0", - "rector/rector": "^1.0|^2.0", - "roave/security-advisories": "dev-latest", - "symfony/string": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0", - "symplify/easy-coding-standard": "^12.0 || ^13.0" - }, - "suggest": { - "ext-bcmath": "For better performance (or GMP)", - "ext-gmp": "For better performance (or BCMath)", - "ext-openssl": "For OpenSSL based cyphering" - }, - "type": "library", - "autoload": { - "psr-4": { - "SpomkyLabs\\Pki\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joni Eskelinen", - "email": "jonieske@gmail.com", - "role": "Original developer" - }, - { - "name": "Florent Morselli", - "email": "florent.morselli@spomky-labs.com", - "role": "Spomky-Labs PKI Framework developer" - } - ], - "description": "A PHP framework for managing Public Key Infrastructures. It comprises X.509 public key certificates, attribute certificates, certification requests and certification path validation.", - "homepage": "https://github.com/spomky-labs/pki-framework", - "keywords": [ - "DER", - "Private Key", - "ac", - "algorithm identifier", - "asn.1", - "asn1", - "attribute certificate", - "certificate", - "certification request", - "cryptography", - "csr", - "decrypt", - "ec", - "encrypt", - "pem", - "pkcs", - "public key", - "rsa", - "sign", - "signature", - "verify", - "x.509", - "x.690", - "x509", - "x690" - ], - "support": { - "issues": "https://github.com/Spomky-Labs/pki-framework/issues", - "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.6.0" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2026-08-06T16:21:11+00:00" - }, - { - "name": "symfony/clock", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/clock.git", - "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/701ef4de9705d6c32292ebee5e8044094a09fbf6", - "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "psr/clock": "^1.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/now.php" - ], - "psr-4": { - "Symfony\\Component\\Clock\\": "" - }, - "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": "Decouples applications from the system clock", - "homepage": "https://symfony.com", - "keywords": [ - "clock", - "psr20", - "time" - ], - "support": { - "source": "https://github.com/symfony/clock/tree/v8.1.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-05-29T05:06:50+00:00" - }, - { - "name": "symfony/console", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "68efa2ebfd9a362951eb5a8b09fd177c66ddec24" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/68efa2ebfd9a362951eb5a8b09fd177c66ddec24", - "reference": "68efa2ebfd9a362951eb5a8b09fd177c66ddec24", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php85": "^1.32", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.4.6|^8.0.6" - }, - "conflict": { - "symfony/dependency-injection": "<8.1", - "symfony/event-dispatcher": "<8.1" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^8.1", - "symfony/event-dispatcher": "^8.1", - "symfony/filesystem": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/lock": "^7.4|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/mime": "^7.4|^8.0", - "symfony/process": "^7.4|^8.0", - "symfony/stopwatch": "^7.4|^8.0", - "symfony/uid": "^7.4|^8.0", - "symfony/validator": "^7.4|^8.0", - "symfony/var-dumper": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v8.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-07-31T12:43:13+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "dc0e2be45c9b5588c82414f02ac574b4b986abcd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/dc0e2be45c9b5588c82414f02ac574b4b986abcd", - "reference": "dc0e2be45c9b5588c82414f02ac574b4b986abcd", - "shasum": "" - }, - "require": { - "php": ">=8.4.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v8.1.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-05-29T05:06:50+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.7.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", - "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "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": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-06-05T06:23:12+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v8.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "dc98404be5e8c949815e23fee1928f5de4f3f5d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/dc98404be5e8c949815e23fee1928f5de4f3f5d3", - "reference": "dc98404be5e8c949815e23fee1928f5de4f3f5d3", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "psr/log": "^1|^2|^3", - "symfony/polyfill-php85": "^1.32", - "symfony/var-dumper": "^7.4|^8.0" - }, - "conflict": { - "symfony/deprecation-contracts": "<2.5" - }, - "require-dev": { - "symfony/console": "^7.4|^8.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/serializer": "^7.4|^8.0", - "symfony/webpack-encore-bundle": "^1.0|^2.0" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "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 tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v8.1.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-07-22T15:42:13+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v8.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "c14c05a9e6da7f5e375e6efc28952c7e7dbddffb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c14c05a9e6da7f5e375e6efc28952c7e7dbddffb", - "reference": "c14c05a9e6da7f5e375e6efc28952c7e7dbddffb", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/security-http": "<7.4", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/error-handler": "^7.4|^8.0", - "symfony/expression-language": "^7.4|^8.0", - "symfony/framework-bundle": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "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 tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.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-07-22T15:42:13+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.7.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c7de7a00ffb67842132da02ea92988a39ccd9f4e", - "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "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": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-06-05T06:23:12+00:00" - }, - { - "name": "symfony/finder", - "version": "v8.1.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e2989e762c70f9490fa3a00a0ac0fae5aa97a531", - "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531", - "shasum": "" - }, - "require": { - "php": ">=8.4.1" - }, - "require-dev": { - "symfony/filesystem": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "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": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v8.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-06-27T09:05:56+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "57e712b75f2d0bc8844edbdb18a81dab6f9d55c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/57e712b75f2d0bc8844edbdb18a81dab6f9d55c2", - "reference": "57e712b75f2d0bc8844edbdb18a81dab6f9d55c2", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "^1.1" - }, - "conflict": { - "doctrine/dbal": "<4.3" - }, - "require-dev": { - "doctrine/dbal": "^4.3", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^7.4|^8.0", - "symfony/clock": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/expression-language": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/mime": "^7.4|^8.0", - "symfony/rate-limiter": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "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": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v8.1.4" - }, - "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-08-07T15:02:39+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "69d81d8a5dac32a5d94e4eb063b7d97dc42c792a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/69d81d8a5dac32a5d94e4eb063b7d97dc42c792a", - "reference": "69d81d8a5dac32a5d94e4eb063b7d97dc42c792a", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^7.4|^8.0", - "symfony/event-dispatcher": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/dependency-injection": "<8.1", - "symfony/flex": "<2.10", - "symfony/http-client-contracts": "<2.5", - "symfony/serializer": "<7.4.15|>=8.0,<8.0.15|>=8.1,<8.1.2", - "symfony/translation-contracts": "<2.5", - "symfony/var-dumper": "<8.1", - "symfony/web-profiler-bundle": "<8.1", - "twig/twig": "<3.21" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^7.4|^8.0", - "symfony/clock": "^7.4|^8.0", - "symfony/config": "^7.4|^8.0", - "symfony/console": "^7.4|^8.0", - "symfony/css-selector": "^7.4|^8.0", - "symfony/dependency-injection": "^8.1", - "symfony/dom-crawler": "^7.4|^8.0", - "symfony/expression-language": "^7.4|^8.0", - "symfony/finder": "^7.4|^8.0", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^7.4|^8.0", - "symfony/property-access": "^7.4|^8.0", - "symfony/rate-limiter": "^7.4|^8.0", - "symfony/routing": "^7.4|^8.0", - "symfony/serializer": "^7.4|^8.0", - "symfony/stopwatch": "^7.4|^8.0", - "symfony/translation": "^7.4|^8.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^7.4|^8.0", - "symfony/validator": "^7.4|^8.0", - "symfony/var-dumper": "^8.1", - "symfony/var-exporter": "^7.4|^8.0", - "twig/twig": "^3.21|^4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "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 a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v8.1.4" - }, - "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-08-07T18:04:54+00:00" - }, - { - "name": "symfony/mailer", - "version": "v8.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "221c7f326ace1ac2baee8331d829d5b7f04f4d53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/221c7f326ace1ac2baee8331d829d5b7f04f4d53", - "reference": "221c7f326ace1ac2baee8331d829d5b7f04f4d53", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.4.1", - "psr/event-dispatcher": "^1", - "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^7.4|^8.0", - "symfony/mime": "^7.4|^8.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/http-client-contracts": "<2.5" - }, - "require-dev": { - "symfony/console": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/twig-bridge": "^7.4|^8.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/v8.1.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-07-28T07:35:25+00:00" - }, - { - "name": "symfony/mime", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "8f8ac859d369fe3d18e3837998b1c992bbee92c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/8f8ac859d369fe3d18e3837998b1c992bbee92c9", - "reference": "8f8ac859d369fe3d18e3837998b1c992bbee92c9", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<5.2|>=7", - "phpdocumentor/type-resolver": "<1.5.1" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^5.2|^6.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/process": "^7.4|^8.0", - "symfony/property-access": "^7.4|^8.0", - "symfony/property-info": "^7.4|^8.0", - "symfony/serializer": "^7.4|^8.0" - }, - "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/v8.1.4" - }, - "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-08-07T15:02:39+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.37.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T16:19:22+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", - "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "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 grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.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-07-28T08:25:59+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.38.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "dc21118016c039a66235cf93d96b435ffb282412" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412", - "reference": "dc21118016c039a66235cf93d96b435ffb282412", - "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.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-25T15:22:23+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.38.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "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 intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.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-05-25T13:48:31+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.38.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-27T06:59:30+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.37.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T16:19:22+00:00" - }, - { - "name": "symfony/polyfill-php84", - "version": "v1.38.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-26T12:51:13+00:00" - }, - { - "name": "symfony/polyfill-php85", - "version": "v1.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a", - "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a", - "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.41.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-07-01T12:47:55+00:00" - }, - { - "name": "symfony/polyfill-php86", - "version": "v1.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php86.git", - "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/6bc356ed3d8dbfeea8f0de235e34d670704e880e", - "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e", - "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.41.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-07-02T13:42:24+00:00" - }, - { - "name": "symfony/polyfill-uuid", - "version": "v1.37.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-uuid": "*" - }, - "suggest": { - "ext-uuid": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for uuid functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T16:19:22+00:00" - }, - { - "name": "symfony/process", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", - "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", - "shasum": "" - }, - "require": { - "php": ">=8.4.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "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": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v8.1.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-05-29T05:06:50+00:00" - }, - { - "name": "symfony/property-access", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "1a41232c678972b93ce499a504e19ea09dfcd0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/1a41232c678972b93ce499a504e19ea09dfcd0b2", - "reference": "1a41232c678972b93ce499a504e19ea09dfcd0b2", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/property-info": "^7.4.4|^8.0.4" - }, - "require-dev": { - "symfony/cache": "^7.4|^8.0", - "symfony/var-exporter": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "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 functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property-path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v8.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-07-30T12:40:56+00:00" - }, - { - "name": "symfony/property-info", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-info.git", - "reference": "d3b1ba3e69dd9fbfff3e00416d2fc60c600c599d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/d3b1ba3e69dd9fbfff3e00416d2fc60c600c599d", - "reference": "d3b1ba3e69dd9fbfff3e00416d2fc60c600c599d", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/string": "^7.4|^8.0", - "symfony/type-info": "^7.4.7|^8.0.7" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<5.2|>=7", - "phpdocumentor/type-resolver": "<1.5.1" - }, - "require-dev": { - "phpdocumentor/reflection-docblock": "^5.2|^6.0", - "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/serializer": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts information about PHP class' properties using metadata of popular sources", - "homepage": "https://symfony.com", - "keywords": [ - "doctrine", - "phpdoc", - "property", - "symfony", - "type", - "validator" - ], - "support": { - "source": "https://github.com/symfony/property-info/tree/v8.1.4" - }, - "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-08-07T15:02:39+00:00" - }, - { - "name": "symfony/routing", - "version": "v8.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "1058d4e13bb81dd9a6f7565686df7e13b880cdbd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1058d4e13bb81dd9a6f7565686df7e13b880cdbd", - "reference": "1058d4e13bb81dd9a6f7565686df7e13b880cdbd", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/expression-language": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/yaml": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "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": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v8.1.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-07-22T15:42:13+00:00" - }, - { - "name": "symfony/serializer", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "ec3ae778e49a4cee5b937a779056fa23c3e834fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/ec3ae778e49a4cee5b937a779056fa23c3e834fb", - "reference": "ec3ae778e49a4cee5b937a779056fa23c3e834fb", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<5.2|>=7", - "phpdocumentor/type-resolver": "<1.5.1", - "symfony/property-access": "<8.1", - "symfony/property-info": "<7.4.15", - "symfony/type-info": "<7.4" - }, - "require-dev": { - "phpdocumentor/reflection-docblock": "^5.2|^6.0", - "phpstan/phpdoc-parser": "^1.0|^2.0", - "seld/jsonlint": "^1.10", - "symfony/cache": "^7.4|^8.0", - "symfony/config": "^7.4|^8.0", - "symfony/console": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/error-handler": "^7.4|^8.0", - "symfony/filesystem": "^7.4|^8.0", - "symfony/form": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/mime": "^7.4|^8.0", - "symfony/property-access": "^8.1", - "symfony/property-info": "^7.4.15|~8.0.15|^8.1.2", - "symfony/translation-contracts": "^2.5|^3", - "symfony/type-info": "^7.4|^8.0", - "symfony/uid": "^7.4|^8.0", - "symfony/validator": "^7.4|^8.0", - "symfony/var-dumper": "^7.4|^8.0", - "symfony/var-exporter": "^7.4|^8.0", - "symfony/yaml": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Serializer\\": "" - }, - "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": "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/v8.1.4" - }, - "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-08-06T09:53:08+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.7.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "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": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-06-16T09:55:08+00:00" - }, - { - "name": "symfony/string", - "version": "v8.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc", - "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-intl-grapheme": "^1.33", - "symfony/polyfill-intl-normalizer": "^1.0", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/emoji": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v8.1.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-07-28T07:35:25+00:00" - }, - { - "name": "symfony/translation", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "c0955eb4aa417a110e65c8162237b8a5c7d910bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/c0955eb4aa417a110e65c8162237b8a5c7d910bf", - "reference": "c0955eb4aa417a110e65c8162237b8a5c7d910bf", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation-contracts": "^3.6.1" - }, - "conflict": { - "nikic/php-parser": "<5.0", - "symfony/http-client-contracts": "<2.5", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/console": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/finder": "^7.4|^8.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^7.4|^8.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "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 tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v8.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-07-30T12:40:56+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.7.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/ccb206b98faccc511ebae8e5fad50f2dc0b30621", - "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "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": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.7.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-06-05T06:23:12+00:00" - }, - { - "name": "symfony/type-info", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/type-info.git", - "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7", - "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "psr/container": "^1.1|^2.0" - }, - "conflict": { - "phpstan/phpdoc-parser": "<1.30" - }, - "require-dev": { - "phpstan/phpdoc-parser": "^1.30|^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\TypeInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mathias Arlaud", - "email": "mathias.arlaud@gmail.com" - }, - { - "name": "Baptiste LEDUC", - "email": "baptiste.leduc@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts PHP types information.", - "homepage": "https://symfony.com", - "keywords": [ - "PHPStan", - "phpdoc", - "symfony", - "type" - ], - "support": { - "source": "https://github.com/symfony/type-info/tree/v8.1.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-05-29T05:06:50+00:00" - }, - { - "name": "symfony/uid", - "version": "v8.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/uid.git", - "reference": "50e98f8bc4c3fcdaf925545a65150fb42cf0caf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/50e98f8bc4c3fcdaf925545a65150fb42cf0caf2", - "reference": "50e98f8bc4c3fcdaf925545a65150fb42cf0caf2", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-uuid": "^1.15" - }, - "require-dev": { - "symfony/console": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Uid\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to generate and represent UIDs", - "homepage": "https://symfony.com", - "keywords": [ - "UID", - "ulid", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/uid/tree/v8.1.4" - }, - "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-08-02T11:29:46+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v8.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "865103cf742a039f34645b971fc3ace308d6c167" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/865103cf742a039f34645b971fc3ace308d6c167", - "reference": "865103cf742a039f34645b971fc3ace308d6c167", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "symfony/console": "<7.4", - "symfony/error-handler": "<7.4" - }, - "require-dev": { - "symfony/console": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/process": "^7.4|^8.0", - "symfony/uid": "^7.4|^8.0", - "twig/twig": "^3.12|^4.0" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v8.1.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-07-22T15:42:13+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", - "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^7.4 || ^8.0", - "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^8.5.21 || ^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" - }, - "time": "2025-12-02T11:56:42+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.6.4", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b", - "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.4", - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.5", - "symfony/polyfill-ctype": "^1.26", - "symfony/polyfill-mbstring": "^1.26", - "symfony/polyfill-php80": "^1.26" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-filter": "*", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "5.6-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2026-07-06T19:11:50+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "8e1051fe39379367aecf014f41744ce7539a856f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f", - "reference": "8e1051fe39379367aecf014f41744ce7539a856f", - "shasum": "" - }, - "require": { - "php": ">=7.1.0" - }, - "require-dev": { - "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.1.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2026-04-26T05:33:54+00:00" - }, - { - "name": "web-auth/cose-lib", - "version": "4.6.0", - "source": { - "type": "git", - "url": "https://github.com/web-auth/cose-lib.git", - "reference": "3afe04df137baf97c5c3e28c5ee6f05536405148" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/3afe04df137baf97c5c3e28c5ee6f05536405148", - "reference": "3afe04df137baf97c5c3e28c5ee6f05536405148", - "shasum": "" - }, - "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18", - "ext-json": "*", - "ext-openssl": "*", - "php": ">=8.1", - "spomky-labs/pki-framework": "^1.0" - }, - "require-dev": { - "spomky-labs/cbor-php": "^3.2.2" - }, - "suggest": { - "ext-bcmath": "For better performance, please install either GMP (recommended) or BCMath extension", - "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension", - "spomky-labs/cbor-php": "For COSE Signature support" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cose\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/web-auth/cose/contributors" - } - ], - "description": "CBOR Object Signing and Encryption (COSE) For PHP", - "homepage": "https://github.com/web-auth", - "keywords": [ - "COSE", - "RFC8152" - ], - "support": { - "issues": "https://github.com/web-auth/cose-lib/issues", - "source": "https://github.com/web-auth/cose-lib/tree/4.6.0" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2026-07-16T10:19:49+00:00" - }, - { - "name": "web-auth/webauthn-lib", - "version": "5.3.5", - "source": { - "type": "git", - "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "9e0986d999f4102e24ac8a598d3a80d98b56c19f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/9e0986d999f4102e24ac8a598d3a80d98b56c19f", - "reference": "9e0986d999f4102e24ac8a598d3a80d98b56c19f", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-openssl": "*", - "paragonie/constant_time_encoding": "^2.6|^3.0", - "php": ">=8.2", - "phpdocumentor/reflection-docblock": "^5.3|^6.0", - "psr/clock": "^1.0", - "psr/event-dispatcher": "^1.0", - "psr/log": "^1.0|^2.0|^3.0", - "spomky-labs/cbor-php": "^3.0", - "spomky-labs/pki-framework": "^1.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/deprecation-contracts": "^3.2", - "symfony/property-access": "^6.4|^7.0|^8.0", - "symfony/property-info": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4|^7.0|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", - "web-auth/cose-lib": "^4.2.3" - }, - "suggest": { - "psr/log-implementation": "Recommended to receive logs from the library", - "symfony/event-dispatcher": "Recommended to use dispatched events", - "web-token/jwt-library": "Mandatory for fetching Metadata Statement from distant sources" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/web-auth/webauthn-framework", - "name": "web-auth/webauthn-framework" - } - }, - "autoload": { - "psr-4": { - "Webauthn\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/web-auth/webauthn-library/contributors" - } - ], - "description": "FIDO2/Webauthn Support For PHP", - "homepage": "https://github.com/web-auth", - "keywords": [ - "FIDO2", - "fido", - "webauthn" - ], - "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.5" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2026-05-31T15:00:08+00:00" - }, - { - "name": "webmozart/assert", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-date": "*", - "ext-filter": "*", - "php": "^8.2" - }, - "suggest": { - "ext-intl": "", - "ext-simplexml": "", - "ext-spl": "" - }, - "type": "library", - "extra": { - "psalm": { - "pluginClass": "Webmozart\\Assert\\PsalmPlugin" - }, - "branch-alias": { - "dev-master": "2.0-dev", - "dev-feature/2-0": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Woody Gilk", - "email": "woody.gilk@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.4.1" - }, - "time": "2026-06-15T15:31:57+00:00" - } - ], - "packages-dev": [ - { - "name": "brianium/paratest", - "version": "v7.20.0", - "source": { - "type": "git", - "url": "https://github.com/paratestphp/paratest.git", - "reference": "81c80677c9ec0ed4ef16b246167f11dec81a6e3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/81c80677c9ec0ed4ef16b246167f11dec81a6e3d", - "reference": "81c80677c9ec0ed4ef16b246167f11dec81a6e3d", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-simplexml": "*", - "fidry/cpu-core-counter": "^1.3.0", - "jean85/pretty-package-versions": "^2.1.1", - "php": "~8.3.0 || ~8.4.0 || ~8.5.0", - "phpunit/php-code-coverage": "^12.5.3 || ^13.0.1", - "phpunit/php-file-iterator": "^6.0.1 || ^7", - "phpunit/php-timer": "^8 || ^9", - "phpunit/phpunit": "^12.5.14 || ^13.0.5", - "sebastian/environment": "^8.0.3 || ^9", - "symfony/console": "^7.4.7 || ^8.0.7", - "symfony/process": "^7.4.5 || ^8.0.5" - }, - "require-dev": { - "doctrine/coding-standard": "^14.0.0", - "ext-pcntl": "*", - "ext-pcov": "*", - "ext-posix": "*", - "phpstan/phpstan": "^2.1.44", - "phpstan/phpstan-deprecation-rules": "^2.0.4", - "phpstan/phpstan-phpunit": "^2.0.16", - "phpstan/phpstan-strict-rules": "^2.0.10", - "symfony/filesystem": "^7.4.6 || ^8.0.6" - }, - "bin": [ - "bin/paratest", - "bin/paratest_for_phpstorm" - ], - "type": "library", - "autoload": { - "psr-4": { - "ParaTest\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "role": "Developer" - }, - { - "name": "Filippo Tessarotto", - "email": "zoeslam@gmail.com", - "role": "Developer" - } - ], - "description": "Parallel testing for PHP", - "homepage": "https://github.com/paratestphp/paratest", - "keywords": [ - "concurrent", - "parallel", - "phpunit", - "testing" - ], - "support": { - "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.20.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/Slamdunk", - "type": "github" - }, - { - "url": "https://paypal.me/filippotessarotto", - "type": "paypal" - } - ], - "time": "2026-03-29T15:46:14+00:00" - }, - { - "name": "composer/pcre", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", - "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<2.2.2" - }, - "require-dev": { - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^9" - }, - "type": "library", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.4.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - } - ], - "time": "2026-06-07T11:47:49+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" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - } - ], - "time": "2025-08-20T19:15:30+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" - }, - "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-05-06T16:37:16+00:00" - }, - { - "name": "fakerphp/faker", - "version": "v1.24.1", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", - "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" - }, - "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "type": "library", - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" - }, - "time": "2024-11-21T13:46:39+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-deprecation-rules": "^2.0.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2025-08-14T07:29:31+00:00" - }, - { - "name": "filp/whoops", - "version": "2.18.4", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.4" - }, - "funding": [ - { - "url": "https://github.com/denis-sokolov", - "type": "github" - } - ], - "time": "2025-08-08T12:00:00+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b61cd040da1a4925bc90a51c074f5297e7c0fa52", - "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-dom": "*", - "php": "^7.4|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v3.0.0" - }, - "time": "2026-03-17T11:56:53+00:00" - }, - { - "name": "jean85/pretty-package-versions", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", - "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.1.0", - "php": "^7.4|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^7.5|^8.5|^9.6", - "rector/rector": "^2.0", - "vimeo/psalm": "^4.3 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" - }, - "time": "2025-03-19T14:43:43+00:00" - }, - { - "name": "laravel/pail", - "version": "v1.2.7", - "source": { - "type": "git", - "url": "https://github.com/laravel/pail.git", - "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", - "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "illuminate/console": "^10.24|^11.0|^12.0|^13.0", - "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", - "illuminate/log": "^10.24|^11.0|^12.0|^13.0", - "illuminate/process": "^10.24|^11.0|^12.0|^13.0", - "illuminate/support": "^10.24|^11.0|^12.0|^13.0", - "nunomaduro/termwind": "^1.15|^2.0", - "php": "^8.2", - "symfony/console": "^6.0|^7.0|^8.0" - }, - "require-dev": { - "laravel/framework": "^10.24|^11.0|^12.0|^13.0", - "laravel/pint": "^1.13", - "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", - "pestphp/pest": "^2.20|^3.0|^4.0", - "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", - "phpstan/phpstan": "^1.12.27", - "symfony/var-dumper": "^6.3|^7.0|^8.0", - "symfony/yaml": "^6.3|^7.0|^8.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Pail\\PailServiceProvider" - ] - }, - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Pail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Easily delve into your Laravel application's log files directly from the command line.", - "homepage": "https://github.com/laravel/pail", - "keywords": [ - "dev", - "laravel", - "logs", - "php", - "tail" - ], - "support": { - "issues": "https://github.com/laravel/pail/issues", - "source": "https://github.com/laravel/pail" - }, - "time": "2026-05-20T22:24:57+00:00" - }, - { - "name": "laravel/pint", - "version": "v1.30.5", - "source": { - "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "fe4148c503a0e266353d61396b79bbf7f35122df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/fe4148c503a0e266353d61396b79bbf7f35122df", - "reference": "fe4148c503a0e266353d61396b79bbf7f35122df", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": "^8.3.0" - }, - "require-dev": { - "composer/semver": "^3.4.4", - "friendsofphp/php-cs-fixer": "^3.95.18", - "illuminate/view": "^13.24.0", - "larastan/larastan": "^3.10.0", - "laravel-zero/framework": "^13.0.0", - "laravel/agent-detector": "^2.0.2", - "laravel/prompts": "^0.3.22", - "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.4.0", - "pestphp/pest": "^4.7.8" - }, - "bin": [ - "builds/pint" - ], - "type": "project", - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Seeders\\": "database/seeders/", - "Database\\Factories\\": "database/factories/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "An opinionated code formatter for PHP.", - "homepage": "https://laravel.com", - "keywords": [ - "dev", - "format", - "formatter", - "lint", - "linter", - "php" - ], - "support": { - "issues": "https://github.com/laravel/pint/issues", - "source": "https://github.com/laravel/pint" - }, - "time": "2026-08-10T15:35:50+00:00" - }, - { - "name": "laravel/tinker", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "4faba77764bd33411735936acdf30446d058c78b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", - "reference": "4faba77764bd33411735936acdf30446d058c78b", - "shasum": "" - }, - "require": { - "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "php": "^8.1", - "psy/psysh": "^0.12.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" - }, - "require-dev": { - "mockery/mockery": "~1.3.3|^1.4.2", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5|^11.5" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], - "support": { - "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v3.0.2" - }, - "time": "2026-03-17T14:54:13+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.6.13", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "9cb54414cdcd2ec5ca292e7ba19dba3a3444885d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/9cb54414cdcd2ec5ca292e7ba19dba3a3444885d", - "reference": "9cb54414cdcd2ec5ca292e7ba19dba3a3444885d", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0 || ^3.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.6.36", - "symplify/easy-coding-standard": "^13.2.17" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2026-08-15T03:07:32+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.14.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", - "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - } - ], - "time": "2026-08-11T10:17:44+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.8.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" - }, - "time": "2026-07-04T14:30:18+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v8.9.5", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/fb53eacd509a1d303858e2d20cfebf2d630254ec", - "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec", - "shasum": "" - }, - "require": { - "filp/whoops": "^2.18.4", - "nunomaduro/termwind": "^2.4.0", - "php": "^8.2.0", - "symfony/console": "^7.4.14 || ^8.1.1" - }, - "conflict": { - "laravel/framework": "<11.48.0 || >=14.0.0", - "phpunit/phpunit": "<11.5.50 || >=14.0.0" - }, - "require-dev": { - "brianium/paratest": "^7.8.5", - "larastan/larastan": "^3.10.0", - "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.20.0", - "laravel/pint": "^1.29.3", - "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.3.5", - "pestphp/pest": "^3.8.5 || ^4.7.5 || ^5.0.0", - "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.2" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-8.x": "8.x-dev" - } - }, - "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "dev", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2026-07-15T19:09:14+00:00" - }, - { - "name": "orchestra/canvas", - "version": "v11.1.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/canvas.git", - "reference": "d13e6ec66cb1a285fcc7f092c804abaaf2e24ede" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas/zipball/d13e6ec66cb1a285fcc7f092c804abaaf2e24ede", - "reference": "d13e6ec66cb1a285fcc7f092c804abaaf2e24ede", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "composer/semver": "^3.0", - "illuminate/console": "^13.23.0", - "illuminate/database": "^13.23.0", - "illuminate/filesystem": "^13.23.0", - "illuminate/support": "^13.23.0", - "orchestra/canvas-core": "^11.0.0", - "orchestra/sidekick": "~1.1.23|~1.2.20", - "orchestra/testbench-core": "^11.0.0", - "php": "^8.3", - "symfony/yaml": "^7.4.0|^8.0.0" - }, - "require-dev": { - "laravel/doctor": "^0.1.0", - "laravel/framework": "^13.23.0", - "laravel/pint": "^1.24", - "mockery/mockery": "^1.6.10", - "phpstan/phpstan": "^2.1.14", - "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0" - }, - "bin": [ - "canvas" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Orchestra\\Canvas\\LaravelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Orchestra\\Canvas\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com" - } - ], - "description": "Code Generators for Laravel Applications and Packages", - "support": { - "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas/tree/v11.1.0" - }, - "time": "2026-08-04T15:06:43+00:00" - }, - { - "name": "orchestra/canvas-core", - "version": "v11.0.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/canvas-core.git", - "reference": "88d091ff989748e2ca447bca0cd06ab14671ba82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/88d091ff989748e2ca447bca0cd06ab14671ba82", - "reference": "88d091ff989748e2ca447bca0cd06ab14671ba82", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "composer/semver": "^3.0", - "illuminate/console": "^13.0", - "illuminate/support": "^13.0", - "orchestra/sidekick": "~1.1.23|~1.2.20", - "php": "^8.3" - }, - "require-dev": { - "laravel/framework": "^13.0", - "laravel/pint": "^1.24", - "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^11.0", - "phpstan/phpstan": "^2.1.17", - "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", - "symfony/yaml": "^7.4|^8.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Orchestra\\Canvas\\Core\\LaravelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Orchestra\\Canvas\\Core\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com" - } - ], - "description": "Code Generators Builder for Laravel Applications and Packages", - "support": { - "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas-core/tree/v11.0.0" - }, - "time": "2026-03-16T15:10:50+00:00" - }, - { - "name": "orchestra/sidekick", - "version": "v1.2.21", - "source": { - "type": "git", - "url": "https://github.com/orchestral/sidekick.git", - "reference": "fcf69fe227b52beca2e0fe9777d4af4d44ab46a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/sidekick/zipball/fcf69fe227b52beca2e0fe9777d4af4d44ab46a5", - "reference": "fcf69fe227b52beca2e0fe9777d4af4d44ab46a5", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "composer/semver": "^3.0", - "php": "^8.1", - "symfony/polyfill-php83": "^1.32" - }, - "require-dev": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.48.29|^11.44.7|^12.1.1|^13.0", - "laravel/pint": "^1.4", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.37.0|^9.14.0|^10.2.0|^11.0", - "phpstan/phpstan": "^2.1.14", - "phpunit/phpunit": "^10.0|^11.0|^12.0|^13.0", - "symfony/process": "^6.0|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Eloquent/functions.php", - "src/Filesystem/functions.php", - "src/Http/functions.php", - "src/functions.php" - ], - "psr-4": { - "Orchestra\\Sidekick\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com" - } - ], - "description": "Packages Toolkit Utilities and Helpers for Laravel", - "support": { - "issues": "https://github.com/orchestral/sidekick/issues", - "source": "https://github.com/orchestral/sidekick/tree/v1.2.21" - }, - "time": "2026-08-04T23:01:29+00:00" - }, - { - "name": "orchestra/testbench", - "version": "v11.2.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "a326be05fc2375b6240b4ab5279a796e05b6d535" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/a326be05fc2375b6240b4ab5279a796e05b6d535", - "reference": "a326be05fc2375b6240b4ab5279a796e05b6d535", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.23", - "laravel/framework": "^13.23.0", - "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^11.4.0", - "orchestra/workbench": "^11.2.0", - "php": "^8.3", - "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", - "symfony/process": "^7.4.5|^8.0.5", - "symfony/yaml": "^7.4|^8.0", - "vlucas/phpdotenv": "^5.6.1" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "https://packages.tools/testbench/", - "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v11.2.0" - }, - "time": "2026-08-11T11:26:50+00:00" - }, - { - "name": "orchestra/testbench-core", - "version": "v11.4.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "632dc141b25414804ceb1de09be7a9eaf8d61663" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/632dc141b25414804ceb1de09be7a9eaf8d61663", - "reference": "632dc141b25414804ceb1de09be7a9eaf8d61663", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "orchestra/sidekick": "~1.1.23|~1.2.20", - "php": "^8.3", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-php84": "^1.34.0" - }, - "conflict": { - "brianium/paratest": "<7.3.0|>=8.0.0", - "laravel/framework": "<13.23.0|>=14.0.0", - "laravel/serializable-closure": ">=2.0.0 <2.0.10|>=3.0.0", - "nunomaduro/collision": "<8.9.0|>=9.0.0", - "phpunit/phpunit": "<11.5.50|>=12.0.0 <12.5.8|>=13.4.0" - }, - "require-dev": { - "fakerphp/faker": "^1.24", - "laravel/framework": "^13.23.0", - "laravel/pint": "^1.24", - "laravel/serializable-closure": "^2.0.10", - "mockery/mockery": "^1.6.10", - "phpstan/phpstan": "~2.2.7", - "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", - "spatie/laravel-ray": "^1.43.6", - "symfony/process": "^7.4.5|^8.0.5", - "symfony/yaml": "^7.4.0|^8.0.0", - "vlucas/phpdotenv": "^5.6.1" - }, - "suggest": { - "brianium/paratest": "Allow using parallel testing (^7.3).", - "ext-pcntl": "Required to use all features of the console signal trapping.", - "fakerphp/faker": "Allow using Faker for testing (^1.23).", - "laravel/framework": "Required for testing (^13.23.0).", - "mockery/mockery": "Allow using Mockery for testing (^1.6).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^8.9).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^11.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^11.5.50|^12.5.8|^13.0.0).", - "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^7.4|^8.0).", - "symfony/yaml": "Required for Testbench CLI (^7.4|^8.0).", - "vlucas/phpdotenv": "Required for Testbench CLI (^5.6.1)." - }, - "bin": [ - "testbench" - ], - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Orchestra\\Testbench\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", - "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" - }, - "time": "2026-08-07T09:59:39+00:00" - }, - { - "name": "orchestra/workbench", - "version": "v11.2.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/workbench.git", - "reference": "78f27959b8e5caa72c996c6ccd0ddfeff462cb2b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/workbench/zipball/78f27959b8e5caa72c996c6ccd0ddfeff462cb2b", - "reference": "78f27959b8e5caa72c996c6ccd0ddfeff462cb2b", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.23", - "laravel/framework": "^13.0.0", - "laravel/pail": "^1.2.5", - "laravel/tinker": "^3.0.0", - "nunomaduro/collision": "^8.9", - "orchestra/canvas": "^11.0.1", - "orchestra/sidekick": "~1.1.23|~1.2.20", - "orchestra/testbench-core": "^11.1.0", - "php": "^8.3", - "symfony/process": "^7.4|^8.0", - "symfony/yaml": "^7.4|^8.0" - }, - "require-dev": { - "laravel/pint": "^1.22.0", - "mockery/mockery": "^1.6.12", - "phpstan/phpstan": "^2.1.33", - "phpunit/phpunit": "^11.5.50|^12.5.8|^13.0.0", - "spatie/laravel-ray": "^1.43.6" - }, - "suggest": { - "ext-pcntl": "Required to use all features of the console signal trapping." - }, - "type": "library", - "autoload": { - "psr-4": { - "Orchestra\\Workbench\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com" - } - ], - "description": "Workbench Companion for Laravel Packages Development", - "keywords": [ - "dev", - "laravel", - "laravel-packages", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/workbench/issues", - "source": "https://github.com/orchestral/workbench/tree/v11.2.0" - }, - "time": "2026-07-22T09:55:13+00:00" - }, - { - "name": "pestphp/pest", - "version": "v4.7.8", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "5b2293f67adcf1b2320b33f521b94a692d18f360" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/5b2293f67adcf1b2320b33f521b94a692d18f360", - "reference": "5b2293f67adcf1b2320b33f521b94a692d18f360", - "shasum": "" - }, - "require": { - "brianium/paratest": "^7.20.0", - "composer/xdebug-handler": "^3.0.5", - "nunomaduro/collision": "^8.9.5", - "nunomaduro/termwind": "^2.4.0", - "pestphp/pest-plugin": "^4.0.0", - "pestphp/pest-plugin-arch": "^4.0.2", - "pestphp/pest-plugin-mutate": "^4.0.1", - "pestphp/pest-plugin-profanity": "^4.2.1", - "php": "^8.3.0", - "phpunit/phpunit": "^12.5.33", - "symfony/process": "^7.4.13|^8.1.0" - }, - "conflict": { - "filp/whoops": "<2.18.3", - "phpunit/phpunit": ">12.5.33", - "sebastian/exporter": "<7.0.0", - "webmozart/assert": "<1.11.0" - }, - "require-dev": { - "mrpunyapal/peststan": "^0.2.12", - "pestphp/pest-dev-tools": "^4.1.0", - "pestphp/pest-plugin-browser": "^4.3.1", - "pestphp/pest-plugin-type-coverage": "^4.0.4", - "psy/psysh": "^0.12.24" - }, - "bin": [ - "bin/pest" - ], - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Mutate\\Plugins\\Mutate", - "Pest\\Plugins\\Configuration", - "Pest\\Plugins\\Bail", - "Pest\\Plugins\\Cache", - "Pest\\Plugins\\Coverage", - "Pest\\Plugins\\Init", - "Pest\\Plugins\\Environment", - "Pest\\Plugins\\Help", - "Pest\\Plugins\\Memory", - "Pest\\Plugins\\Only", - "Pest\\Plugins\\Printer", - "Pest\\Plugins\\ProcessIsolation", - "Pest\\Plugins\\Profile", - "Pest\\Plugins\\Retry", - "Pest\\Plugins\\Snapshot", - "Pest\\Plugins\\Verbose", - "Pest\\Plugins\\Version", - "Pest\\Plugins\\Shard", - "Pest\\Plugins\\Parallel" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php", - "src/Pest.php" - ], - "psr-4": { - "Pest\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "The elegant PHP Testing Framework.", - "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v4.7.8" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2026-08-03T20:49:44+00:00" - }, - { - "name": "pestphp/pest-plugin", - "version": "v4.0.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "9d4b93d7f73d3f9c3189bb22c220fef271cdf568" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/9d4b93d7f73d3f9c3189bb22c220fef271cdf568", - "reference": "9d4b93d7f73d3f9c3189bb22c220fef271cdf568", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0.0", - "composer-runtime-api": "^2.2.2", - "php": "^8.3" - }, - "conflict": { - "pestphp/pest": "<4.0.0" - }, - "require-dev": { - "composer/composer": "^2.8.10", - "pestphp/pest": "^4.0.0", - "pestphp/pest-dev-tools": "^4.0.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Pest\\Plugin\\Manager" - }, - "autoload": { - "psr-4": { - "Pest\\Plugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest plugin manager", - "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin/tree/v4.0.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2025-08-20T12:35:58+00:00" - }, - { - "name": "pestphp/pest-plugin-arch", - "version": "v4.0.2", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-arch.git", - "reference": "3fb0d02a91b9da504b139dc7ab2a31efb7c3215c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/3fb0d02a91b9da504b139dc7ab2a31efb7c3215c", - "reference": "3fb0d02a91b9da504b139dc7ab2a31efb7c3215c", - "shasum": "" - }, - "require": { - "pestphp/pest-plugin": "^4.0.0", - "php": "^8.3", - "ta-tikoma/phpunit-architecture-test": "^0.8.7" - }, - "require-dev": { - "pestphp/pest": "^4.4.6", - "pestphp/pest-dev-tools": "^4.1.0" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Arch\\Plugin" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Arch\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Arch plugin for Pest PHP.", - "keywords": [ - "arch", - "architecture", - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-arch/tree/v4.0.2" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2026-04-10T17:20:19+00:00" - }, - { - "name": "pestphp/pest-plugin-laravel", - "version": "v4.1.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-laravel.git", - "reference": "3057a36669ff11416cc0dc2b521b3aec58c488d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/3057a36669ff11416cc0dc2b521b3aec58c488d0", - "reference": "3057a36669ff11416cc0dc2b521b3aec58c488d0", - "shasum": "" - }, - "require": { - "laravel/framework": "^11.45.2|^12.52.0|^13.0", - "pestphp/pest": "^4.4.1", - "php": "^8.3.0" - }, - "require-dev": { - "laravel/dusk": "^8.3.6", - "orchestra/testbench": "^9.13.0|^10.9.0|^11.0", - "pestphp/pest-dev-tools": "^4.1.0" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Laravel\\Plugin" - ] - }, - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Laravel\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest Laravel Plugin", - "keywords": [ - "framework", - "laravel", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v4.1.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2026-02-21T00:29:45+00:00" - }, - { - "name": "pestphp/pest-plugin-mutate", - "version": "v4.0.1", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-mutate.git", - "reference": "d9b32b60b2385e1688a68cc227594738ec26d96c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-mutate/zipball/d9b32b60b2385e1688a68cc227594738ec26d96c", - "reference": "d9b32b60b2385e1688a68cc227594738ec26d96c", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.6.1", - "pestphp/pest-plugin": "^4.0.0", - "php": "^8.3", - "psr/simple-cache": "^3.0.0" - }, - "require-dev": { - "pestphp/pest": "^4.0.0", - "pestphp/pest-dev-tools": "^4.0.0", - "pestphp/pest-plugin-type-coverage": "^4.0.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Pest\\Mutate\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - }, - { - "name": "Sandro Gehri", - "email": "sandrogehri@gmail.com" - } - ], - "description": "Mutates your code to find untested cases", - "keywords": [ - "framework", - "mutate", - "mutation", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-mutate/tree/v4.0.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/gehrisandro", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2025-08-21T20:19:25+00:00" - }, - { - "name": "pestphp/pest-plugin-profanity", - "version": "v4.2.1", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-profanity.git", - "reference": "343cfa6f3564b7e35df0ebb77b7fa97039f72b27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-profanity/zipball/343cfa6f3564b7e35df0ebb77b7fa97039f72b27", - "reference": "343cfa6f3564b7e35df0ebb77b7fa97039f72b27", - "shasum": "" - }, - "require": { - "pestphp/pest-plugin": "^4.0.0", - "php": "^8.3" - }, - "require-dev": { - "faissaloux/pest-plugin-inside": "^1.9", - "pestphp/pest": "^4.0.0", - "pestphp/pest-dev-tools": "^4.0.0" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Profanity\\Plugin" - ] - } - }, - "autoload": { - "psr-4": { - "Pest\\Profanity\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest Profanity Plugin", - "keywords": [ - "framework", - "pest", - "php", - "plugin", - "profanity", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-profanity/tree/v4.2.1" - }, - "time": "2025-12-08T00:13:17+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "12.5.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "186dab580576598076de6818596d12b61801880e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e", - "reference": "186dab580576598076de6818596d12b61801880e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^5.7.0", - "php": ">=8.3", - "phpunit/php-text-template": "^5.0", - "sebastian/complexity": "^5.0", - "sebastian/environment": "^8.1.2", - "sebastian/lines-of-code": "^4.0.1", - "sebastian/version": "^6.0", - "theseer/tokenizer": "^2.0.1" - }, - "require-dev": { - "phpunit/phpunit": "^12.5.28" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "12.5.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", - "type": "tidelift" - } - ], - "time": "2026-06-01T13:24:19+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "6.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", - "type": "tidelift" - } - ], - "time": "2026-02-02T14:04:18+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "6.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^12.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T04:58:58+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T04:59:16+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "8.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "8.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T04:59:38+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "12.5.33", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b98e028a26c5c5ba7e4a54be96ccf35f2914d184", - "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-filter": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.3", - "phpunit/php-code-coverage": "^12.5.7", - "phpunit/php-file-iterator": "^6.0.1", - "phpunit/php-invoker": "^6.0.0", - "phpunit/php-text-template": "^5.0.0", - "phpunit/php-timer": "^8.0.0", - "sebastian/cli-parser": "^4.2.1", - "sebastian/comparator": "^7.1.8", - "sebastian/diff": "^7.0.0", - "sebastian/environment": "^8.1.2", - "sebastian/exporter": "^7.0.3", - "sebastian/global-state": "^8.0.3", - "sebastian/object-enumerator": "^7.0.0", - "sebastian/recursion-context": "^7.0.1", - "sebastian/type": "^6.0.4", - "sebastian/version": "^6.0.0", - "staabm/side-effects-detector": "^1.0.5" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "12.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.33" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsoring.html", - "type": "other" - } - ], - "time": "2026-07-28T13:58:09+00:00" - }, - { - "name": "psy/psysh", - "version": "v0.12.24", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", - "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^5.0 || ^4.0", - "php": "^8.0 || ^7.4", - "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "composer/class-map-generator": "^1.6" - }, - "suggest": { - "composer/class-map-generator": "Improved tab completion performance with better class discovery.", - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": false, - "forward-command": false - }, - "branch-alias": { - "dev-main": "0.12.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "https://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.24" - }, - "time": "2026-06-29T15:41:09+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "4.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "7d05781b13f7dec9043a629a21d086ed74582a15" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15", - "reference": "7d05781b13f7dec9043a629a21d086ed74582a15", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.5.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", - "type": "tidelift" - } - ], - "time": "2026-05-17T05:29:34+00:00" - }, - { - "name": "sebastian/comparator", - "version": "7.1.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "7c65c1e79836812819705b473a90c12399542485" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485", - "reference": "7c65c1e79836812819705b473a90c12399542485", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/diff": "^7.0", - "sebastian/exporter": "^7.0.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.5.25" - }, - "suggest": { - "ext-bcmath": "For comparing BcMath\\Number objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", - "type": "tidelift" - } - ], - "time": "2026-05-21T04:45:25+00:00" - }, - { - "name": "sebastian/complexity", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T04:55:25+00:00" - }, - { - "name": "sebastian/diff", - "version": "7.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.0", - "symfony/process": "^7.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T04:55:46+00:00" - }, - { - "name": "sebastian/environment", - "version": "8.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439", - "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.5.26" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "8.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", - "type": "tidelift" - } - ], - "time": "2026-05-25T13:40:20+00:00" - }, - { - "name": "sebastian/exporter", - "version": "7.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", - "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/recursion-context": "^7.0.1" - }, - "require-dev": { - "phpunit/phpunit": "^12.5.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", - "type": "tidelift" - } - ], - "time": "2026-05-20T04:37:17+00:00" - }, - { - "name": "sebastian/global-state", - "version": "8.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9", - "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9", - "shasum": "" - }, - "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0.1" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^12.5.28" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "8.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", - "type": "tidelift" - } - ], - "time": "2026-06-01T15:10:33+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e", - "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.7.0", - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.5.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", - "type": "tidelift" - } - ], - "time": "2026-05-19T16:22:07+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "7.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", - "shasum": "" - }, - "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^12.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T04:57:48+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T04:58:17+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "7.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", - "type": "tidelift" - } - ], - "time": "2025-08-13T04:44:59+00:00" - }, - { - "name": "sebastian/type", - "version": "6.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "82ff822c2edc46724be9f7411d3163021f602773" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773", - "reference": "82ff822c2edc46724be9f7411d3163021f602773", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "require-dev": { - "phpunit/phpunit": "^12.5.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/6.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/type", - "type": "tidelift" - } - ], - "time": "2026-05-20T06:45:45+00:00" - }, - { - "name": "sebastian/version", - "version": "6.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", - "shasum": "" - }, - "require": { - "php": ">=8.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-02-07T05:00:38+00:00" - }, - { - "name": "staabm/side-effects-detector", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/staabm/side-effects-detector.git", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^9.6.21", - "symfony/var-dumper": "^5.4.43", - "tomasvotruba/type-coverage": "1.0.0", - "tomasvotruba/unused-public": "1.0.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A static analysis tool to detect side effects in PHP code", - "keywords": [ - "static analysis" - ], - "support": { - "issues": "https://github.com/staabm/side-effects-detector/issues", - "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" - }, - "funding": [ - { - "url": "https://github.com/staabm", - "type": "github" - } - ], - "time": "2024-10-20T05:08:20+00:00" - }, - { - "name": "symfony/polyfill-php83", - "version": "v1.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/5ea99087fb99c273a9b9236ed4c31e78b16103c6", - "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.41.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-07-01T12:47:55+00:00" - }, - { - "name": "symfony/yaml", - "version": "v8.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "faabdbe998e8c5c599dceffa27aa265b185c0736" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/faabdbe998e8c5c599dceffa27aa265b185c0736", - "reference": "faabdbe998e8c5c599dceffa27aa265b185c0736", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<7.4" - }, - "require-dev": { - "symfony/console": "^7.4|^8.0", - "yaml/yaml-test-suite": "*" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "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": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v8.1.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-07-22T15:42:13+00:00" - }, - { - "name": "ta-tikoma/phpunit-architecture-test", - "version": "0.8.7", - "source": { - "type": "git", - "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", - "reference": "1248f3f506ca9641d4f68cebcd538fa489754db8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/1248f3f506ca9641d4f68cebcd538fa489754db8", - "reference": "1248f3f506ca9641d4f68cebcd538fa489754db8", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18.0 || ^5.0.0", - "php": "^8.1.0", - "phpdocumentor/reflection-docblock": "^5.3.0 || ^6.0.0", - "phpunit/phpunit": "^10.5.5 || ^11.0.0 || ^12.0.0 || ^13.0.0", - "symfony/finder": "^6.4.0 || ^7.0.0 || ^8.0.0" - }, - "require-dev": { - "laravel/pint": "^1.13.7", - "phpstan/phpstan": "^1.10.52" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPUnit\\Architecture\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ni Shi", - "email": "futik0ma011@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Methods for testing application architecture", - "keywords": [ - "architecture", - "phpunit", - "stucture", - "test", - "testing" - ], - "support": { - "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", - "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.7" - }, - "time": "2026-02-17T17:25:14+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", - "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^8.1" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/2.0.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2025-12-08T11:19:18+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "laranail/enumerator": 20, - "laranail/package-tools": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^8.4 | ^8.5" - }, - "platform-dev": {}, - "plugin-api-version": "2.9.0" -} diff --git a/config/auth-kit.php b/config/auth-kit.php deleted file mode 100644 index 87bf106..0000000 --- a/config/auth-kit.php +++ /dev/null @@ -1,72 +0,0 @@ - env(key: 'AUTH_KIT_GUARD', default: 'web'), - - 'user_model' => env(key: 'AUTH_KIT_USER_MODEL'), - - 'rate_limit' => [ - 'max_attempts' => (int) env(key: 'AUTH_KIT_RATE_LIMIT_MAX_ATTEMPTS', default: 5), - 'decay_minutes' => (int) env(key: 'AUTH_KIT_RATE_LIMIT_DECAY_MINUTES', default: 1), - ], - - 'turnstile' => [ - 'enabled' => (bool) env(key: 'AUTH_KIT_TURNSTILE_ENABLED', default: false), - 'site_key' => env(key: 'TURNSTILE_SITE_KEY'), - 'secret_key' => env(key: 'TURNSTILE_SECRET_KEY'), - 'url' => env(key: 'TURNSTILE_URL', default: 'https://challenges.cloudflare.com/turnstile/v0/siteverify'), - 'input' => 'cf-turnstile-response', - ], - - 'fortify' => [ - 'views' => false, - - 'features' => [ - 'reset-passwords', - 'update-profile-information', - 'update-passwords', - 'email-verification', - 'passkeys', - ], - ], - - 'social' => [ - 'google' => [ - 'client_id' => env(key: 'AUTH_KIT_GOOGLE_CLIENT_ID'), - 'client_secret' => env(key: 'AUTH_KIT_GOOGLE_CLIENT_SECRET'), - 'redirect' => env(key: 'AUTH_KIT_GOOGLE_REDIRECT'), - 'scopes' => ['openid', 'profile', 'email'], - ], - - 'facebook' => [ - 'client_id' => env(key: 'AUTH_KIT_FACEBOOK_CLIENT_ID'), - 'client_secret' => env(key: 'AUTH_KIT_FACEBOOK_CLIENT_SECRET'), - 'redirect' => env(key: 'AUTH_KIT_FACEBOOK_REDIRECT'), - 'scopes' => ['email', 'public_profile'], - ], - - 'twitter' => [ - 'client_id' => env(key: 'AUTH_KIT_TWITTER_CLIENT_ID'), - 'client_secret' => env(key: 'AUTH_KIT_TWITTER_CLIENT_SECRET'), - 'redirect' => env(key: 'AUTH_KIT_TWITTER_REDIRECT'), - 'scopes' => ['users.read', 'users.email', 'tweet.read'], - ], - - 'linkedin' => [ - 'client_id' => env(key: 'AUTH_KIT_LINKEDIN_CLIENT_ID'), - 'client_secret' => env(key: 'AUTH_KIT_LINKEDIN_CLIENT_SECRET'), - 'redirect' => env(key: 'AUTH_KIT_LINKEDIN_REDIRECT'), - 'scopes' => ['openid', 'profile', 'email'], - ], - - 'paypal' => [ - 'client_id' => env(key: 'AUTH_KIT_PAYPAL_CLIENT_ID'), - 'client_secret' => env(key: 'AUTH_KIT_PAYPAL_CLIENT_SECRET'), - 'redirect' => env(key: 'AUTH_KIT_PAYPAL_REDIRECT'), - 'sandbox_mode' => (bool) env(key: 'AUTH_KIT_PAYPAL_SANDBOX_MODE', default: true), - 'scopes' => ['openid', 'profile', 'email'], - ], - ], -]; diff --git a/config/laranail/authkit.php b/config/laranail/authkit.php new file mode 100644 index 0000000..5ccd388 --- /dev/null +++ b/config/laranail/authkit.php @@ -0,0 +1,72 @@ + env(key: 'AUTHKIT_GUARD', default: 'web'), + + 'user_model' => env(key: 'AUTHKIT_USER_MODEL'), + + 'rate_limit' => [ + 'max_attempts' => (int) env(key: 'AUTHKIT_RATE_LIMIT_MAX_ATTEMPTS', default: 5), + 'decay_minutes' => (int) env(key: 'AUTHKIT_RATE_LIMIT_DECAY_MINUTES', default: 1), + ], + + 'turnstile' => [ + 'enabled' => (bool) env(key: 'AUTHKIT_TURNSTILE_ENABLED', default: false), + 'site_key' => env(key: 'TURNSTILE_SITE_KEY'), + 'secret_key' => env(key: 'TURNSTILE_SECRET_KEY'), + 'url' => env(key: 'TURNSTILE_URL', default: 'https://challenges.cloudflare.com/turnstile/v0/siteverify'), + 'input' => 'cf-turnstile-response', + ], + + 'fortify' => [ + 'views' => false, + + 'features' => [ + 'reset-passwords', + 'update-profile-information', + 'update-passwords', + 'email-verification', + 'passkeys', + ], + ], + + 'social' => [ + 'google' => [ + 'client_id' => env(key: 'AUTHKIT_GOOGLE_CLIENT_ID'), + 'client_secret' => env(key: 'AUTHKIT_GOOGLE_CLIENT_SECRET'), + 'redirect' => env(key: 'AUTHKIT_GOOGLE_REDIRECT'), + 'scopes' => ['openid', 'profile', 'email'], + ], + + 'facebook' => [ + 'client_id' => env(key: 'AUTHKIT_FACEBOOK_CLIENT_ID'), + 'client_secret' => env(key: 'AUTHKIT_FACEBOOK_CLIENT_SECRET'), + 'redirect' => env(key: 'AUTHKIT_FACEBOOK_REDIRECT'), + 'scopes' => ['email', 'public_profile'], + ], + + 'twitter' => [ + 'client_id' => env(key: 'AUTHKIT_TWITTER_CLIENT_ID'), + 'client_secret' => env(key: 'AUTHKIT_TWITTER_CLIENT_SECRET'), + 'redirect' => env(key: 'AUTHKIT_TWITTER_REDIRECT'), + 'scopes' => ['users.read', 'users.email', 'tweet.read'], + ], + + 'linkedin' => [ + 'client_id' => env(key: 'AUTHKIT_LINKEDIN_CLIENT_ID'), + 'client_secret' => env(key: 'AUTHKIT_LINKEDIN_CLIENT_SECRET'), + 'redirect' => env(key: 'AUTHKIT_LINKEDIN_REDIRECT'), + 'scopes' => ['openid', 'profile', 'email'], + ], + + 'paypal' => [ + 'client_id' => env(key: 'AUTHKIT_PAYPAL_CLIENT_ID'), + 'client_secret' => env(key: 'AUTHKIT_PAYPAL_CLIENT_SECRET'), + 'redirect' => env(key: 'AUTHKIT_PAYPAL_REDIRECT'), + 'sandbox_mode' => (bool) env(key: 'AUTHKIT_PAYPAL_SANDBOX_MODE', default: true), + 'scopes' => ['openid', 'profile', 'email'], + ], + ], +]; diff --git a/database/factories/SocialFactory.php b/database/factories/SocialFactory.php index 425fb2a..11aa7fe 100644 --- a/database/factories/SocialFactory.php +++ b/database/factories/SocialFactory.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Database\Factories; +namespace Simtabi\Laranail\AuthKit\Database\Factories; use Illuminate\Support\Str; use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Models\Social; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Models\Social; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Illuminate\Database\Eloquent\Factories\Factory; /** - * @extends \Illuminate\Database\Eloquent\Factories\Factory<\Simtabi\Laranail\Auth\Models\Social> + * @extends \Illuminate\Database\Eloquent\Factories\Factory<\Simtabi\Laranail\AuthKit\Models\Social> */ class SocialFactory extends Factory { diff --git a/docs/configuration.md b/docs/configuration.md index 837e177..4020632 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -3,9 +3,9 @@ Publish the configuration before changing defaults: ```bash -php artisan vendor:publish --tag=auth-kit-config +php artisan vendor:publish --tag=laranail::authkit-config ``` -Set `AUTH_KIT_GUARD` to the application's intended guard. The `auth-kit.fortify.features` list enables Fortify capabilities individually: `reset-passwords`, `update-profile-information`, `update-passwords`, `email-verification`, and `passkeys`. Removing an item prevents Auth Kit from enabling that capability; remove corresponding application routes and UI too. +Set `AUTHKIT_GUARD` to the application's intended guard. The `laranail.authkit.fortify.features` list enables Fortify capabilities individually: `reset-passwords`, `update-profile-information`, `update-passwords`, `email-verification`, and `passkeys`. Removing an item prevents Auth Kit from enabling that capability; remove corresponding application routes and UI too. -Credential throttling is controlled by `AUTH_KIT_RATE_LIMIT_MAX_ATTEMPTS` and `AUTH_KIT_RATE_LIMIT_DECAY_MINUTES`, defaulting to five attempts per minute. Social credentials, callbacks, and enabled providers are configured in `auth-kit.social`; see [social login](social-login.md) for provider settings. \ No newline at end of file +Credential throttling is controlled by `AUTHKIT_RATE_LIMIT_MAX_ATTEMPTS` and `AUTHKIT_RATE_LIMIT_DECAY_MINUTES`, defaulting to five attempts per minute. Social credentials, callbacks, and enabled providers are configured in `laranail.authkit.social`; see [social login](social-login.md) for provider settings. \ No newline at end of file diff --git a/docs/email-verification.md b/docs/email-verification.md index 89f8a39..7cbcb89 100644 --- a/docs/email-verification.md +++ b/docs/email-verification.md @@ -1,6 +1,6 @@ # Email verification -Email verification is a Fortify feature enabled by including `email-verification` in `auth-kit.fortify.features`. +Email verification is a Fortify feature enabled by including `email-verification` in `laranail.authkit.fortify.features`. ```php 'fortify' => [ diff --git a/docs/login.md b/docs/login.md index 5ff91c4..c33b6b3 100644 --- a/docs/login.md +++ b/docs/login.md @@ -19,4 +19,4 @@ app(LoginUser::class)->execute($result->user, 'web'); `LoginUser` creates the session and regenerates it. `LogoutUser` logs the user out, invalidates the session, and regenerates the CSRF token. For controller-based integration, extend `AbstractAttemptEmailPasswordLoginController` and customize `passed()`, `failed()`, or `throttled()`; extend `AbstractLogoutController` and customize `loggedOut()`. -The default guard is `web`; change it with `AUTH_KIT_GUARD` or pass the intended guard explicitly. Use the same guard for credential validation and session login. \ No newline at end of file +The default guard is `web`; change it with `AUTHKIT_GUARD` or pass the intended guard explicitly. Use the same guard for credential validation and session login. \ No newline at end of file diff --git a/docs/passkeys.md b/docs/passkeys.md index f92777c..0836870 100644 --- a/docs/passkeys.md +++ b/docs/passkeys.md @@ -8,7 +8,7 @@ The authenticatable model must implement Fortify's `PasskeyUser` contract and us ```php use Laravel\Fortify\Contracts\PasskeyUser; -use Simtabi\Laranail\Auth\PasskeyAuthenticatable; +use Simtabi\Laranail\AuthKit\PasskeyAuthenticatable; class User extends Authenticatable implements PasskeyUser { @@ -19,7 +19,7 @@ class User extends Authenticatable implements PasskeyUser Publish Auth Kit's migration, then migrate: ```bash -php artisan vendor:publish --tag=auth-kit-passkey-migrations +php artisan vendor:publish --tag=laranail::authkit-passkey-migrations php artisan migrate ``` @@ -40,4 +40,4 @@ Configure the relying-party ID and exact allowed browser origins in `config/fort Auth Kit does not ship JavaScript. Install `@laravel/passkeys` and connect the browser client to Fortify's canonical passkey endpoints. Passkey login and confirmation use the stateful guard and session, so they are not available as Sanctum API equivalents. -Keep `passkeys` in `auth-kit.fortify.features` to enable Fortify's passkey routes. Fortify's `confirmPassword` option and `passkeys` limiter continue to govern management operations. \ No newline at end of file +Keep `passkeys` in `laranail.authkit.fortify.features` to enable Fortify's passkey routes. Fortify's `confirmPassword` option and `passkeys` limiter continue to govern management operations. \ No newline at end of file diff --git a/docs/password-reset.md b/docs/password-reset.md index 21c25a1..2264aca 100644 --- a/docs/password-reset.md +++ b/docs/password-reset.md @@ -2,8 +2,8 @@ Auth Kit delegates reset behavior to Laravel Fortify while exposing actions and abstract controllers for a headless application. -Enable password resets by retaining `reset-passwords` in `auth-kit.fortify.features`. Use `AbstractPasswordResetLinkController` to request a reset link and `AbstractNewPasswordController` to accept a reset token and new password. The application must configure mail delivery so users can receive reset links. +Enable password resets by retaining `reset-passwords` in `laranail.authkit.fortify.features`. Use `AbstractPasswordResetLinkController` to request a reset link and `AbstractNewPasswordController` to accept a reset token and new password. The application must configure mail delivery so users can receive reset links. `ResetUserPassword` implements Fortify's `ResetsUserPasswords` contract. It validates a confirmed password with Laravel's default password rules, hashes it, clears the remember token, and revokes personal access tokens when the model exposes a `tokens()` relation. Use it through Fortify's reset-token flow or when an application-owned endpoint has already validated the reset token; do not accept a raw reset request without Laravel's broker validation. -Retaining or removing `reset-passwords` in `auth-kit.fortify.features` enables or disables this Fortify capability. Ensure application routes and UI do not expose a flow that has been disabled. \ No newline at end of file +Retaining or removing `reset-passwords` in `laranail.authkit.fortify.features` enables or disables this Fortify capability. Ensure application routes and UI do not expose a flow that has been disabled. \ No newline at end of file diff --git a/docs/password-updates.md b/docs/password-updates.md index 162d998..7d387c6 100644 --- a/docs/password-updates.md +++ b/docs/password-updates.md @@ -1,5 +1,5 @@ # Password updates -Retain `update-passwords` in `auth-kit.fortify.features` to enable authenticated password updates. `UpdateUserPassword` implements Fortify's `UpdatesUserPasswords` contract, requires the current password for the configured guard, validates and hashes the replacement, clears the remember token, and revokes personal tokens when available. +Retain `update-passwords` in `laranail.authkit.fortify.features` to enable authenticated password updates. `UpdateUserPassword` implements Fortify's `UpdatesUserPasswords` contract, requires the current password for the configured guard, validates and hashes the replacement, clears the remember token, and revokes personal tokens when available. For the currently authenticated user, the action also asks a compatible guard to log out other devices. Invoke it only from an authenticated, CSRF-protected flow. Removing the feature prevents Auth Kit from enabling this Fortify capability; do not expose a corresponding application route or UI. \ No newline at end of file diff --git a/docs/profile-management.md b/docs/profile-management.md index 4ff7938..55a0ce6 100644 --- a/docs/profile-management.md +++ b/docs/profile-management.md @@ -2,6 +2,6 @@ Auth Kit exposes profile behavior through Laravel Fortify actions and abstract controllers while your application owns routes and responses. -Retain `update-profile-information` in `auth-kit.fortify.features` to enable profile changes. `UpdateUserProfileInformation` implements Fortify's `UpdatesUserProfileInformation` contract and accepts a required name plus a unique email address. If a user implements Laravel's `MustVerifyEmail` contract and changes email, it clears `email_verified_at` and sends a new verification notification. Extend or replace the action if the application has additional profile fields or different validation requirements. +Retain `update-profile-information` in `laranail.authkit.fortify.features` to enable profile changes. `UpdateUserProfileInformation` implements Fortify's `UpdatesUserProfileInformation` contract and accepts a required name plus a unique email address. If a user implements Laravel's `MustVerifyEmail` contract and changes email, it clears `email_verified_at` and sends a new verification notification. Extend or replace the action if the application has additional profile fields or different validation requirements. Removing the feature prevents Auth Kit from enabling the related Fortify capability; ensure application routes and UI do not expose a disabled flow. For authenticated password changes, see [password updates](password-updates.md). \ No newline at end of file diff --git a/docs/security.md b/docs/security.md index 8588d51..ac25342 100644 --- a/docs/security.md +++ b/docs/security.md @@ -1,13 +1,13 @@ # Security -Review the published `config/auth-kit.php` before production. Set the intended guard and user model, keep credential rate limits enabled, and configure HTTPS, secure session cookies, CSRF protection, trusted hosts/proxies, and a working mail transport in the consuming Laravel application. +Review the published `config/laranail/authkit.php` before production. Set the intended guard and user model, keep credential rate limits enabled, and configure HTTPS, secure session cookies, CSRF protection, trusted hosts/proxies, and a working mail transport in the consuming Laravel application. Auth Kit's implemented safeguards are credential throttling by email, IP, and guard; session regeneration on login; session invalidation and CSRF-token regeneration on logout; verified-email-only guest social linking for trusted providers; uniqueness of provider identities; reset/password-change revocation of personal tokens; and password-change invalidation of other compatible guard sessions. They complement—not replace—Laravel's application and deployment security configuration. Turnstile support is opt-in: ```env -AUTH_KIT_TURNSTILE_ENABLED=true +AUTHKIT_TURNSTILE_ENABLED=true TURNSTILE_SITE_KEY= TURNSTILE_SECRET_KEY= ``` diff --git a/docs/social-login.md b/docs/social-login.md index b094264..215ae19 100644 --- a/docs/social-login.md +++ b/docs/social-login.md @@ -6,28 +6,28 @@ Auth Kit integrates Laravel Socialite but does not register routes or render but | Provider | Route value | Provider-console callback | Required environment prefix | Verified email trusted for auto-linking | |----------|-------------|-------------------------------------------------------|-----------------------------|-----------------------------------------| -| Google | `google` | `https://your-app.test/auth/social/google/callback` | `AUTH_KIT_GOOGLE_` | Yes | -| Facebook | `facebook` | `https://your-app.test/auth/social/facebook/callback` | `AUTH_KIT_FACEBOOK_` | No | -| X | `twitter` | `https://your-app.test/auth/social/twitter/callback` | `AUTH_KIT_TWITTER_` | No | -| LinkedIn | `linkedin` | `https://your-app.test/auth/social/linkedin/callback` | `AUTH_KIT_LINKEDIN_` | Yes | -| PayPal | `paypal` | `https://your-app.test/auth/social/paypal/callback` | `AUTH_KIT_PAYPAL_` | Yes | +| Google | `google` | `https://your-app.test/auth/social/google/callback` | `AUTHKIT_GOOGLE_` | Yes | +| Facebook | `facebook` | `https://your-app.test/auth/social/facebook/callback` | `AUTHKIT_FACEBOOK_` | No | +| X | `twitter` | `https://your-app.test/auth/social/twitter/callback` | `AUTHKIT_TWITTER_` | No | +| LinkedIn | `linkedin` | `https://your-app.test/auth/social/linkedin/callback` | `AUTHKIT_LINKEDIN_` | Yes | +| PayPal | `paypal` | `https://your-app.test/auth/social/paypal/callback` | `AUTHKIT_PAYPAL_` | Yes | Create an OAuth application in the provider's developer console, add the exact callback URL used by your application, then set its credentials. Google, LinkedIn, and PayPal request OpenID, profile, and email scopes; Facebook requests email and public profile; X requests user and email access. Provider approval, app mode, and email-access requirements remain provider-specific. ```env -AUTH_KIT_GOOGLE_CLIENT_ID= -AUTH_KIT_GOOGLE_CLIENT_SECRET= -AUTH_KIT_GOOGLE_REDIRECT="${APP_URL}/auth/social/google/callback" +AUTHKIT_GOOGLE_CLIENT_ID= +AUTHKIT_GOOGLE_CLIENT_SECRET= +AUTHKIT_GOOGLE_REDIRECT="${APP_URL}/auth/social/google/callback" ``` -Replace `GOOGLE` with `FACEBOOK`, `TWITTER`, `LINKEDIN`, or `PAYPAL` for the other providers. PayPal is sandboxed by default; set `AUTH_KIT_PAYPAL_SANDBOX_MODE=false` only when both the callback and credentials are production values. Clear Laravel's configuration cache after changing environment values. +Replace `GOOGLE` with `FACEBOOK`, `TWITTER`, `LINKEDIN`, or `PAYPAL` for the other providers. PayPal is sandboxed by default; set `AUTHKIT_PAYPAL_SANDBOX_MODE=false` only when both the callback and credentials are production values. Clear Laravel's configuration cache after changing environment values. ## Routes, controllers, and persistence Publish the social migration before enabling a provider: ```bash -php artisan vendor:publish --tag=auth-kit-social-migrations +php artisan vendor:publish --tag=laranail::authkit-social-migrations php artisan migrate ``` @@ -37,7 +37,7 @@ Add the relation to every authenticatable model that can own a social identity: ```php use Illuminate\Database\Eloquent\Relations\MorphMany; -use Simtabi\Laranail\Auth\Models\Social; +use Simtabi\Laranail\AuthKit\Models\Social; public function socials(): MorphMany { @@ -61,4 +61,4 @@ Only Google, LinkedIn, and PayPal are currently trusted for `email_verified`. Fa ## Adding a provider -The accepted route values are the `SocialProvider` enum cases. Adding a provider requires a package change: add its enum case, add its credentials, redirect, and scopes under `auth-kit.social`, and ensure Socialite has a driver for that key. First-party Socialite drivers work through the normal `services.` configuration; a third-party driver must be registered with Socialite's extension mechanism, as PayPal is. Add callback tests for an existing identity, a trusted verified email, an unverified or missing email, and authenticated linking before exposing the new provider. \ No newline at end of file +The accepted route values are the `SocialProvider` enum cases. Adding a provider requires a package change: add its enum case, add its credentials, redirect, and scopes under `laranail.authkit.social`, and ensure Socialite has a driver for that key. First-party Socialite drivers work through the normal `services.` configuration; a third-party driver must be registered with Socialite's extension mechanism, as PayPal is. Add callback tests for an existing identity, a trusted verified email, an unverified or missing email, and authenticated linking before exposing the new provider. \ No newline at end of file diff --git a/src/Actions/AttemptEmailPasswordLogin.php b/src/Actions/AttemptEmailPasswordLogin.php index 017cc27..86864af 100644 --- a/src/Actions/AttemptEmailPasswordLogin.php +++ b/src/Actions/AttemptEmailPasswordLogin.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Http\Request; use Illuminate\Cache\RateLimiter; -use Simtabi\Laranail\Auth\Support\AuthResult; +use Simtabi\Laranail\AuthKit\Support\AuthResult; use Illuminate\Contracts\Auth\Factory as AuthFactory; -use Simtabi\Laranail\Auth\Contracts\AttemptEmailPasswordLoginInterface; +use Simtabi\Laranail\AuthKit\Contracts\AttemptEmailPasswordLoginInterface; class AttemptEmailPasswordLogin implements AttemptEmailPasswordLoginInterface { @@ -25,8 +25,8 @@ public function execute(Request $request, string $guard): AuthResult $ip = $request->ip(); $key = 'login:' . $guard . ':' . mb_strtolower(string: $email) . ':' . ($ip ?? '_'); - $maxAttempts = (int) config(key: 'auth-kit.rate_limit.max_attempts', default: 5); - $decaySeconds = (int) config(key: 'auth-kit.rate_limit.decay_minutes', default: 1) * 60; + $maxAttempts = (int) config(key: 'laranail.authkit.rate_limit.max_attempts', default: 5); + $decaySeconds = (int) config(key: 'laranail.authkit.rate_limit.decay_minutes', default: 1) * 60; if ($this->limiter->tooManyAttempts(key: $key, maxAttempts: $maxAttempts)) { return AuthResult::throttled(retryAfterSeconds: $this->limiter->availableIn(key: $key)); diff --git a/src/Actions/CheckEmailExists.php b/src/Actions/CheckEmailExists.php index 2db345b..306d094 100644 --- a/src/Actions/CheckEmailExists.php +++ b/src/Actions/CheckEmailExists.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Http\Request; use Illuminate\Contracts\Auth\Factory as AuthFactory; -use Simtabi\Laranail\Auth\Contracts\CheckEmailExistsInterface; +use Simtabi\Laranail\AuthKit\Contracts\CheckEmailExistsInterface; class CheckEmailExists implements CheckEmailExistsInterface { diff --git a/src/Actions/CreateNewUser.php b/src/Actions/CreateNewUser.php index de2af96..78f27a6 100644 --- a/src/Actions/CreateNewUser.php +++ b/src/Actions/CreateNewUser.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Support\Str; use Illuminate\Validation\Rule; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rules\Password; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Support\UserModelResolver; +use Simtabi\Laranail\AuthKit\Support\UserModelResolver; use Laravel\Fortify\Contracts\CreatesNewUsers as FortifyCreateNewUser; class CreateNewUser implements FortifyCreateNewUser @@ -27,7 +27,7 @@ public function create(array $input): Authenticatable 'email' => ['required', 'string', 'email', 'max:255', Rule::unique(table: $model)], 'password' => ['required', 'string', Password::default(), 'confirmed'], ], [ - config(key: 'auth-kit.turnstile.input', default: 'cf-turnstile-response') => AuthKit::turnstileRules(), + config(key: 'laranail.authkit.turnstile.input', default: 'cf-turnstile-response') => AuthKit::turnstileRules(), ]) )->validate(); diff --git a/src/Actions/CreateSocialAccountAction.php b/src/Actions/CreateSocialAccountAction.php index a1a1e3b..276a970 100644 --- a/src/Actions/CreateSocialAccountAction.php +++ b/src/Actions/CreateSocialAccountAction.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; -use Simtabi\Laranail\Auth\Models\Social; +use Simtabi\Laranail\AuthKit\Models\Social; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Laravel\Socialite\Contracts\User as SocialiteUser; -use Simtabi\Laranail\Auth\Contracts\CreateSocialAccountActionInterface; +use Simtabi\Laranail\AuthKit\Contracts\CreateSocialAccountActionInterface; class CreateSocialAccountAction implements CreateSocialAccountActionInterface { diff --git a/src/Actions/FindUserByEmail.php b/src/Actions/FindUserByEmail.php index 440986a..11a4ed1 100644 --- a/src/Actions/FindUserByEmail.php +++ b/src/Actions/FindUserByEmail.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Factory as AuthFactory; -use Simtabi\Laranail\Auth\Contracts\FindUserByEmailInterface; +use Simtabi\Laranail\AuthKit\Contracts\FindUserByEmailInterface; class FindUserByEmail implements FindUserByEmailInterface { diff --git a/src/Actions/IssueTokenForUser.php b/src/Actions/IssueTokenForUser.php index 4526d80..96a1e6f 100644 --- a/src/Actions/IssueTokenForUser.php +++ b/src/Actions/IssueTokenForUser.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Support\TokenResult; -use Simtabi\Laranail\Auth\Contracts\IssueTokenForUserInterface; +use Simtabi\Laranail\AuthKit\Support\TokenResult; +use Simtabi\Laranail\AuthKit\Contracts\IssueTokenForUserInterface; class IssueTokenForUser implements IssueTokenForUserInterface { diff --git a/src/Actions/LoginUser.php b/src/Actions/LoginUser.php index 2101bec..f90f342 100644 --- a/src/Actions/LoginUser.php +++ b/src/Actions/LoginUser.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Contracts\Session\Session; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Factory as AuthFactory; -use Simtabi\Laranail\Auth\Contracts\LoginUserInterface; +use Simtabi\Laranail\AuthKit\Contracts\LoginUserInterface; class LoginUser implements LoginUserInterface { diff --git a/src/Actions/LogoutUser.php b/src/Actions/LogoutUser.php index ae064bb..d293ed4 100644 --- a/src/Actions/LogoutUser.php +++ b/src/Actions/LogoutUser.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Contracts\Session\Session; use Illuminate\Contracts\Auth\Factory as AuthFactory; -use Simtabi\Laranail\Auth\Contracts\LogoutUserInterface; +use Simtabi\Laranail\AuthKit\Contracts\LogoutUserInterface; class LogoutUser implements LogoutUserInterface { diff --git a/src/Actions/ResetUserPassword.php b/src/Actions/ResetUserPassword.php index 711c4aa..b8d823b 100644 --- a/src/Actions/ResetUserPassword.php +++ b/src/Actions/ResetUserPassword.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; diff --git a/src/Actions/ResolveSocialIdentity.php b/src/Actions/ResolveSocialIdentity.php index c04d30b..da78e38 100644 --- a/src/Actions/ResolveSocialIdentity.php +++ b/src/Actions/ResolveSocialIdentity.php @@ -2,18 +2,18 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Support\Str; use Illuminate\Support\Facades\Hash; use Illuminate\Database\Eloquent\Model; -use Simtabi\Laranail\Auth\Models\Social; +use Simtabi\Laranail\AuthKit\Models\Social; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Enums\SocialProvider; -use Simtabi\Laranail\Auth\Support\UserModelResolver; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Support\UserModelResolver; use Laravel\Socialite\Contracts\User as SocialiteUser; -use Simtabi\Laranail\Auth\Contracts\ResolveSocialIdentityInterface; -use Simtabi\Laranail\Auth\Contracts\CreateSocialAccountActionInterface; +use Simtabi\Laranail\AuthKit\Contracts\ResolveSocialIdentityInterface; +use Simtabi\Laranail\AuthKit\Contracts\CreateSocialAccountActionInterface; class ResolveSocialIdentity implements ResolveSocialIdentityInterface { diff --git a/src/Actions/SocialCallbackAction.php b/src/Actions/SocialCallbackAction.php index e384653..9fc8352 100644 --- a/src/Actions/SocialCallbackAction.php +++ b/src/Actions/SocialCallbackAction.php @@ -2,15 +2,15 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthResult; +use Simtabi\Laranail\AuthKit\Support\AuthResult; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Laravel\Socialite\Contracts\Factory as SocialiteFactory; -use Simtabi\Laranail\Auth\Contracts\SocialCallbackActionInterface; -use Simtabi\Laranail\Auth\Contracts\ResolveSocialIdentityInterface; +use Simtabi\Laranail\AuthKit\Contracts\SocialCallbackActionInterface; +use Simtabi\Laranail\AuthKit\Contracts\ResolveSocialIdentityInterface; class SocialCallbackAction implements SocialCallbackActionInterface { diff --git a/src/Actions/SocialRedirectAction.php b/src/Actions/SocialRedirectAction.php index 3d2a92f..7e73f36 100644 --- a/src/Actions/SocialRedirectAction.php +++ b/src/Actions/SocialRedirectAction.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Enums\SocialProvider; -use Simtabi\Laranail\Auth\Support\SocialRedirectResult; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Support\SocialRedirectResult; use Laravel\Socialite\Contracts\Factory as SocialiteFactory; -use Simtabi\Laranail\Auth\Contracts\SocialRedirectActionInterface; +use Simtabi\Laranail\AuthKit\Contracts\SocialRedirectActionInterface; class SocialRedirectAction implements SocialRedirectActionInterface { diff --git a/src/Actions/UpdateUserPassword.php b/src/Actions/UpdateUserPassword.php index 878175d..cd323eb 100644 --- a/src/Actions/UpdateUserPassword.php +++ b/src/Actions/UpdateUserPassword.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rules\Password; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; use Laravel\Fortify\Contracts\UpdatesUserPasswords; class UpdateUserPassword implements UpdatesUserPasswords diff --git a/src/Actions/UpdateUserProfileInformation.php b/src/Actions/UpdateUserProfileInformation.php index 02310ca..674be23 100644 --- a/src/Actions/UpdateUserProfileInformation.php +++ b/src/Actions/UpdateUserProfileInformation.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Actions; +namespace Simtabi\Laranail\AuthKit\Actions; use Illuminate\Validation\Rule; use Illuminate\Support\Facades\Validator; diff --git a/src/AuthKitServiceProvider.php b/src/AuthKitServiceProvider.php index 8ed2de9..9bfa91e 100644 --- a/src/AuthKitServiceProvider.php +++ b/src/AuthKitServiceProvider.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth; +namespace Simtabi\Laranail\AuthKit; use Laravel\Fortify\Fortify; use Laravel\Passkeys\Passkeys; use Illuminate\Support\Facades\Event; -use Simtabi\Laranail\Auth\Models\Passkey; +use Simtabi\Laranail\AuthKit\Models\Passkey; use Simtabi\Laranail\Package\Tools\Package; use SocialiteProviders\Manager\SocialiteWasCalled; use Simtabi\Laranail\Package\Tools\Providers\PackageServiceProvider; @@ -17,31 +17,31 @@ class AuthKitServiceProvider extends PackageServiceProvider public function configurePackage(Package $package): void { $package - ->name('laranail/auth-kit') + ->name('laranail/authkit') ->publish( - paths: ['config/auth-kit.php' => config_path(path: 'auth-kit.php')], - tag: 'auth-kit-config', + paths: ['config/laranail/authkit.php' => config_path(path: 'laranail/authkit.php')], + tag: 'laranail::authkit-config', ) ->publish( paths: ['database/migrations/social' => database_path(path: 'migrations')], - tag: 'auth-kit-social-migrations', + tag: 'laranail::authkit-social-migrations', ) ->publish( paths: ['database/migrations/passkeys' => database_path(path: 'migrations')], - tag: 'auth-kit-passkey-migrations', + tag: 'laranail::authkit-passkey-migrations', ); } public function packageRegistered(): void { - $this->mergeConfigFrom(path: __DIR__.'/../config/auth-kit.php', key: 'auth-kit'); + $this->mergeConfigFrom(path: __DIR__.'/../config/laranail/authkit.php', key: 'laranail.authkit'); Passkeys::usePasskeyModel(Passkey::class); $this->app->singleton(Services\Turnstile::class, function (): Services\Turnstile { return new Services\Turnstile( - url: (string) config(key: 'auth-kit.turnstile.url'), - secretKey: (string) config(key: 'auth-kit.turnstile.secret_key'), + url: (string) config(key: 'laranail.authkit.turnstile.url'), + secretKey: (string) config(key: 'laranail.authkit.turnstile.secret_key'), ); }); @@ -67,9 +67,9 @@ public function packageBooted(): void private function configureFortify(): void { - config()->set(key: 'fortify.guard', value: config(key: 'auth-kit.guard', default: 'web')); - config()->set(key: 'fortify.views', value: config(key: 'auth-kit.fortify.views', default: false)); - config()->set(key: 'fortify.features', value: config(key: 'auth-kit.fortify.features', default: [])); + config()->set(key: 'fortify.guard', value: config(key: 'laranail.authkit.guard', default: 'web')); + config()->set(key: 'fortify.views', value: config(key: 'laranail.authkit.fortify.views', default: false)); + config()->set(key: 'fortify.features', value: config(key: 'laranail.authkit.fortify.features', default: [])); Fortify::createUsersUsing(callback: Actions\CreateNewUser::class); Fortify::updateUserProfileInformationUsing(callback: Actions\UpdateUserProfileInformation::class); @@ -79,7 +79,7 @@ private function configureFortify(): void private function registerConfig(): void { - foreach (config(key: 'auth-kit.social', default: []) as $provider => $providerConfig) { + foreach (config(key: 'laranail.authkit.social', default: []) as $provider => $providerConfig) { if (is_array(value: $providerConfig)) { config()->set(key: "services.{$provider}", value: $providerConfig); } diff --git a/src/Contracts/AttemptEmailPasswordLoginInterface.php b/src/Contracts/AttemptEmailPasswordLoginInterface.php index 09ef71e..ae936a2 100644 --- a/src/Contracts/AttemptEmailPasswordLoginInterface.php +++ b/src/Contracts/AttemptEmailPasswordLoginInterface.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthResult; +use Simtabi\Laranail\AuthKit\Support\AuthResult; interface AttemptEmailPasswordLoginInterface { diff --git a/src/Contracts/CheckEmailExistsInterface.php b/src/Contracts/CheckEmailExistsInterface.php index 1b72b30..c5701df 100644 --- a/src/Contracts/CheckEmailExistsInterface.php +++ b/src/Contracts/CheckEmailExistsInterface.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Http\Request; diff --git a/src/Contracts/CreateSocialAccountActionInterface.php b/src/Contracts/CreateSocialAccountActionInterface.php index fe4339d..37be7a8 100644 --- a/src/Contracts/CreateSocialAccountActionInterface.php +++ b/src/Contracts/CreateSocialAccountActionInterface.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; -use Simtabi\Laranail\Auth\Models\Social; +use Simtabi\Laranail\AuthKit\Models\Social; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Laravel\Socialite\Contracts\User as SocialiteUser; interface CreateSocialAccountActionInterface diff --git a/src/Contracts/FindUserByEmailInterface.php b/src/Contracts/FindUserByEmailInterface.php index e817e5f..292bd02 100644 --- a/src/Contracts/FindUserByEmailInterface.php +++ b/src/Contracts/FindUserByEmailInterface.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Contracts\Auth\Authenticatable; diff --git a/src/Contracts/IssueTokenForUserInterface.php b/src/Contracts/IssueTokenForUserInterface.php index 8d383d4..a3509cb 100644 --- a/src/Contracts/IssueTokenForUserInterface.php +++ b/src/Contracts/IssueTokenForUserInterface.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Support\TokenResult; +use Simtabi\Laranail\AuthKit\Support\TokenResult; interface IssueTokenForUserInterface { diff --git a/src/Contracts/LoginUserInterface.php b/src/Contracts/LoginUserInterface.php index f6698fe..909121f 100644 --- a/src/Contracts/LoginUserInterface.php +++ b/src/Contracts/LoginUserInterface.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Contracts\Auth\Authenticatable; diff --git a/src/Contracts/LogoutUserInterface.php b/src/Contracts/LogoutUserInterface.php index 56fea8a..e09f516 100644 --- a/src/Contracts/LogoutUserInterface.php +++ b/src/Contracts/LogoutUserInterface.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; interface LogoutUserInterface { diff --git a/src/Contracts/ResolveSocialIdentityInterface.php b/src/Contracts/ResolveSocialIdentityInterface.php index 4c6148d..644be26 100644 --- a/src/Contracts/ResolveSocialIdentityInterface.php +++ b/src/Contracts/ResolveSocialIdentityInterface.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Laravel\Socialite\Contracts\User as SocialiteUser; interface ResolveSocialIdentityInterface diff --git a/src/Contracts/SocialCallbackActionInterface.php b/src/Contracts/SocialCallbackActionInterface.php index b70a67e..a1c79e3 100644 --- a/src/Contracts/SocialCallbackActionInterface.php +++ b/src/Contracts/SocialCallbackActionInterface.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthResult; +use Simtabi\Laranail\AuthKit\Support\AuthResult; interface SocialCallbackActionInterface { diff --git a/src/Contracts/SocialRedirectActionInterface.php b/src/Contracts/SocialRedirectActionInterface.php index 9f69544..471c818 100644 --- a/src/Contracts/SocialRedirectActionInterface.php +++ b/src/Contracts/SocialRedirectActionInterface.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Contracts; +namespace Simtabi\Laranail\AuthKit\Contracts; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\SocialRedirectResult; +use Simtabi\Laranail\AuthKit\Support\SocialRedirectResult; interface SocialRedirectActionInterface { diff --git a/src/Enums/AuthStatus.php b/src/Enums/AuthStatus.php index 47c2384..bef295a 100644 --- a/src/Enums/AuthStatus.php +++ b/src/Enums/AuthStatus.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Enums; +namespace Simtabi\Laranail\AuthKit\Enums; enum AuthStatus: string { diff --git a/src/Enums/SocialProvider.php b/src/Enums/SocialProvider.php index cb8c8ce..bc0d92d 100644 --- a/src/Enums/SocialProvider.php +++ b/src/Enums/SocialProvider.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Enums; +namespace Simtabi\Laranail\AuthKit\Enums; use Simtabi\Laranail\Enumerator\Attributes\Label; use Simtabi\Laranail\Enumerator\Contracts\Enumerator; diff --git a/src/Http/Controllers/AbstractAttemptEmailPasswordLoginController.php b/src/Http/Controllers/AbstractAttemptEmailPasswordLoginController.php index 08f9b9e..714730c 100644 --- a/src/Http/Controllers/AbstractAttemptEmailPasswordLoginController.php +++ b/src/Http/Controllers/AbstractAttemptEmailPasswordLoginController.php @@ -2,15 +2,15 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthKit; -use Simtabi\Laranail\Auth\Enums\AuthStatus; -use Simtabi\Laranail\Auth\Support\AuthResult; -use Simtabi\Laranail\Auth\Contracts\LoginUserInterface; -use Simtabi\Laranail\Auth\Contracts\AttemptEmailPasswordLoginInterface; -use Simtabi\Laranail\Auth\Http\Requests\AttemptEmailPasswordLoginRequest; +use Simtabi\Laranail\AuthKit\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Enums\AuthStatus; +use Simtabi\Laranail\AuthKit\Support\AuthResult; +use Simtabi\Laranail\AuthKit\Contracts\LoginUserInterface; +use Simtabi\Laranail\AuthKit\Contracts\AttemptEmailPasswordLoginInterface; +use Simtabi\Laranail\AuthKit\Http\Requests\AttemptEmailPasswordLoginRequest; abstract class AbstractAttemptEmailPasswordLoginController extends AbstractAuthController { diff --git a/src/Http/Controllers/AbstractAuthController.php b/src/Http/Controllers/AbstractAuthController.php index fea2872..02a18e7 100644 --- a/src/Http/Controllers/AbstractAuthController.php +++ b/src/Http/Controllers/AbstractAuthController.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; abstract class AbstractAuthController { diff --git a/src/Http/Controllers/AbstractCheckEmailExistsController.php b/src/Http/Controllers/AbstractCheckEmailExistsController.php index b5ce1a6..924264d 100644 --- a/src/Http/Controllers/AbstractCheckEmailExistsController.php +++ b/src/Http/Controllers/AbstractCheckEmailExistsController.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Contracts\CheckEmailExistsInterface; -use Simtabi\Laranail\Auth\Http\Requests\CheckEmailExistsRequest; +use Simtabi\Laranail\AuthKit\Contracts\CheckEmailExistsInterface; +use Simtabi\Laranail\AuthKit\Http\Requests\CheckEmailExistsRequest; abstract class AbstractCheckEmailExistsController extends AbstractAuthController { diff --git a/src/Http/Controllers/AbstractEmailVerificationNotificationController.php b/src/Http/Controllers/AbstractEmailVerificationNotificationController.php index a464cc8..65b9436 100644 --- a/src/Http/Controllers/AbstractEmailVerificationNotificationController.php +++ b/src/Http/Controllers/AbstractEmailVerificationNotificationController.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; abstract class AbstractEmailVerificationNotificationController extends AbstractAuthController { diff --git a/src/Http/Controllers/AbstractEmailVerificationPromptController.php b/src/Http/Controllers/AbstractEmailVerificationPromptController.php index 29b8e1b..f0d259e 100644 --- a/src/Http/Controllers/AbstractEmailVerificationPromptController.php +++ b/src/Http/Controllers/AbstractEmailVerificationPromptController.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; abstract class AbstractEmailVerificationPromptController extends AbstractAuthController { diff --git a/src/Http/Controllers/AbstractLogoutController.php b/src/Http/Controllers/AbstractLogoutController.php index 3e0557c..27f0171 100644 --- a/src/Http/Controllers/AbstractLogoutController.php +++ b/src/Http/Controllers/AbstractLogoutController.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthKit; -use Simtabi\Laranail\Auth\Contracts\LogoutUserInterface; +use Simtabi\Laranail\AuthKit\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Contracts\LogoutUserInterface; abstract class AbstractLogoutController extends AbstractAuthController { diff --git a/src/Http/Controllers/AbstractNewPasswordController.php b/src/Http/Controllers/AbstractNewPasswordController.php index 59e1be2..ab738ae 100644 --- a/src/Http/Controllers/AbstractNewPasswordController.php +++ b/src/Http/Controllers/AbstractNewPasswordController.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Support\Str; use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; use Illuminate\Contracts\Auth\PasswordBroker; use Laravel\Fortify\Contracts\ResetsUserPasswords; @@ -19,7 +19,7 @@ public function store(Request $request): mixed 'token' => 'required', 'email' => 'required|email', 'password' => 'required|confirmed', - config(key: 'auth-kit.turnstile.input', default: 'cf-turnstile-response') => AuthKit::turnstileRules(), + config(key: 'laranail.authkit.turnstile.input', default: 'cf-turnstile-response') => AuthKit::turnstileRules(), ]); $credentials = $request->only('email', 'password', 'password_confirmation', 'token'); diff --git a/src/Http/Controllers/AbstractPasswordResetLinkController.php b/src/Http/Controllers/AbstractPasswordResetLinkController.php index 1d27cdb..2e33276 100644 --- a/src/Http/Controllers/AbstractPasswordResetLinkController.php +++ b/src/Http/Controllers/AbstractPasswordResetLinkController.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Support\Str; use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; use Illuminate\Contracts\Auth\PasswordBroker; abstract class AbstractPasswordResetLinkController extends AbstractAuthController @@ -16,7 +16,7 @@ public function store(Request $request): mixed { $request->validate([ 'email' => 'required|email', - config(key: 'auth-kit.turnstile.input', default: 'cf-turnstile-response') => AuthKit::turnstileRules(), + config(key: 'laranail.authkit.turnstile.input', default: 'cf-turnstile-response') => AuthKit::turnstileRules(), ]); $email = $request->input('email'); diff --git a/src/Http/Controllers/AbstractRegisterController.php b/src/Http/Controllers/AbstractRegisterController.php index 6d43a79..3d87d5e 100644 --- a/src/Http/Controllers/AbstractRegisterController.php +++ b/src/Http/Controllers/AbstractRegisterController.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Auth\Events\Registered; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; use Illuminate\Contracts\Auth\Authenticatable; -use Simtabi\Laranail\Auth\Contracts\LoginUserInterface; +use Simtabi\Laranail\AuthKit\Contracts\LoginUserInterface; use Laravel\Fortify\Contracts\CreatesNewUsers as FortifyCreateNewUser; abstract class AbstractRegisterController extends AbstractAuthController diff --git a/src/Http/Controllers/AbstractSocialCallbackController.php b/src/Http/Controllers/AbstractSocialCallbackController.php index b733f4c..08eabb0 100644 --- a/src/Http/Controllers/AbstractSocialCallbackController.php +++ b/src/Http/Controllers/AbstractSocialCallbackController.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Support\AuthKit; -use Simtabi\Laranail\Auth\Enums\AuthStatus; -use Simtabi\Laranail\Auth\Support\AuthResult; -use Simtabi\Laranail\Auth\Contracts\LoginUserInterface; -use Simtabi\Laranail\Auth\Contracts\SocialCallbackActionInterface; +use Simtabi\Laranail\AuthKit\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Enums\AuthStatus; +use Simtabi\Laranail\AuthKit\Support\AuthResult; +use Simtabi\Laranail\AuthKit\Contracts\LoginUserInterface; +use Simtabi\Laranail\AuthKit\Contracts\SocialCallbackActionInterface; abstract class AbstractSocialCallbackController extends AbstractAuthController { diff --git a/src/Http/Controllers/AbstractSocialRedirectController.php b/src/Http/Controllers/AbstractSocialRedirectController.php index 8088b2d..3f34947 100644 --- a/src/Http/Controllers/AbstractSocialRedirectController.php +++ b/src/Http/Controllers/AbstractSocialRedirectController.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Http\Request; -use Simtabi\Laranail\Auth\Contracts\SocialRedirectActionInterface; +use Simtabi\Laranail\AuthKit\Contracts\SocialRedirectActionInterface; abstract class AbstractSocialRedirectController extends AbstractAuthController { diff --git a/src/Http/Controllers/AbstractVerifyEmailController.php b/src/Http/Controllers/AbstractVerifyEmailController.php index 924f853..3cc4ba0 100644 --- a/src/Http/Controllers/AbstractVerifyEmailController.php +++ b/src/Http/Controllers/AbstractVerifyEmailController.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Controllers; +namespace Simtabi\Laranail\AuthKit\Http\Controllers; use Illuminate\Auth\Events\Verified; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; use Laravel\Fortify\Http\Requests\VerifyEmailRequest; abstract class AbstractVerifyEmailController extends AbstractAuthController diff --git a/src/Http/Middleware/ValidateTurnstile.php b/src/Http/Middleware/ValidateTurnstile.php index 0400379..1167dbc 100644 --- a/src/Http/Middleware/ValidateTurnstile.php +++ b/src/Http/Middleware/ValidateTurnstile.php @@ -2,18 +2,18 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Middleware; +namespace Simtabi\Laranail\AuthKit\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; -use Simtabi\Laranail\Auth\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Support\AuthKit; class ValidateTurnstile { public function handle(Request $request, Closure $next): mixed { - $input = config(key: 'auth-kit.turnstile.input', default: 'cf-turnstile-response'); + $input = config(key: 'laranail.authkit.turnstile.input', default: 'cf-turnstile-response'); Validator::make( data: $request->all(), rules: [$input => AuthKit::turnstileRules()], diff --git a/src/Http/Requests/AttemptEmailPasswordLoginRequest.php b/src/Http/Requests/AttemptEmailPasswordLoginRequest.php index 8c80261..84598ac 100644 --- a/src/Http/Requests/AttemptEmailPasswordLoginRequest.php +++ b/src/Http/Requests/AttemptEmailPasswordLoginRequest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Requests; +namespace Simtabi\Laranail\AuthKit\Http\Requests; use Illuminate\Foundation\Http\FormRequest; diff --git a/src/Http/Requests/CheckEmailExistsRequest.php b/src/Http/Requests/CheckEmailExistsRequest.php index 0fd05ac..f159af9 100644 --- a/src/Http/Requests/CheckEmailExistsRequest.php +++ b/src/Http/Requests/CheckEmailExistsRequest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Http\Requests; +namespace Simtabi\Laranail\AuthKit\Http\Requests; use Illuminate\Foundation\Http\FormRequest; diff --git a/src/Models/Passkey.php b/src/Models/Passkey.php index 7823b9d..9a0e195 100644 --- a/src/Models/Passkey.php +++ b/src/Models/Passkey.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Models; +namespace Simtabi\Laranail\AuthKit\Models; use Laravel\Passkeys\Passkey as BasePasskey; use Illuminate\Database\Eloquent\Relations\MorphTo; diff --git a/src/Models/Social.php b/src/Models/Social.php index 4342ac0..4675cd8 100644 --- a/src/Models/Social.php +++ b/src/Models/Social.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Models; +namespace Simtabi\Laranail\AuthKit\Models; use Illuminate\Database\Eloquent\Model; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\Factories\HasFactory; -use Simtabi\Laranail\Auth\Database\Factories\SocialFactory; +use Simtabi\Laranail\AuthKit\Database\Factories\SocialFactory; class Social extends Model { diff --git a/src/PasskeyAuthenticatable.php b/src/PasskeyAuthenticatable.php index d49c296..88ee51f 100644 --- a/src/PasskeyAuthenticatable.php +++ b/src/PasskeyAuthenticatable.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth; +namespace Simtabi\Laranail\AuthKit; use Laravel\Passkeys\Passkeys; use Illuminate\Database\Eloquent\Relations\HasMany; -use Simtabi\Laranail\Auth\Relations\PasskeyMorphMany; +use Simtabi\Laranail\AuthKit\Relations\PasskeyMorphMany; use Laravel\Passkeys\PasskeyAuthenticatable as BasePasskeyAuthenticatable; /** diff --git a/src/Relations/PasskeyMorphMany.php b/src/Relations/PasskeyMorphMany.php index 1295df7..d2515be 100644 --- a/src/Relations/PasskeyMorphMany.php +++ b/src/Relations/PasskeyMorphMany.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Relations; +namespace Simtabi\Laranail\AuthKit\Relations; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; diff --git a/src/Rules/TurnstileRule.php b/src/Rules/TurnstileRule.php index 1be9a40..f5b974a 100644 --- a/src/Rules/TurnstileRule.php +++ b/src/Rules/TurnstileRule.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Rules; +namespace Simtabi\Laranail\AuthKit\Rules; use Closure; -use Simtabi\Laranail\Auth\Services\Turnstile; +use Simtabi\Laranail\AuthKit\Services\Turnstile; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Translation\PotentiallyTranslatedString; diff --git a/src/Services/PayPalSocialProvider.php b/src/Services/PayPalSocialProvider.php index 4c9bc98..f021144 100644 --- a/src/Services/PayPalSocialProvider.php +++ b/src/Services/PayPalSocialProvider.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Services; +namespace Simtabi\Laranail\AuthKit\Services; use RuntimeException; use GuzzleHttp\RequestOptions; @@ -41,7 +41,7 @@ public function getAccessTokenResponse($code): array protected function useSandbox(): bool { - return config(key: 'auth-kit.social.paypal.sandbox_mode', default: true); + return config(key: 'laranail.authkit.social.paypal.sandbox_mode', default: true); } protected function getWebBaseUrl(): string diff --git a/src/Services/Turnstile.php b/src/Services/Turnstile.php index 526fc71..215dd0a 100644 --- a/src/Services/Turnstile.php +++ b/src/Services/Turnstile.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Services; +namespace Simtabi\Laranail\AuthKit\Services; use Throwable; use Illuminate\Support\Facades\Http; diff --git a/src/Support/AuthKit.php b/src/Support/AuthKit.php index cc60a3d..31332f9 100644 --- a/src/Support/AuthKit.php +++ b/src/Support/AuthKit.php @@ -2,20 +2,20 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Support; +namespace Simtabi\Laranail\AuthKit\Support; -use Simtabi\Laranail\Auth\Rules\TurnstileRule; +use Simtabi\Laranail\AuthKit\Rules\TurnstileRule; class AuthKit { public static function guard(): string { - return config(key: 'auth-kit.guard', default: 'web'); + return config(key: 'laranail.authkit.guard', default: 'web'); } public static function redirect(string $key, string $default = '/'): string { - return config(key: "auth-kit.redirects.{$key}", default: $default); + return config(key: "laranail.authkit.redirects.{$key}", default: $default); } public static function afterLoginRedirect(): string @@ -45,7 +45,7 @@ public static function afterEmailVerificationRedirect(): string public static function turnstileRules(): array { - if (! config(key: 'auth-kit.turnstile.enabled', default: false)) { + if (! config(key: 'laranail.authkit.turnstile.enabled', default: false)) { return []; } diff --git a/src/Support/AuthResult.php b/src/Support/AuthResult.php index 9a5cd9e..38345be 100644 --- a/src/Support/AuthResult.php +++ b/src/Support/AuthResult.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Support; +namespace Simtabi\Laranail\AuthKit\Support; -use Simtabi\Laranail\Auth\Enums\AuthStatus; +use Simtabi\Laranail\AuthKit\Enums\AuthStatus; use Illuminate\Contracts\Auth\Authenticatable; class AuthResult diff --git a/src/Support/SocialRedirectResult.php b/src/Support/SocialRedirectResult.php index b8ab716..8638f72 100644 --- a/src/Support/SocialRedirectResult.php +++ b/src/Support/SocialRedirectResult.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Support; +namespace Simtabi\Laranail\AuthKit\Support; class SocialRedirectResult { diff --git a/src/Support/TokenResult.php b/src/Support/TokenResult.php index f6185bc..deab46d 100644 --- a/src/Support/TokenResult.php +++ b/src/Support/TokenResult.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Support; +namespace Simtabi\Laranail\AuthKit\Support; use Illuminate\Contracts\Auth\Authenticatable; diff --git a/src/Support/UserModelResolver.php b/src/Support/UserModelResolver.php index 4fb8d17..789eaea 100644 --- a/src/Support/UserModelResolver.php +++ b/src/Support/UserModelResolver.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Support; +namespace Simtabi\Laranail\AuthKit\Support; use LogicException; use Illuminate\Database\Eloquent\Model; @@ -12,10 +12,10 @@ class UserModelResolver { public static function resolve(?string $guard = null): string { - $model = config('auth-kit.user_model'); + $model = config('laranail.authkit.user_model'); if (! is_string($model) || $model === '') { - $guard ??= config('auth-kit.guard', 'web'); + $guard ??= config('laranail.authkit.guard', 'web'); $provider = config("auth.guards.{$guard}.provider", config('auth.defaults.provider')); $model = config("auth.providers.{$provider}.model"); } diff --git a/tests/Feature/AttemptEmailPasswordLoginTest.php b/tests/Feature/AttemptEmailPasswordLoginTest.php index 62bd558..2b1629d 100644 --- a/tests/Feature/AttemptEmailPasswordLoginTest.php +++ b/tests/Feature/AttemptEmailPasswordLoginTest.php @@ -5,8 +5,8 @@ use Illuminate\Support\Str; use Illuminate\Http\Request; use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Enums\AuthStatus; -use Simtabi\Laranail\Auth\Actions\AttemptEmailPasswordLogin; +use Simtabi\Laranail\AuthKit\Enums\AuthStatus; +use Simtabi\Laranail\AuthKit\Actions\AttemptEmailPasswordLogin; function loginRequest(array $data = [], ?string $ip = null): Request { @@ -74,7 +74,7 @@ function loginRequest(array $data = [], ?string $ip = null): Request }); it('throttles repeated failed credentials', function (): void { - config()->set('auth-kit.rate_limit.max_attempts', 1); + config()->set('laranail.authkit.rate_limit.max_attempts', 1); User::factory()->create([ 'email' => 'ada@example.com', @@ -91,7 +91,7 @@ function loginRequest(array $data = [], ?string $ip = null): Request }); it('throttles per ip address', function (): void { - config()->set('auth-kit.rate_limit.max_attempts', 1); + config()->set('laranail.authkit.rate_limit.max_attempts', 1); User::factory()->create([ 'email' => 'ada@example.com', @@ -115,7 +115,7 @@ function loginRequest(array $data = [], ?string $ip = null): Request }); it('throttles same ip with same email', function (): void { - config()->set('auth-kit.rate_limit.max_attempts', 1); + config()->set('laranail.authkit.rate_limit.max_attempts', 1); User::factory()->create([ 'email' => 'ada@example.com', @@ -138,7 +138,7 @@ function loginRequest(array $data = [], ?string $ip = null): Request }); it('clears the throttle limit on successful login', function (): void { - config()->set('auth-kit.rate_limit.max_attempts', 2); + config()->set('laranail.authkit.rate_limit.max_attempts', 2); $password = Str::random(16); diff --git a/tests/Feature/CheckEmailExistsTest.php b/tests/Feature/CheckEmailExistsTest.php index 810e52b..1768cc5 100644 --- a/tests/Feature/CheckEmailExistsTest.php +++ b/tests/Feature/CheckEmailExistsTest.php @@ -4,7 +4,7 @@ use Illuminate\Http\Request; use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Actions\CheckEmailExists; +use Simtabi\Laranail\AuthKit\Actions\CheckEmailExists; function checkEmailRequest(string $email): Request { @@ -36,6 +36,6 @@ function checkEmailRequest(string $email): Request expect($action->execute( request: checkEmailRequest('guardtest@example.com'), - guard: config('auth-kit.guard'), + guard: config('laranail.authkit.guard'), ))->toBeTrue(); }); diff --git a/tests/Feature/CreateNewUserTest.php b/tests/Feature/CreateNewUserTest.php index 8ee8ad9..40137a0 100644 --- a/tests/Feature/CreateNewUserTest.php +++ b/tests/Feature/CreateNewUserTest.php @@ -6,7 +6,7 @@ use Illuminate\Validation\Rule; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rules\Password; -use Simtabi\Laranail\Auth\Actions\CreateNewUser; +use Simtabi\Laranail\AuthKit\Actions\CreateNewUser; it(description: 'creates a user with a hashed password', closure: function (): void { $user = app(abstract: CreateNewUser::class)->create(input: [ @@ -91,8 +91,8 @@ }); it(description: 'resolves model from guard config when user_model is not set', closure: function (): void { - config()->set(key: 'auth-kit.user_model', value: null); - config()->set(key: 'auth-kit.guard', value: 'web'); + config()->set(key: 'laranail.authkit.user_model', value: null); + config()->set(key: 'laranail.authkit.guard', value: 'web'); $user = app(abstract: CreateNewUser::class)->create(input: [ 'name' => 'Ada Lovelace', @@ -105,7 +105,7 @@ }); it(description: 'resolves model from explicit user_model config', closure: function (): void { - config()->set(key: 'auth-kit.user_model', value: User::class); + config()->set(key: 'laranail.authkit.user_model', value: User::class); $user = app(abstract: CreateNewUser::class)->create(input: [ 'name' => 'Ada Lovelace', diff --git a/tests/Feature/CreateSocialAccountActionTest.php b/tests/Feature/CreateSocialAccountActionTest.php index b1edb4b..991cf47 100644 --- a/tests/Feature/CreateSocialAccountActionTest.php +++ b/tests/Feature/CreateSocialAccountActionTest.php @@ -3,10 +3,10 @@ declare(strict_types=1); use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Models\Social; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Models\Social; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Laravel\Socialite\Two\User as SocialiteUser; -use Simtabi\Laranail\Auth\Actions\CreateSocialAccountAction; +use Simtabi\Laranail\AuthKit\Actions\CreateSocialAccountAction; it(description: 'creates a social account with morph', closure: function (): void { $user = User::factory()->create(); diff --git a/tests/Feature/FindUserByEmailTest.php b/tests/Feature/FindUserByEmailTest.php index 475f5de..1f1a6ae 100644 --- a/tests/Feature/FindUserByEmailTest.php +++ b/tests/Feature/FindUserByEmailTest.php @@ -3,7 +3,7 @@ declare(strict_types=1); use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Actions\FindUserByEmail; +use Simtabi\Laranail\AuthKit\Actions\FindUserByEmail; it(description: 'returns user when the email exists', closure: function (): void { $user = User::factory()->create([ @@ -33,7 +33,7 @@ $found = $action->execute( email: 'guardtest@example.com', - guard: config('auth-kit.guard'), + guard: config('laranail.authkit.guard'), ); expect($found)->not->toBeNull() diff --git a/tests/Feature/IssueTokenForUserTest.php b/tests/Feature/IssueTokenForUserTest.php index bebece5..e7cc92f 100644 --- a/tests/Feature/IssueTokenForUserTest.php +++ b/tests/Feature/IssueTokenForUserTest.php @@ -3,8 +3,8 @@ declare(strict_types=1); use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Support\TokenResult; -use Simtabi\Laranail\Auth\Actions\IssueTokenForUser; +use Simtabi\Laranail\AuthKit\Support\TokenResult; +use Simtabi\Laranail\AuthKit\Actions\IssueTokenForUser; it('creates a sanctum token and returns a token result', function (): void { $user = User::factory()->create(); diff --git a/tests/Feature/LoginUserTest.php b/tests/Feature/LoginUserTest.php index 4971731..6ed8942 100644 --- a/tests/Feature/LoginUserTest.php +++ b/tests/Feature/LoginUserTest.php @@ -3,7 +3,7 @@ declare(strict_types=1); use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Actions\LoginUser; +use Simtabi\Laranail\AuthKit\Actions\LoginUser; it(description: 'logs the user into the guard', closure: function () { $user = User::factory()->create(); diff --git a/tests/Feature/LogoutUserTest.php b/tests/Feature/LogoutUserTest.php index b1d95b7..c92fdaf 100644 --- a/tests/Feature/LogoutUserTest.php +++ b/tests/Feature/LogoutUserTest.php @@ -3,8 +3,8 @@ declare(strict_types=1); use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Actions\LoginUser; -use Simtabi\Laranail\Auth\Actions\LogoutUser; +use Simtabi\Laranail\AuthKit\Actions\LoginUser; +use Simtabi\Laranail\AuthKit\Actions\LogoutUser; it(description: 'logs the user out of the guard', closure: function () { $user = User::factory()->create(); diff --git a/tests/Feature/NamingConventionTest.php b/tests/Feature/NamingConventionTest.php new file mode 100644 index 0000000..3a62303 --- /dev/null +++ b/tests/Feature/NamingConventionTest.php @@ -0,0 +1,33 @@ + str_contains($tag, 'authkit') && ! str_starts_with($tag, 'laranail::'), + ); + + expect(array_values($bare))->toBe([]); +}); + +it('keeps its configuration under the laranail namespace', function (): void { + expect(config('laranail.authkit'))->toBeArray() + ->and(config('auth-kit'))->toBeNull(); +}); + +it('registers no bare top-level configuration key', function (): void { + foreach (['auth-kit', 'authkit'] as $bare) { + expect(config($bare))->toBeNull(); + } +}); diff --git a/tests/Feature/PasskeyTest.php b/tests/Feature/PasskeyTest.php index cbf2ae9..47d6b7e 100644 --- a/tests/Feature/PasskeyTest.php +++ b/tests/Feature/PasskeyTest.php @@ -7,9 +7,9 @@ use Workbench\App\Models\User; use Illuminate\Support\Facades\Route; use Illuminate\Support\ServiceProvider; -use Simtabi\Laranail\Auth\Models\Passkey; +use Simtabi\Laranail\AuthKit\Models\Passkey; use Laravel\Fortify\Contracts\PasskeyUser; -use Simtabi\Laranail\Auth\AuthKitServiceProvider; +use Simtabi\Laranail\AuthKit\AuthKitServiceProvider; use Laravel\Passkeys\Http\Controllers\PasskeyLoginController; use Laravel\Passkeys\Http\Controllers\PasskeyConfirmationController; use Laravel\Passkeys\Http\Controllers\PasskeyRegistrationController; @@ -34,7 +34,7 @@ it('publishes the Auth Kit passkeys migration', function (): void { $paths = ServiceProvider::pathsToPublish( provider: AuthKitServiceProvider::class, - group: 'auth-kit-passkey-migrations', + group: 'laranail::authkit-passkey-migrations', ); expect(array_map('realpath', array_keys($paths))) @@ -44,7 +44,7 @@ it('publishes the Auth Kit social migrations on demand', function (): void { $paths = ServiceProvider::pathsToPublish( provider: AuthKitServiceProvider::class, - group: 'auth-kit-social-migrations', + group: 'laranail::authkit-social-migrations', ); expect(array_map('realpath', array_keys($paths))) diff --git a/tests/Feature/PasswordResetLinkControllerTest.php b/tests/Feature/PasswordResetLinkControllerTest.php index f6cd233..afd3e54 100644 --- a/tests/Feature/PasswordResetLinkControllerTest.php +++ b/tests/Feature/PasswordResetLinkControllerTest.php @@ -5,7 +5,7 @@ use Illuminate\Http\Request; use Workbench\App\Models\User; use Illuminate\Support\Facades\Notification; -use Simtabi\Laranail\Auth\Http\Controllers\AbstractPasswordResetLinkController; +use Simtabi\Laranail\AuthKit\Http\Controllers\AbstractPasswordResetLinkController; it('returns the same response for known and unknown password reset email addresses', function (): void { Notification::fake(); diff --git a/tests/Feature/ResetUserPasswordTest.php b/tests/Feature/ResetUserPasswordTest.php index 2a56f10..b99e30a 100644 --- a/tests/Feature/ResetUserPasswordTest.php +++ b/tests/Feature/ResetUserPasswordTest.php @@ -5,7 +5,7 @@ use Workbench\App\Models\User; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\ValidationException; -use Simtabi\Laranail\Auth\Actions\ResetUserPassword; +use Simtabi\Laranail\AuthKit\Actions\ResetUserPassword; it('hashes and persists the new password', function (): void { $user = User::factory()->create([ diff --git a/tests/Feature/ResolveSocialIdentityTest.php b/tests/Feature/ResolveSocialIdentityTest.php index 2ebf321..7ef48d6 100644 --- a/tests/Feature/ResolveSocialIdentityTest.php +++ b/tests/Feature/ResolveSocialIdentityTest.php @@ -3,10 +3,10 @@ declare(strict_types=1); use Workbench\App\Models\User; -use Simtabi\Laranail\Auth\Models\Social; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Models\Social; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Laravel\Socialite\Two\User as SocialiteUser; -use Simtabi\Laranail\Auth\Actions\ResolveSocialIdentity; +use Simtabi\Laranail\AuthKit\Actions\ResolveSocialIdentity; function socialiteUser(array $overrides = []): SocialiteUser { diff --git a/tests/Feature/SocialCallbackActionTest.php b/tests/Feature/SocialCallbackActionTest.php index fda0120..8395710 100644 --- a/tests/Feature/SocialCallbackActionTest.php +++ b/tests/Feature/SocialCallbackActionTest.php @@ -6,10 +6,10 @@ use Illuminate\Routing\Route; use Workbench\App\Models\User; use Laravel\Socialite\Facades\Socialite; -use Simtabi\Laranail\Auth\Models\Social; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Models\Social; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Laravel\Socialite\Two\User as SocialiteUser; -use Simtabi\Laranail\Auth\Actions\SocialCallbackAction; +use Simtabi\Laranail\AuthKit\Actions\SocialCallbackAction; function callbackRequest(string $provider): Request { diff --git a/tests/Feature/SocialRedirectActionTest.php b/tests/Feature/SocialRedirectActionTest.php index 45c20ae..79473d0 100644 --- a/tests/Feature/SocialRedirectActionTest.php +++ b/tests/Feature/SocialRedirectActionTest.php @@ -6,9 +6,9 @@ use Illuminate\Routing\Route; use Laravel\Socialite\Facades\Socialite; use Illuminate\Support\Facades\Validator; -use Simtabi\Laranail\Auth\Enums\SocialProvider; +use Simtabi\Laranail\AuthKit\Enums\SocialProvider; use Simtabi\Laranail\Enumerator\Rules\EnumValue; -use Simtabi\Laranail\Auth\Actions\SocialRedirectAction; +use Simtabi\Laranail\AuthKit\Actions\SocialRedirectAction; function redirectRequest(string $provider): Request { diff --git a/tests/Feature/TurnstileTest.php b/tests/Feature/TurnstileTest.php index 3badce6..887c683 100644 --- a/tests/Feature/TurnstileTest.php +++ b/tests/Feature/TurnstileTest.php @@ -6,8 +6,8 @@ use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Validator; -use Simtabi\Laranail\Auth\Support\AuthKit; -use Simtabi\Laranail\Auth\Rules\TurnstileRule; +use Simtabi\Laranail\AuthKit\Support\AuthKit; +use Simtabi\Laranail\AuthKit\Rules\TurnstileRule; function useTurnstileRoute(string $middleware): void { @@ -19,8 +19,8 @@ function useTurnstileRoute(string $middleware): void } beforeEach(function (): void { - config()->set('auth-kit.turnstile.enabled', true); - config()->set('auth-kit.turnstile.secret_key', 'secret-key'); + config()->set('laranail.authkit.turnstile.enabled', true); + config()->set('laranail.authkit.turnstile.secret_key', 'secret-key'); }); it('accepts a valid token on web requests', function (): void { @@ -63,7 +63,7 @@ function useTurnstileRoute(string $middleware): void }); it('does not add rules when Turnstile is disabled', function (): void { - config()->set('auth-kit.turnstile.enabled', false); + config()->set('laranail.authkit.turnstile.enabled', false); useTurnstileRoute(middleware: 'web'); expect(AuthKit::turnstileRules())->toBe([]); diff --git a/tests/Feature/UpdateUserPasswordTest.php b/tests/Feature/UpdateUserPasswordTest.php index 931f534..311974e 100644 --- a/tests/Feature/UpdateUserPasswordTest.php +++ b/tests/Feature/UpdateUserPasswordTest.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\Hash; use Illuminate\Validation\ValidationException; use Laravel\Fortify\Contracts\UpdatesUserPasswords; -use Simtabi\Laranail\Auth\Actions\UpdateUserPassword; +use Simtabi\Laranail\AuthKit\Actions\UpdateUserPassword; function expectPasswordUpdateValidationFailure(array $input, string $field, User $user): void { diff --git a/tests/Feature/UpdateUserProfileInformationTest.php b/tests/Feature/UpdateUserProfileInformationTest.php index a6e6336..6c848c5 100644 --- a/tests/Feature/UpdateUserProfileInformationTest.php +++ b/tests/Feature/UpdateUserProfileInformationTest.php @@ -6,7 +6,7 @@ use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Validation\ValidationException; use Laravel\Fortify\Contracts\UpdatesUserProfileInformation; -use Simtabi\Laranail\Auth\Actions\UpdateUserProfileInformation; +use Simtabi\Laranail\AuthKit\Actions\UpdateUserProfileInformation; class ProfileVerifiableUser extends User implements MustVerifyEmail { diff --git a/tests/Pest.php b/tests/Pest.php index 7553025..c03b0fd 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use Simtabi\Laranail\Auth\Tests\TestCase; +use Simtabi\Laranail\AuthKit\Tests\TestCase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase; uses(TestCase::class, LazilyRefreshDatabase::class)->in('Feature', 'Unit'); diff --git a/tests/TestCase.php b/tests/TestCase.php index fd11e65..89f371a 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Simtabi\Laranail\Auth\Tests; +namespace Simtabi\Laranail\AuthKit\Tests; use Orchestra\Testbench\TestCase as BaseTestCase; -use Simtabi\Laranail\Auth\AuthKitServiceProvider; +use Simtabi\Laranail\AuthKit\AuthKitServiceProvider; abstract class TestCase extends BaseTestCase { diff --git a/tests/Unit/AuthResultTest.php b/tests/Unit/AuthResultTest.php index 1d1fb95..ecde3d1 100644 --- a/tests/Unit/AuthResultTest.php +++ b/tests/Unit/AuthResultTest.php @@ -2,8 +2,8 @@ declare(strict_types=1); -use Simtabi\Laranail\Auth\Enums\AuthStatus; -use Simtabi\Laranail\Auth\Support\AuthResult; +use Simtabi\Laranail\AuthKit\Enums\AuthStatus; +use Simtabi\Laranail\AuthKit\Support\AuthResult; use Illuminate\Contracts\Auth\Authenticatable; it(description: 'creates a passed result', closure: function () { diff --git a/workbench/app/Models/User.php b/workbench/app/Models/User.php index 3b96012..3898767 100644 --- a/workbench/app/Models/User.php +++ b/workbench/app/Models/User.php @@ -8,7 +8,7 @@ use Illuminate\Notifications\Notifiable; use Laravel\Fortify\Contracts\PasskeyUser; use Workbench\Database\Factories\UserFactory; -use Simtabi\Laranail\Auth\PasskeyAuthenticatable; +use Simtabi\Laranail\AuthKit\PasskeyAuthenticatable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; From 91818aa48c765ba0fab502cb611e97c14d6cf601 Mon Sep 17 00:00:00 2001 From: Imani Manyara Date: Wed, 26 Aug 2026 11:43:17 -0400 Subject: [PATCH 2/2] Use the new package name in the user-model exception Last leftover from the rename sweep: UserModelResolver named auth-kit in the message it throws when the configured model is not an Eloquent Authenticatable. --- src/Support/UserModelResolver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Support/UserModelResolver.php b/src/Support/UserModelResolver.php index 789eaea..bf838b1 100644 --- a/src/Support/UserModelResolver.php +++ b/src/Support/UserModelResolver.php @@ -21,7 +21,7 @@ public static function resolve(?string $guard = null): string } if (! is_string($model) || ! is_a($model, Model::class, allow_string: true) || ! is_a($model, Authenticatable::class, allow_string: true)) { - throw new LogicException('The configured auth-kit user model must be an Eloquent Authenticatable model.'); + throw new LogicException('The configured laranail/authkit user model must be an Eloquent Authenticatable model.'); } return $model;