From 49e1a5d20f9da458743bec655f714804cefd2a95 Mon Sep 17 00:00:00 2001 From: subhajit Date: Tue, 23 Jun 2026 14:36:43 +0530 Subject: [PATCH] initial commit --- .editorconfig | 18 + .env.example | 71 + .gitattributes | 11 + .gitignore | 27 + .npmrc | 2 + README.md | 58 + app/Http/Controllers/AdminController.php | 31 + app/Http/Controllers/Controller.php | 8 + app/Http/Controllers/DashboardController.php | 47 + app/Http/Controllers/LoginController.php | 149 + app/Http/Middleware/EnsureRole.php | 31 + app/Models/User.php | 40 + app/Providers/AppServiceProvider.php | 31 + artisan | 18 + bootstrap/app.php | 23 + bootstrap/cache/.gitignore | 2 + bootstrap/providers.php | 7 + composer.json | 91 + composer.lock | 8862 +++++++++++++++++ config/app.php | 126 + config/auth.php | 117 + config/cache.php | 136 + config/database.php | 184 + config/filesystems.php | 80 + config/logging.php | 132 + config/mail.php | 118 + config/queue.php | 129 + config/services.php | 45 + config/session.php | 233 + database/.gitignore | 1 + database/factories/UserFactory.php | 45 + .../0001_01_01_000000_create_users_table.php | 54 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 59 + database/seeders/DatabaseSeeder.php | 40 + package-lock.json | 1656 +++ package.json | 16 + phpunit.xml | 36 + plan.md | 127 + public/.htaccess | 25 + public/Screenshot_1.png | Bin 0 -> 199506 bytes public/favicon.ico | 0 public/index.php | 20 + public/robots.txt | 2 + resources/css/app.css | 9 + resources/js/app.js | 1 + resources/views/admin/dashboard.blade.php | 528 + resources/views/auth/login.blade.php | 461 + resources/views/dashboard.blade.php | 621 ++ resources/views/welcome.blade.php | 223 + routes/console.php | 8 + routes/web.php | 27 + storage/app/.gitignore | 4 + storage/app/private/.gitignore | 2 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 9 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tests/Feature/ExampleTest.php | 19 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 16 + vite.config.js | 24 + 66 files changed, 14920 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 README.md create mode 100644 app/Http/Controllers/AdminController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/DashboardController.php create mode 100644 app/Http/Controllers/LoginController.php create mode 100644 app/Http/Middleware/EnsureRole.php create mode 100644 app/Models/User.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 bootstrap/providers.php create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/cache.php create mode 100644 config/database.php create mode 100644 config/filesystems.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 database/.gitignore create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 plan.md create mode 100644 public/.htaccess create mode 100644 public/Screenshot_1.png create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/robots.txt create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/views/admin/dashboard.blade.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/dashboard.blade.php create mode 100644 resources/views/welcome.blade.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 storage/app/.gitignore create mode 100644 storage/app/private/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.php create mode 100644 vite.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6df8428 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[{compose,docker-compose}.{yml,yaml}] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..cbf2c0a --- /dev/null +++ b/.env.example @@ -0,0 +1,71 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=singlelogin +DB_USERNAME=root +DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" + +# Microsoft Azure OAuth Configurations +MICROSOFT_CLIENT_ID= +MICROSOFT_CLIENT_SECRET= +MICROSOFT_REDIRECT_URI="${APP_URL}/auth/microsoft/callback" +MICROSOFT_TENANT_ID=common diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7be55e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +*.log +.DS_Store +.env +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.codex +/.cursor/ +/.idea +/.nova +/.phpunit.cache +/.vscode +/.zed +/auth.json +/node_modules +/public/build +/public/fonts-manifest.dev.json +/public/hot +/public/storage +/storage/*.key +/storage/pail +/vendor +_ide_helper.php +Homestead.json +Homestead.yaml +Thumbs.db diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..495a6af --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +ignore-scripts=true +audit=true diff --git a/README.md b/README.md new file mode 100644 index 0000000..5ad1377 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +In addition, [Laracasts](https://laracasts.com) contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +You can also watch bite-sized lessons with real-world projects on [Laravel Learn](https://laravel.com/learn), where you will be guided through building a Laravel application from scratch while learning PHP fundamentals. + +## Agentic Development + +Laravel's predictable structure and conventions make it ideal for AI coding agents like Claude Code, Cursor, and GitHub Copilot. Install [Laravel Boost](https://laravel.com/docs/ai) to supercharge your AI workflow: + +```bash +composer require laravel/boost --dev + +php artisan boost:install +``` + +Boost provides your agent 15+ tools and skills that help agents build Laravel applications while following best practices. + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php new file mode 100644 index 0000000..831cf42 --- /dev/null +++ b/app/Http/Controllers/AdminController.php @@ -0,0 +1,31 @@ +get(); + + // Calculate statistics + $stats = [ + 'total_users' => User::count(), + 'admins_count' => User::where('role', 'admin')->count(), + 'microsoft_users' => User::whereNotNull('microsoft_id')->count(), + 'credentials_users' => User::whereNull('microsoft_id')->count(), + ]; + + return view('admin.dashboard', compact('admin', 'users', 'stats')); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ + 'Outlook', + 'url' => 'https://outlook.office.com/mail/', + 'icon_svg' => 'outlook', + 'color' => '#0078d4', + 'desc' => 'Access your corporate mail, calendar, and contacts instantly.', + 'tag' => 'Microsoft 365' + ], + [ + 'name' => 'Microsoft Teams', + 'url' => 'https://teams.microsoft.com/v2/', + 'icon_svg' => 'teams', + 'color' => '#6264a7', + 'desc' => 'Chat, meet, call, and collaborate with your team.', + 'tag' => 'Microsoft 365' + ], + [ + 'name' => 'Keka HR', + 'url' => 'https://sentientgeeks.keka.com/', + 'icon_svg' => 'keka', + 'color' => '#f27059', + 'desc' => 'Manage timesheets, leaves, payroll, and performance tasks.', + 'tag' => 'HR Portal' + ], + ]; + + return view('dashboard', compact('user', 'services')); + } +} diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php new file mode 100644 index 0000000..3bfea73 --- /dev/null +++ b/app/Http/Controllers/LoginController.php @@ -0,0 +1,149 @@ +redirectUserBasedOnRole(Auth::user()); + } + + return view('auth.login'); + } + + /** + * Handle Email & Password login for Administrators. + */ + public function adminLogin(Request $request) + { + $credentials = $request->validate([ + 'email' => ['required', 'email'], + 'password' => ['required'], + ]); + + if (Auth::attempt($credentials, $request->boolean('remember'))) { + $user = Auth::user(); + + // Enforce that only administrators can log in via credentials + if ($user->role === 'admin') { + $request->session()->regenerate(); + return redirect()->intended(route('admin.dashboard')) + ->with('success', 'Logged in successfully as Admin.'); + } + + // Log out unauthorized user immediately + Auth::logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return back()->withErrors([ + 'email' => 'Access denied. The provided credentials do not belong to an Administrator.', + ])->onlyInput('email'); + } + + return back()->withErrors([ + 'email' => 'The provided credentials do not match our records.', + ])->onlyInput('email'); + } + + /** + * Redirect the user to the Microsoft Azure authentication page. + */ + public function redirectToMicrosoft() + { + try { + return Socialite::driver('microsoft')->redirect(); + } catch (Exception $e) { + \Illuminate\Support\Facades\Log::error('Microsoft Authentication redirect failed', [ + 'message' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]); + return redirect()->route('login')->with('error', 'Unable to redirect to Microsoft: ' . $e->getMessage()); + } + } + + /** + * Obtain the user information from Microsoft Azure. + */ + public function handleMicrosoftCallback(Request $request) + { + try { + $microsoftUser = Socialite::driver('microsoft')->user(); + } catch (Exception $e) { + \Illuminate\Support\Facades\Log::error('Microsoft Authentication callback failed', [ + 'message' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]); + return redirect()->route('login')->with('error', 'Microsoft Authentication failed or was cancelled: ' . $e->getMessage()); + } + + // Search for user by microsoft_id first, then by email + $user = User::where('microsoft_id', $microsoftUser->getId())->first(); + + if (!$user) { + $user = User::where('email', $microsoftUser->getEmail())->first(); + } + + if ($user) { + // Update existing user with Microsoft data if not already set + $user->update([ + 'microsoft_id' => $microsoftUser->getId(), + 'microsoft_token' => $microsoftUser->token, + 'microsoft_refresh_token' => $microsoftUser->refreshToken ?? $user->microsoft_refresh_token, + 'avatar' => $microsoftUser->getAvatar() ?? $user->avatar, + ]); + } else { + // Create a new User (defaults to 'user' role) + $user = User::create([ + 'name' => $microsoftUser->getName() ?? explode('@', $microsoftUser->getEmail())[0], + 'email' => $microsoftUser->getEmail(), + 'microsoft_id' => $microsoftUser->getId(), + 'microsoft_token' => $microsoftUser->token, + 'microsoft_refresh_token' => $microsoftUser->refreshToken ?? null, + 'avatar' => $microsoftUser->getAvatar(), + 'role' => 'user', + ]); + } + + Auth::login($user, true); + $request->session()->regenerate(); + + return $this->redirectUserBasedOnRole($user); + } + + /** + * Log the user out of the application. + */ + public function logout(Request $request) + { + Auth::logout(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect()->route('login')->with('success', 'Logged out successfully.'); + } + + /** + * Helper method to redirect user depending on their role. + */ + protected function redirectUserBasedOnRole($user) + { + if ($user->role === 'admin') { + return redirect()->route('admin.dashboard'); + } + + return redirect()->route('dashboard'); + } +} diff --git a/app/Http/Middleware/EnsureRole.php b/app/Http/Middleware/EnsureRole.php new file mode 100644 index 0000000..ff0015b --- /dev/null +++ b/app/Http/Middleware/EnsureRole.php @@ -0,0 +1,31 @@ +check()) { + return redirect()->route('login')->with('error', 'Please log in to access this page.'); + } + + if (auth()->user()->role !== $role) { + if (auth()->user()->role === 'admin') { + return redirect()->route('admin.dashboard'); + } + return redirect()->route('dashboard')->with('error', 'Unauthorized access.'); + } + + return $next($request); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..ea953fd --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,40 @@ + */ + use HasFactory, Notifiable; + + /** + * Check if user is an admin. + */ + public function isAdmin(): bool + { + return $this->role === 'admin'; + } + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..e7ea0d7 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,31 @@ +handleCommand(new ArgvInput); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..c00d09b --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,23 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + $middleware->alias([ + 'role' => \App\Http\Middleware\EnsureRole::class, + ]); + }) + ->withExceptions(function (Exceptions $exceptions): void { + $exceptions->shouldRenderJsonWhen( + fn (Request $request) => $request->is('api/*'), + ); + })->create(); diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..fc94ae6 --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,7 @@ +=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": "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/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.12.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "d34627490fbc03bf5c5d7cfed81f2faa19519425" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d34627490fbc03bf5c5d7cfed81f2faa19519425", + "reference": "d34627490fbc03bf5c5d7cfed81f2faa19519425", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.5", + "guzzlehttp/psr7": "^2.12.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.24" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "guzzlehttp/test-server": "^0.5.1", + "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.12.1" + }, + "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-06-18T14:12:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e", + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e", + "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.0" + }, + "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-06-02T12:23:43+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.12.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "172ef2f4e9824c1e058b7f30be8ae25a02c0f2b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/172ef2f4e9824c1e058b7f30be8ae25a02c0f2b7", + "reference": "172ef2f4e9824c1e058b7f30be8ae25a02c0f2b7", + "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.24" + }, + "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.12.1" + }, + "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-06-18T09:49:37+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.7", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "7fe811c23a9e3cd712b4389eaeb50b5456d8c529" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/7fe811c23a9e3cd712b4389eaeb50b5456d8c529", + "reference": "7fe811c23a9e3cd712b4389eaeb50b5456d8c529", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "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.7" + }, + "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-06-12T21:33:43+00:00" + }, + { + "name": "laravel/framework", + "version": "v13.16.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "6135650d69bd9442e470bb1b343422081b076f1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/6135650d69bd9442e470bb1b343422081b076f1e", + "reference": "6135650d69bd9442e470bb1b343422081b076f1e", + "shasum": "" + }, + "require": { + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17", + "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.0", + "laravel/serializable-closure": "^2.0.10", + "league/commonmark": "^2.8.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.0", + "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/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", + "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).", + "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-06-16T16:07:50+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.18", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a19af51bb144bf87f08397921fa619f85c7d4e72", + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72", + "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.18" + }, + "time": "2026-05-19T00:47:18+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.13", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "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-04-16T14:03:50+00:00" + }, + { + "name": "laravel/socialite", + "version": "v5.28.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/socialite.git", + "reference": "4c131ff4b24d8881a9c8fe4eecb5ffeff9803f26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/socialite/zipball/4c131ff4b24d8881a9c8fe4eecb5ffeff9803f26", + "reference": "4c131ff4b24d8881a9c8fe4eecb5ffeff9803f26", + "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-06-12T03:24:05+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": "league/commonmark", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", + "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": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.9-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-03-19T13:16:38+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.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "d0a405f03d980461e4b6e08cfed2c162650f9f6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d0a405f03d980461e4b6e08cfed2c162650f9f6b", + "reference": "d0a405f03d980461e4b6e08cfed2c162650f9f6b", + "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.0" + }, + "time": "2026-06-22T20:12:06+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.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "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" + }, + "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.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+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.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "40f6618f052df16b545f626fbf9a878e6497d16a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/40f6618f052df16b545f626fbf9a878e6497d16a", + "reference": "40f6618f052df16b545f626fbf9a878e6497d16a", + "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-06-18T13:49:15+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.4", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "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::webalize(), toAscii(), chr() 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.4" + }, + "time": "2026-05-11T20:49:54+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "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.7.0" + }, + "time": "2025-12-06T11:56:16+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": "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.55", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "db9744e6d47e742b1f974e965ad49bdd041105af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db9744e6d47e742b1f974e965ad49bdd041105af", + "reference": "db9744e6d47e742b1f974e965ad49bdd041105af", + "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.55" + }, + "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-06-14T23:24:10+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": "psy/psysh", + "version": "v0.12.23", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4dcc0f08047d52bbde475eda481146fd8e27e1a4", + "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4", + "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.23" + }, + "time": "2026-05-23T13:41:31+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.9.2", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Manager.git", + "reference": "35372dc62787e61e91cfec73f45fd5d5ae0f8891" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/35372dc62787e61e91cfec73f45fd5d5ae0f8891", + "reference": "35372dc62787e61e91cfec73f45fd5d5ae0f8891", + "shasum": "" + }, + "require": { + "illuminate/support": "^11.0 || ^12.0 || ^13.0", + "laravel/socialite": "^5.5", + "php": "^8.2" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "phpunit/phpunit": "^9.0" + }, + "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-03-18T22:13:24+00:00" + }, + { + "name": "socialiteproviders/microsoft", + "version": "4.9.1", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Microsoft.git", + "reference": "664c946a57994abeeca0208c3ed187dd3d73ccc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Microsoft/zipball/664c946a57994abeeca0208c3ed187dd3d73ccc4", + "reference": "664c946a57994abeeca0208c3ed187dd3d73ccc4", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "^7.0", + "php": "^8.0", + "socialiteproviders/manager": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Microsoft\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Faust", + "email": "hello@brianfaust.de" + } + ], + "description": "Microsoft OAuth2 Provider for Laravel Socialite", + "keywords": [ + "laravel", + "microsoft", + "oauth", + "provider", + "socialite" + ], + "support": { + "docs": "https://socialiteproviders.com/microsoft", + "issues": "https://github.com/socialiteproviders/providers/issues", + "source": "https://github.com/socialiteproviders/providers" + }, + "time": "2026-03-26T00:32:34+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.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/f5a856c6ecb56b3c21ed94a5b7bf940d857d110a", + "reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a", + "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.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/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.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", + "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.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-13T15:52:40+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "d8aeb1abd3fef84795567850d3a567bdb5945ee5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d8aeb1abd3fef84795567850d3a567bdb5945ee5", + "reference": "d8aeb1abd3fef84795567850d3a567bdb5945ee5", + "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.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/event-dispatcher", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f249ae3f680958b6f1f9dd76e5747cf0695b4102", + "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102", + "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.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/event-dispatcher-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", + "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.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-01-05T13:30:16+00:00" + }, + { + "name": "symfony/finder", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "58d2e767a66052c1487356f953445634a8194c64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/58d2e767a66052c1487356f953445634a8194c64", + "reference": "58d2e767a66052c1487356f953445634a8194c64", + "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.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/http-foundation", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "af11474600f06718086c2cda4fa6fa8d0a672e7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/af11474600f06718086c2cda4fa6fa8d0a672e7e", + "reference": "af11474600f06718086c2cda4fa6fa8d0a672e7e", + "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.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/http-kernel", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "cefeb37c82eed3e0c42fa25ba64cd3a908d90f39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cefeb37c82eed3e0c42fa25ba64cd3a908d90f39", + "reference": "cefeb37c82eed3e0c42fa25ba64cd3a908d90f39", + "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/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" + }, + "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.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-29T08:46:08+00:00" + }, + { + "name": "symfony/mailer", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "9418d772df3a03a142e3bc06f602adb2b8724877" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/9418d772df3a03a142e3bc06f602adb2b8724877", + "reference": "9418d772df3a03a142e3bc06f602adb2b8724877", + "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.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/mime", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "b164ae7e3f7915aacfe9ee155f2f358502440664" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/b164ae7e3f7915aacfe9ee155f2f358502440664", + "reference": "b164ae7e3f7915aacfe9ee155f2f358502440664", + "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.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/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.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "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.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-26T05:58:03+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.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "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.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-26T02:25:22+00:00" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.38.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", + "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", + "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.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-25T11:52:35+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/routing", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "fe0bfec72c8a806109fb9c3a5f2b898fe0c76eb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/fe0bfec72c8a806109fb9c3a5f2b898fe0c76eb3", + "reference": "fe0bfec72c8a806109fb9c3a5f2b898fe0c76eb3", + "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.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/service-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "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.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-03-28T09:44:51+00:00" + }, + { + "name": "symfony/string", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9", + "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9", + "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.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/translation", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b2bd012ca28c4acae830ee1206a5b6e35dd99693" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b2bd012ca28c4acae830ee1206a5b6e35dd99693", + "reference": "b2bd012ca28c4acae830ee1206a5b6e35dd99693", + "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.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/translation-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d", + "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.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-01-05T13:30:16+00:00" + }, + { + "name": "symfony/uid", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/7393f157a55f7e70a4de0334435c55a5a8fe749a", + "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a", + "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.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/var-dumper", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "c2c4df1d21477cc21c9f6dc1b14d07c3abc4963e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c2c4df1d21477cc21c9f6dc1b14d07c3abc4963e", + "reference": "c2c4df1d21477cc21c9f6dc1b14d07c3abc4963e", + "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" + }, + "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.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": "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.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:49:13+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" + } + ], + "packages-dev": [ + { + "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": "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": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "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": "2.1-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/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/agent-detector", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/agent-detector.git", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", + "shasum": "" + }, + "require": { + "php": "^8.2.0" + }, + "require-dev": { + "laravel/pint": "^1.24.0", + "pestphp/pest": "^3.8.5|^4.1.0", + "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", + "phpstan/phpstan": "^2.1.26", + "rector/rector": "^2.1.7", + "symfony/var-dumper": "^7.3.3" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Laravel\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Detect if code is running in an AI agent or automated development environment", + "homepage": "https://github.com/laravel/agent-detector", + "keywords": [ + "Agent", + "ai", + "automation", + "claude", + "cursor", + "detection", + "devin", + "php" + ], + "support": { + "issues": "https://github.com/laravel/agent-detector/issues", + "source": "https://github.com/laravel/agent-detector" + }, + "time": "2026-04-29T18:32:34+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/pao", + "version": "v1.1.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/pao.git", + "reference": "41b3c61ebeddce52a446afe6d21e0b02983fb2f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pao/zipball/41b3c61ebeddce52a446afe6d21e0b02983fb2f6", + "reference": "41b3c61ebeddce52a446afe6d21e0b02983fb2f6", + "shasum": "" + }, + "require": { + "laravel/agent-detector": "^2.0.2", + "php": "^8.3" + }, + "conflict": { + "laravel/framework": "<12.0.0", + "nunomaduro/collision": "<8.9.3", + "pestphp/pest": "<4.6.3 || >=6.0.0", + "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.20.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench": "^10.11.0 || ^11.1.0", + "pestphp/pest": "^4.7.2 || ^5.0.0", + "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.0", + "phpstan/phpstan": "^2.2.2", + "rector/rector": "^2.4.5", + "symfony/process": "^7.4.8 || ^8.1.0", + "symfony/var-dumper": "^7.4.8 || ^8.1.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Laravel\\Pao\\Drivers\\Pest\\Plugin" + ] + }, + "laravel": { + "providers": [ + "Laravel\\Pao\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Laravel\\Pao\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Agent-optimized output for PHP testing tools", + "keywords": [ + "Agent", + "PHPStan", + "ai", + "dev", + "paratest", + "pest", + "php", + "phpunit", + "rector", + "testing" + ], + "support": { + "issues": "https://github.com/laravel/pao/issues", + "source": "https://github.com/laravel/pao" + }, + "time": "2026-06-22T19:58:00+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.29.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "da1d1111a6aa2e082d2a388b194afe1ba0a05d14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/da1d1111a6aa2e082d2a388b194afe1ba0a05d14", + "reference": "da1d1111a6aa2e082d2a388b194afe1ba0a05d14", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.95.8", + "illuminate/view": "^12.62.0", + "larastan/larastan": "^3.10.0", + "laravel-zero/framework": "^12.1.0", + "laravel/agent-detector": "^2.0.2", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^3.8.6" + }, + "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-06-16T15:34:04+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "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": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.4", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.8 || ^8.0.8" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.9.6", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1", + "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0" + }, + "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-04-21T14:04:20+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.30", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "900400a5b616d6fb306f9549f6da33ba615d3fbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/900400a5b616d6fb306f9549f6da33ba615d3fbb", + "reference": "900400a5b616d6fb306f9549f6da33ba615d3fbb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.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.30" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsoring.html", + "type": "other" + } + ], + "time": "2026-06-15T13:12:30+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": "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": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.3" + }, + "platform-dev": {}, + "plugin-api-version": "2.9.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..423eed5 --- /dev/null +++ b/config/app.php @@ -0,0 +1,126 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', (string) env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..d7568ff --- /dev/null +++ b/config/auth.php @@ -0,0 +1,117 @@ + [ + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => env('AUTH_MODEL', User::class), + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the number of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..d7eec61 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,136 @@ + env('CACHE_STORE', 'database'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "storage", "octane", + | "session", "failover", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'storage' => [ + 'driver' => 'storage', + 'disk' => env('CACHE_STORAGE_DISK'), + 'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'), + + /* + |-------------------------------------------------------------------------- + | Serializable Classes + |-------------------------------------------------------------------------- + | + | This value determines the classes that can be unserialized from cache + | storage. By default, no PHP classes will be unserialized from your + | cache to prevent gadget chain attacks if your APP_KEY is leaked. + | + */ + + 'serializable_classes' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..abbb88e --- /dev/null +++ b/config/database.php @@ -0,0 +1,184 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => env('DB_SSLMODE', 'prefer'), + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..37d8fca --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,80 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'serve' => true, + 'throw' => false, + 'report' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage', + 'visibility' => 'public', + 'throw' => false, + 'report' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + 'report' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..b09cb25 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,132 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'handler_with' => [ + 'stream' => 'php://stderr', + ], + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..e32e88d --- /dev/null +++ b/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + + 'smtp' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + 'retry_after' => 60, + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')), + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..79c2c0a --- /dev/null +++ b/config/queue.php @@ -0,0 +1,129 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + | "deferred", "background", "failover", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + 'deferred' => [ + 'driver' => 'deferred', + ], + + 'background' => [ + 'driver' => 'background', + ], + + 'failover' => [ + 'driver' => 'failover', + 'connections' => [ + 'database', + 'deferred', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..8a2bd9c --- /dev/null +++ b/config/services.php @@ -0,0 +1,45 @@ + [ + 'key' => env('POSTMARK_API_KEY'), + ], + + 'resend' => [ + 'key' => env('RESEND_API_KEY'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + + 'microsoft' => [ + 'client_id' => env('MICROSOFT_CLIENT_ID', env('MICROSOFT_GRAPH_CLIENT_ID')), + 'client_secret' => env('MICROSOFT_CLIENT_SECRET', env('MICROSOFT_GRAPH_CLIENT_SECRET')), + 'redirect' => env('MICROSOFT_REDIRECT_URI', env('APP_URL', 'http://localhost:8000') . '/auth/microsoft/callback'), + 'tenant' => env('MICROSOFT_TENANT_ID', env('MICROSOFT_GRAPH_TENANT_ID', 'common')), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..f574482 --- /dev/null +++ b/config/session.php @@ -0,0 +1,233 @@ + env('SESSION_DRIVER', 'database'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => (int) env('SESSION_LIFETIME', 120), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug((string) env('APP_NAME', 'laravel')).'-session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain without subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + + /* + |-------------------------------------------------------------------------- + | Session Serialization + |-------------------------------------------------------------------------- + | + | This value controls the serialization strategy for session data, which + | is JSON by default. Setting this to "php" allows the storage of PHP + | objects in the session but can make an application vulnerable to + | "gadget chain" serialization attacks if the APP_KEY is leaked. + | + | Supported: "json", "php" + | + */ + + 'serialization' => 'json', + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..c4ceb07 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,45 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..12a400b --- /dev/null +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,54 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password')->nullable(); + $table->string('role')->default('user'); + $table->string('microsoft_id')->nullable()->unique(); + $table->longText('microsoft_token')->nullable(); + $table->longText('microsoft_refresh_token')->nullable(); + $table->longText('avatar')->nullable(); + $table->rememberToken(); + $table->timestamps(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..06dc7a5 --- /dev/null +++ b/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->bigInteger('expiration')->index(); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->bigInteger('expiration')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..edac6fe --- /dev/null +++ b/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,59 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedSmallInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->string('connection'); + $table->string('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + + $table->index(['connection', 'queue', 'failed_at']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..17799db --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,40 @@ + 'admin@company.com'], + [ + 'name' => 'System Administrator', + 'password' => Hash::make('Admin@123'), + 'role' => 'admin', + ] + ); + + // Seed default standard user (without password since users use Microsoft OAuth) + User::updateOrCreate( + ['email' => 'user@company.com'], + [ + 'name' => 'John Doe User', + 'role' => 'user', + 'microsoft_id' => 'mock-microsoft-id-123', + ] + ); + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e8ea27f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1656 @@ +{ + "name": "singlelogin", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^3.1", + "tailwindcss": "^4.0.0", + "vite": "^8.0.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.1.tgz", + "integrity": "sha512-6NDaqRoAMSXD1mr/RXu0HBvNE9a2n5tHPsxu9XHLws8o4Twes5rBM2205SUUiJ9goAtadrN6xTGX0UDEwp/N4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "5.21.6", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.1" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.1.tgz", + "integrity": "sha512-yVPyo8RNkabVr3O2EhHEE0Rewu7YKzc1DhIqfL46LKveFrmu9XbDazNOJY7/GRuvw1h6u3utWnR29H/p5JPlgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.1", + "@tailwindcss/oxide-darwin-arm64": "4.3.1", + "@tailwindcss/oxide-darwin-x64": "4.3.1", + "@tailwindcss/oxide-freebsd-x64": "4.3.1", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.1", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.1", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.1", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.1", + "@tailwindcss/oxide-linux-x64-musl": "4.3.1", + "@tailwindcss/oxide-wasm32-wasi": "4.3.1", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.1", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.1" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.1.tgz", + "integrity": "sha512-SVlyf61g374l5cHyg8x9kf5xmLcOaxvOTsbsqDnSsDJaKOEFZ7GCvi84VAVGpxojYOs1+3K6M0UjXfqPU8vmOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.1.tgz", + "integrity": "sha512-hVnWLwv+e/l7c4WKyVtHVrIPvYdqWHjRB3MDIqARynzFtnQg85kmQEFCbV9Ja0VVx4xXTIiDWY60Y7iz/iNoDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.1.tgz", + "integrity": "sha512-Cf7abu0WVgbhU7ANgPUnSAvm7nCvMweusHb8FnaHlLfv/Caq4GYaEZg7ZImzzmjx4lIAfuS8q+eLIS7A7IzxIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.1.tgz", + "integrity": "sha512-ZZqzX2Y+GXtXXfqSfpJhDm60OoZfvLHLCgm+J7NVqgHHJjG/m9ugZI77RwTsVd4fnBJuCFP6Ae6kTJb71UdS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.1.tgz", + "integrity": "sha512-/Ah/xik0LaMYfv9DZ0S/t4pBlBNYOcqtRwusjgovHkvT8ixueWCLyJjsaF5kQIckjb4IT8Q6K6p/iPmZMixYgg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.1.tgz", + "integrity": "sha512-gqdFoVJlw444GvpnheZLHmvTzSxI/cOUUh2KSNejQjTcYkW062SVD+En0rUgD+QV91bz1XGIGtt1HJd48xUGbQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.1.tgz", + "integrity": "sha512-Bwv9KwOvE0VKa86xPFif9b9c3Y1NxOV1P0gLti/IYaWEsQYZXDlxfGEtA8mdDZ7SG3wyNXAWYT5SIn3giL57oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.1.tgz", + "integrity": "sha512-Ymi8O8T15HYQdOUWUtTI6ldN0neHP85FC+Qz32xTcZ7iJXtem/x8ITev0o1e9e5rkqj4lONZfTRLvkmin1+tKg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.1.tgz", + "integrity": "sha512-M+P/91qJ6uILLw4k2G93GMDRAXj61SMvFQYt39AqvUqYgExXpLL5aepfns7sj4HiAQeolirQF9E0lzRvdf4zPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.1.tgz", + "integrity": "sha512-zsM8uOeqvVGHsAXsJxsT28ttosFahLJKCLOTUBqRAtKnVgGSRitds9T432QiT8b77Yga7JIBkulIRRlJPtYhRA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.1.tgz", + "integrity": "sha512-aiNvSq9BsVk8V513lDKlrCFAgf8qBMPZTpgEhInL+NwQqs97mYmupVMrPrgBBSL8Pv/0zXu9MrMF9rMun1ZeNg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.1.tgz", + "integrity": "sha512-xDEyu1rg290472FEGaKHnzyDyh5QH+AlWvsU5hMoMtPpzmKlRI0jaYKCgSHDYtaQWZOYbMaduSyCwFwY4n1HmA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.1.tgz", + "integrity": "sha512-hItDHuIIlEV61R+faXu66s1K36aTurO/Qw0e45Vskz57gXl9pWOT6eg3zmcEui6CZXddbN7zd41bwmvag4JGwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.1", + "@tailwindcss/oxide": "4.3.1", + "tailwindcss": "4.3.1" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.3.tgz", + "integrity": "sha512-ihjs0E2SxvDgq/MK418hX6YycQgKhsqxpbZuZbHo0yKfqDWdymWMjWYIpCIzqDDLLKClHlXev8whW/8WXmJ0BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.4", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.21.6", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz", + "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-3.1.0.tgz", + "integrity": "sha512-Fzocl+X4eQ9jOi0RwdphYRGkUbPJ3ky1pTAST5Ot18cS2gw6d2vldK2eCrlKDVjtibCjCx5qptYDlA0373n7qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "tinyglobby": "^0.2.12", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "fontaine": "^0.5.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "fontaine": { + "optional": true + } + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.1.tgz", + "integrity": "sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/vite": { + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..49c869e --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://www.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^3.1", + "tailwindcss": "^4.0.0", + "vite": "^8.0.0" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..e7f0a48 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,36 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + + + + diff --git a/plan.md b/plan.md new file mode 100644 index 0000000..3757664 --- /dev/null +++ b/plan.md @@ -0,0 +1,127 @@ +# Role-Based Login & Microsoft SSO System Plan + +We will build a two-role authentication system (Admin & User) in Laravel, integrating Microsoft OAuth (via Laravel Socialite) for users, and dual authentication (Microsoft + email/password) for admins. + +--- + +## 1. Authentication Flows & Security + +```mermaid +graph TD + A[Visitor] --> B{Choose Path} + B -->|User| C[Login via Microsoft] + B -->|Admin| D[Login via Microsoft OR Email/Password] + C --> E[Redirect to Microsoft Azure AD] + E --> F[Microsoft Callback] + F -->|Success| G{Is User Registered?} + G -->|No| H[Create User Record with 'user' role] + G -->|Yes| I[Log User In] + I --> J[Redirect to Dashboard] + + D -->|Microsoft| E + D -->|Email/Password| K[Laravel Auth Attempt] + K -->|Success| L[Verify Role is 'admin'] + L -->|Yes| M[Redirect to Admin Dashboard] + L -->|No| N[Redirect Back with Error] +``` + +### Roles Defined: +1. **User**: Authenticatable **ONLY** via Microsoft. Accesses `/dashboard`, sees service icons (Keka, Teams, Outlook) which log them in silently. +2. **Admin**: Authenticatable via **BOTH** Microsoft and standard Email/Password credentials. Accesses `/admin/dashboard` (and can also access the user dashboard if needed). + +--- + +## 2. Technical Roadmap + +### Step 1: Install Dependencies +We will install Laravel Socialite and the Microsoft Graph Socialite provider: +```bash +composer require laravel/socialite +composer require socialiteproviders/microsoft +``` + +### Step 2: Configure Service Provider & Credentials +1. Register the Socialite listener in [AppServiceProvider.php](file:///D:/projects/singlelogin/app/Providers/AppServiceProvider.php): + ```php + use SocialiteProviders\Manager\SocialiteWasCalled; + use SocialiteProviders\Microsoft\MicrosoftExtendSocialite; + + Event::listen(function (SocialiteWasCalled $event) { + $event->extendSocialite('microsoft', MicrosoftExtendSocialite::class); + }); + ``` +2. Configure `config/services.php` to include: + ```php + 'microsoft' => [ + 'client_id' => env('MICROSOFT_CLIENT_ID'), + 'client_secret' => env('MICROSOFT_CLIENT_SECRET'), + 'redirect' => env('MICROSOFT_REDIRECT_URI'), + 'tenant' => env('MICROSOFT_TENANT_ID', 'common'), + ], + ``` +3. Set the variables in `.env`: + - `MICROSOFT_CLIENT_ID` + - `MICROSOFT_CLIENT_SECRET` + - `MICROSOFT_REDIRECT_URI=http://localhost:8000/auth/microsoft/callback` + - `MICROSOFT_TENANT_ID=common` + +### Step 3: Database & Migration Updates +Modify `database/migrations/0001_01_01_000000_create_users_table.php` to include: +- `role` (string, defaults to `'user'`) +- `microsoft_id` (string, nullable) +- `microsoft_token` (text, nullable) +- `microsoft_refresh_token` (text, nullable) +- `avatar` (string, nullable) +- Allow `password` to be nullable (since Users log in strictly via Microsoft and won't have a local password). + +We will write a `DatabaseSeeder` to generate: +- A default Administrator account (e.g., `admin@company.com` / `Admin@123`) to test email/password login. + +### Step 4: Middleware & Gates +Create middleware files: +1. `EnsureAdmin` - Redirects non-admins away from `/admin/*`. +2. `EnsureUser` - Redirects non-users (or unauthenticated users) away from `/dashboard`. + +Register them in `bootstrap/app.php` (under `$middleware->alias(...)` or use route groups). + +### Step 5: Routes & Controllers +We will define the following routes in [web.php](file:///D:/projects/singlelogin/routes/web.php): + +| Route | Method | Controller Action | Description | +|---|---|---|---| +| `/` | GET | `LoginController@index` | Auto-redirects logged-in users, or renders Login page | +| `/login` | GET | `LoginController@showLoginForm` | Beautiful interactive login page | +| `/login/admin` | POST | `LoginController@adminLogin` | Handle admin email/password login | +| `/auth/microsoft/redirect` | GET | `LoginController@redirectToMicrosoft` | Redirects to Microsoft OAuth | +| `/auth/microsoft/callback` | GET | `LoginController@handleMicrosoftCallback` | Processes OAuth callback & logs in user | +| `/dashboard` | GET | `DashboardController@index` | User Dashboard with Services (Keka, Outlook, Teams) | +| `/admin/dashboard` | GET | `AdminController@index` | Admin Control Panel | +| `/logout` | POST | `LoginController@logout` | Standard Logout | + +### Step 6: Silent SSO / Services Integration +* **Mechanism**: When users log in via Microsoft, Microsoft creates authentication cookies in the browser session. +* **Flow**: + - The Dashboard features cards for: + - **Outlook**: links to `https://outlook.office.com/mail/` + - **Teams**: links to `https://teams.microsoft.com/v2/` + - **Keka**: links to `https://my.keka.com/` (or a configured company portal) + - Clicking these cards opens them in a new tab (`target="_blank"`). + - Since the active browser session contains Microsoft's authentication cookies from our login flow, Microsoft SSO automatically authenticates the user into these applications. They bypass login prompts and access their accounts directly (silently). + - We will provide mock buttons in local testing mode to simulate the SSO authentication if required, or simply redirect to the live services. + +### Step 7: UI/UX & Design System (Aesthetics) +We will build a high-fidelity visual experience: +- **Typography**: Outfit or Inter font, clean structure. +- **Login Screen**: Glassmorphism dashboard card, subtle background gradients, hover glow effects, micro-animations on input focuses, and a dual toggle between "User Portal" (Microsoft SSO only) and "Admin Portal" (Credentials + Microsoft SSO). +- **Dashboard**: A premium modern portal featuring grid cards representing each service with clean hover animations, active session banners, profile widgets showing Microsoft avatars, and interactive logs. + +--- + +## 3. Review Questions & Feedback + +Please review this plan and let me know: +1. **Database Type**: Should we use SQLite (`database.sqlite`) for easier local development/testing of this feature, or is your local MySQL server ready to connect as specified in `.env`? +2. **Microsoft App Credentials**: Do you have a Microsoft Azure AD app registration ready? If not, I can provide instructions on how to create one in the Azure Portal (registers client ID, secret, and redirect URI). +3. **App Selection**: Are Keka, Outlook, and Teams the exact external links you want, or would you like to configure custom enterprise dashboard URLs? + +**Let me know if you approve this plan or if you want to modify any details, and we'll begin implementation!** diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..b574a59 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,25 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/Screenshot_1.png b/public/Screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cfcc2e38b8587007df740022625f81465f4941b4 GIT binary patch literal 199506 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 GRu&!vNQ{;m) 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

