From 2aa0572dcf4bbeee0f8d397c140b4027c653e6cf Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 8 Jan 2026 10:50:09 +0000
Subject: [PATCH 1/9] Initial plan
From 6a740d118cf60a240eb8290405f288d65ecffec6 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 8 Jan 2026 11:04:01 +0000
Subject: [PATCH 2/9] Add 2FA functionality with TOTP support
- Add pragmarx/google2fa-qrcode package for TOTP
- Create migration for 2FA fields in users table
- Update User model with 2FA methods
- Create TwoFactor settings Livewire component
- Create TwoFactorChallenge login component
- Add 2FA views for setup and challenge
- Update Login component to handle 2FA flow
- Add 2FA routes and navigation
Co-authored-by: mortenebak <9462269+mortenebak@users.noreply.github.com>
---
app/Livewire/Auth/Login.php | 14 ++
app/Livewire/Auth/TwoFactorChallenge.php | 127 +++++++++++++
app/Livewire/Settings/TwoFactor.php | 177 ++++++++++++++++++
app/Models/User.php | 34 ++++
composer.json | 1 +
..._add_two_factor_columns_to_users_table.php | 34 ++++
.../components/settings/layout.blade.php | 1 +
.../auth/two-factor-challenge.blade.php | 39 ++++
.../livewire/settings/two-factor.blade.php | 104 ++++++++++
routes/auth.php | 2 +
routes/web.php | 1 +
11 files changed, 534 insertions(+)
create mode 100644 app/Livewire/Auth/TwoFactorChallenge.php
create mode 100644 app/Livewire/Settings/TwoFactor.php
create mode 100644 database/migrations/2026_01_08_105500_add_two_factor_columns_to_users_table.php
create mode 100644 resources/views/livewire/auth/two-factor-challenge.blade.php
create mode 100644 resources/views/livewire/settings/two-factor.blade.php
diff --git a/app/Livewire/Auth/Login.php b/app/Livewire/Auth/Login.php
index 097fd3c..4352f5d 100644
--- a/app/Livewire/Auth/Login.php
+++ b/app/Livewire/Auth/Login.php
@@ -42,6 +42,20 @@ public function login(): void
]);
}
+ $user = Auth::user();
+
+ // Check if user has 2FA enabled
+ if ($user->hasTwoFactorEnabled()) {
+ Auth::logout();
+
+ session()->put([
+ 'login.id' => $user->id,
+ 'login.remember' => $this->remember,
+ ]);
+
+ return $this->redirect(route('two-factor.challenge'), navigate: true);
+ }
+
RateLimiter::clear($this->throttleKey());
Session::regenerate();
diff --git a/app/Livewire/Auth/TwoFactorChallenge.php b/app/Livewire/Auth/TwoFactorChallenge.php
new file mode 100644
index 0000000..be5d2db
--- /dev/null
+++ b/app/Livewire/Auth/TwoFactorChallenge.php
@@ -0,0 +1,127 @@
+validate();
+
+ $this->ensureIsNotRateLimited();
+
+ $user = Auth::getProvider()->retrieveById(
+ session('login.id')
+ );
+
+ if ($this->recovery) {
+ $this->challengeUsingRecoveryCode($user);
+ } else {
+ $this->challengeUsingCode($user);
+ }
+
+ RateLimiter::clear($this->throttleKey());
+
+ Auth::login($user, session('login.remember', false));
+
+ session()->forget(['login.id', 'login.remember']);
+ session()->regenerate();
+
+ $this->redirectIntended(default: route('dashboard', absolute: false), navigate: true);
+ }
+
+ /**
+ * Challenge using the authenticator app code.
+ */
+ protected function challengeUsingCode($user): void
+ {
+ $google2fa = new Google2FA();
+ $secret = decrypt($user->two_factor_secret);
+
+ if (! $google2fa->verifyKey($secret, $this->code)) {
+ RateLimiter::hit($this->throttleKey());
+
+ throw ValidationException::withMessages([
+ 'code' => __('The provided two-factor authentication code was invalid.'),
+ ]);
+ }
+ }
+
+ /**
+ * Challenge using a recovery code.
+ */
+ protected function challengeUsingRecoveryCode($user): void
+ {
+ $recoveryCodes = $user->recoveryCodes();
+
+ if (! in_array($this->code, $recoveryCodes)) {
+ RateLimiter::hit($this->throttleKey());
+
+ throw ValidationException::withMessages([
+ 'code' => __('The provided recovery code was invalid.'),
+ ]);
+ }
+
+ $user->replaceRecoveryCode($this->code);
+ }
+
+ /**
+ * Toggle between code and recovery mode.
+ */
+ public function toggleRecovery(): void
+ {
+ $this->recovery = ! $this->recovery;
+ $this->code = '';
+ $this->resetErrorBag();
+ }
+
+ /**
+ * Ensure the authentication request is not rate limited.
+ */
+ protected function ensureIsNotRateLimited(): void
+ {
+ if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
+ return;
+ }
+
+ $seconds = RateLimiter::availableIn($this->throttleKey());
+
+ throw ValidationException::withMessages([
+ 'code' => __('auth.throttle', [
+ 'seconds' => $seconds,
+ 'minutes' => ceil($seconds / 60),
+ ]),
+ ]);
+ }
+
+ /**
+ * Get the authentication rate limiting throttle key.
+ */
+ protected function throttleKey(): string
+ {
+ return Str::transliterate('two-factor|'.request()->ip());
+ }
+
+ public function render()
+ {
+ return view('livewire.auth.two-factor-challenge');
+ }
+}
diff --git a/app/Livewire/Settings/TwoFactor.php b/app/Livewire/Settings/TwoFactor.php
new file mode 100644
index 0000000..5143bc4
--- /dev/null
+++ b/app/Livewire/Settings/TwoFactor.php
@@ -0,0 +1,177 @@
+user();
+ $google2fa = new Google2FA();
+
+ // Generate a new secret
+ $secret = $google2fa->generateSecretKey();
+
+ // Store it temporarily
+ $user->two_factor_secret = encrypt($secret);
+ $user->save();
+
+ $this->showingQrCode = true;
+ $this->showingRecoveryCodes = false;
+ }
+
+ /**
+ * Confirm two-factor authentication.
+ */
+ public function confirmTwoFactorAuthentication(): void
+ {
+ $this->validate([
+ 'code' => 'required|string',
+ ]);
+
+ $user = auth()->user();
+ $google2fa = new Google2FA();
+
+ $secret = decrypt($user->two_factor_secret);
+
+ if (! $google2fa->verifyKey($secret, $this->code)) {
+ $this->addError('code', 'The provided code was invalid.');
+
+ return;
+ }
+
+ // Mark 2FA as confirmed
+ $user->two_factor_confirmed_at = now();
+
+ // Generate recovery codes
+ $recoveryCodes = Collection::times(8, function () {
+ return strtoupper(bin2hex(random_bytes(5)));
+ })->all();
+
+ $user->two_factor_recovery_codes = encrypt(json_encode($recoveryCodes));
+ $user->save();
+
+ $this->recoveryCodes = $recoveryCodes;
+ $this->showingQrCode = false;
+ $this->showingRecoveryCodes = true;
+ $this->code = '';
+
+ $this->dispatch('alert', [
+ 'type' => 'success',
+ 'message' => 'Two-factor authentication has been enabled.',
+ ]);
+ }
+
+ /**
+ * Show recovery codes.
+ */
+ public function showRecoveryCodes(): void
+ {
+ $this->recoveryCodes = auth()->user()->recoveryCodes();
+ $this->showingRecoveryCodes = true;
+ }
+
+ /**
+ * Regenerate recovery codes.
+ */
+ public function regenerateRecoveryCodes(): void
+ {
+ $user = auth()->user();
+
+ $recoveryCodes = Collection::times(8, function () {
+ return strtoupper(bin2hex(random_bytes(5)));
+ })->all();
+
+ $user->two_factor_recovery_codes = encrypt(json_encode($recoveryCodes));
+ $user->save();
+
+ $this->recoveryCodes = $recoveryCodes;
+ $this->showingRecoveryCodes = true;
+
+ $this->dispatch('alert', [
+ 'type' => 'success',
+ 'message' => 'New recovery codes have been generated.',
+ ]);
+ }
+
+ /**
+ * Disable two-factor authentication.
+ */
+ public function disableTwoFactorAuthentication(): void
+ {
+ $user = auth()->user();
+
+ $user->two_factor_secret = null;
+ $user->two_factor_recovery_codes = null;
+ $user->two_factor_confirmed_at = null;
+ $user->save();
+
+ $this->showingQrCode = false;
+ $this->showingRecoveryCodes = false;
+
+ $this->dispatch('alert', [
+ 'type' => 'success',
+ 'message' => 'Two-factor authentication has been disabled.',
+ ]);
+ }
+
+ /**
+ * Get the QR code URL for the user.
+ */
+ public function getQrCodeUrlProperty(): ?string
+ {
+ if (! $this->showingQrCode) {
+ return null;
+ }
+
+ $user = auth()->user();
+ $google2fa = new Google2FA();
+
+ $secret = decrypt($user->two_factor_secret);
+
+ $qrCodeUrl = $google2fa->getQRCodeUrl(
+ config('app.name'),
+ $user->email,
+ $secret
+ );
+
+ return 'https://api.qrserver.com/v1/create-qr-code/?size=200x200&data='.urlencode($qrCodeUrl);
+ }
+
+ /**
+ * Get the manual entry secret.
+ */
+ public function getManualEntrySecretProperty(): ?string
+ {
+ if (! $this->showingQrCode) {
+ return null;
+ }
+
+ $user = auth()->user();
+
+ return decrypt($user->two_factor_secret);
+ }
+
+ public function render()
+ {
+ return view('livewire.settings.two-factor');
+ }
+}
diff --git a/app/Models/User.php b/app/Models/User.php
index a654e9e..385587b 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -38,6 +38,8 @@ class User extends Authenticatable // implements MustVerifyEmail
protected $hidden = [
'password',
'remember_token',
+ 'two_factor_secret',
+ 'two_factor_recovery_codes',
];
/**
@@ -50,6 +52,7 @@ protected function casts(): array
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
+ 'two_factor_confirmed_at' => 'datetime',
];
}
@@ -63,4 +66,35 @@ public function initials(): string
->map(fn (string $name) => Str::of($name)->substr(0, 1))
->implode('');
}
+
+ /**
+ * Determine if two-factor authentication is enabled.
+ */
+ public function hasTwoFactorEnabled(): bool
+ {
+ return ! is_null($this->two_factor_secret) && ! is_null($this->two_factor_confirmed_at);
+ }
+
+ /**
+ * Get the two-factor recovery codes.
+ */
+ public function recoveryCodes(): array
+ {
+ return json_decode(decrypt($this->two_factor_recovery_codes), true) ?? [];
+ }
+
+ /**
+ * Replace the given recovery code with a new one.
+ */
+ public function replaceRecoveryCode(string $code): void
+ {
+ $codes = $this->recoveryCodes();
+ $index = array_search($code, $codes);
+
+ if ($index !== false) {
+ unset($codes[$index]);
+ $this->two_factor_recovery_codes = encrypt(json_encode(array_values($codes)));
+ $this->save();
+ }
+ }
}
diff --git a/composer.json b/composer.json
index 4001424..dacc697 100644
--- a/composer.json
+++ b/composer.json
@@ -19,6 +19,7 @@
"laravel/tinker": "^2.10.1",
"livewire/flux": "^2.0.6",
"livewire/volt": "^1.7.0",
+ "pragmarx/google2fa-qrcode": "^3.0",
"spatie/laravel-permission": "^6.16",
"wire-elements/modal": "^2.0.13"
},
diff --git a/database/migrations/2026_01_08_105500_add_two_factor_columns_to_users_table.php b/database/migrations/2026_01_08_105500_add_two_factor_columns_to_users_table.php
new file mode 100644
index 0000000..dfc075e
--- /dev/null
+++ b/database/migrations/2026_01_08_105500_add_two_factor_columns_to_users_table.php
@@ -0,0 +1,34 @@
+text('two_factor_secret')->nullable()->after('password');
+ $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret');
+ $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('users', function (Blueprint $table) {
+ $table->dropColumn([
+ 'two_factor_secret',
+ 'two_factor_recovery_codes',
+ 'two_factor_confirmed_at',
+ ]);
+ });
+ }
+};
diff --git a/resources/views/components/settings/layout.blade.php b/resources/views/components/settings/layout.blade.php
index 8815672..00895a9 100644
--- a/resources/views/components/settings/layout.blade.php
+++ b/resources/views/components/settings/layout.blade.php
@@ -3,6 +3,7 @@
Profile
Password
+ Two-Factor Authentication
Appearance
Locale
diff --git a/resources/views/livewire/auth/two-factor-challenge.blade.php b/resources/views/livewire/auth/two-factor-challenge.blade.php
new file mode 100644
index 0000000..daa9266
--- /dev/null
+++ b/resources/views/livewire/auth/two-factor-challenge.blade.php
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+ {{ __('Back to login') }}
+
+
+
diff --git a/resources/views/livewire/settings/two-factor.blade.php b/resources/views/livewire/settings/two-factor.blade.php
new file mode 100644
index 0000000..09ab036
--- /dev/null
+++ b/resources/views/livewire/settings/two-factor.blade.php
@@ -0,0 +1,104 @@
+
+
+ {{ __('settings.title') }}
+ {{ __('settings.subtitle') }}
+
+
+
+
+ @if (!auth()->user()->hasTwoFactorEnabled())
+ {{-- Enable 2FA --}}
+ @if (!$showingQrCode)
+
+
+ {{ __('When two-factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone\'s Google Authenticator application.') }}
+
+
+ {{ __('Enable Two-Factor Authentication') }}
+
+
+ @else
+ {{-- Show QR Code for Setup --}}
+
+
+ {{ __('Two-factor authentication is now enabled. Scan the following QR code using your phone\'s authenticator application or enter the setup key.') }}
+
+
+
+