@4+P5;;gL>`CpT2*@fc9|VJNYBvxPSe79;4y^ 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

WnvT^R17XG68_=Cw= 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::capture()); diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..54b247e --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,9 @@ +@import 'tailwindcss'; + +@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; +@source '../../storage/framework/views/*.php'; + +@theme { + --font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol', 'Noto Color Emoji'; +} diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..8337712 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +// diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php new file mode 100644 index 0000000..c783238 --- /dev/null +++ b/resources/views/admin/dashboard.blade.php @@ -0,0 +1,528 @@ + + + + + + Admin Panel - SingleLogin Portal + + + + + + + + + + +

+ + +
+ + +
+

System Overview

+

Welcome, {{ $admin->name }}. Monitoring active directories, credentials, and SSO logins.

+
+ + +
+
+
+
Total Registrations
+
{{ $stats['total_users'] }}
+
+
👥
+
+ +
+
+
Administrators
+
{{ $stats['admins_count'] }}
+
+
🛡️
+
+ +
+
+
Microsoft Connected
+
{{ $stats['microsoft_users'] }}
+
+
☁️
+
+ +
+
+
Local Auth Only
+
{{ $stats['credentials_users'] }}
+
+
🔑
+
+
+ + +
+
+
User Accounts Directory
+
+ Showing registered system entities +
+
+ +
+ + + + + + + + + + + + @forelse($users as $usr) + + + + + + + + @empty + + + + @endforelse + +
User AccountAssigned RoleAuthentication TypeLinked OnOperations
+
+ @if($usr->avatar) + {{ $usr->name }} + @else +
+ {{ strtoupper(substr($usr->name, 0, 1)) }} +
+ @endif +
+
{{ $usr->name }}
+
{{ $usr->email }}
+
+
+
+ @if($usr->role === 'admin') + Admin + @else + User + @endif + + @if($usr->microsoft_id) + +
+
+
+
+
+
+ Microsoft OAuth +
+ @else + Local Password + @endif +
+ + {{ $usr->created_at ? $usr->created_at->format('Y-m-d H:i') : 'N/A' }} + + + +
+ No registered accounts found in the database. +
+
+
+ +
+ +
+ © 2026 SingleLogin Systems. Authorized Access Only. +
+ + diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..c337289 --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,461 @@ + + + + + + SingleLogin Portal - Authenticate + + + + + + + + + + + + + + diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php new file mode 100644 index 0000000..7564625 --- /dev/null +++ b/resources/views/dashboard.blade.php @@ -0,0 +1,621 @@ + + + + + + Dashboard - SingleLogin Portal + + + + + + + + + + + + + +
+ + +
+
+
+ @if($user->avatar) + {{ $user->name }} + @else +
+ {{ strtoupper(substr($user->name, 0, 1)) }} +
+ @endif +
+
+

Welcome, {{ $user->name }}

+
+ {{ $user->email }} + • + {{ $user->role }} + @if($user->microsoft_id) + Microsoft Linked + @endif +
+
+
+ +
+
+ + Secure Microsoft SSO Session Active +
+
+
+ + +
+

Authorized Corporate Services

+ +
+ @foreach($services as $service) +
+
+
{{ $service['tag'] }}
+
+ + @if($service['icon_svg'] === 'outlook') + + + + @elseif($service['icon_svg'] === 'teams') + + + + @else + + + + @endif +
+
{{ $service['name'] }}
+
{{ $service['desc'] }}
+
+ +
+ @endforeach +
+
+ +
+ + +
+
+
+
+
+
+
Signing into Service
+
+ Negotiating single sign-on token with Microsoft Identity Server...
+ Connecting securely. You will be redirected silently. +
+
+
+ + + + diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..26e294a --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,223 @@ + + + + + + + {{ config('app.name', 'Laravel') }} + + @fonts + + + @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) + @vite(['resources/css/app.css', 'resources/js/app.js']) + @else + + @endif + + +
+ @if (Route::has('login')) + + @endif +
+
+
+
+

Let's get started

+

With so many options available to you,
we suggest you start with the following:

+ + + +

+ v{{ app()->version() }} + + View changelog + + + + +

+
+
+ {{-- Laravel Logo --}} + + + + + + + + + + + {{-- 13 --}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + @if (Route::has('login')) + + @endif + + diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..3c9adf1 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,8 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..b1f6d0b --- /dev/null +++ b/routes/web.php @@ -0,0 +1,27 @@ +name('login'); +Route::post('/login/admin', [LoginController::class, 'adminLogin'])->name('login.admin'); +Route::post('/logout', [LoginController::class, 'logout'])->name('logout'); +Route::get('/logout', [LoginController::class, 'logout']); // For ease of development/testing via GET + +// Microsoft OAuth endpoints +Route::get('/auth/microsoft/redirect', [LoginController::class, 'redirectToMicrosoft'])->name('auth.microsoft.redirect'); +Route::get('/auth/microsoft/callback', [LoginController::class, 'handleMicrosoftCallback'])->name('auth.microsoft.callback'); + +// User Dashboard Portal (requires standard user role) +Route::middleware(['auth', 'role:user'])->group(function () { + Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); +}); + +// Admin Control Panel (requires admin role) +Route::middleware(['auth', 'role:admin'])->group(function () { + Route::get('/admin/dashboard', [AdminController::class, 'index'])->name('admin.dashboard'); +}); diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..fedb287 --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,4 @@ +* +!private/ +!public/ +!.gitignore diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/private/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..8364a84 --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,19 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..fe1ffc2 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..1fd66d5 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,24 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import { bunny } from 'laravel-vite-plugin/fonts'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + fonts: [ + bunny('Instrument Sans', { + weights: [400, 500, 600], + }), + ], + }), + tailwindcss(), + ], + server: { + watch: { + ignored: ['**/storage/framework/views/**'], + }, + }, +});