+
+
+
+
{{ __('Setup Key:') }}
+
{{ $this->manualEntrySecret }}
+
+
+
+
+ @endif
+ @else
+ {{-- 2FA is enabled --}}
+
+
+
+ {{ __('Enabled') }}
+
+
+ {{ __('Two-factor authentication is currently enabled.') }}
+
+
+
+ @if ($showingRecoveryCodes)
+
+
+ {{ __('Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two-factor authentication device is lost.') }}
+
+
+ @foreach ($recoveryCodes as $code)
+
+ {{ $code }}
+
+ @endforeach
+
+
+ @endif
+
+
+ @if (!$showingRecoveryCodes)
+
+ {{ __('Show Recovery Codes') }}
+
+ @endif
+
+
+ {{ __('Regenerate Recovery Codes') }}
+
+
+
+ {{ __('Disable Two-Factor Authentication') }}
+
+
+
+ @endif
+
+
+
diff --git a/routes/auth.php b/routes/auth.php
index 51e50fe..b227a0a 100644
--- a/routes/auth.php
+++ b/routes/auth.php
@@ -16,6 +16,8 @@
Route::get('reset-password/{token}', \App\Livewire\Auth\ResetPassword::class)
->name('password.reset');
+ Route::get('two-factor-challenge', \App\Livewire\Auth\TwoFactorChallenge::class)
+ ->name('two-factor.challenge');
});
Route::middleware('auth')->group(function (): void {
diff --git a/routes/web.php b/routes/web.php
index 923be09..0a558db 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -16,6 +16,7 @@
Route::redirect('settings', 'settings/profile');
Route::get('settings/profile', \App\Livewire\Settings\Profile::class)->name('settings.profile');
Route::get('settings/password', \App\Livewire\Settings\Password::class)->name('settings.password');
+ Route::get('settings/two-factor', \App\Livewire\Settings\TwoFactor::class)->name('settings.two-factor');
Route::get('settings/appearance', \App\Livewire\Settings\Appearance::class)->name('settings.appearance');
Route::get('settings/locale', \App\Livewire\Settings\Locale::class)->name('settings.locale');
From 87f09983c2825648b1b7cbfc19d61f1ddffc4bd3 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 8 Jan 2026 11:05:22 +0000
Subject: [PATCH 3/9] Add comprehensive tests for 2FA functionality
- Add TwoFactorTest for settings component
- Add TwoFactorAuthenticationTest for login flow
- Add UserTwoFactorTest for model methods
- Test enable, confirm, disable 2FA
- Test recovery codes generation and usage
- Test login with 2FA code and recovery code
Co-authored-by: mortenebak <9462269+mortenebak@users.noreply.github.com>
---
.../Auth/TwoFactorAuthenticationTest.php | 152 ++++++++++++++++++
tests/Feature/Settings/TwoFactorTest.php | 127 +++++++++++++++
tests/Unit/UserTwoFactorTest.php | 74 +++++++++
3 files changed, 353 insertions(+)
create mode 100644 tests/Feature/Auth/TwoFactorAuthenticationTest.php
create mode 100644 tests/Feature/Settings/TwoFactorTest.php
create mode 100644 tests/Unit/UserTwoFactorTest.php
diff --git a/tests/Feature/Auth/TwoFactorAuthenticationTest.php b/tests/Feature/Auth/TwoFactorAuthenticationTest.php
new file mode 100644
index 0000000..df05e9d
--- /dev/null
+++ b/tests/Feature/Auth/TwoFactorAuthenticationTest.php
@@ -0,0 +1,152 @@
+generateSecretKey();
+
+ $user = User::factory()->create([
+ 'two_factor_secret' => encrypt($secret),
+ 'two_factor_confirmed_at' => now(),
+ 'two_factor_recovery_codes' => encrypt(json_encode(['CODE-1', 'CODE-2'])),
+ ]);
+
+ Livewire::test(Login::class)
+ ->set('email', $user->email)
+ ->set('password', 'password')
+ ->call('login')
+ ->assertRedirect(route('two-factor.challenge'));
+
+ $this->assertGuest();
+ expect(session()->has('login.id'))->toBeTrue();
+});
+
+test('user without 2fa can login normally', function (): void {
+ $user = User::factory()->create();
+
+ Livewire::test(Login::class)
+ ->set('email', $user->email)
+ ->set('password', 'password')
+ ->call('login')
+ ->assertRedirect(route('dashboard', absolute: false));
+
+ $this->assertAuthenticated();
+});
+
+test('two factor challenge can be passed with valid code', function (): void {
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user = User::factory()->create([
+ 'two_factor_secret' => encrypt($secret),
+ 'two_factor_confirmed_at' => now(),
+ 'two_factor_recovery_codes' => encrypt(json_encode(['CODE-1', 'CODE-2'])),
+ ]);
+
+ session()->put([
+ 'login.id' => $user->id,
+ 'login.remember' => false,
+ ]);
+
+ $validCode = $google2fa->getCurrentOtp($secret);
+
+ Livewire::test(TwoFactorChallenge::class)
+ ->set('code', $validCode)
+ ->call('challenge')
+ ->assertRedirect(route('dashboard', absolute: false));
+
+ $this->assertAuthenticatedAs($user);
+});
+
+test('two factor challenge fails with invalid code', function (): void {
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user = User::factory()->create([
+ 'two_factor_secret' => encrypt($secret),
+ 'two_factor_confirmed_at' => now(),
+ 'two_factor_recovery_codes' => encrypt(json_encode(['CODE-1', 'CODE-2'])),
+ ]);
+
+ session()->put([
+ 'login.id' => $user->id,
+ 'login.remember' => false,
+ ]);
+
+ Livewire::test(TwoFactorChallenge::class)
+ ->set('code', '000000')
+ ->call('challenge')
+ ->assertHasErrors(['code']);
+
+ $this->assertGuest();
+});
+
+test('two factor challenge can be passed with recovery code', function (): void {
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+ $recoveryCodes = ['RECOVERY-CODE-1', 'RECOVERY-CODE-2'];
+
+ $user = User::factory()->create([
+ 'two_factor_secret' => encrypt($secret),
+ 'two_factor_confirmed_at' => now(),
+ 'two_factor_recovery_codes' => encrypt(json_encode($recoveryCodes)),
+ ]);
+
+ session()->put([
+ 'login.id' => $user->id,
+ 'login.remember' => false,
+ ]);
+
+ Livewire::test(TwoFactorChallenge::class)
+ ->set('recovery', true)
+ ->set('code', 'RECOVERY-CODE-1')
+ ->call('challenge')
+ ->assertRedirect(route('dashboard', absolute: false));
+
+ $this->assertAuthenticatedAs($user);
+
+ // Verify the recovery code was consumed
+ $remainingCodes = $user->fresh()->recoveryCodes();
+ expect($remainingCodes)->not->toContain('RECOVERY-CODE-1');
+ expect($remainingCodes)->toContain('RECOVERY-CODE-2');
+});
+
+test('two factor challenge fails with invalid recovery code', function (): void {
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user = User::factory()->create([
+ 'two_factor_secret' => encrypt($secret),
+ 'two_factor_confirmed_at' => now(),
+ 'two_factor_recovery_codes' => encrypt(json_encode(['VALID-CODE'])),
+ ]);
+
+ session()->put([
+ 'login.id' => $user->id,
+ 'login.remember' => false,
+ ]);
+
+ Livewire::test(TwoFactorChallenge::class)
+ ->set('recovery', true)
+ ->set('code', 'INVALID-CODE')
+ ->call('challenge')
+ ->assertHasErrors(['code']);
+
+ $this->assertGuest();
+});
+
+test('can toggle between code and recovery mode', function (): void {
+ Livewire::test(TwoFactorChallenge::class)
+ ->assertSet('recovery', false)
+ ->call('toggleRecovery')
+ ->assertSet('recovery', true)
+ ->call('toggleRecovery')
+ ->assertSet('recovery', false);
+});
diff --git a/tests/Feature/Settings/TwoFactorTest.php b/tests/Feature/Settings/TwoFactorTest.php
new file mode 100644
index 0000000..93c0c5c
--- /dev/null
+++ b/tests/Feature/Settings/TwoFactorTest.php
@@ -0,0 +1,127 @@
+create();
+
+ $response = $this->actingAs($user)->get('/settings/two-factor');
+
+ $response->assertStatus(200);
+});
+
+test('two factor authentication can be enabled', function (): void {
+ $user = User::factory()->create();
+
+ Livewire::actingAs($user)
+ ->test(TwoFactor::class)
+ ->call('enableTwoFactorAuthentication')
+ ->assertSet('showingQrCode', true);
+
+ $this->assertNotNull($user->fresh()->two_factor_secret);
+ $this->assertNull($user->fresh()->two_factor_confirmed_at);
+});
+
+test('two factor authentication can be confirmed with valid code', function (): void {
+ $user = User::factory()->create();
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user->two_factor_secret = encrypt($secret);
+ $user->save();
+
+ $validCode = $google2fa->getCurrentOtp($secret);
+
+ Livewire::actingAs($user)
+ ->test(TwoFactor::class)
+ ->set('showingQrCode', true)
+ ->set('code', $validCode)
+ ->call('confirmTwoFactorAuthentication')
+ ->assertHasNoErrors();
+
+ $this->assertNotNull($user->fresh()->two_factor_confirmed_at);
+ $this->assertNotNull($user->fresh()->two_factor_recovery_codes);
+});
+
+test('two factor authentication cannot be confirmed with invalid code', function (): void {
+ $user = User::factory()->create();
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user->two_factor_secret = encrypt($secret);
+ $user->save();
+
+ Livewire::actingAs($user)
+ ->test(TwoFactor::class)
+ ->set('showingQrCode', true)
+ ->set('code', '000000')
+ ->call('confirmTwoFactorAuthentication')
+ ->assertHasErrors(['code']);
+
+ $this->assertNull($user->fresh()->two_factor_confirmed_at);
+});
+
+test('recovery codes can be regenerated', function (): void {
+ $user = User::factory()->create();
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user->two_factor_secret = encrypt($secret);
+ $user->two_factor_confirmed_at = now();
+ $user->two_factor_recovery_codes = encrypt(json_encode(['OLD-CODE-1', 'OLD-CODE-2']));
+ $user->save();
+
+ $oldCodes = $user->recoveryCodes();
+
+ Livewire::actingAs($user)
+ ->test(TwoFactor::class)
+ ->call('regenerateRecoveryCodes')
+ ->assertSet('showingRecoveryCodes', true);
+
+ $newCodes = $user->fresh()->recoveryCodes();
+
+ expect($newCodes)->not->toBe($oldCodes);
+ expect($newCodes)->toHaveCount(8);
+});
+
+test('two factor authentication can be disabled', function (): void {
+ $user = User::factory()->create();
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user->two_factor_secret = encrypt($secret);
+ $user->two_factor_confirmed_at = now();
+ $user->two_factor_recovery_codes = encrypt(json_encode(['CODE-1', 'CODE-2']));
+ $user->save();
+
+ Livewire::actingAs($user)
+ ->test(TwoFactor::class)
+ ->call('disableTwoFactorAuthentication');
+
+ $user = $user->fresh();
+
+ $this->assertNull($user->two_factor_secret);
+ $this->assertNull($user->two_factor_confirmed_at);
+ $this->assertNull($user->two_factor_recovery_codes);
+});
+
+test('recovery codes can be viewed', function (): void {
+ $user = User::factory()->create();
+ $recoveryCodes = ['CODE-1', 'CODE-2', 'CODE-3'];
+
+ $user->two_factor_secret = encrypt('secret');
+ $user->two_factor_confirmed_at = now();
+ $user->two_factor_recovery_codes = encrypt(json_encode($recoveryCodes));
+ $user->save();
+
+ Livewire::actingAs($user)
+ ->test(TwoFactor::class)
+ ->call('showRecoveryCodes')
+ ->assertSet('showingRecoveryCodes', true)
+ ->assertSet('recoveryCodes', $recoveryCodes);
+});
diff --git a/tests/Unit/UserTwoFactorTest.php b/tests/Unit/UserTwoFactorTest.php
new file mode 100644
index 0000000..bddff4d
--- /dev/null
+++ b/tests/Unit/UserTwoFactorTest.php
@@ -0,0 +1,74 @@
+generateSecretKey();
+
+ $user = User::factory()->create([
+ 'two_factor_secret' => encrypt($secret),
+ 'two_factor_confirmed_at' => now(),
+ ]);
+
+ expect($user->hasTwoFactorEnabled())->toBeTrue();
+});
+
+test('has two factor enabled returns false when secret is null', function (): void {
+ $user = User::factory()->create([
+ 'two_factor_secret' => null,
+ 'two_factor_confirmed_at' => now(),
+ ]);
+
+ expect($user->hasTwoFactorEnabled())->toBeFalse();
+});
+
+test('has two factor enabled returns false when not confirmed', function (): void {
+ $google2fa = new Google2FA();
+ $secret = $google2fa->generateSecretKey();
+
+ $user = User::factory()->create([
+ 'two_factor_secret' => encrypt($secret),
+ 'two_factor_confirmed_at' => null,
+ ]);
+
+ expect($user->hasTwoFactorEnabled())->toBeFalse();
+});
+
+test('recovery codes can be retrieved', function (): void {
+ $codes = ['CODE-1', 'CODE-2', 'CODE-3'];
+
+ $user = User::factory()->create([
+ 'two_factor_recovery_codes' => encrypt(json_encode($codes)),
+ ]);
+
+ expect($user->recoveryCodes())->toBe($codes);
+});
+
+test('recovery codes returns empty array when null', function (): void {
+ $user = User::factory()->create([
+ 'two_factor_recovery_codes' => null,
+ ]);
+
+ expect($user->recoveryCodes())->toBe([]);
+});
+
+test('recovery code can be replaced', function (): void {
+ $codes = ['CODE-1', 'CODE-2', 'CODE-3'];
+
+ $user = User::factory()->create([
+ 'two_factor_recovery_codes' => encrypt(json_encode($codes)),
+ ]);
+
+ $user->replaceRecoveryCode('CODE-2');
+
+ $remaining = $user->fresh()->recoveryCodes();
+
+ expect($remaining)->toHaveCount(2);
+ expect($remaining)->not->toContain('CODE-2');
+ expect($remaining)->toContain('CODE-1');
+ expect($remaining)->toContain('CODE-3');
+});
From 52f33c8e37a10473017d9bdb54565d8d83442488 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 8 Jan 2026 11:07:03 +0000
Subject: [PATCH 4/9] Add documentation for 2FA feature
- Create comprehensive TWO_FACTOR_AUTHENTICATION.md guide
- Update README with 2FA feature listing
- Add user guide, technical details, and FAQ
- Document authentication flow and security considerations
Co-authored-by: mortenebak <9462269+mortenebak@users.noreply.github.com>
---
README.md | 16 +++
docs/TWO_FACTOR_AUTHENTICATION.md | 168 ++++++++++++++++++++++++++++++
2 files changed, 184 insertions(+)
create mode 100644 docs/TWO_FACTOR_AUTHENTICATION.md
diff --git a/README.md b/README.md
index ff4f482..2d63f83 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,7 @@ This Starter kit contains my starting point when developing a new Laravel projec
- ✅ **User Management**,
- ✅ **Role Management**,
- ✅ **Permissions Management**,
+- ✅ **Two-Factor Authentication (2FA)**
- ✅ **Localization** options
- ✅ Separate **Dashboard for Super Admins**
- ✅ Updated for Laravel 12.0 **and** Livewire 3.0
@@ -36,6 +37,7 @@ Among other things, it also includes:
- [missing-livewire-assertions](https://github.com/christophrumpel/missing-livewire-assertions) for extra testing of Livewire components by [Christoph Rumpel](https://github.com/christophrumpel)
- [LivewireAlerts](https://github.com/jantinnerezo/livewire-alert) for SweetAlerts
- [Spatie Roles & Permissions](https://spatie.be/docs/laravel-permission/v5/introduction) for user roles and permissions
+- [Google2FA](https://github.com/antonioribeiro/google2fa) for Two-Factor Authentication (TOTP)
- [Strict Eloquent Models](https://planetscale.com/blog/laravels-safety-mechanisms) for safety
- [Laravel Debugbar](https://github.com/barryvdh/laravel-debugbar) for debugging
- [Laravel IDE helper](https://github.com/barryvdh/laravel-ide-helper) for IDE support
@@ -104,6 +106,20 @@ return [
];
```
+# Features
+
+## Two-Factor Authentication
+
+This starter kit includes built-in support for Two-Factor Authentication (2FA) using TOTP (Time-based One-Time Passwords), compatible with apps like Google Authenticator, Authy, and 1Password.
+
+Key features:
+- QR code generation for easy setup
+- Recovery codes for account recovery
+- Seamless integration with the authentication flow
+- User-friendly interface
+
+For detailed information, see [Two-Factor Authentication Documentation](docs/TWO_FACTOR_AUTHENTICATION.md).
+
# Developing
## Check for code style issues
diff --git a/docs/TWO_FACTOR_AUTHENTICATION.md b/docs/TWO_FACTOR_AUTHENTICATION.md
new file mode 100644
index 0000000..2773b0a
--- /dev/null
+++ b/docs/TWO_FACTOR_AUTHENTICATION.md
@@ -0,0 +1,168 @@
+# Two-Factor Authentication (2FA)
+
+This starter kit includes built-in support for Two-Factor Authentication (2FA) using Time-based One-Time Passwords (TOTP), compatible with popular authenticator apps like Google Authenticator, Authy, and 1Password.
+
+## Features
+
+- **TOTP-based authentication** using the industry-standard algorithm
+- **QR code generation** for easy setup
+- **Manual entry option** for authenticator apps
+- **Recovery codes** for account recovery if you lose access to your authenticator device
+- **Seamless integration** with the existing authentication flow
+- **User-friendly interface** built with Flux UI components
+
+## User Guide
+
+### Enabling Two-Factor Authentication
+
+1. Log in to your account
+2. Navigate to **Settings** > **Two-Factor Authentication**
+3. Click **Enable Two-Factor Authentication**
+4. Scan the QR code with your authenticator app (Google Authenticator, Authy, 1Password, etc.)
+ - Alternatively, you can manually enter the setup key shown below the QR code
+5. Enter the 6-digit code from your authenticator app to confirm
+6. **Save your recovery codes** in a secure location (password manager recommended)
+
+### Logging In with 2FA
+
+1. Enter your email and password as usual
+2. You'll be redirected to the two-factor authentication challenge
+3. Open your authenticator app and enter the current 6-digit code
+4. Click **Verify** to complete login
+
+### Using Recovery Codes
+
+If you lose access to your authenticator device:
+
+1. On the two-factor challenge screen, click **Use recovery code**
+2. Enter one of your recovery codes
+3. Click **Verify**
+4. **Important:** Each recovery code can only be used once
+
+After logging in with a recovery code, you should:
+- Navigate to Settings > Two-Factor Authentication
+- Generate new recovery codes
+- Consider disabling and re-enabling 2FA with a new device
+
+### Managing Recovery Codes
+
+To view or regenerate your recovery codes:
+
+1. Navigate to **Settings** > **Two-Factor Authentication**
+2. Click **Show Recovery Codes** to view your current codes
+3. Click **Regenerate Recovery Codes** to generate a new set
+ - **Warning:** This will invalidate all existing recovery codes
+
+### Disabling Two-Factor Authentication
+
+1. Navigate to **Settings** > **Two-Factor Authentication**
+2. Click **Disable Two-Factor Authentication**
+3. 2FA will be immediately disabled for your account
+
+## Technical Details
+
+### Database Schema
+
+The following columns are added to the `users` table:
+
+- `two_factor_secret` (text, nullable, encrypted) - Stores the TOTP secret
+- `two_factor_recovery_codes` (text, nullable, encrypted) - Stores recovery codes
+- `two_factor_confirmed_at` (timestamp, nullable) - Marks when 2FA was confirmed
+
+### Authentication Flow
+
+1. User logs in with email/password
+2. System checks if user has 2FA enabled (`hasTwoFactorEnabled()`)
+3. If yes, user is logged out and redirected to 2FA challenge
+4. User enters TOTP code or recovery code
+5. System verifies the code
+6. If valid, user is logged in and redirected to dashboard
+
+### Security Considerations
+
+- **Secrets are encrypted** - Both the TOTP secret and recovery codes are encrypted before storage
+- **Rate limiting** - The 2FA challenge is rate-limited to prevent brute force attacks (5 attempts per IP)
+- **Recovery codes** - Generated using cryptographically secure random bytes
+- **One-time use** - Recovery codes are removed after use
+- **Session security** - Login session data is stored temporarily and cleared after successful authentication
+
+## Development
+
+### Dependencies
+
+This feature uses the following package:
+
+- `pragmarx/google2fa-qrcode` - For TOTP generation and QR code creation
+
+### Key Files
+
+**Models:**
+- `app/Models/User.php` - User model with 2FA methods
+
+**Livewire Components:**
+- `app/Livewire/Settings/TwoFactor.php` - Settings page component
+- `app/Livewire/Auth/TwoFactorChallenge.php` - Login challenge component
+- `app/Livewire/Auth/Login.php` - Updated login component
+
+**Views:**
+- `resources/views/livewire/settings/two-factor.blade.php`
+- `resources/views/livewire/auth/two-factor-challenge.blade.php`
+
+**Routes:**
+- `routes/web.php` - Settings route
+- `routes/auth.php` - Challenge route
+
+**Migrations:**
+- `database/migrations/2026_01_08_105500_add_two_factor_columns_to_users_table.php`
+
+### Testing
+
+Run the 2FA tests:
+
+```bash
+php artisan test --filter=TwoFactor
+```
+
+Or run all tests:
+
+```bash
+php artisan test
+```
+
+## FAQ
+
+**Q: What authenticator apps are compatible?**
+
+A: Any TOTP-compatible authenticator app works, including:
+- Google Authenticator
+- Authy
+- 1Password
+- Microsoft Authenticator
+- LastPass Authenticator
+
+**Q: How many recovery codes are generated?**
+
+A: 8 recovery codes are generated by default.
+
+**Q: Can I use the same authenticator app on multiple devices?**
+
+A: Yes, but you'll need to scan the QR code or enter the setup key on each device when initially setting up 2FA.
+
+**Q: What happens if I lose my phone and recovery codes?**
+
+A: An administrator can disable 2FA for your account by directly modifying the database or through an admin panel (if implemented).
+
+**Q: Is 2FA required for all users?**
+
+A: No, 2FA is optional. Each user can choose to enable or disable it for their own account.
+
+## Future Enhancements
+
+Potential improvements that could be added:
+
+- SMS-based 2FA as an alternative to TOTP
+- WebAuthn/FIDO2 support for hardware security keys
+- Admin ability to enforce 2FA for all users
+- Backup authentication methods
+- 2FA setup during registration
+- Trust this device option (skip 2FA for 30 days)
From ce4d28891c1341cb83d57d308353af5dba485e19 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 8 Jan 2026 11:08:22 +0000
Subject: [PATCH 5/9] Fix: Add null check before decrypting recovery codes
Prevent exception when two_factor_recovery_codes is null
by checking for null before attempting decryption
Co-authored-by: mortenebak <9462269+mortenebak@users.noreply.github.com>
---
app/Models/User.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/Models/User.php b/app/Models/User.php
index 385587b..7b2f13e 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -80,6 +80,10 @@ public function hasTwoFactorEnabled(): bool
*/
public function recoveryCodes(): array
{
+ if (is_null($this->two_factor_recovery_codes)) {
+ return [];
+ }
+
return json_decode(decrypt($this->two_factor_recovery_codes), true) ?? [];
}
From 3a93a2710588e005fd552a89695957b691113bc6 Mon Sep 17 00:00:00 2001
From: Morten
Date: Thu, 8 Jan 2026 12:41:44 +0100
Subject: [PATCH 6/9] fix minor issues with return types
---
app/Livewire/Auth/Login.php | 2 +-
composer.lock | 2600 +++++++++++++++++++++--------------
2 files changed, 1573 insertions(+), 1029 deletions(-)
diff --git a/app/Livewire/Auth/Login.php b/app/Livewire/Auth/Login.php
index 4352f5d..ae707dd 100644
--- a/app/Livewire/Auth/Login.php
+++ b/app/Livewire/Auth/Login.php
@@ -28,7 +28,7 @@ class Login extends Component
/**
* Handle an incoming authentication request.
*/
- public function login(): void
+ public function login()
{
$this->validate();
diff --git a/composer.lock b/composer.lock
index 7f67c5b..acf9324 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,29 +4,29 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "29661c805462d73855ed49307fa7b74b",
+ "content-hash": "acf920b541479fffd30ee353e61f3aeb",
"packages": [
{
"name": "brick/math",
- "version": "0.12.3",
+ "version": "0.14.1",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
+ "reference": "f05858549e5f9d7bb45875a75583240a38a281d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
- "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
+ "url": "https://api.github.com/repos/brick/math/zipball/f05858549e5f9d7bb45875a75583240a38a281d0",
+ "reference": "f05858549e5f9d7bb45875a75583240a38a281d0",
"shasum": ""
},
"require": {
- "php": "^8.1"
+ "php": "^8.2"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^10.1",
- "vimeo/psalm": "6.8.8"
+ "phpstan/phpstan": "2.1.22",
+ "phpunit/phpunit": "^11.5"
},
"type": "library",
"autoload": {
@@ -56,7 +56,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.12.3"
+ "source": "https://github.com/brick/math/tree/0.14.1"
},
"funding": [
{
@@ -64,7 +64,7 @@
"type": "github"
}
],
- "time": "2025-02-28T13:11:00+00:00"
+ "time": "2025-11-24T14:40:29+00:00"
},
{
"name": "carbonphp/carbon-doctrine-types",
@@ -212,33 +212,32 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.10",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^11.0",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.3",
- "phpunit/phpunit": "^8.5 || ^9.5",
- "vimeo/psalm": "^4.25 || ^5.4"
+ "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\\": "lib/Doctrine/Inflector"
+ "Doctrine\\Inflector\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -283,7 +282,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.10"
+ "source": "https://github.com/doctrine/inflector/tree/2.1.0"
},
"funding": [
{
@@ -299,7 +298,7 @@
"type": "tidelift"
}
],
- "time": "2024-02-18T20:23:39+00:00"
+ "time": "2025-08-10T19:31:58+00:00"
},
{
"name": "doctrine/lexer",
@@ -380,29 +379,28 @@
},
{
"name": "dragonmantank/cron-expression",
- "version": "v3.4.0",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "8c784d071debd117328803d86b2097615b457500"
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
- "reference": "8c784d071debd117328803d86b2097615b457500",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013",
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013",
"shasum": ""
},
"require": {
- "php": "^7.2|^8.0",
- "webmozart/assert": "^1.0"
+ "php": "^8.2|^8.3|^8.4|^8.5"
},
"replace": {
"mtdowling/cron-expression": "^1.0"
},
"require-dev": {
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.0",
- "phpunit/phpunit": "^7.0|^8.0|^9.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.32|^2.1.31",
+ "phpunit/phpunit": "^8.5.48|^9.0"
},
"type": "library",
"extra": {
@@ -433,7 +431,7 @@
],
"support": {
"issues": "https://github.com/dragonmantank/cron-expression/issues",
- "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0"
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0"
},
"funding": [
{
@@ -441,20 +439,20 @@
"type": "github"
}
],
- "time": "2024-10-09T13:47:03+00:00"
+ "time": "2025-10-31T18:51:33+00:00"
},
{
"name": "egulias/email-validator",
- "version": "4.0.3",
+ "version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "b115554301161fa21467629f1e1391c1936de517"
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517",
- "reference": "b115554301161fa21467629f1e1391c1936de517",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
"shasum": ""
},
"require": {
@@ -500,7 +498,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
- "source": "https://github.com/egulias/EmailValidator/tree/4.0.3"
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
},
"funding": [
{
@@ -508,35 +506,35 @@
"type": "github"
}
],
- "time": "2024-12-27T00:36:43+00:00"
+ "time": "2025-03-06T22:45:56+00:00"
},
{
"name": "fruitcake/php-cors",
- "version": "v1.3.0",
+ "version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/php-cors.git",
- "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b"
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b",
- "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b",
+ "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
"shasum": ""
},
"require": {
- "php": "^7.4|^8.0",
- "symfony/http-foundation": "^4.4|^5.4|^6|^7"
+ "php": "^8.1",
+ "symfony/http-foundation": "^5.4|^6.4|^7.3|^8"
},
"require-dev": {
- "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan": "^2",
"phpunit/phpunit": "^9",
- "squizlabs/php_codesniffer": "^3.5"
+ "squizlabs/php_codesniffer": "^4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "1.3-dev"
}
},
"autoload": {
@@ -567,7 +565,7 @@
],
"support": {
"issues": "https://github.com/fruitcake/php-cors/issues",
- "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0"
+ "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0"
},
"funding": [
{
@@ -579,28 +577,28 @@
"type": "github"
}
],
- "time": "2023-10-12T05:21:21+00:00"
+ "time": "2025-12-03T09:33:47+00:00"
},
{
"name": "graham-campbell/result-type",
- "version": "v1.1.3",
+ "version": "v1.1.4",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Result-Type.git",
- "reference": "3ba905c11371512af9d9bdd27d99b782216b6945"
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945",
- "reference": "3ba905c11371512af9d9bdd27d99b782216b6945",
+ "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.3"
+ "phpoption/phpoption": "^1.9.5"
},
"require-dev": {
- "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
+ "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7"
},
"type": "library",
"autoload": {
@@ -629,7 +627,7 @@
],
"support": {
"issues": "https://github.com/GrahamCampbell/Result-Type/issues",
- "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3"
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4"
},
"funding": [
{
@@ -641,26 +639,26 @@
"type": "tidelift"
}
],
- "time": "2024-07-20T21:45:45+00:00"
+ "time": "2025-12-27T19:43:20+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.9.2",
+ "version": "7.10.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
- "guzzlehttp/psr7": "^2.7.0",
+ "guzzlehttp/promises": "^2.3",
+ "guzzlehttp/psr7": "^2.8",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -751,7 +749,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
+ "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
},
"funding": [
{
@@ -767,20 +765,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-24T11:22:20+00:00"
+ "time": "2025-08-23T22:36:01+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.0.4",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
- "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957",
"shasum": ""
},
"require": {
@@ -788,7 +786,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"type": "library",
"extra": {
@@ -834,7 +832,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.0.4"
+ "source": "https://github.com/guzzle/promises/tree/2.3.0"
},
"funding": [
{
@@ -850,20 +848,20 @@
"type": "tidelift"
}
],
- "time": "2024-10-17T10:06:22+00:00"
+ "time": "2025-08-22T14:34:08+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.7.0",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
+ "reference": "21dc724a0583619cd1652f673303492272778051"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
+ "reference": "21dc724a0583619cd1652f673303492272778051",
"shasum": ""
},
"require": {
@@ -879,7 +877,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -950,7 +948,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.7.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.8.0"
},
"funding": [
{
@@ -966,20 +964,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-18T11:15:46+00:00"
+ "time": "2025-08-23T21:21:41+00:00"
},
{
"name": "guzzlehttp/uri-template",
- "version": "v1.0.4",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/guzzle/uri-template.git",
- "reference": "30e286560c137526eccd4ce21b2de477ab0676d2"
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2",
- "reference": "30e286560c137526eccd4ce21b2de477ab0676d2",
+ "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1",
"shasum": ""
},
"require": {
@@ -988,7 +986,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25",
"uri-template/tests": "1.0.0"
},
"type": "library",
@@ -1036,7 +1034,7 @@
],
"support": {
"issues": "https://github.com/guzzle/uri-template/issues",
- "source": "https://github.com/guzzle/uri-template/tree/v1.0.4"
+ "source": "https://github.com/guzzle/uri-template/tree/v1.0.5"
},
"funding": [
{
@@ -1052,7 +1050,7 @@
"type": "tidelift"
}
],
- "time": "2025-02-03T10:55:03+00:00"
+ "time": "2025-08-22T14:27:06+00:00"
},
{
"name": "jantinnerezo/livewire-alert",
@@ -1118,20 +1116,20 @@
},
{
"name": "laravel/framework",
- "version": "v12.2.0",
+ "version": "v12.46.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "2fb06941bc69ea92f28b2888535ab144ee006889"
+ "reference": "9dcff48d25a632c1fadb713024c952fec489c4ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/2fb06941bc69ea92f28b2888535ab144ee006889",
- "reference": "2fb06941bc69ea92f28b2888535ab144ee006889",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/9dcff48d25a632c1fadb713024c952fec489c4ae",
+ "reference": "9dcff48d25a632c1fadb713024c952fec489c4ae",
"shasum": ""
},
"require": {
- "brick/math": "^0.11|^0.12",
+ "brick/math": "^0.11|^0.12|^0.13|^0.14",
"composer-runtime-api": "^2.2",
"doctrine/inflector": "^2.0.5",
"dragonmantank/cron-expression": "^3.4",
@@ -1148,7 +1146,7 @@
"guzzlehttp/uri-template": "^1.0",
"laravel/prompts": "^0.3.0",
"laravel/serializable-closure": "^1.3|^2.0",
- "league/commonmark": "^2.6",
+ "league/commonmark": "^2.7",
"league/flysystem": "^3.25.1",
"league/flysystem-local": "^3.25.1",
"league/uri": "^7.5.1",
@@ -1167,7 +1165,9 @@
"symfony/http-kernel": "^7.2.0",
"symfony/mailer": "^7.2.0",
"symfony/mime": "^7.2.0",
- "symfony/polyfill-php83": "^1.31",
+ "symfony/polyfill-php83": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/polyfill-php85": "^1.33",
"symfony/process": "^7.2.0",
"symfony/routing": "^7.2.0",
"symfony/uid": "^7.2.0",
@@ -1203,6 +1203,7 @@
"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",
@@ -1212,6 +1213,7 @@
"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",
@@ -1235,13 +1237,14 @@
"league/flysystem-read-only": "^3.25.1",
"league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10",
- "orchestra/testbench-core": "^10.0.0",
- "pda/pheanstalk": "^5.0.6",
+ "opis/json-schema": "^2.4.1",
+ "orchestra/testbench-core": "^10.8.1",
+ "pda/pheanstalk": "^5.0.6|^7.0.0",
"php-http/discovery": "^1.15",
"phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
- "predis/predis": "^2.3",
- "resend/resend-php": "^0.10.0",
+ "predis/predis": "^2.3|^3.0",
+ "resend/resend-php": "^0.10.0|^1.0",
"symfony/cache": "^7.2.0",
"symfony/http-client": "^7.2.0",
"symfony/psr-http-message-bridge": "^7.2.0",
@@ -1260,7 +1263,7 @@
"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 use the eloquent factory builder (^1.9.1).",
+ "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).",
@@ -1272,10 +1275,10 @@
"pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).",
"php-http/discovery": "Required to use PSR-7 bridging features (^1.15).",
"phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).",
- "predis/predis": "Required to use the predis connector (^2.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).",
+ "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).",
"symfony/cache": "Required to PSR-6 cache bridge (^7.2).",
"symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).",
"symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).",
@@ -1297,6 +1300,7 @@
"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"
],
@@ -1305,7 +1309,8 @@
"Illuminate\\Support\\": [
"src/Illuminate/Macroable/",
"src/Illuminate/Collections/",
- "src/Illuminate/Conditionable/"
+ "src/Illuminate/Conditionable/",
+ "src/Illuminate/Reflection/"
]
}
},
@@ -1329,20 +1334,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2025-03-12T14:38:20+00:00"
+ "time": "2026-01-07T23:26:53+00:00"
},
{
"name": "laravel/pint",
- "version": "v1.21.2",
+ "version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "370772e7d9e9da087678a0edf2b11b6960e40558"
+ "reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/370772e7d9e9da087678a0edf2b11b6960e40558",
- "reference": "370772e7d9e9da087678a0edf2b11b6960e40558",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/c67b4195b75491e4dfc6b00b1c78b68d86f54c90",
+ "reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90",
"shasum": ""
},
"require": {
@@ -1353,13 +1358,13 @@
"php": "^8.2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.72.0",
- "illuminate/view": "^11.44.2",
- "larastan/larastan": "^3.2.0",
- "laravel-zero/framework": "^11.36.1",
+ "friendsofphp/php-cs-fixer": "^3.92.4",
+ "illuminate/view": "^12.44.0",
+ "larastan/larastan": "^3.8.1",
+ "laravel-zero/framework": "^12.0.4",
"mockery/mockery": "^1.6.12",
- "nunomaduro/termwind": "^2.3",
- "pestphp/pest": "^2.36.0"
+ "nunomaduro/termwind": "^2.3.3",
+ "pestphp/pest": "^3.8.4"
},
"bin": [
"builds/pint"
@@ -1385,6 +1390,7 @@
"description": "An opinionated code formatter for PHP.",
"homepage": "https://laravel.com",
"keywords": [
+ "dev",
"format",
"formatter",
"lint",
@@ -1395,20 +1401,20 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2025-03-14T22:31:42+00:00"
+ "time": "2026-01-05T16:49:17+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.3.5",
+ "version": "v0.3.8",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1"
+ "reference": "096748cdfb81988f60090bbb839ce3205ace0d35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1",
- "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35",
+ "reference": "096748cdfb81988f60090bbb839ce3205ace0d35",
"shasum": ""
},
"require": {
@@ -1424,9 +1430,9 @@
"require-dev": {
"illuminate/collections": "^10.0|^11.0|^12.0",
"mockery/mockery": "^1.5",
- "pestphp/pest": "^2.3|^3.4",
- "phpstan/phpstan": "^1.11",
- "phpstan/phpstan-mockery": "^1.1"
+ "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."
@@ -1452,22 +1458,22 @@
"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.5"
+ "source": "https://github.com/laravel/prompts/tree/v0.3.8"
},
- "time": "2025-02-11T13:34:40+00:00"
+ "time": "2025-11-21T20:52:52+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.3",
+ "version": "v2.0.7",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "f379c13663245f7aa4512a7869f62eb14095f23f"
+ "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f",
- "reference": "f379c13663245f7aa4512a7869f62eb14095f23f",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
+ "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
"shasum": ""
},
"require": {
@@ -1476,7 +1482,7 @@
"require-dev": {
"illuminate/support": "^10.0|^11.0|^12.0",
"nesbot/carbon": "^2.67|^3.0",
- "pestphp/pest": "^2.36|^3.0",
+ "pestphp/pest": "^2.36|^3.0|^4.0",
"phpstan/phpstan": "^2.0",
"symfony/var-dumper": "^6.2.0|^7.0.0"
},
@@ -1515,20 +1521,20 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2025-02-11T15:03:05+00:00"
+ "time": "2025-11-21T20:52:36+00:00"
},
{
"name": "laravel/tinker",
- "version": "v2.10.1",
+ "version": "v2.11.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
- "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3"
+ "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3",
- "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/3d34b97c9a1747a81a3fde90482c092bd8b66468",
+ "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468",
"shasum": ""
},
"require": {
@@ -1537,7 +1543,7 @@
"illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
"php": "^7.2.5|^8.0",
"psy/psysh": "^0.11.1|^0.12.0",
- "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0"
+ "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0|^8.0"
},
"require-dev": {
"mockery/mockery": "~1.3.3|^1.4.2",
@@ -1579,22 +1585,22 @@
],
"support": {
"issues": "https://github.com/laravel/tinker/issues",
- "source": "https://github.com/laravel/tinker/tree/v2.10.1"
+ "source": "https://github.com/laravel/tinker/tree/v2.11.0"
},
- "time": "2025-01-27T14:24:01+00:00"
+ "time": "2025-12-19T19:16:45+00:00"
},
{
"name": "league/commonmark",
- "version": "2.6.1",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "d990688c91cedfb69753ffc2512727ec646df2ad"
+ "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad",
- "reference": "d990688c91cedfb69753ffc2512727ec646df2ad",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
+ "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
"shasum": ""
},
"require": {
@@ -1623,7 +1629,7 @@
"symfony/process": "^5.4 | ^6.0 | ^7.0",
"symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
"unleashedtech/php-coding-standard": "^3.1.1",
- "vimeo/psalm": "^4.24.0 || ^5.0.0"
+ "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
},
"suggest": {
"symfony/yaml": "v2.3+ required if using the Front Matter extension"
@@ -1631,7 +1637,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.7-dev"
+ "dev-main": "2.9-dev"
}
},
"autoload": {
@@ -1688,7 +1694,7 @@
"type": "tidelift"
}
],
- "time": "2024-12-29T14:10:59+00:00"
+ "time": "2025-11-26T21:48:24+00:00"
},
{
"name": "league/config",
@@ -1774,16 +1780,16 @@
},
{
"name": "league/flysystem",
- "version": "3.29.1",
+ "version": "3.30.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319"
+ "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319",
- "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277",
+ "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277",
"shasum": ""
},
"require": {
@@ -1807,13 +1813,13 @@
"composer/semver": "^3.0",
"ext-fileinfo": "*",
"ext-ftp": "*",
- "ext-mongodb": "^1.3",
+ "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",
+ "mongodb/mongodb": "^1.2|^2",
"phpseclib/phpseclib": "^3.0.36",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^9.5.11|^10.0",
@@ -1851,22 +1857,22 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.29.1"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.30.2"
},
- "time": "2024-10-08T08:58:34+00:00"
+ "time": "2025-11-10T17:13:11+00:00"
},
{
"name": "league/flysystem-local",
- "version": "3.29.0",
+ "version": "3.30.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-local.git",
- "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27"
+ "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27",
- "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d",
+ "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d",
"shasum": ""
},
"require": {
@@ -1900,9 +1906,9 @@
"local"
],
"support": {
- "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0"
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2"
},
- "time": "2024-08-09T21:24:39+00:00"
+ "time": "2025-11-10T11:23:37+00:00"
},
{
"name": "league/mime-type-detection",
@@ -1962,33 +1968,38 @@
},
{
"name": "league/uri",
- "version": "7.5.1",
+ "version": "7.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
- "reference": "81fb5145d2644324614cc532b28efd0215bda430"
+ "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430",
- "reference": "81fb5145d2644324614cc532b28efd0215bda430",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
+ "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
"shasum": ""
},
"require": {
- "league/uri-interfaces": "^7.5",
- "php": "^8.1"
+ "league/uri-interfaces": "^7.7",
+ "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 resolve Public Suffix and Top Level Domain",
"league/uri-components": "Needed to easily manipulate URI objects components",
+ "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP",
"php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle WHATWG URL",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -2016,6 +2027,7 @@
"description": "URI manipulation library",
"homepage": "https://uri.thephpleague.com",
"keywords": [
+ "URN",
"data-uri",
"file-uri",
"ftp",
@@ -2028,9 +2040,11 @@
"psr-7",
"query-string",
"querystring",
+ "rfc2141",
"rfc3986",
"rfc3987",
"rfc6570",
+ "rfc8141",
"uri",
"uri-template",
"url",
@@ -2040,7 +2054,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri/tree/7.5.1"
+ "source": "https://github.com/thephpleague/uri/tree/7.7.0"
},
"funding": [
{
@@ -2048,26 +2062,25 @@
"type": "github"
}
],
- "time": "2024-12-08T08:40:02+00:00"
+ "time": "2025-12-07T16:02:06+00:00"
},
{
"name": "league/uri-interfaces",
- "version": "7.5.0",
+ "version": "7.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
- "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742"
+ "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
- "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
+ "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
"shasum": ""
},
"require": {
"ext-filter": "*",
"php": "^8.1",
- "psr/http-factory": "^1",
"psr/http-message": "^1.1 || ^2.0"
},
"suggest": {
@@ -2075,6 +2088,7 @@
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
"php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle WHATWG URL",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -2099,7 +2113,7 @@
"homepage": "https://nyamsprod.com"
}
],
- "description": "Common interfaces and classes for URI representation and interaction",
+ "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI",
"homepage": "https://uri.thephpleague.com",
"keywords": [
"data-uri",
@@ -2124,7 +2138,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0"
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0"
},
"funding": [
{
@@ -2132,20 +2146,20 @@
"type": "github"
}
],
- "time": "2024-12-08T08:18:47+00:00"
+ "time": "2025-12-07T16:03:21+00:00"
},
{
"name": "livewire/flux",
- "version": "v2.0.6",
+ "version": "v2.10.2",
"source": {
"type": "git",
"url": "https://github.com/livewire/flux.git",
- "reference": "afd046a72c7a10e6ff56f3e9c16eb390c3db0cc5"
+ "reference": "e7a93989788429bb6c0a908a056d22ea3a6c7975"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/flux/zipball/afd046a72c7a10e6ff56f3e9c16eb390c3db0cc5",
- "reference": "afd046a72c7a10e6ff56f3e9c16eb390c3db0cc5",
+ "url": "https://api.github.com/repos/livewire/flux/zipball/e7a93989788429bb6c0a908a056d22ea3a6c7975",
+ "reference": "e7a93989788429bb6c0a908a056d22ea3a6c7975",
"shasum": ""
},
"require": {
@@ -2153,10 +2167,13 @@
"illuminate/support": "^10.0|^11.0|^12.0",
"illuminate/view": "^10.0|^11.0|^12.0",
"laravel/prompts": "^0.1|^0.2|^0.3",
- "livewire/livewire": "^3.5.19",
+ "livewire/livewire": "^3.7.3|^4.0",
"php": "^8.1",
"symfony/console": "^6.0|^7.0"
},
+ "conflict": {
+ "livewire/blaze": "<1.0.0"
+ },
"type": "library",
"extra": {
"laravel": {
@@ -2193,9 +2210,9 @@
],
"support": {
"issues": "https://github.com/livewire/flux/issues",
- "source": "https://github.com/livewire/flux/tree/v2.0.6"
+ "source": "https://github.com/livewire/flux/tree/v2.10.2"
},
- "time": "2025-03-12T20:53:07+00:00"
+ "time": "2025-12-19T02:11:45+00:00"
},
{
"name": "livewire/livewire",
@@ -2275,28 +2292,27 @@
},
{
"name": "livewire/volt",
- "version": "v1.7.0",
+ "version": "v1.10.1",
"source": {
"type": "git",
"url": "https://github.com/livewire/volt.git",
- "reference": "94091094aa745c8636f9c7bed1e2da2d2a3f32b3"
+ "reference": "48cff133990c6261c63ee279fc091af6f6c6654e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/volt/zipball/94091094aa745c8636f9c7bed1e2da2d2a3f32b3",
- "reference": "94091094aa745c8636f9c7bed1e2da2d2a3f32b3",
+ "url": "https://api.github.com/repos/livewire/volt/zipball/48cff133990c6261c63ee279fc091af6f6c6654e",
+ "reference": "48cff133990c6261c63ee279fc091af6f6c6654e",
"shasum": ""
},
"require": {
"laravel/framework": "^10.38.2|^11.0|^12.0",
- "livewire/livewire": "^3.6.1",
+ "livewire/livewire": "^3.6.1|^4.0",
"php": "^8.1"
},
"require-dev": {
"laravel/folio": "^1.1",
- "mockery/mockery": "^1.6",
- "orchestra/testbench": "^8.15.0|^9.0|^10.0",
- "pestphp/pest": "^2.9.5|^3.0",
+ "orchestra/testbench": "^8.36|^9.15|^10.8",
+ "pestphp/pest": "^2.9.5|^3.0|^4.0",
"phpstan/phpstan": "^1.10"
},
"type": "library",
@@ -2343,20 +2359,20 @@
"issues": "https://github.com/livewire/volt/issues",
"source": "https://github.com/livewire/volt"
},
- "time": "2025-03-05T15:20:55+00:00"
+ "time": "2025-11-25T16:19:15+00:00"
},
{
"name": "monolog/monolog",
- "version": "3.8.1",
+ "version": "3.10.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4"
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4",
- "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0",
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0",
"shasum": ""
},
"require": {
@@ -2374,7 +2390,7 @@
"graylog2/gelf-php": "^1.4.2 || ^2.0",
"guzzlehttp/guzzle": "^7.4.5",
"guzzlehttp/psr7": "^2.2",
- "mongodb/mongodb": "^1.8",
+ "mongodb/mongodb": "^1.8 || ^2.0",
"php-amqplib/php-amqplib": "~2.4 || ^3",
"php-console/php-console": "^3.1.8",
"phpstan/phpstan": "^2",
@@ -2434,7 +2450,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/3.8.1"
+ "source": "https://github.com/Seldaek/monolog/tree/3.10.0"
},
"funding": [
{
@@ -2446,20 +2462,20 @@
"type": "tidelift"
}
],
- "time": "2024-12-05T17:15:07+00:00"
+ "time": "2026-01-02T08:56:05+00:00"
},
{
"name": "nesbot/carbon",
- "version": "3.8.6",
+ "version": "3.11.0",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd"
+ "reference": "bdb375400dcd162624531666db4799b36b64e4a1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ff2f20cf83bd4d503720632ce8a426dc747bf7fd",
- "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/bdb375400dcd162624531666db4799b36b64e4a1",
+ "reference": "bdb375400dcd162624531666db4799b36b64e4a1",
"shasum": ""
},
"require": {
@@ -2467,9 +2483,9 @@
"ext-json": "*",
"php": "^8.1",
"psr/clock": "^1.0",
- "symfony/clock": "^6.3 || ^7.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"
+ "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0"
},
"provide": {
"psr/clock-implementation": "1.0"
@@ -2477,14 +2493,13 @@
"require-dev": {
"doctrine/dbal": "^3.6.3 || ^4.0",
"doctrine/orm": "^2.15.2 || ^3.0",
- "friendsofphp/php-cs-fixer": "^3.57.2",
+ "friendsofphp/php-cs-fixer": "^v3.87.1",
"kylekatarnls/multi-tester": "^2.5.3",
- "ondrejmirtes/better-reflection": "^6.25.0.4",
"phpmd/phpmd": "^2.15.0",
- "phpstan/extension-installer": "^1.3.1",
- "phpstan/phpstan": "^1.11.2",
- "phpunit/phpunit": "^10.5.20",
- "squizlabs/php_codesniffer": "^3.9.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.22",
+ "phpunit/phpunit": "^10.5.53",
+ "squizlabs/php_codesniffer": "^3.13.4"
},
"bin": [
"bin/carbon"
@@ -2552,29 +2567,29 @@
"type": "tidelift"
}
],
- "time": "2025-02-20T17:33:38+00:00"
+ "time": "2025-12-02T21:04:28+00:00"
},
{
"name": "nette/schema",
- "version": "v1.3.2",
+ "version": "v1.3.3",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "da801d52f0354f70a638673c4a0f04e16529431d"
+ "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d",
- "reference": "da801d52f0354f70a638673c4a0f04e16529431d",
+ "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004",
+ "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004",
"shasum": ""
},
"require": {
"nette/utils": "^4.0",
- "php": "8.1 - 8.4"
+ "php": "8.1 - 8.5"
},
"require-dev": {
"nette/tester": "^2.5.2",
- "phpstan/phpstan-nette": "^1.0",
+ "phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
@@ -2584,6 +2599,9 @@
}
},
"autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
"classmap": [
"src/"
]
@@ -2612,35 +2630,35 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.3.2"
+ "source": "https://github.com/nette/schema/tree/v1.3.3"
},
- "time": "2024-10-06T23:10:23+00:00"
+ "time": "2025-10-30T22:57:59+00:00"
},
{
"name": "nette/utils",
- "version": "v4.0.5",
+ "version": "v4.1.1",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96"
+ "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
- "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
+ "url": "https://api.github.com/repos/nette/utils/zipball/c99059c0315591f1a0db7ad6002000288ab8dc72",
+ "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72",
"shasum": ""
},
"require": {
- "php": "8.0 - 8.4"
+ "php": "8.2 - 8.5"
},
"conflict": {
"nette/finder": "<3",
"nette/schema": "<1.2.2"
},
"require-dev": {
- "jetbrains/phpstorm-attributes": "dev-master",
+ "jetbrains/phpstorm-attributes": "^1.2",
"nette/tester": "^2.5",
- "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -2654,10 +2672,13 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-master": "4.1-dev"
}
},
"autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
"classmap": [
"src/"
]
@@ -2698,22 +2719,22 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.0.5"
+ "source": "https://github.com/nette/utils/tree/v4.1.1"
},
- "time": "2024-08-07T15:39:19+00:00"
+ "time": "2025-12-22T12:14:32+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.4.0",
+ "version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
- "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
@@ -2732,7 +2753,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -2756,37 +2777,37 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
- "time": "2024-12-30T11:07:19+00:00"
+ "time": "2025-12-06T11:56:16+00:00"
},
{
"name": "nunomaduro/termwind",
- "version": "v2.3.0",
+ "version": "v2.3.3",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
- "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda"
+ "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda",
- "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017",
+ "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "^8.2",
- "symfony/console": "^7.1.8"
+ "symfony/console": "^7.3.6"
},
"require-dev": {
- "illuminate/console": "^11.33.2",
- "laravel/pint": "^1.18.2",
+ "illuminate/console": "^11.46.1",
+ "laravel/pint": "^1.25.1",
"mockery/mockery": "^1.6.12",
- "pestphp/pest": "^2.36.0",
- "phpstan/phpstan": "^1.12.11",
- "phpstan/phpstan-strict-rules": "^1.6.1",
- "symfony/var-dumper": "^7.1.8",
+ "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3",
+ "phpstan/phpstan": "^1.12.32",
+ "phpstan/phpstan-strict-rules": "^1.6.2",
+ "symfony/var-dumper": "^7.3.5",
"thecodingmachine/phpstan-strict-rules": "^1.0.0"
},
"type": "library",
@@ -2829,7 +2850,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/termwind/issues",
- "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0"
+ "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3"
},
"funding": [
{
@@ -2845,20 +2866,89 @@
"type": "github"
}
],
- "time": "2024-11-21T10:39:51+00:00"
+ "time": "2025-11-20T02:34:59+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": "phpoption/phpoption",
- "version": "1.9.3",
+ "version": "1.9.5",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
- "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
- "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be",
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be",
"shasum": ""
},
"require": {
@@ -2866,7 +2956,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
},
"type": "library",
"extra": {
@@ -2908,7 +2998,7 @@
],
"support": {
"issues": "https://github.com/schmittjoh/php-option/issues",
- "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.5"
},
"funding": [
{
@@ -2920,7 +3010,126 @@
"type": "tidelift"
}
],
- "time": "2024-07-20T21:41:07+00:00"
+ "time": "2025-12-27T19:41:33+00:00"
+ },
+ {
+ "name": "pragmarx/google2fa",
+ "version": "v8.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/antonioribeiro/google2fa.git",
+ "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad",
+ "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/constant_time_encoding": "^1.0|^2.0|^3.0",
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^7.5.15|^8.5|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PragmaRX\\Google2FA\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Antonio Carlos Ribeiro",
+ "email": "acr@antoniocarlosribeiro.com",
+ "role": "Creator & Designer"
+ }
+ ],
+ "description": "A One Time Password Authentication package, compatible with Google Authenticator.",
+ "keywords": [
+ "2fa",
+ "Authentication",
+ "Two Factor Authentication",
+ "google2fa"
+ ],
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa/issues",
+ "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.3"
+ },
+ "time": "2024-09-05T11:56:40+00:00"
+ },
+ {
+ "name": "pragmarx/google2fa-qrcode",
+ "version": "v3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/antonioribeiro/google2fa-qrcode.git",
+ "reference": "c23ebcc3a50de0d1566016a6dd1486e183bb78e1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa-qrcode/zipball/c23ebcc3a50de0d1566016a6dd1486e183bb78e1",
+ "reference": "c23ebcc3a50de0d1566016a6dd1486e183bb78e1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "pragmarx/google2fa": "^4.0|^5.0|^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "bacon/bacon-qr-code": "^2.0",
+ "chillerlan/php-qrcode": "^1.0|^2.0|^3.0|^4.0",
+ "khanamiryan/qrcode-detector-decoder": "^1.0",
+ "phpunit/phpunit": "~4|~5|~6|~7|~8|~9"
+ },
+ "suggest": {
+ "bacon/bacon-qr-code": "For QR Code generation, requires imagick",
+ "chillerlan/php-qrcode": "For QR Code generation"
+ },
+ "type": "library",
+ "extra": {
+ "component": "package",
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PragmaRX\\Google2FAQRCode\\": "src/",
+ "PragmaRX\\Google2FAQRCode\\Tests\\": "tests/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Antonio Carlos Ribeiro",
+ "email": "acr@antoniocarlosribeiro.com",
+ "role": "Creator & Designer"
+ }
+ ],
+ "description": "QR Code package for Google2FA",
+ "keywords": [
+ "2fa",
+ "Authentication",
+ "Two Factor Authentication",
+ "google2fa",
+ "qr code",
+ "qrcode"
+ ],
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa-qrcode/issues",
+ "source": "https://github.com/antonioribeiro/google2fa-qrcode/tree/v3.0.1"
+ },
+ "time": "2025-09-19T23:02:26+00:00"
},
{
"name": "psr/clock",
@@ -3336,16 +3545,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.7",
+ "version": "v0.12.18",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c"
+ "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c",
- "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ddff0ac01beddc251786fe70367cd8bbdb258196",
+ "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196",
"shasum": ""
},
"require": {
@@ -3353,18 +3562,19 @@
"ext-tokenizer": "*",
"nikic/php-parser": "^5.0 || ^4.0",
"php": "^8.0 || ^7.4",
- "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
- "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.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"
+ "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-pdo-sqlite": "The doc command requires SQLite to work.",
"ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
},
"bin": [
@@ -3395,12 +3605,11 @@
"authors": [
{
"name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
+ "email": "justin@justinhileman.info"
}
],
"description": "An interactive shell for modern PHP.",
- "homepage": "http://psysh.org",
+ "homepage": "https://psysh.org",
"keywords": [
"REPL",
"console",
@@ -3409,9 +3618,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.7"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.18"
},
- "time": "2024-12-10T01:58:33+00:00"
+ "time": "2025-12-17T14:35:46+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -3459,16 +3668,16 @@
},
{
"name": "ramsey/collection",
- "version": "2.1.0",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
- "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109"
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
- "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
"shasum": ""
},
"require": {
@@ -3529,27 +3738,26 @@
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/2.1.0"
+ "source": "https://github.com/ramsey/collection/tree/2.1.1"
},
- "time": "2025-03-02T04:48:29+00:00"
+ "time": "2025-03-22T05:38:12+00:00"
},
{
"name": "ramsey/uuid",
- "version": "4.7.6",
+ "version": "4.9.2",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "91039bc1faa45ba123c4328958e620d382ec7088"
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
- "reference": "91039bc1faa45ba123c4328958e620d382ec7088",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0",
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0",
"shasum": ""
},
"require": {
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
- "ext-json": "*",
+ "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
},
@@ -3557,26 +3765,23 @@
"rhumsaa/uuid": "self.version"
},
"require-dev": {
- "captainhook/captainhook": "^5.10",
+ "captainhook/captainhook": "^5.25",
"captainhook/plugin-composer": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "doctrine/annotations": "^1.8",
- "ergebnis/composer-normalize": "^2.15",
- "mockery/mockery": "^1.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.2",
- "php-mock/php-mock-mockery": "^1.3",
- "php-parallel-lint/php-parallel-lint": "^1.1",
- "phpbench/phpbench": "^1.0",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^8.5 || ^9",
- "ramsey/composer-repl": "^1.4",
- "slevomat/coding-standard": "^8.4",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.9"
+ "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.",
@@ -3611,32 +3816,22 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.7.6"
+ "source": "https://github.com/ramsey/uuid/tree/4.9.2"
},
- "funding": [
- {
- "url": "https://github.com/ramsey",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
- "type": "tidelift"
- }
- ],
- "time": "2024-04-27T21:32:50+00:00"
+ "time": "2025-12-14T04:43:48+00:00"
},
{
"name": "spatie/laravel-package-tools",
- "version": "1.19.0",
+ "version": "1.92.7",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
- "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa"
+ "reference": "f09a799850b1ed765103a4f0b4355006360c49a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa",
- "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f09a799850b1ed765103a4f0b4355006360c49a5",
+ "reference": "f09a799850b1ed765103a4f0b4355006360c49a5",
"shasum": ""
},
"require": {
@@ -3647,6 +3842,7 @@
"mockery/mockery": "^1.5",
"orchestra/testbench": "^7.7|^8.0|^9.0|^10.0",
"pestphp/pest": "^1.23|^2.1|^3.1",
+ "phpunit/php-code-coverage": "^9.0|^10.0|^11.0",
"phpunit/phpunit": "^9.5.24|^10.5|^11.5",
"spatie/pest-plugin-test-time": "^1.1|^2.2"
},
@@ -3675,7 +3871,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
- "source": "https://github.com/spatie/laravel-package-tools/tree/1.19.0"
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.7"
},
"funding": [
{
@@ -3683,20 +3879,20 @@
"type": "github"
}
],
- "time": "2025-02-06T14:58:20+00:00"
+ "time": "2025-07-17T15:46:43+00:00"
},
{
"name": "spatie/laravel-permission",
- "version": "6.16.0",
+ "version": "6.24.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
- "reference": "4fa03c06509e037a4d42c131d0f181e3e4bbd483"
+ "reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/4fa03c06509e037a4d42c131d0f181e3e4bbd483",
- "reference": "4fa03c06509e037a4d42c131d0f181e3e4bbd483",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
+ "reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
"shasum": ""
},
"require": {
@@ -3758,7 +3954,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
- "source": "https://github.com/spatie/laravel-permission/tree/6.16.0"
+ "source": "https://github.com/spatie/laravel-permission/tree/6.24.0"
},
"funding": [
{
@@ -3766,26 +3962,25 @@
"type": "github"
}
],
- "time": "2025-02-28T20:29:57+00:00"
+ "time": "2025-12-13T21:45:21+00:00"
},
{
"name": "symfony/clock",
- "version": "v7.2.0",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
- "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24"
+ "reference": "832119f9b8dbc6c8e6f65f30c5969eca1e88764f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
- "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
+ "url": "https://api.github.com/repos/symfony/clock/zipball/832119f9b8dbc6c8e6f65f30c5969eca1e88764f",
+ "reference": "832119f9b8dbc6c8e6f65f30c5969eca1e88764f",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "psr/clock": "^1.0",
- "symfony/polyfill-php83": "^1.28"
+ "php": ">=8.4",
+ "psr/clock": "^1.0"
},
"provide": {
"psr/clock-implementation": "1.0"
@@ -3824,7 +4019,7 @@
"time"
],
"support": {
- "source": "https://github.com/symfony/clock/tree/v7.2.0"
+ "source": "https://github.com/symfony/clock/tree/v8.0.0"
},
"funding": [
{
@@ -3835,32 +4030,37 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2025-11-12T15:46:48+00:00"
},
{
"name": "symfony/console",
- "version": "v7.2.1",
+ "version": "v7.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3"
+ "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3",
- "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3",
+ "url": "https://api.github.com/repos/symfony/console/zipball/732a9ca6cd9dfd940c639062d5edbde2f6727fb6",
+ "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^6.4|^7.0"
+ "symfony/string": "^7.2|^8.0"
},
"conflict": {
"symfony/dependency-injection": "<6.4",
@@ -3874,16 +4074,16 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/lock": "^6.4|^7.0",
- "symfony/messenger": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0",
- "symfony/stopwatch": "^6.4|^7.0",
- "symfony/var-dumper": "^6.4|^7.0"
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -3917,7 +4117,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.2.1"
+ "source": "https://github.com/symfony/console/tree/v7.4.3"
},
"funding": [
{
@@ -3928,29 +4128,33 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-11T03:49:26+00:00"
+ "time": "2025-12-23T14:50:43+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v7.2.0",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2"
+ "reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2",
- "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/6225bd458c53ecdee056214cb4a2ffaf58bd592b",
+ "reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.4"
},
"type": "library",
"autoload": {
@@ -3982,7 +4186,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v7.2.0"
+ "source": "https://github.com/symfony/css-selector/tree/v8.0.0"
},
"funding": [
{
@@ -3993,25 +4197,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2025-10-30T14:17:19+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.5.1",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
- "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
"shasum": ""
},
"require": {
@@ -4024,7 +4232,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.5-dev"
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -4049,7 +4257,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -4065,35 +4273,38 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v7.2.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "aabf79938aa795350c07ce6464dd1985607d95d5"
+ "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/aabf79938aa795350c07ce6464dd1985607d95d5",
- "reference": "aabf79938aa795350c07ce6464dd1985607d95d5",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2",
+ "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^6.4|^7.0"
+ "symfony/polyfill-php85": "^1.32",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"conflict": {
"symfony/deprecation-contracts": "<2.5",
"symfony/http-kernel": "<6.4"
},
"require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/serializer": "^6.4|^7.0"
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4|^7.0|^8.0",
+ "symfony/webpack-encore-bundle": "^1.0|^2.0"
},
"bin": [
"Resources/bin/patch-type-declarations"
@@ -4124,7 +4335,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v7.2.4"
+ "source": "https://github.com/symfony/error-handler/tree/v7.4.0"
},
"funding": [
{
@@ -4135,33 +4346,37 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-02T20:27:07+00:00"
+ "time": "2025-11-05T14:29:59+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.2.0",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1"
+ "reference": "573f95783a2ec6e38752979db139f09fec033f03"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1",
- "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03",
+ "reference": "573f95783a2ec6e38752979db139f09fec033f03",
"shasum": ""
},
"require": {
- "php": ">=8.2",
+ "php": ">=8.4",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
- "symfony/dependency-injection": "<6.4",
+ "symfony/security-http": "<7.4",
"symfony/service-contracts": "<2.5"
},
"provide": {
@@ -4170,13 +4385,14 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/error-handler": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
+ "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": "^6.4|^7.0"
+ "symfony/stopwatch": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -4204,7 +4420,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0"
},
"funding": [
{
@@ -4215,25 +4431,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2025-10-30T14:17:19+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v3.5.1",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f"
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f",
- "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
"shasum": ""
},
"require": {
@@ -4247,7 +4467,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.5-dev"
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -4280,7 +4500,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -4296,27 +4516,27 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/finder",
- "version": "v7.2.2",
+ "version": "v7.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "87a71856f2f56e4100373e92529eed3171695cfb"
+ "reference": "fffe05569336549b20a1be64250b40516d6e8d06"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb",
- "reference": "87a71856f2f56e4100373e92529eed3171695cfb",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/fffe05569336549b20a1be64250b40516d6e8d06",
+ "reference": "fffe05569336549b20a1be64250b40516d6e8d06",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
- "symfony/filesystem": "^6.4|^7.0"
+ "symfony/filesystem": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -4344,7 +4564,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.2.2"
+ "source": "https://github.com/symfony/finder/tree/v7.4.3"
},
"funding": [
{
@@ -4355,32 +4575,35 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-30T19:00:17+00:00"
+ "time": "2025-12-23T14:50:43+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v7.2.3",
+ "version": "v7.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0"
+ "reference": "a70c745d4cea48dbd609f4075e5f5cbce453bd52"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0",
- "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a70c745d4cea48dbd609f4075e5f5cbce453bd52",
+ "reference": "a70c745d4cea48dbd609f4075e5f5cbce453bd52",
"shasum": ""
},
"require": {
"php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/polyfill-mbstring": "~1.1",
- "symfony/polyfill-php83": "^1.27"
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "^1.1"
},
"conflict": {
"doctrine/dbal": "<3.6",
@@ -4389,12 +4612,13 @@
"require-dev": {
"doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
- "symfony/cache": "^6.4.12|^7.1.5",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/mime": "^6.4|^7.0",
- "symfony/rate-limiter": "^6.4|^7.0"
+ "symfony/cache": "^6.4.12|^7.1.5|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^6.4|^7.0|^8.0",
+ "symfony/rate-limiter": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -4422,7 +4646,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.2.3"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.4.3"
},
"funding": [
{
@@ -4433,34 +4657,38 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-17T10:56:55+00:00"
+ "time": "2025-12-23T14:23:49+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.2.4",
+ "version": "v7.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "9f1103734c5789798fefb90e91de4586039003ed"
+ "reference": "885211d4bed3f857b8c964011923528a55702aa5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f1103734c5789798fefb90e91de4586039003ed",
- "reference": "9f1103734c5789798fefb90e91de4586039003ed",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/885211d4bed3f857b8c964011923528a55702aa5",
+ "reference": "885211d4bed3f857b8c964011923528a55702aa5",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/error-handler": "^6.4|^7.0",
- "symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^7.3|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@@ -4470,6 +4698,7 @@
"symfony/console": "<6.4",
"symfony/dependency-injection": "<6.4",
"symfony/doctrine-bridge": "<6.4",
+ "symfony/flex": "<2.10",
"symfony/form": "<6.4",
"symfony/http-client": "<6.4",
"symfony/http-client-contracts": "<2.5",
@@ -4487,27 +4716,27 @@
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
- "symfony/browser-kit": "^6.4|^7.0",
- "symfony/clock": "^6.4|^7.0",
- "symfony/config": "^6.4|^7.0",
- "symfony/console": "^6.4|^7.0",
- "symfony/css-selector": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/dom-crawler": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/finder": "^6.4|^7.0",
+ "symfony/browser-kit": "^6.4|^7.0|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/css-selector": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/dom-crawler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
"symfony/http-client-contracts": "^2.5|^3",
- "symfony/process": "^6.4|^7.0",
- "symfony/property-access": "^7.1",
- "symfony/routing": "^6.4|^7.0",
- "symfony/serializer": "^7.1",
- "symfony/stopwatch": "^6.4|^7.0",
- "symfony/translation": "^6.4|^7.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^7.1|^8.0",
+ "symfony/routing": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^7.1|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/translation": "^6.4|^7.0|^8.0",
"symfony/translation-contracts": "^2.5|^3",
- "symfony/uid": "^6.4|^7.0",
- "symfony/validator": "^6.4|^7.0",
- "symfony/var-dumper": "^6.4|^7.0",
- "symfony/var-exporter": "^6.4|^7.0",
+ "symfony/uid": "^6.4|^7.0|^8.0",
+ "symfony/validator": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0",
"twig/twig": "^3.12"
},
"type": "library",
@@ -4536,7 +4765,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v7.2.4"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.4.3"
},
"funding": [
{
@@ -4547,25 +4776,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-26T11:01:22+00:00"
+ "time": "2025-12-31T08:43:57+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.2.3",
+ "version": "v7.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3"
+ "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3",
- "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/e472d35e230108231ccb7f51eb6b2100cac02ee4",
+ "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4",
"shasum": ""
},
"require": {
@@ -4573,8 +4806,8 @@
"php": ">=8.2",
"psr/event-dispatcher": "^1",
"psr/log": "^1|^2|^3",
- "symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/mime": "^7.2",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^7.2|^8.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@@ -4585,10 +4818,10 @@
"symfony/twig-bridge": "<6.4"
},
"require-dev": {
- "symfony/console": "^6.4|^7.0",
- "symfony/http-client": "^6.4|^7.0",
- "symfony/messenger": "^6.4|^7.0",
- "symfony/twig-bridge": "^6.4|^7.0"
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/twig-bridge": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -4616,7 +4849,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.2.3"
+ "source": "https://github.com/symfony/mailer/tree/v7.4.3"
},
"funding": [
{
@@ -4627,29 +4860,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T11:08:17+00:00"
+ "time": "2025-12-16T08:02:06+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.2.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "87ca22046b78c3feaff04b337f33b38510fd686b"
+ "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b",
- "reference": "87ca22046b78c3feaff04b337f33b38510fd686b",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/bdb02729471be5d047a3ac4a69068748f1a6be7a",
+ "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0"
},
@@ -4664,11 +4902,11 @@
"egulias/email-validator": "^2.1.10|^3.1|^4",
"league/html-to-markdown": "^5.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0",
- "symfony/property-access": "^6.4|^7.0",
- "symfony/property-info": "^6.4|^7.0",
- "symfony/serializer": "^6.4.3|^7.0.3"
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^6.4|^7.0|^8.0",
+ "symfony/property-info": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4.3|^7.0.3|^8.0"
},
"type": "library",
"autoload": {
@@ -4700,7 +4938,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.2.4"
+ "source": "https://github.com/symfony/mime/tree/v7.4.0"
},
"funding": [
{
@@ -4711,16 +4949,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-19T08:51:20+00:00"
+ "time": "2025-11-16T10:14:42+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -4779,7 +5021,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
},
"funding": [
{
@@ -4790,6 +5032,10 @@
"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"
@@ -4799,16 +5045,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
@@ -4857,7 +5103,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@@ -4868,25 +5114,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
- "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
"shasum": ""
},
"require": {
@@ -4940,7 +5190,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
},
"funding": [
{
@@ -4951,16 +5201,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2024-09-10T14:38:51+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -5021,7 +5275,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@@ -5032,6 +5286,10 @@
"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"
@@ -5041,19 +5299,20 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
+ "ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
@@ -5101,7 +5360,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@@ -5112,25 +5371,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2024-12-23T08:48:59+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"shasum": ""
},
"require": {
@@ -5181,7 +5444,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
},
"funding": [
{
@@ -5192,25 +5455,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-01-02T08:10:11+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
"shasum": ""
},
"require": {
@@ -5257,7 +5524,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
},
"funding": [
{
@@ -5268,36 +5535,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-07-08T02:45:35+00:00"
},
{
- "name": "symfony/polyfill-uuid",
- "version": "v1.31.0",
+ "name": "symfony/polyfill-php84",
+ "version": "v1.33.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-uuid.git",
- "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
- "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
- "provide": {
- "ext-uuid": "*"
- },
- "suggest": {
- "ext-uuid": "For best performance"
- },
"type": "library",
"extra": {
"thanks": {
@@ -5310,8 +5575,11 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Uuid\\": ""
- }
+ "Symfony\\Polyfill\\Php84\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -5319,24 +5587,24 @@
],
"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": "Symfony polyfill for uuid functions",
+ "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
- "uuid"
+ "shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
},
"funding": [
{
@@ -5347,34 +5615,201 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-06-24T13:30:11+00:00"
},
{
- "name": "symfony/process",
- "version": "v7.2.4",
+ "name": "symfony/polyfill-php85",
+ "version": "v1.33.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf"
+ "url": "https://github.com/symfony/polyfill-php85.git",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf",
- "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf",
+ "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=7.2"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
+ "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.33.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": "2025-06-23T16:12:55+00:00"
+ },
+ {
+ "name": "symfony/polyfill-uuid",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-uuid.git",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "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.33.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": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v7.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/2f8e1a6cdf590ca63715da4d3a7a3327404a523f",
+ "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -5397,7 +5832,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.2.4"
+ "source": "https://github.com/symfony/process/tree/v7.4.3"
},
"funding": [
{
@@ -5408,25 +5843,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-05T08:33:46+00:00"
+ "time": "2025-12-19T10:00:43+00:00"
},
{
"name": "symfony/routing",
- "version": "v7.2.3",
+ "version": "v7.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996"
+ "reference": "5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996",
- "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090",
+ "reference": "5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090",
"shasum": ""
},
"require": {
@@ -5440,11 +5879,11 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/yaml": "^6.4|^7.0"
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -5478,7 +5917,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.2.3"
+ "source": "https://github.com/symfony/routing/tree/v7.4.3"
},
"funding": [
{
@@ -5489,25 +5928,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-17T10:56:55+00:00"
+ "time": "2025-12-19T10:00:43+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.5.1",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
- "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
"shasum": ""
},
"require": {
@@ -5525,7 +5968,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.5-dev"
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -5561,7 +6004,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -5572,44 +6015,47 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2025-07-15T11:30:57+00:00"
},
{
"name": "symfony/string",
- "version": "v7.2.0",
+ "version": "v8.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82"
+ "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82",
- "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82",
+ "url": "https://api.github.com/repos/symfony/string/zipball/ba65a969ac918ce0cc3edfac6cdde847eba231dc",
+ "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0"
+ "php": ">=8.4",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-intl-grapheme": "^1.33",
+ "symfony/polyfill-intl-normalizer": "^1.0",
+ "symfony/polyfill-mbstring": "^1.0"
},
"conflict": {
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
- "symfony/emoji": "^7.1",
- "symfony/error-handler": "^6.4|^7.0",
- "symfony/http-client": "^6.4|^7.0",
- "symfony/intl": "^6.4|^7.0",
+ "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": "^6.4|^7.0"
+ "symfony/var-exporter": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -5648,7 +6094,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.2.0"
+ "source": "https://github.com/symfony/string/tree/v8.0.1"
},
"funding": [
{
@@ -5659,60 +6105,58 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-13T13:31:26+00:00"
+ "time": "2025-12-01T09:13:36+00:00"
},
{
"name": "symfony/translation",
- "version": "v7.2.4",
+ "version": "v8.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "283856e6981286cc0d800b53bd5703e8e363f05a"
+ "reference": "60a8f11f0e15c48f2cc47c4da53873bb5b62135d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a",
- "reference": "283856e6981286cc0d800b53bd5703e8e363f05a",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/60a8f11f0e15c48f2cc47c4da53873bb5b62135d",
+ "reference": "60a8f11f0e15c48f2cc47c4da53873bb5b62135d",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/translation-contracts": "^2.5|^3.0"
+ "php": ">=8.4",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/translation-contracts": "^3.6.1"
},
"conflict": {
- "symfony/config": "<6.4",
- "symfony/console": "<6.4",
- "symfony/dependency-injection": "<6.4",
+ "nikic/php-parser": "<5.0",
"symfony/http-client-contracts": "<2.5",
- "symfony/http-kernel": "<6.4",
- "symfony/service-contracts": "<2.5",
- "symfony/twig-bundle": "<6.4",
- "symfony/yaml": "<6.4"
+ "symfony/service-contracts": "<2.5"
},
"provide": {
"symfony/translation-implementation": "2.3|3.0"
},
"require-dev": {
- "nikic/php-parser": "^4.18|^5.0",
+ "nikic/php-parser": "^5.0",
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/console": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/finder": "^6.4|^7.0",
+ "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": "^6.4|^7.0",
- "symfony/intl": "^6.4|^7.0",
+ "symfony/http-kernel": "^7.4|^8.0",
+ "symfony/intl": "^7.4|^8.0",
"symfony/polyfill-intl-icu": "^1.21",
- "symfony/routing": "^6.4|^7.0",
+ "symfony/routing": "^7.4|^8.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/yaml": "^6.4|^7.0"
+ "symfony/yaml": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -5743,7 +6187,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v7.2.4"
+ "source": "https://github.com/symfony/translation/tree/v8.0.3"
},
"funding": [
{
@@ -5754,25 +6198,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-13T10:27:23+00:00"
+ "time": "2025-12-21T10:59:45+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v3.5.1",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "4667ff3bd513750603a09c8dedbea942487fb07c"
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c",
- "reference": "4667ff3bd513750603a09c8dedbea942487fb07c",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
"shasum": ""
},
"require": {
@@ -5785,7 +6233,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.5-dev"
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -5821,7 +6269,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1"
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -5832,25 +6280,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/uid",
- "version": "v7.2.0",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "2d294d0c48df244c71c105a169d0190bfb080426"
+ "reference": "2498e9f81b7baa206f44de583f2f48350b90142c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426",
- "reference": "2d294d0c48df244c71c105a169d0190bfb080426",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/2498e9f81b7baa206f44de583f2f48350b90142c",
+ "reference": "2498e9f81b7baa206f44de583f2f48350b90142c",
"shasum": ""
},
"require": {
@@ -5858,7 +6310,7 @@
"symfony/polyfill-uuid": "^1.15"
},
"require-dev": {
- "symfony/console": "^6.4|^7.0"
+ "symfony/console": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -5895,7 +6347,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v7.2.0"
+ "source": "https://github.com/symfony/uid/tree/v7.4.0"
},
"funding": [
{
@@ -5906,40 +6358,44 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2025-09-25T11:02:55+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v7.2.3",
+ "version": "v7.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "82b478c69745d8878eb60f9a049a4d584996f73a"
+ "reference": "7e99bebcb3f90d8721890f2963463280848cba92"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a",
- "reference": "82b478c69745d8878eb60f9a049a4d584996f73a",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7e99bebcb3f90d8721890f2963463280848cba92",
+ "reference": "7e99bebcb3f90d8721890f2963463280848cba92",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
"symfony/console": "<6.4"
},
"require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0",
- "symfony/uid": "^6.4|^7.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/uid": "^6.4|^7.0|^8.0",
"twig/twig": "^3.12"
},
"bin": [
@@ -5978,7 +6434,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.2.3"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.4.3"
},
"funding": [
{
@@ -5989,32 +6445,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-17T11:39:41+00:00"
+ "time": "2025-12-18T07:04:31+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
- "version": "v2.3.0",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
- "reference": "0d72ac1c00084279c1816675284073c5a337c20d"
+ "reference": "f0292ccf0ec75843d65027214426b6b163b48b41"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d",
- "reference": "0d72ac1c00084279c1816675284073c5a337c20d",
+ "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"
+ "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^2.0",
@@ -6047,32 +6507,32 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"support": {
"issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
- "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0"
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0"
},
- "time": "2024-12-21T16:25:41+00:00"
+ "time": "2025-12-02T11:56:42+00:00"
},
{
"name": "vlucas/phpdotenv",
- "version": "v5.6.1",
+ "version": "v5.6.3",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2"
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2",
- "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc",
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc",
"shasum": ""
},
"require": {
"ext-pcre": "*",
- "graham-campbell/result-type": "^1.1.3",
+ "graham-campbell/result-type": "^1.1.4",
"php": "^7.2.5 || ^8.0",
- "phpoption/phpoption": "^1.9.3",
- "symfony/polyfill-ctype": "^1.24",
- "symfony/polyfill-mbstring": "^1.24",
- "symfony/polyfill-php80": "^1.24"
+ "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",
@@ -6121,7 +6581,7 @@
],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
- "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1"
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3"
},
"funding": [
{
@@ -6133,7 +6593,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-20T21:52:34+00:00"
+ "time": "2025-12-27T19:49:13+00:00"
},
{
"name": "voku/portable-ascii",
@@ -6209,64 +6669,6 @@
],
"time": "2024-11-21T01:49:47+00:00"
},
- {
- "name": "webmozart/assert",
- "version": "1.11.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "php": "^7.2 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.11.0"
- },
- "time": "2022-06-03T18:03:27+00:00"
- },
{
"name": "wire-elements/modal",
"version": "2.0.13",
@@ -6335,28 +6737,25 @@
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
- "version": "v3.15.2",
+ "version": "v3.16.3",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729"
+ "reference": "c91e57ea113edd6526f5b8cd6b1c6ee02c67b28e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/0bc1e1361e7fffc2be156f46ad1fba6927c01729",
- "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/c91e57ea113edd6526f5b8cd6b1c6ee02c67b28e",
+ "reference": "c91e57ea113edd6526f5b8cd6b1c6ee02c67b28e",
"shasum": ""
},
"require": {
- "illuminate/routing": "^9|^10|^11|^12",
- "illuminate/session": "^9|^10|^11|^12",
- "illuminate/support": "^9|^10|^11|^12",
+ "illuminate/routing": "^10|^11|^12",
+ "illuminate/session": "^10|^11|^12",
+ "illuminate/support": "^10|^11|^12",
"php": "^8.1",
- "php-debugbar/php-debugbar": "~2.1.1",
- "symfony/finder": "^6|^7"
- },
- "conflict": {
- "maximebf/debugbar": "*"
+ "php-debugbar/php-debugbar": "^2.2.4",
+ "symfony/finder": "^6|^7|^8"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
@@ -6375,7 +6774,7 @@
]
},
"branch-alias": {
- "dev-master": "3.15-dev"
+ "dev-master": "3.16-dev"
}
},
"autoload": {
@@ -6407,7 +6806,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
- "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.15.2"
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.3"
},
"funding": [
{
@@ -6419,24 +6818,24 @@
"type": "github"
}
],
- "time": "2025-02-25T15:25:22+00:00"
+ "time": "2025-12-23T17:37:00+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",
- "version": "v3.5.5",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
- "reference": "8d441ec99f8612b942b55f5183151d91591b618a"
+ "reference": "b106f7ee85f263c4f103eca49e7bf3862c2e5e75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/8d441ec99f8612b942b55f5183151d91591b618a",
- "reference": "8d441ec99f8612b942b55f5183151d91591b618a",
+ "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/b106f7ee85f263c4f103eca49e7bf3862c2e5e75",
+ "reference": "b106f7ee85f263c4f103eca49e7bf3862c2e5e75",
"shasum": ""
},
"require": {
- "barryvdh/reflection-docblock": "^2.3",
+ "barryvdh/reflection-docblock": "^2.4",
"composer/class-map-generator": "^1.0",
"ext-json": "*",
"illuminate/console": "^11.15 || ^12",
@@ -6501,7 +6900,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-ide-helper/issues",
- "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.5"
+ "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.6.1"
},
"funding": [
{
@@ -6513,20 +6912,20 @@
"type": "github"
}
],
- "time": "2025-02-11T13:59:46+00:00"
+ "time": "2025-12-10T09:11:07+00:00"
},
{
"name": "barryvdh/reflection-docblock",
- "version": "v2.3.1",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
- "reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8"
+ "reference": "d103774cbe7e94ddee7e4870f97f727b43fe7201"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/b6ff9f93603561f50e53b64310495d20b8dff5d8",
- "reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8",
+ "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/d103774cbe7e94ddee7e4870f97f727b43fe7201",
+ "reference": "d103774cbe7e94ddee7e4870f97f727b43fe7201",
"shasum": ""
},
"require": {
@@ -6563,22 +6962,22 @@
}
],
"support": {
- "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.1"
+ "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.4.0"
},
- "time": "2025-01-18T19:26:32+00:00"
+ "time": "2025-07-17T06:07:30+00:00"
},
{
"name": "brianium/paratest",
- "version": "v7.7.0",
+ "version": "v7.8.4",
"source": {
"type": "git",
"url": "https://github.com/paratestphp/paratest.git",
- "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf"
+ "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4fb3f73bc5a4c3146bac2850af7dc72435a32daf",
- "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf",
+ "url": "https://api.github.com/repos/paratestphp/paratest/zipball/130a9bf0e269ee5f5b320108f794ad03e275cad4",
+ "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4",
"shasum": ""
},
"require": {
@@ -6587,26 +6986,26 @@
"ext-reflection": "*",
"ext-simplexml": "*",
"fidry/cpu-core-counter": "^1.2.0",
- "jean85/pretty-package-versions": "^2.1.0",
+ "jean85/pretty-package-versions": "^2.1.1",
"php": "~8.2.0 || ~8.3.0 || ~8.4.0",
- "phpunit/php-code-coverage": "^11.0.8",
+ "phpunit/php-code-coverage": "^11.0.10",
"phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-timer": "^7.0.1",
- "phpunit/phpunit": "^11.5.1",
- "sebastian/environment": "^7.2.0",
- "symfony/console": "^6.4.14 || ^7.2.1",
- "symfony/process": "^6.4.14 || ^7.2.0"
+ "phpunit/phpunit": "^11.5.24",
+ "sebastian/environment": "^7.2.1",
+ "symfony/console": "^6.4.22 || ^7.3.0",
+ "symfony/process": "^6.4.20 || ^7.3.0"
},
"require-dev": {
"doctrine/coding-standard": "^12.0.0",
"ext-pcov": "*",
"ext-posix": "*",
- "phpstan/phpstan": "^2.0.3",
- "phpstan/phpstan-deprecation-rules": "^2.0.1",
- "phpstan/phpstan-phpunit": "^2.0.1",
- "phpstan/phpstan-strict-rules": "^2",
- "squizlabs/php_codesniffer": "^3.11.1",
- "symfony/filesystem": "^6.4.13 || ^7.2.0"
+ "phpstan/phpstan": "^2.1.17",
+ "phpstan/phpstan-deprecation-rules": "^2.0.3",
+ "phpstan/phpstan-phpunit": "^2.0.6",
+ "phpstan/phpstan-strict-rules": "^2.0.4",
+ "squizlabs/php_codesniffer": "^3.13.2",
+ "symfony/filesystem": "^6.4.13 || ^7.3.0"
},
"bin": [
"bin/paratest",
@@ -6646,7 +7045,7 @@
],
"support": {
"issues": "https://github.com/paratestphp/paratest/issues",
- "source": "https://github.com/paratestphp/paratest/tree/v7.7.0"
+ "source": "https://github.com/paratestphp/paratest/tree/v7.8.4"
},
"funding": [
{
@@ -6658,26 +7057,26 @@
"type": "paypal"
}
],
- "time": "2024-12-11T14:50:44+00:00"
+ "time": "2025-06-23T06:07:21+00:00"
},
{
"name": "composer/class-map-generator",
- "version": "1.6.0",
+ "version": "1.7.1",
"source": {
"type": "git",
"url": "https://github.com/composer/class-map-generator.git",
- "reference": "ffe442c5974c44a9343e37a0abcb1cc37319f5b9"
+ "reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/class-map-generator/zipball/ffe442c5974c44a9343e37a0abcb1cc37319f5b9",
- "reference": "ffe442c5974c44a9343e37a0abcb1cc37319f5b9",
+ "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8f5fa3cc214230e71f54924bd0197a3bcc705eb1",
+ "reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1",
"shasum": ""
},
"require": {
"composer/pcre": "^2.1 || ^3.1",
"php": "^7.2 || ^8.0",
- "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7"
+ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7 || ^8"
},
"require-dev": {
"phpstan/phpstan": "^1.12 || ^2",
@@ -6685,7 +7084,7 @@
"phpstan/phpstan-phpunit": "^1 || ^2",
"phpstan/phpstan-strict-rules": "^1.1 || ^2",
"phpunit/phpunit": "^8",
- "symfony/filesystem": "^5.4 || ^6"
+ "symfony/filesystem": "^5.4 || ^6 || ^7 || ^8"
},
"type": "library",
"extra": {
@@ -6715,7 +7114,7 @@
],
"support": {
"issues": "https://github.com/composer/class-map-generator/issues",
- "source": "https://github.com/composer/class-map-generator/tree/1.6.0"
+ "source": "https://github.com/composer/class-map-generator/tree/1.7.1"
},
"funding": [
{
@@ -6725,13 +7124,9 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2025-02-05T10:05:34+00:00"
+ "time": "2025-12-29T13:15:25+00:00"
},
{
"name": "composer/pcre",
@@ -6814,26 +7209,29 @@
},
{
"name": "doctrine/deprecations",
- "version": "1.1.4",
+ "version": "1.1.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
+ "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
- "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
+ "conflict": {
+ "phpunit/phpunit": "<=7.5 || >=13"
+ },
"require-dev": {
- "doctrine/coding-standard": "^9 || ^12",
- "phpstan/phpstan": "1.4.10 || 2.0.3",
+ "doctrine/coding-standard": "^9 || ^12 || ^13",
+ "phpstan/phpstan": "1.4.10 || 2.1.11",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
"psr/log": "^1 || ^2 || ^3"
},
"suggest": {
@@ -6853,9 +7251,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.4"
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
},
- "time": "2024-12-07T21:18:45+00:00"
+ "time": "2025-04-07T20:06:18+00:00"
},
{
"name": "fakerphp/faker",
@@ -6922,16 +7320,16 @@
},
{
"name": "fidry/cpu-core-counter",
- "version": "1.2.0",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/theofidry/cpu-core-counter.git",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f"
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678",
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678",
"shasum": ""
},
"require": {
@@ -6941,10 +7339,10 @@
"fidry/makefile": "^0.2.0",
"fidry/php-cs-fixer-config": "^1.1.2",
"phpstan/extension-installer": "^1.2.0",
- "phpstan/phpstan": "^1.9.2",
- "phpstan/phpstan-deprecation-rules": "^1.0.0",
- "phpstan/phpstan-phpunit": "^1.2.2",
- "phpstan/phpstan-strict-rules": "^1.4.4",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-deprecation-rules": "^2.0.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^8.5.31 || ^9.5.26",
"webmozarts/strict-phpunit": "^7.5"
},
@@ -6971,7 +7369,7 @@
],
"support": {
"issues": "https://github.com/theofidry/cpu-core-counter/issues",
- "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0"
},
"funding": [
{
@@ -6979,20 +7377,20 @@
"type": "github"
}
],
- "time": "2024-08-06T10:04:20+00:00"
+ "time": "2025-08-14T07:29:31+00:00"
},
{
"name": "filp/whoops",
- "version": "2.18.0",
+ "version": "2.18.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e"
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e",
- "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
"shasum": ""
},
"require": {
@@ -7042,7 +7440,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.18.0"
+ "source": "https://github.com/filp/whoops/tree/2.18.4"
},
"funding": [
{
@@ -7050,24 +7448,24 @@
"type": "github"
}
],
- "time": "2025-03-15T12:00:00+00:00"
+ "time": "2025-08-08T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",
- "version": "v2.0.1",
+ "version": "v2.1.1",
"source": {
"type": "git",
"url": "https://github.com/hamcrest/hamcrest-php.git",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
"shasum": ""
},
"require": {
- "php": "^5.3|^7.0|^8.0"
+ "php": "^7.4|^8.0"
},
"replace": {
"cordoval/hamcrest-php": "*",
@@ -7075,8 +7473,8 @@
"kodova/hamcrest-php": "*"
},
"require-dev": {
- "phpunit/php-file-iterator": "^1.4 || ^2.0",
- "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+ "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
@@ -7099,22 +7497,22 @@
],
"support": {
"issues": "https://github.com/hamcrest/hamcrest-php/issues",
- "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1"
},
- "time": "2020-07-09T08:09:16+00:00"
+ "time": "2025-04-30T06:54:44+00:00"
},
{
"name": "iamcal/sql-parser",
- "version": "v0.5",
+ "version": "v0.6",
"source": {
"type": "git",
"url": "https://github.com/iamcal/SQLParser.git",
- "reference": "644fd994de3b54e5d833aecf406150aa3b66ca88"
+ "reference": "947083e2dca211a6f12fb1beb67a01e387de9b62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/iamcal/SQLParser/zipball/644fd994de3b54e5d833aecf406150aa3b66ca88",
- "reference": "644fd994de3b54e5d833aecf406150aa3b66ca88",
+ "url": "https://api.github.com/repos/iamcal/SQLParser/zipball/947083e2dca211a6f12fb1beb67a01e387de9b62",
+ "reference": "947083e2dca211a6f12fb1beb67a01e387de9b62",
"shasum": ""
},
"require-dev": {
@@ -7140,22 +7538,22 @@
"description": "MySQL schema parser",
"support": {
"issues": "https://github.com/iamcal/SQLParser/issues",
- "source": "https://github.com/iamcal/SQLParser/tree/v0.5"
+ "source": "https://github.com/iamcal/SQLParser/tree/v0.6"
},
- "time": "2024-03-22T22:46:32+00:00"
+ "time": "2025-03-17T16:59:46+00:00"
},
{
"name": "jean85/pretty-package-versions",
- "version": "2.1.0",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
- "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10"
+ "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
- "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
+ "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
"shasum": ""
},
"require": {
@@ -7165,8 +7563,9 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.2",
"jean85/composer-provided-replaced-stub-package": "^1.0",
- "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^7.5|^8.5|^9.6",
+ "rector/rector": "^2.0",
"vimeo/psalm": "^4.3 || ^5.0"
},
"type": "library",
@@ -7199,49 +7598,50 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
- "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0"
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
},
- "time": "2024-11-18T16:19:46+00:00"
+ "time": "2025-03-19T14:43:43+00:00"
},
{
"name": "larastan/larastan",
- "version": "v3.2.0",
+ "version": "v3.8.1",
"source": {
"type": "git",
"url": "https://github.com/larastan/larastan.git",
- "reference": "d84d5a3b6536a586899ad6855a3e098473703690"
+ "reference": "ff3725291bc4c7e6032b5a54776e3e5104c86db9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/larastan/larastan/zipball/d84d5a3b6536a586899ad6855a3e098473703690",
- "reference": "d84d5a3b6536a586899ad6855a3e098473703690",
+ "url": "https://api.github.com/repos/larastan/larastan/zipball/ff3725291bc4c7e6032b5a54776e3e5104c86db9",
+ "reference": "ff3725291bc4c7e6032b5a54776e3e5104c86db9",
"shasum": ""
},
"require": {
"ext-json": "*",
- "iamcal/sql-parser": "^0.5.0",
- "illuminate/console": "^11.41.3 || ^12.0",
- "illuminate/container": "^11.41.3 || ^12.0",
- "illuminate/contracts": "^11.41.3 || ^12.0",
- "illuminate/database": "^11.41.3 || ^12.0",
- "illuminate/http": "^11.41.3 || ^12.0",
- "illuminate/pipeline": "^11.41.3 || ^12.0",
- "illuminate/support": "^11.41.3 || ^12.0",
+ "iamcal/sql-parser": "^0.6.0",
+ "illuminate/console": "^11.44.2 || ^12.4.1",
+ "illuminate/container": "^11.44.2 || ^12.4.1",
+ "illuminate/contracts": "^11.44.2 || ^12.4.1",
+ "illuminate/database": "^11.44.2 || ^12.4.1",
+ "illuminate/http": "^11.44.2 || ^12.4.1",
+ "illuminate/pipeline": "^11.44.2 || ^12.4.1",
+ "illuminate/support": "^11.44.2 || ^12.4.1",
"php": "^8.2",
- "phpstan/phpstan": "^2.1.3"
+ "phpstan/phpstan": "^2.1.32"
},
"require-dev": {
- "doctrine/coding-standard": "^12.0",
- "laravel/framework": "^11.41.3 || ^12.0",
- "mockery/mockery": "^1.6",
- "nikic/php-parser": "^5.3",
- "orchestra/canvas": "^v9.1.3 || ^10.0",
- "orchestra/testbench-core": "^9.5.2 || ^10.0",
- "phpstan/phpstan-deprecation-rules": "^2.0.0",
- "phpunit/phpunit": "^10.5.35 || ^11.3.6"
+ "doctrine/coding-standard": "^13",
+ "laravel/framework": "^11.44.2 || ^12.7.2",
+ "mockery/mockery": "^1.6.12",
+ "nikic/php-parser": "^5.4",
+ "orchestra/canvas": "^v9.2.2 || ^10.0.1",
+ "orchestra/testbench-core": "^9.12.0 || ^10.1",
+ "phpstan/phpstan-deprecation-rules": "^2.0.1",
+ "phpunit/phpunit": "^10.5.35 || ^11.5.15"
},
"suggest": {
- "orchestra/testbench": "Using Larastan for analysing a package needs Testbench"
+ "orchestra/testbench": "Using Larastan for analysing a package needs Testbench",
+ "phpmyadmin/sql-parser": "Install to enable Larastan's optional phpMyAdmin-based SQL parser automatically"
},
"type": "phpstan-extension",
"extra": {
@@ -7267,13 +7667,9 @@
{
"name": "Can Vural",
"email": "can9119@gmail.com"
- },
- {
- "name": "Nuno Maduro",
- "email": "enunomaduro@gmail.com"
}
],
- "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel",
+ "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel",
"keywords": [
"PHPStan",
"code analyse",
@@ -7286,7 +7682,7 @@
],
"support": {
"issues": "https://github.com/larastan/larastan/issues",
- "source": "https://github.com/larastan/larastan/tree/v3.2.0"
+ "source": "https://github.com/larastan/larastan/tree/v3.8.1"
},
"funding": [
{
@@ -7294,20 +7690,20 @@
"type": "github"
}
],
- "time": "2025-03-14T21:54:26+00:00"
+ "time": "2025-12-11T16:37:35+00:00"
},
{
"name": "laravel/pail",
- "version": "v1.2.2",
+ "version": "v1.2.4",
"source": {
"type": "git",
"url": "https://github.com/laravel/pail.git",
- "reference": "f31f4980f52be17c4667f3eafe034e6826787db2"
+ "reference": "49f92285ff5d6fc09816e976a004f8dec6a0ea30"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pail/zipball/f31f4980f52be17c4667f3eafe034e6826787db2",
- "reference": "f31f4980f52be17c4667f3eafe034e6826787db2",
+ "url": "https://api.github.com/repos/laravel/pail/zipball/49f92285ff5d6fc09816e976a004f8dec6a0ea30",
+ "reference": "49f92285ff5d6fc09816e976a004f8dec6a0ea30",
"shasum": ""
},
"require": {
@@ -7324,10 +7720,10 @@
"require-dev": {
"laravel/framework": "^10.24|^11.0|^12.0",
"laravel/pint": "^1.13",
- "orchestra/testbench-core": "^8.13|^9.0|^10.0",
- "pestphp/pest": "^2.20|^3.0",
- "pestphp/pest-plugin-type-coverage": "^2.3|^3.0",
- "phpstan/phpstan": "^1.10",
+ "orchestra/testbench-core": "^8.13|^9.17|^10.8",
+ "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"
},
"type": "library",
@@ -7363,6 +7759,7 @@
"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",
@@ -7372,20 +7769,20 @@
"issues": "https://github.com/laravel/pail/issues",
"source": "https://github.com/laravel/pail"
},
- "time": "2025-01-28T15:15:15+00:00"
+ "time": "2025-11-20T16:29:35+00:00"
},
{
"name": "laravel/sail",
- "version": "v1.41.0",
+ "version": "v1.52.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec"
+ "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec",
- "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
+ "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
"shasum": ""
},
"require": {
@@ -7398,7 +7795,7 @@
},
"require-dev": {
"orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
- "phpstan/phpstan": "^1.10"
+ "phpstan/phpstan": "^2.0"
},
"bin": [
"bin/sail"
@@ -7435,7 +7832,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2025-01-24T15:45:36+00:00"
+ "time": "2026-01-01T02:46:03+00:00"
},
{
"name": "mockery/mockery",
@@ -7522,16 +7919,16 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.13.0",
+ "version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "024473a478be9df5fdaca2c793f2232fe788e414"
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
- "reference": "024473a478be9df5fdaca2c793f2232fe788e414",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@@ -7570,7 +7967,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@@ -7578,42 +7975,43 @@
"type": "tidelift"
}
],
- "time": "2025-02-12T12:17:51+00:00"
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nunomaduro/collision",
- "version": "v8.7.0",
+ "version": "v8.8.3",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "586cb8181a257a2152b6a855ca8d9598878a1a26"
+ "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/586cb8181a257a2152b6a855ca8d9598878a1a26",
- "reference": "586cb8181a257a2152b6a855ca8d9598878a1a26",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
+ "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
"shasum": ""
},
"require": {
- "filp/whoops": "^2.17.0",
- "nunomaduro/termwind": "^2.3.0",
+ "filp/whoops": "^2.18.1",
+ "nunomaduro/termwind": "^2.3.1",
"php": "^8.2.0",
- "symfony/console": "^7.2.1"
+ "symfony/console": "^7.3.0"
},
"conflict": {
- "laravel/framework": "<11.39.1 || >=13.0.0",
- "phpunit/phpunit": "<11.5.3 || >=12.0.0"
+ "laravel/framework": "<11.44.2 || >=13.0.0",
+ "phpunit/phpunit": "<11.5.15 || >=13.0.0"
},
"require-dev": {
- "larastan/larastan": "^2.10.0",
- "laravel/framework": "^11.44.2",
- "laravel/pint": "^1.21.2",
- "laravel/sail": "^1.41.0",
- "laravel/sanctum": "^4.0.8",
+ "brianium/paratest": "^7.8.3",
+ "larastan/larastan": "^3.4.2",
+ "laravel/framework": "^11.44.2 || ^12.18",
+ "laravel/pint": "^1.22.1",
+ "laravel/sail": "^1.43.1",
+ "laravel/sanctum": "^4.1.1",
"laravel/tinker": "^2.10.1",
- "orchestra/testbench-core": "^9.12.0",
- "pestphp/pest": "^3.7.4",
- "sebastian/environment": "^6.1.0 || ^7.2.0"
+ "orchestra/testbench-core": "^9.12.0 || ^10.4",
+ "pestphp/pest": "^3.8.2 || ^4.0.0",
+ "sebastian/environment": "^7.2.1 || ^8.0"
},
"type": "library",
"extra": {
@@ -7676,42 +8074,42 @@
"type": "patreon"
}
],
- "time": "2025-03-14T22:37:40+00:00"
+ "time": "2025-11-20T02:55:25+00:00"
},
{
"name": "pestphp/pest",
- "version": "v3.7.4",
+ "version": "v3.8.4",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest.git",
- "reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b"
+ "reference": "72cf695554420e21858cda831d5db193db102574"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pestphp/pest/zipball/4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b",
- "reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b",
+ "url": "https://api.github.com/repos/pestphp/pest/zipball/72cf695554420e21858cda831d5db193db102574",
+ "reference": "72cf695554420e21858cda831d5db193db102574",
"shasum": ""
},
"require": {
- "brianium/paratest": "^7.7.0",
- "nunomaduro/collision": "^8.6.1",
- "nunomaduro/termwind": "^2.3.0",
+ "brianium/paratest": "^7.8.4",
+ "nunomaduro/collision": "^8.8.2",
+ "nunomaduro/termwind": "^2.3.1",
"pestphp/pest-plugin": "^3.0.0",
- "pestphp/pest-plugin-arch": "^3.0.0",
+ "pestphp/pest-plugin-arch": "^3.1.1",
"pestphp/pest-plugin-mutate": "^3.0.5",
"php": "^8.2.0",
- "phpunit/phpunit": "^11.5.3"
+ "phpunit/phpunit": "^11.5.33"
},
"conflict": {
"filp/whoops": "<2.16.0",
- "phpunit/phpunit": ">11.5.3",
+ "phpunit/phpunit": ">11.5.33",
"sebastian/exporter": "<6.0.0",
"webmozart/assert": "<1.11.0"
},
"require-dev": {
- "pestphp/pest-dev-tools": "^3.3.0",
- "pestphp/pest-plugin-type-coverage": "^3.2.3",
- "symfony/process": "^7.2.0"
+ "pestphp/pest-dev-tools": "^3.4.0",
+ "pestphp/pest-plugin-type-coverage": "^3.6.1",
+ "symfony/process": "^7.3.0"
},
"bin": [
"bin/pest"
@@ -7776,7 +8174,7 @@
],
"support": {
"issues": "https://github.com/pestphp/pest/issues",
- "source": "https://github.com/pestphp/pest/tree/v3.7.4"
+ "source": "https://github.com/pestphp/pest/tree/v3.8.4"
},
"funding": [
{
@@ -7788,7 +8186,7 @@
"type": "github"
}
],
- "time": "2025-01-23T14:03:29+00:00"
+ "time": "2025-08-20T19:12:42+00:00"
},
{
"name": "pestphp/pest-plugin",
@@ -7862,16 +8260,16 @@
},
{
"name": "pestphp/pest-plugin-arch",
- "version": "v3.0.0",
+ "version": "v3.1.1",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest-plugin-arch.git",
- "reference": "0a27e55a270cfe73d8cb70551b91002ee2cb64b0"
+ "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/0a27e55a270cfe73d8cb70551b91002ee2cb64b0",
- "reference": "0a27e55a270cfe73d8cb70551b91002ee2cb64b0",
+ "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/db7bd9cb1612b223e16618d85475c6f63b9c8daa",
+ "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa",
"shasum": ""
},
"require": {
@@ -7880,8 +8278,8 @@
"ta-tikoma/phpunit-architecture-test": "^0.8.4"
},
"require-dev": {
- "pestphp/pest": "^3.0.0",
- "pestphp/pest-dev-tools": "^3.0.0"
+ "pestphp/pest": "^3.8.1",
+ "pestphp/pest-dev-tools": "^3.4.0"
},
"type": "library",
"extra": {
@@ -7916,7 +8314,7 @@
"unit"
],
"support": {
- "source": "https://github.com/pestphp/pest-plugin-arch/tree/v3.0.0"
+ "source": "https://github.com/pestphp/pest-plugin-arch/tree/v3.1.1"
},
"funding": [
{
@@ -7928,7 +8326,7 @@
"type": "github"
}
],
- "time": "2024-09-08T23:23:55+00:00"
+ "time": "2025-04-16T22:59:48+00:00"
},
{
"name": "pestphp/pest-plugin-drift",
@@ -8001,27 +8399,27 @@
},
{
"name": "pestphp/pest-plugin-laravel",
- "version": "v3.1.0",
+ "version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest-plugin-laravel.git",
- "reference": "1c4e994476375c72aa7aebaaa97aa98f5d5378cd"
+ "reference": "6801be82fd92b96e82dd72e563e5674b1ce365fc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/1c4e994476375c72aa7aebaaa97aa98f5d5378cd",
- "reference": "1c4e994476375c72aa7aebaaa97aa98f5d5378cd",
+ "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/6801be82fd92b96e82dd72e563e5674b1ce365fc",
+ "reference": "6801be82fd92b96e82dd72e563e5674b1ce365fc",
"shasum": ""
},
"require": {
- "laravel/framework": "^11.39.1|^12.0.0",
- "pestphp/pest": "^3.7.4",
+ "laravel/framework": "^11.39.1|^12.9.2",
+ "pestphp/pest": "^3.8.2",
"php": "^8.2.0"
},
"require-dev": {
"laravel/dusk": "^8.2.13|dev-develop",
- "orchestra/testbench": "^9.9.0|^10.0.0",
- "pestphp/pest-dev-tools": "^3.3.0"
+ "orchestra/testbench": "^9.9.0|^10.2.1",
+ "pestphp/pest-dev-tools": "^3.4.0"
},
"type": "library",
"extra": {
@@ -8059,7 +8457,7 @@
"unit"
],
"support": {
- "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v3.1.0"
+ "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v3.2.0"
},
"funding": [
{
@@ -8071,7 +8469,7 @@
"type": "github"
}
],
- "time": "2025-01-24T13:22:39+00:00"
+ "time": "2025-04-21T07:40:53+00:00"
},
{
"name": "pestphp/pest-plugin-livewire",
@@ -8331,28 +8729,32 @@
},
{
"name": "php-debugbar/php-debugbar",
- "version": "v2.1.6",
+ "version": "v2.2.6",
"source": {
"type": "git",
"url": "https://github.com/php-debugbar/php-debugbar.git",
- "reference": "16fa68da5617220594aa5e33fa9de415f94784a0"
+ "reference": "abb9fa3c5c8dbe7efe03ddba56782917481de3e8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/16fa68da5617220594aa5e33fa9de415f94784a0",
- "reference": "16fa68da5617220594aa5e33fa9de415f94784a0",
+ "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/abb9fa3c5c8dbe7efe03ddba56782917481de3e8",
+ "reference": "abb9fa3c5c8dbe7efe03ddba56782917481de3e8",
"shasum": ""
},
"require": {
- "php": "^8",
+ "php": "^8.1",
"psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^4|^5|^6|^7"
+ "symfony/var-dumper": "^5.4|^6.4|^7.3|^8.0"
+ },
+ "replace": {
+ "maximebf/debugbar": "self.version"
},
"require-dev": {
"dbrekelmans/bdi": "^1",
- "phpunit/phpunit": "^8|^9",
+ "phpunit/phpunit": "^10",
+ "symfony/browser-kit": "^6.0|7.0",
"symfony/panther": "^1|^2.1",
- "twig/twig": "^1.38|^2.7|^3.0"
+ "twig/twig": "^3.11.2"
},
"suggest": {
"kriswallsmith/assetic": "The best way to manage assets",
@@ -8362,7 +8764,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "2.2-dev"
}
},
"autoload": {
@@ -8395,9 +8797,9 @@
],
"support": {
"issues": "https://github.com/php-debugbar/php-debugbar/issues",
- "source": "https://github.com/php-debugbar/php-debugbar/tree/v2.1.6"
+ "source": "https://github.com/php-debugbar/php-debugbar/tree/v2.2.6"
},
- "time": "2025-02-21T17:47:03+00:00"
+ "time": "2025-12-22T13:21:32+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@@ -8454,16 +8856,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.6.1",
+ "version": "5.6.6",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8"
+ "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
- "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8",
+ "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8",
"shasum": ""
},
"require": {
@@ -8473,7 +8875,7 @@
"phpdocumentor/reflection-common": "^2.2",
"phpdocumentor/type-resolver": "^1.7",
"phpstan/phpdoc-parser": "^1.7|^2.0",
- "webmozart/assert": "^1.9.1"
+ "webmozart/assert": "^1.9.1 || ^2"
},
"require-dev": {
"mockery/mockery": "~1.3.5 || ~1.6.0",
@@ -8512,22 +8914,22 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6"
},
- "time": "2024-12-07T09:39:29+00:00"
+ "time": "2025-12-22T21:13:58+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.10.0",
+ "version": "1.12.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
+ "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195",
+ "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195",
"shasum": ""
},
"require": {
@@ -8570,22 +8972,22 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0"
},
- "time": "2024-11-09T15:12:26+00:00"
+ "time": "2025-11-21T15:09:14+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "2.1.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68"
+ "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
- "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495",
+ "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495",
"shasum": ""
},
"require": {
@@ -8617,22 +9019,17 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0"
},
- "time": "2025-02-19T13:28:12+00:00"
+ "time": "2025-08-30T15:50:23+00:00"
},
{
"name": "phpstan/phpstan",
- "version": "2.1.8",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "f9adff3b87c03b12cc7e46a30a524648e497758f"
- },
+ "version": "2.1.33",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f9adff3b87c03b12cc7e46a30a524648e497758f",
- "reference": "f9adff3b87c03b12cc7e46a30a524648e497758f",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f",
+ "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f",
"shasum": ""
},
"require": {
@@ -8677,39 +9074,39 @@
"type": "github"
}
],
- "time": "2025-03-09T09:30:48+00:00"
+ "time": "2025-12-05T10:24:31+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "11.0.9",
+ "version": "11.0.12",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7"
+ "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7",
- "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56",
+ "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^5.4.0",
+ "nikic/php-parser": "^5.7.0",
"php": ">=8.2",
"phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-text-template": "^4.0.1",
"sebastian/code-unit-reverse-lookup": "^4.0.1",
"sebastian/complexity": "^4.0.1",
- "sebastian/environment": "^7.2.0",
+ "sebastian/environment": "^7.2.1",
"sebastian/lines-of-code": "^3.0.1",
"sebastian/version": "^5.0.2",
- "theseer/tokenizer": "^1.2.3"
+ "theseer/tokenizer": "^1.3.1"
},
"require-dev": {
- "phpunit/phpunit": "^11.5.2"
+ "phpunit/phpunit": "^11.5.46"
},
"suggest": {
"ext-pcov": "PHP extension that provides line coverage",
@@ -8747,15 +9144,27 @@
"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/11.0.9"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage",
+ "type": "tidelift"
}
],
- "time": "2025-02-25T13:26:39+00:00"
+ "time": "2025-12-24T07:01:01+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -9004,16 +9413,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.3",
+ "version": "11.5.33",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "30e319e578a7b5da3543073e30002bf82042f701"
+ "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/30e319e578a7b5da3543073e30002bf82042f701",
- "reference": "30e319e578a7b5da3543073e30002bf82042f701",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5965e9ff57546cb9137c0ff6aa78cb7442b05cf6",
+ "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6",
"shasum": ""
},
"require": {
@@ -9023,24 +9432,24 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.12.1",
+ "myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.2",
- "phpunit/php-code-coverage": "^11.0.8",
+ "phpunit/php-code-coverage": "^11.0.10",
"phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-invoker": "^5.0.1",
"phpunit/php-text-template": "^4.0.1",
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
- "sebastian/code-unit": "^3.0.2",
- "sebastian/comparator": "^6.3.0",
+ "sebastian/code-unit": "^3.0.3",
+ "sebastian/comparator": "^6.3.2",
"sebastian/diff": "^6.0.2",
- "sebastian/environment": "^7.2.0",
+ "sebastian/environment": "^7.2.1",
"sebastian/exporter": "^6.3.0",
"sebastian/global-state": "^7.0.2",
"sebastian/object-enumerator": "^6.0.1",
- "sebastian/type": "^5.1.0",
+ "sebastian/type": "^5.1.3",
"sebastian/version": "^5.0.2",
"staabm/side-effects-detector": "^1.0.5"
},
@@ -9085,7 +9494,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.3"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.33"
},
"funding": [
{
@@ -9096,30 +9505,38 @@
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
"type": "tidelift"
}
],
- "time": "2025-01-13T09:36:00+00:00"
+ "time": "2025-08-16T05:19:02+00:00"
},
{
"name": "rector/rector",
- "version": "2.0.10",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "5844a718acb40f40afcd110394270afa55509fd0"
+ "reference": "f7166355dcf47482f27be59169b0825995f51c7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/5844a718acb40f40afcd110394270afa55509fd0",
- "reference": "5844a718acb40f40afcd110394270afa55509fd0",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/f7166355dcf47482f27be59169b0825995f51c7d",
+ "reference": "f7166355dcf47482f27be59169b0825995f51c7d",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
- "phpstan/phpstan": "^2.1.6"
+ "phpstan/phpstan": "^2.1.33"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -9144,6 +9561,7 @@
"MIT"
],
"description": "Instant Upgrade and Automated Refactoring of any PHP code",
+ "homepage": "https://getrector.com/",
"keywords": [
"automation",
"dev",
@@ -9152,7 +9570,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/2.0.10"
+ "source": "https://github.com/rectorphp/rector/tree/2.3.0"
},
"funding": [
{
@@ -9160,7 +9578,7 @@
"type": "github"
}
],
- "time": "2025-03-03T17:35:18+00:00"
+ "time": "2025-12-25T22:00:18+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -9221,16 +9639,16 @@
},
{
"name": "sebastian/code-unit",
- "version": "3.0.2",
+ "version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca"
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca",
- "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64",
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64",
"shasum": ""
},
"require": {
@@ -9266,7 +9684,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit/issues",
"security": "https://github.com/sebastianbergmann/code-unit/security/policy",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2"
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3"
},
"funding": [
{
@@ -9274,7 +9692,7 @@
"type": "github"
}
],
- "time": "2024-12-12T09:59:06+00:00"
+ "time": "2025-03-19T07:56:08+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -9334,16 +9752,16 @@
},
{
"name": "sebastian/comparator",
- "version": "6.3.1",
+ "version": "6.3.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959"
+ "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
- "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8",
+ "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8",
"shasum": ""
},
"require": {
@@ -9402,15 +9820,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
}
],
- "time": "2025-03-07T06:57:01+00:00"
+ "time": "2025-08-10T08:07:46+00:00"
},
{
"name": "sebastian/complexity",
@@ -9539,23 +9969,23 @@
},
{
"name": "sebastian/environment",
- "version": "7.2.0",
+ "version": "7.2.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5"
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5",
- "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4",
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^11.3"
},
"suggest": {
"ext-posix": "*"
@@ -9591,28 +10021,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0"
+ "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/environment",
+ "type": "tidelift"
}
],
- "time": "2024-07-03T04:54:44+00:00"
+ "time": "2025-05-21T11:55:47+00:00"
},
{
"name": "sebastian/exporter",
- "version": "6.3.0",
+ "version": "6.3.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3"
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3",
- "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74",
"shasum": ""
},
"require": {
@@ -9626,7 +10068,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.1-dev"
+ "dev-main": "6.3-dev"
}
},
"autoload": {
@@ -9669,15 +10111,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
+ "type": "tidelift"
}
],
- "time": "2024-12-05T09:17:50+00:00"
+ "time": "2025-09-24T06:12:51+00:00"
},
{
"name": "sebastian/global-state",
@@ -9915,23 +10369,23 @@
},
{
"name": "sebastian/recursion-context",
- "version": "6.0.2",
+ "version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "694d156164372abbd149a4b85ccda2e4670c0e16"
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16",
- "reference": "694d156164372abbd149a4b85ccda2e4670c0e16",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^11.3"
},
"type": "library",
"extra": {
@@ -9967,28 +10421,40 @@
"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/6.0.2"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.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/recursion-context",
+ "type": "tidelift"
}
],
- "time": "2024-07-03T05:10:34+00:00"
+ "time": "2025-08-13T04:42:22+00:00"
},
{
"name": "sebastian/type",
- "version": "5.1.0",
+ "version": "5.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac"
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac",
- "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
"shasum": ""
},
"require": {
@@ -10024,15 +10490,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"security": "https://github.com/sebastianbergmann/type/security/policy",
- "source": "https://github.com/sebastianbergmann/type/tree/5.1.0"
+ "source": "https://github.com/sebastianbergmann/type/tree/5.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
+ "type": "tidelift"
}
],
- "time": "2024-09-17T13:12:04+00:00"
+ "time": "2025-08-09T06:55:48+00:00"
},
{
"name": "sebastian/version",
@@ -10142,28 +10620,28 @@
},
{
"name": "symfony/yaml",
- "version": "v7.2.3",
+ "version": "v7.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec"
+ "reference": "24dd4de28d2e3988b311751ac49e684d783e2345"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec",
- "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/24dd4de28d2e3988b311751ac49e684d783e2345",
+ "reference": "24dd4de28d2e3988b311751ac49e684d783e2345",
"shasum": ""
},
"require": {
"php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3.0",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"symfony/console": "<6.4"
},
"require-dev": {
- "symfony/console": "^6.4|^7.0"
+ "symfony/console": "^6.4|^7.0|^8.0"
},
"bin": [
"Resources/bin/yaml-lint"
@@ -10194,7 +10672,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.2.3"
+ "source": "https://github.com/symfony/yaml/tree/v7.4.1"
},
"funding": [
{
@@ -10205,32 +10683,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-07T12:55:42+00:00"
+ "time": "2025-12-04T18:11:45+00:00"
},
{
"name": "ta-tikoma/phpunit-architecture-test",
- "version": "0.8.4",
+ "version": "0.8.5",
"source": {
"type": "git",
"url": "https://github.com/ta-tikoma/phpunit-architecture-test.git",
- "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636"
+ "reference": "cf6fb197b676ba716837c886baca842e4db29005"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636",
- "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636",
+ "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/cf6fb197b676ba716837c886baca842e4db29005",
+ "reference": "cf6fb197b676ba716837c886baca842e4db29005",
"shasum": ""
},
"require": {
"nikic/php-parser": "^4.18.0 || ^5.0.0",
"php": "^8.1.0",
"phpdocumentor/reflection-docblock": "^5.3.0",
- "phpunit/phpunit": "^10.5.5 || ^11.0.0",
+ "phpunit/phpunit": "^10.5.5 || ^11.0.0 || ^12.0.0",
"symfony/finder": "^6.4.0 || ^7.0.0"
},
"require-dev": {
@@ -10267,22 +10749,22 @@
],
"support": {
"issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues",
- "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4"
+ "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.5"
},
- "time": "2024-01-05T14:10:56+00:00"
+ "time": "2025-04-20T20:23:40+00:00"
},
{
"name": "theseer/tokenizer",
- "version": "1.2.3",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
"shasum": ""
},
"require": {
@@ -10311,7 +10793,7 @@
"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/1.2.3"
+ "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
},
"funding": [
{
@@ -10319,17 +10801,79 @@
"type": "github"
}
],
- "time": "2024-03-03T12:36:25+00:00"
+ "time": "2025-11-17T20:03:58+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "bdbabc199a7ba9965484e4725d66170e5711323b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/bdbabc199a7ba9965484e4725d66170e5711323b",
+ "reference": "bdbabc199a7ba9965484e4725d66170e5711323b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-date": "*",
+ "ext-filter": "*",
+ "php": "^8.2"
+ },
+ "suggest": {
+ "ext-intl": "",
+ "ext-simplexml": "",
+ "ext-spl": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-feature/2-0": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/2.1.1"
+ },
+ "time": "2026-01-08T11:28:40+00:00"
}
],
"aliases": [],
"minimum-stability": "dev",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.2|^8.3"
},
- "platform-dev": [],
- "plugin-api-version": "2.3.0"
+ "platform-dev": {},
+ "plugin-api-version": "2.6.0"
}
From 5148034ca3ac26a99427fbcff42f83eb49310c79 Mon Sep 17 00:00:00 2001
From: Morten
Date: Thu, 8 Jan 2026 12:57:39 +0100
Subject: [PATCH 7/9] bootstrap laravel with running tests in Unit
---
...0001_01_01_000001_add_two_factor_columns_to_users_table.php} | 0
tests/Pest.php | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
rename database/migrations/{2026_01_08_105500_add_two_factor_columns_to_users_table.php => 0001_01_01_000001_add_two_factor_columns_to_users_table.php} (100%)
diff --git a/database/migrations/2026_01_08_105500_add_two_factor_columns_to_users_table.php b/database/migrations/0001_01_01_000001_add_two_factor_columns_to_users_table.php
similarity index 100%
rename from database/migrations/2026_01_08_105500_add_two_factor_columns_to_users_table.php
rename to database/migrations/0001_01_01_000001_add_two_factor_columns_to_users_table.php
diff --git a/tests/Pest.php b/tests/Pest.php
index e3b0325..b0bbfe8 100644
--- a/tests/Pest.php
+++ b/tests/Pest.php
@@ -13,7 +13,7 @@
pest()->extend(Tests\TestCase::class)
->use(Illuminate\Foundation\Testing\RefreshDatabase::class)
- ->in('Feature');
+ ->in('Feature', 'Unit');
/*
|--------------------------------------------------------------------------
From 711a45caf2c6561af58ead18f6586c6c2bf1d3a3 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 8 Jan 2026 12:29:33 +0000
Subject: [PATCH 8/9] Fix migration timestamp conflict causing test failures
Renamed two-factor migration from 0001_01_01_000001 to 2026_01_08_000000 to avoid conflict with cache table migration that has the same timestamp. This ensures migrations run in the correct order.
Co-authored-by: mortenebak <9462269+mortenebak@users.noreply.github.com>
---
...> 2026_01_08_000000_add_two_factor_columns_to_users_table.php} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename database/migrations/{0001_01_01_000001_add_two_factor_columns_to_users_table.php => 2026_01_08_000000_add_two_factor_columns_to_users_table.php} (100%)
diff --git a/database/migrations/0001_01_01_000001_add_two_factor_columns_to_users_table.php b/database/migrations/2026_01_08_000000_add_two_factor_columns_to_users_table.php
similarity index 100%
rename from database/migrations/0001_01_01_000001_add_two_factor_columns_to_users_table.php
rename to database/migrations/2026_01_08_000000_add_two_factor_columns_to_users_table.php
From 28d67969f5ed9c7c03ec05ed640b8ca98f057f1b Mon Sep 17 00:00:00 2001
From: Morten
Date: Thu, 8 Jan 2026 15:01:49 +0100
Subject: [PATCH 9/9] remove redundant parentheses for `Google2FA`
instantiations and update UserFactory with 2FA fields
---
app/Livewire/Auth/TwoFactorChallenge.php | 2 +-
app/Livewire/Settings/TwoFactor.php | 7 +++----
database/factories/UserFactory.php | 3 +++
tests/Feature/Auth/TwoFactorAuthenticationTest.php | 10 +++++-----
tests/Feature/Settings/TwoFactorTest.php | 8 ++++----
tests/Unit/UserTwoFactorTest.php | 4 ++--
6 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/app/Livewire/Auth/TwoFactorChallenge.php b/app/Livewire/Auth/TwoFactorChallenge.php
index be5d2db..04b192d 100644
--- a/app/Livewire/Auth/TwoFactorChallenge.php
+++ b/app/Livewire/Auth/TwoFactorChallenge.php
@@ -53,7 +53,7 @@ public function challenge(): void
*/
protected function challengeUsingCode($user): void
{
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = decrypt($user->two_factor_secret);
if (! $google2fa->verifyKey($secret, $this->code)) {
diff --git a/app/Livewire/Settings/TwoFactor.php b/app/Livewire/Settings/TwoFactor.php
index 5143bc4..1015ab4 100644
--- a/app/Livewire/Settings/TwoFactor.php
+++ b/app/Livewire/Settings/TwoFactor.php
@@ -3,7 +3,6 @@
namespace App\Livewire\Settings;
use Illuminate\Support\Collection;
-use Illuminate\Support\Facades\Crypt;
use Livewire\Attributes\Layout;
use Livewire\Component;
use PragmaRX\Google2FA\Google2FA;
@@ -25,7 +24,7 @@ class TwoFactor extends Component
public function enableTwoFactorAuthentication(): void
{
$user = auth()->user();
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
// Generate a new secret
$secret = $google2fa->generateSecretKey();
@@ -48,7 +47,7 @@ public function confirmTwoFactorAuthentication(): void
]);
$user = auth()->user();
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = decrypt($user->two_factor_secret);
@@ -143,7 +142,7 @@ public function getQrCodeUrlProperty(): ?string
}
$user = auth()->user();
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = decrypt($user->two_factor_secret);
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index 584104c..3a7b2f8 100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -29,6 +29,9 @@ public function definition(): array
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10),
+ 'two_factor_secret' => null,
+ 'two_factor_recovery_codes' => null,
+ 'two_factor_confirmed_at' => null,
];
}
diff --git a/tests/Feature/Auth/TwoFactorAuthenticationTest.php b/tests/Feature/Auth/TwoFactorAuthenticationTest.php
index df05e9d..e75f321 100644
--- a/tests/Feature/Auth/TwoFactorAuthenticationTest.php
+++ b/tests/Feature/Auth/TwoFactorAuthenticationTest.php
@@ -9,7 +9,7 @@
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
test('user with 2fa enabled is redirected to two factor challenge', function (): void {
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user = User::factory()->create([
@@ -41,7 +41,7 @@
});
test('two factor challenge can be passed with valid code', function (): void {
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user = User::factory()->create([
@@ -66,7 +66,7 @@
});
test('two factor challenge fails with invalid code', function (): void {
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user = User::factory()->create([
@@ -89,7 +89,7 @@
});
test('two factor challenge can be passed with recovery code', function (): void {
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$recoveryCodes = ['RECOVERY-CODE-1', 'RECOVERY-CODE-2'];
@@ -119,7 +119,7 @@
});
test('two factor challenge fails with invalid recovery code', function (): void {
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user = User::factory()->create([
diff --git a/tests/Feature/Settings/TwoFactorTest.php b/tests/Feature/Settings/TwoFactorTest.php
index 93c0c5c..9b67838 100644
--- a/tests/Feature/Settings/TwoFactorTest.php
+++ b/tests/Feature/Settings/TwoFactorTest.php
@@ -29,7 +29,7 @@
test('two factor authentication can be confirmed with valid code', function (): void {
$user = User::factory()->create();
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user->two_factor_secret = encrypt($secret);
@@ -50,7 +50,7 @@
test('two factor authentication cannot be confirmed with invalid code', function (): void {
$user = User::factory()->create();
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user->two_factor_secret = encrypt($secret);
@@ -68,7 +68,7 @@
test('recovery codes can be regenerated', function (): void {
$user = User::factory()->create();
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user->two_factor_secret = encrypt($secret);
@@ -91,7 +91,7 @@
test('two factor authentication can be disabled', function (): void {
$user = User::factory()->create();
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user->two_factor_secret = encrypt($secret);
diff --git a/tests/Unit/UserTwoFactorTest.php b/tests/Unit/UserTwoFactorTest.php
index bddff4d..f0a3e3e 100644
--- a/tests/Unit/UserTwoFactorTest.php
+++ b/tests/Unit/UserTwoFactorTest.php
@@ -6,7 +6,7 @@
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
test('has two factor enabled returns true when 2fa is active', function (): void {
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user = User::factory()->create([
@@ -27,7 +27,7 @@
});
test('has two factor enabled returns false when not confirmed', function (): void {
- $google2fa = new Google2FA();
+ $google2fa = new Google2FA;
$secret = $google2fa->generateSecretKey();
$user = User::factory()->create([