diff --git a/app/Console/Commands/Installer.php b/app/Console/Commands/Installer.php index 6d967aa69..53aaa14d2 100644 --- a/app/Console/Commands/Installer.php +++ b/app/Console/Commands/Installer.php @@ -13,7 +13,20 @@ class Installer extends Command * * @var string */ - protected $signature = 'install {--dangerously-overwrite-env : Re-run installation and overwrite current .env }'; + protected $signature = 'install + {--dangerously-overwrite-env : Re-run installation and overwrite current .env} + {--domain= : Pre-fill site domain} + {--name= : Pre-fill site name} + {--email= : Pre-fill admin email} + {--db-driver= : Pre-fill database driver (mysql/pgsql)} + {--db-host= : Pre-fill database host} + {--db-port= : Pre-fill database port} + {--db-database= : Pre-fill database name} + {--db-username= : Pre-fill database username} + {--db-password= : Pre-fill database password} + {--redis-host= : Pre-fill Redis host} + {--redis-port= : Pre-fill Redis port} + {--redis-password= : Pre-fill Redis password}'; /** * The console command description. @@ -22,8 +35,7 @@ class Installer extends Command */ protected $description = 'CLI Installer'; - public $installType = 'Simple'; - public $continue; + protected $migrationsRan = false; /** * Create a new command instance. @@ -65,38 +77,22 @@ class Installer extends Command { $this->envCheck(); $this->envCreate(); - $this->installType(); - - if ($this->installType === 'Advanced') { - $this->info('Installer: Advanced...'); - $this->checkPHPRequiredDependencies(); - $this->checkFFmpegDependencies(); - $this->checkOptimiseDependencies(); - $this->checkDiskPermissions(); - $this->envProd(); - $this->instanceDB(); - $this->instanceRedis(); - $this->instanceURL(); - $this->activityPubSettings(); - $this->laravelSettings(); - $this->instanceSettings(); - $this->mediaSettings(); - $this->dbMigrations(); - $this->validateEnv(); - $this->resetArtisanCache(); - } else { - $this->info('Installer: Simple...'); - $this->checkDiskPermissions(); - $this->envProd(); - $this->instanceDB(); - $this->instanceRedis(); - $this->instanceURL(); - $this->activityPubSettings(); - $this->instanceSettings(); - $this->dbMigrations(); - $this->validateEnv(); - $this->resetArtisanCache(); - } + $this->checkPHPRequiredDependencies(); + $this->checkFFmpegDependencies(); + $this->checkOptimiseDependencies(); + $this->checkDiskPermissions(); + $this->envProd(); + $this->instanceDB(); + $this->instanceRedis(); + $this->instanceURL(); + $this->activityPubSettings(); + $this->laravelSettings(); + $this->instanceSettings(); + $this->mediaSettings(); + $this->dbMigrations(); + $this->setupPrep(); + $this->validateEnv(); + $this->resetArtisanCache(); } protected function envCheck() @@ -118,16 +114,10 @@ class Installer extends Command $this->line(''); $this->info('Creating .env if required'); if (!file_exists(app()->environmentFilePath())) { - exec('cp .env.example .env'); + copy(base_path('.env.example'), app()->environmentFilePath()); } } - protected function installType() - { - $type = $this->choice('Select installation type', ['Simple', 'Advanced'], 1); - $this->installType = $type; - } - protected function checkPHPRequiredDependencies() { $this->line(' '); @@ -145,21 +135,25 @@ class Installer extends Command 'xml', 'zip', 'redis', + 'vips', ]; + $missing = []; foreach ($extensions as $ext) { if (extension_loaded($ext) == false) { $this->error("- \"{$ext}\" not found"); + $missing[] = $ext; } else { $this->info("- \"{$ext}\" found"); } } - $continue = $this->choice('Do you wish to continue?', ['yes', 'no'], 0); - $this->continue = $continue; - if ($this->continue === 'no') { - $this->info('Exiting Installer.'); - exit; + if (!empty($missing)) { + $continue = $this->choice('Some extensions are missing. Do you wish to continue?', ['yes', 'no'], 1); + if ($continue === 'no') { + $this->info('Exiting Installer.'); + return 1; + } } } @@ -167,12 +161,17 @@ class Installer extends Command protected function checkFFmpegDependencies() { $this->line(' '); - $this->info('Checking for Required FFmpeg dependencies...'); + $this->info('Checking for FFmpeg (required for video processing)...'); $ffmpeg = exec('which ffmpeg'); if (empty($ffmpeg)) { - $this->error('- FFmpeg not found, aborting installation'); - exit; + $this->warn('- FFmpeg not found'); + $this->warn(' Video uploads will not work without FFmpeg'); + $continue = $this->choice('Do you want to continue without FFmpeg?', ['yes', 'no'], 1); + if ($continue === 'no') { + $this->info('Exiting Installer. Please install FFmpeg and try again.'); + return 1; + } } else { $this->info('- Found FFmpeg!'); } @@ -212,7 +211,7 @@ class Installer extends Command ]; foreach ($paths as $path) { - if (is_writeable($path) == false) { + if (is_writable($path) == false) { $this->error("- Invalid permission found! Aborting installation."); $this->error(" Please make the following path writeable by the web server:"); $this->error(" $path"); @@ -237,14 +236,15 @@ class Installer extends Command { $this->line(''); $this->info('Database Settings:'); - $database = $this->choice('Select database driver', ['mysql', 'pgsql'], 0); - $database_host = $this->ask('Select database host', '127.0.0.1'); + + $database = $this->choice('Select database driver', ['mysql', 'pgsql'], $this->option('db-driver') ?: 0); + $database_host = $this->ask('Select database host', $this->option('db-host') ?: '127.0.0.1'); $database_port_default = $database === 'mysql' ? 3306 : 5432; - $database_port = $this->ask('Select database port', $database_port_default); + $database_port = $this->ask('Select database port', $this->option('db-port') ?: $database_port_default); - $database_db = $this->ask('Select database', 'pixelfed'); - $database_username = $this->ask('Select database username', 'pixelfed'); - $database_password = $this->secret('Select database password'); + $database_db = $this->ask('Select database', $this->option('db-database') ?: 'pixelfed'); + $database_username = $this->ask('Select database username', $this->option('db-username') ?: 'pixelfed'); + $database_password = $this->ask('Select database password', $this->option('db-password') ?: null); $this->updateEnvFile('DB_CONNECTION', $database); $this->updateEnvFile('DB_HOST', $database_host); @@ -257,8 +257,10 @@ class Installer extends Command $dsn = "{$database}:dbname={$database_db};host={$database_host};port={$database_port};"; try { $dbh = new PDO($dsn, $database_username, $database_password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); + $dbh = null; // Close connection } catch (\PDOException $e) { $this->error('Cannot connect to database, check your details and try again'); + $this->error('Error: ' . $e->getMessage()); exit; } $this->info('- Connected to DB Successfully'); @@ -269,22 +271,29 @@ class Installer extends Command $this->line(''); $this->info('Redis Settings:'); $redis_client = $this->choice('Set redis client (PHP extension)', ['phpredis', 'predis'], 0); - $redis_host = $this->ask('Set redis host', 'localhost'); - $redis_password = $this->ask('Set redis password', 'null'); - $redis_port = $this->ask('Set redis port', 6379); + $redis_host = $this->ask('Set redis host', $this->option('redis-host') ?: 'localhost'); + $redis_password = $this->ask('Set redis password (leave empty for none)', $this->option('redis-password') ?? ''); + $redis_port = $this->ask('Set redis port', $this->option('redis-port') ?: 6379); $this->updateEnvFile('REDIS_CLIENT', $redis_client); $this->updateEnvFile('REDIS_SCHEME', 'tcp'); $this->updateEnvFile('REDIS_HOST', $redis_host); - $this->updateEnvFile('REDIS_PASSWORD', $redis_password); + $this->updateEnvFile('REDIS_PASSWORD', empty($redis_password) ? 'null' : $redis_password); $this->updateEnvFile('REDIS_PORT', $redis_port); $this->info('Testing Redis...'); - $redis = Redis::connection(); - if ($redis->ping()) { - $this->info('- Connected to Redis Successfully!'); - } else { + $this->call('config:clear'); + try { + $redis = Redis::connection(); + if ($redis->ping()) { + $this->info('- Connected to Redis Successfully!'); + } else { + $this->error('Cannot connect to Redis, check your details and try again'); + exit; + } + } catch (\Exception $e) { $this->error('Cannot connect to Redis, check your details and try again'); + $this->error('Error: ' . $e->getMessage()); exit; } } @@ -293,21 +302,30 @@ class Installer extends Command { $this->line(''); $this->info('Instance URL Settings:'); - $name = $this->ask('Site name [ex: Pixelfed]', 'Pixelfed'); - - $domain = $this->ask('Site Domain [ex: pixelfed.com]'); - $domain = strtolower($domain); - if (empty($domain)) { - $this->error('You must set the site domain'); - exit; - } - if (starts_with($domain, 'http')) { - $this->error('The site domain cannot start with https://, you must use the FQDN (eg: example.org)'); - exit; - } - if (strpos($domain, '.') == false) { - $this->error('You must enter a valid site domain'); - exit; + $name = $this->ask('Site name [ex: Pixelfed]', $this->option('name') ?: 'Pixelfed'); + + $domain = ''; + while (empty($domain)) { + $domain = $this->ask('Site Domain [ex: pixelfed.com]', $this->option('domain') ?: null); + $domain = strtolower(trim($domain)); + + if (empty($domain)) { + $this->error('You must set the site domain'); + continue; + } + + if (str_starts_with($domain, 'http://') || str_starts_with($domain, 'https://')) { + $this->error('The site domain cannot start with http:// or https://, you must use the FQDN (eg: example.org)'); + $domain = ''; + continue; + } + + // Better domain validation + if (!preg_match('/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i', $domain)) { + $this->error('Invalid domain format. Please enter a valid domain (eg: example.org)'); + $domain = ''; + continue; + } } $this->updateEnvFile('APP_NAME', $name); @@ -317,6 +335,19 @@ class Installer extends Command $this->updateEnvFile('SESSION_DOMAIN', $domain); } + protected function activityPubSettings() + { + $this->line(''); + $this->info('Federation Settings:'); + $activitypub_federation = $this->choice('Enable ActivityPub federation?', ['false', 'true'], 1); + + $this->updateEnvFile('ACTIVITY_PUB', $activitypub_federation); + $this->updateEnvFile('AP_REMOTE_FOLLOW', $activitypub_federation); + $this->updateEnvFile('AP_INBOX', $activitypub_federation); + $this->updateEnvFile('AP_OUTBOX', $activitypub_federation); + $this->updateEnvFile('AP_SHAREDINBOX', $activitypub_federation); + } + protected function laravelSettings() { $this->line(''); @@ -340,7 +371,15 @@ class Installer extends Command { $this->line(''); $this->info('Instance Settings:'); - $max_registration = $this->ask('Set Maximum users on this instance.', '1000'); + + $max_registration = ''; + while (!is_numeric($max_registration) || $max_registration < 1) { + $max_registration = $this->ask('Set Maximum users on this instance', '1000'); + if (!is_numeric($max_registration) || $max_registration < 1) { + $this->error('Please enter a valid number greater than 0'); + } + } + $open_registration = $this->choice('Allow new registrations?', ['false', 'true'], 0); $enforce_email_verification = $this->choice('Enforce email verification?', ['false', 'true'], 0); $enable_mobile_apis = $this->choice('Enable mobile app/apis support?', ['false', 'true'], 1); @@ -352,50 +391,43 @@ class Installer extends Command $this->updateEnvFile('EXP_EMC', $enable_mobile_apis); } - protected function activityPubSettings() - { - $this->line(''); - $this->info('Federation Settings:'); - $activitypub_federation = $this->choice('Enable ActivityPub federation?', ['false', 'true'], 1); - - $this->updateEnvFile('ACTIVITY_PUB', $activitypub_federation); - $this->updateEnvFile('AP_REMOTE_FOLLOW', $activitypub_federation); - $this->updateEnvFile('AP_INBOX', $activitypub_federation); - $this->updateEnvFile('AP_OUTBOX', $activitypub_federation); - $this->updateEnvFile('AP_SHAREDINBOX', $activitypub_federation); - } - protected function mediaSettings() { $this->line(''); $this->info('Media Settings:'); $optimize_media = $this->choice('Optimize media uploads? Requires jpegoptim and other dependencies!', ['false', 'true'], 1); - $image_quality = $this->ask('Set image optimization quality between 1-100. Default is 80%, lower values use less disk space at the expense of image quality.', '80'); - if ($image_quality < 1) { - $this->error('Min image quality is 1. You should avoid such a low value, 60 at minimum is recommended.'); - exit; - } - if ($image_quality > 100) { - $this->error('Max image quality is 100'); - exit; + + $image_quality = ''; + while (!is_numeric($image_quality) || $image_quality < 1 || $image_quality > 100) { + $image_quality = $this->ask('Set image optimization quality between 1-100 (default: 80)', '80'); + if (!is_numeric($image_quality) || $image_quality < 1 || $image_quality > 100) { + $this->error('Please enter a number between 1 and 100'); + } } + $this->info('Note: Max photo size cannot exceed `post_max_size` in php.ini.'); - $max_photo_size = $this->ask('Max photo upload size in kilobytes. Default 15000 which is equal to 15MB', '15000'); - - $max_caption_length = $this->ask('Max caption limit. Default to 500, max 5000.', '500'); - if ($max_caption_length > 5000) { - $this->error('Max caption length is 5000 characters.'); - exit; + $max_photo_size = ''; + while (!is_numeric($max_photo_size) || $max_photo_size < 1) { + $max_photo_size = $this->ask('Max photo upload size in kilobytes (default: 15000 = 15MB)', '15000'); + if (!is_numeric($max_photo_size) || $max_photo_size < 1) { + $this->error('Please enter a valid number greater than 0'); + } } - $max_album_length = $this->ask('Max photos allowed per album. Choose a value between 1 and 10.', '4'); - if ($max_album_length < 1) { - $this->error('Min album length is 1 photos per album.'); - exit; + $max_caption_length = ''; + while (!is_numeric($max_caption_length) || $max_caption_length < 1 || $max_caption_length > 5000) { + $max_caption_length = $this->ask('Max caption limit (1-5000, default: 500)', '500'); + if (!is_numeric($max_caption_length) || $max_caption_length < 1 || $max_caption_length > 5000) { + $this->error('Please enter a number between 1 and 5000'); + } } - if ($max_album_length > 10) { - $this->error('Max album length is 10 photos per album.'); - exit; + + $max_album_length = ''; + while (!is_numeric($max_album_length) || $max_album_length < 1 || $max_album_length > 10) { + $max_album_length = $this->ask('Max photos per album (1-10, default: 4)', '4'); + if (!is_numeric($max_album_length) || $max_album_length < 1 || $max_album_length > 10) { + $this->error('Please enter a number between 1 and 10'); + } } $this->updateEnvFile('PF_OPTIMIZE_IMAGES', $optimize_media); @@ -413,32 +445,58 @@ class Installer extends Command if ($confirm === 'Yes') { sleep(3); + + // Clear any cached config + $this->call('config:clear'); + + // Force reload environment variables + $app = app(); + $app->bootstrapWith([ + \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, + ]); + + // Purge database connections to force reconnect with new credentials + $app->forgetInstance('db'); + $app->forgetInstance('db.connection'); + \Illuminate\Support\Facades\DB::purge(); + + // Rebuild config cache $this->call('config:cache'); + $this->line(''); $this->info('Migrating DB:'); $this->call('migrate', ['--force' => true]); - $this->line(''); - $this->info('Importing Cities:'); - $this->call('import:cities'); - $this->line(''); - $this->info('Creating Federation Instance Actor:'); - $this->call('instance:actor'); - $this->line(''); - $this->info('Creating Password Keys for API:'); - $this->call('passport:keys', ['--force' => true]); - - $confirm = $this->choice('Do you want to create an admin account?', ['Yes', 'No'], 0); - if ($confirm === 'Yes') { - $this->call('user:create'); - } + $this->migrationsRan = true; } } - protected function resetArtisanCache() + protected function setupPrep() { - $this->call('config:cache'); - $this->call('route:cache'); - $this->call('view:cache'); + if (!$this->migrationsRan) { + $this->warn('Skipping setup tasks because migrations were not run.'); + $this->warn('You can run these commands manually later:'); + $this->warn(' php artisan import:cities'); + $this->warn(' php artisan instance:actor'); + $this->warn(' php artisan passport:keys'); + return; + } + + $this->line(''); + $this->info('Running setup tasks...'); + $this->line(''); + $this->info('Importing Cities:'); + $this->call('import:cities'); + $this->line(''); + $this->info('Creating Federation Instance Actor:'); + $this->call('instance:actor'); + $this->line(''); + $this->info('Creating Password Keys for API:'); + $this->call('passport:keys', ['--force' => true]); + + $confirm = $this->choice('Do you want to create an admin account?', ['Yes', 'No'], 0); + if ($confirm === 'Yes') { + $this->call('user:create'); + } } protected function validateEnv() @@ -448,6 +506,15 @@ class Installer extends Command $this->checkEnvKeys('APP_DEBUG', "APP_DEBUG value should be false"); } + protected function resetArtisanCache() + { + $this->call('config:clear'); + $this->call('config:cache'); + $this->call('route:cache'); + $this->call('view:cache'); + $this->line(''); + } + ##### # Installer Functions ##### @@ -467,6 +534,9 @@ class Installer extends Command { $envPath = app()->environmentFilePath(); $payload = file_get_contents($envPath); + + // Escape special characters for .env format + $value = str_replace(['\\', '"', "\n", "\r"], ['\\\\', '\\"', '\\n', '\\r'], $value); if ($existing = $this->existingEnv($key, $payload)) { $payload = str_replace("{$key}={$existing}", "{$key}=\"{$value}\"", $payload); @@ -488,19 +558,22 @@ class Installer extends Command protected function storeEnv($payload) { - $file = fopen(app()->environmentFilePath(), 'w'); + $envPath = app()->environmentFilePath(); + $tempPath = $envPath . '.tmp'; + + // Write to temp file first + $file = fopen($tempPath, 'w'); + if ($file === false) { + throw new \RuntimeException("Cannot write to {$tempPath}"); + } + fwrite($file, $payload); fclose($file); - } - - protected function parseSize($size) - { - $unit = preg_replace('/[^bkmgtpezy]/i', '', $size); - $size = preg_replace('/[^0-9\.]/', '', $size); - if ($unit) { - return round($size * pow(1024, stripos('bkmgtpezy', $unit[0]))); - } else { - return round($size); + + // Atomic rename + if (!rename($tempPath, $envPath)) { + @unlink($tempPath); + throw new \RuntimeException("Cannot update .env file"); } } } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 9e2b8d35b..1d7fe5cc9 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -15,7 +15,6 @@ class Handler extends ExceptionHandler */ protected $dontReport = [ OAuthServerException::class, - \Zttp\ConnectionException::class, \GuzzleHttp\Exception\ConnectException::class, \Illuminate\Http\Client\ConnectionException::class ]; diff --git a/app/Http/Controllers/Api/ApiV1Dot1Controller.php b/app/Http/Controllers/Api/ApiV1Dot1Controller.php index bcbc83767..6181b8b01 100644 --- a/app/Http/Controllers/Api/ApiV1Dot1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Dot1Controller.php @@ -34,6 +34,7 @@ use App\Services\PublicTimelineService; use App\Services\PushNotificationService; use App\Services\SanitizeService; use App\Services\StatusService; +use App\Services\UserRoleService; use App\Services\UserStorageService; use App\Status; use App\StatusArchived; diff --git a/app/Http/Controllers/Api/BaseApiController.php b/app/Http/Controllers/Api/BaseApiController.php index 4fd66690e..7e0877291 100644 --- a/app/Http/Controllers/Api/BaseApiController.php +++ b/app/Http/Controllers/Api/BaseApiController.php @@ -100,7 +100,7 @@ class BaseApiController extends Controller Cache::forget("avatar:{$profile->id}"); AvatarOptimize::dispatch($user->profile, $currentAvatar); - } catch (Exception $e) { + } catch (\Exception $e) { } return response()->json([ diff --git a/app/Http/Controllers/Api/InstanceApiController.php b/app/Http/Controllers/Api/InstanceApiController.php deleted file mode 100644 index 37b597a31..000000000 --- a/app/Http/Controllers/Api/InstanceApiController.php +++ /dev/null @@ -1,63 +0,0 @@ -addMinutes(1440), function() { - $admin = User::whereIsAdmin(true)->first()->profile; - return [ - 'id' => $admin->id, - 'username' => $admin->username, - 'acct' => $admin->username, - 'display_name' => e($admin->name), - 'locked' => (bool) $admin->is_private, - 'created_at' => str_replace('+00:00', 'Z', $admin->created_at->format(DATE_RFC3339_EXTENDED)), - 'note' => e($admin->bio), - 'url' => $admin->url(), - 'avatar' => $admin->avatarUrl(), - 'avatar_static' => $admin->avatarUrl(), - 'header' => null, - 'header_static' => null, - 'moved' => null, - 'fields' => null, - 'bot' => null, - ]; - }); - - $res = [ - 'uri' => config('pixelfed.domain.app'), - 'title' => config_cache('app.name'), - 'description' => '', - 'version' => config('pixelfed.version'), - 'urls' => [], - 'stats' => [ - 'user_count' => User::count(), - 'status_count' => StatusService::totalLocalStatuses(), - 'domain_count' => Instance::count() - ], - 'thumbnail' => '', - 'languages' => [], - 'contact_account' => $contact - ]; - return $res; - } - - public function instance() - { - $res = Cache::remember('api:v1:instance', now()->addMinutes(60), function() { - return json_encode($this->getData()); - }); - - return response($res)->header('Content-Type', 'application/json'); - } - -} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index 22562e985..48021ca4f 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use App\Services\BouncerService; use Illuminate\Http\Request; +use Illuminate\Validation\ValidationException; class ForgotPasswordController extends Controller { diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 166ec01e3..3e9d689ff 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Password; use Illuminate\Http\Request; use App\Services\BouncerService; use Illuminate\Validation\Rules; +use Illuminate\Validation\ValidationException; class ResetPasswordController extends Controller { diff --git a/app/Http/Controllers/AvatarController.php b/app/Http/Controllers/AvatarController.php index 6ee8b610f..92be924a2 100644 --- a/app/Http/Controllers/AvatarController.php +++ b/app/Http/Controllers/AvatarController.php @@ -42,7 +42,7 @@ class AvatarController extends Controller Cache::forget("avatar:{$profile->id}"); Cache::forget('user:account:id:'.$user->id); AvatarOptimize::dispatch($user->profile, $currentAvatar); - } catch (Exception $e) { + } catch (\Exception $e) { } return redirect()->back()->with('status', 'Avatar updated successfully. It may take a few minutes to update across the site.'); diff --git a/app/Http/Controllers/ComposeController.php b/app/Http/Controllers/ComposeController.php index 37be15824..eb343ce9b 100644 --- a/app/Http/Controllers/ComposeController.php +++ b/app/Http/Controllers/ComposeController.php @@ -517,7 +517,7 @@ class ComposeController extends Controller public function store(Request $request) { $this->validate($request, [ - 'caption' => 'nullable|string|max:'.config_cache('pixelfed.max_caption_length', 500), + 'caption' => 'nullable|string|max:'.config_cache('pixelfed.max_caption_length'), 'media.*' => 'required', 'media.*.id' => 'required|integer|min:1', 'media.*.filter_class' => 'nullable|alpha_dash|max:30', @@ -697,7 +697,7 @@ class ComposeController extends Controller { abort_unless(config('exp.top'), 404); $this->validate($request, [ - 'caption' => 'nullable|string|max:'.config_cache('pixelfed.max_caption_length', 500), + 'caption' => 'nullable|string|max:'.config_cache('pixelfed.max_caption_length'), 'cw' => 'nullable|boolean', 'visibility' => 'required|string|in:public,private,unlisted|min:2|max:10', 'place' => 'nullable', @@ -848,7 +848,7 @@ class ComposeController extends Controller public function createPoll(Request $request) { $this->validate($request, [ - 'caption' => 'nullable|string|max:'.config_cache('pixelfed.max_caption_length', 500), + 'caption' => 'nullable|string|max:'.config_cache('pixelfed.max_caption_length'), 'cw' => 'nullable|boolean', 'visibility' => 'required|string|in:public,private', 'comments_disabled' => 'nullable', diff --git a/app/Http/Controllers/CustomFilterController.php b/app/Http/Controllers/CustomFilterController.php index 5c9e8a61a..30b7da9c2 100644 --- a/app/Http/Controllers/CustomFilterController.php +++ b/app/Http/Controllers/CustomFilterController.php @@ -258,7 +258,6 @@ class CustomFilterController extends Controller $validatedData = $request->validate([ 'title' => 'string|max:100', 'context' => 'array|max:10', - 'context.*' => 'string|in:home,notifications,public,thread,account,tags,groups', 'context.*' => [ 'string', Rule::in(self::ACTIVE_TYPES), diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index 68aadcb89..a1c012192 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -636,7 +636,7 @@ class GroupController extends GroupFederationController { abort_unless(config('groups.enabled'), 404); $group = GroupService::get($id); - abort_if(! $group || empty($group), 404); + abort_if(! $group, 404); return view('groups.invite-claim', compact('group')); } diff --git a/app/Http/Controllers/Groups/GroupsPostController.php b/app/Http/Controllers/Groups/GroupsPostController.php index 11b4799fe..b695e8309 100644 --- a/app/Http/Controllers/Groups/GroupsPostController.php +++ b/app/Http/Controllers/Groups/GroupsPostController.php @@ -26,6 +26,10 @@ use App\Models\GroupMedia; use App\Jobs\GroupsPipeline\ImageResizePipeline; use App\Jobs\GroupsPipeline\ImageS3UploadPipeline; use App\Jobs\GroupsPipeline\NewPostPipeline; +use App\Jobs\VideoPipeline\VideoThumbnail; +use App\Jobs\StatusPipeline\StatusDelete; +use App\Media; +use App\Services\PollService; class GroupsPostController extends Controller { @@ -38,7 +42,7 @@ class GroupsPostController extends Controller { $this->validate($request, [ 'group_id' => 'required|exists:groups,id', - 'caption' => 'sometimes|string|max:'.config_cache('pixelfed.max_caption_length', 500), + 'caption' => 'sometimes|string|max:'.config_cache('pixelfed.max_caption_length'), 'pollOptions' => 'sometimes|array|min:1|max:4' ]); diff --git a/app/Http/Controllers/Import/Instagram.php b/app/Http/Controllers/Import/Instagram.php index f1b886d52..e4cdfc476 100644 --- a/app/Http/Controllers/Import/Instagram.php +++ b/app/Http/Controllers/Import/Instagram.php @@ -117,7 +117,7 @@ trait Instagram $data->save(); }); } - DB::transaction(function() use ($profile, $job) { + DB::transaction(function() use ($job) { $job->stage = 2; $job->save(); }); @@ -196,7 +196,7 @@ trait Instagram ->whereStage(3) ->firstOrFail(); ImportInstagram::dispatch($import); - } catch (Exception $e) { + } catch (\Exception $e) { \Log::info($e); } diff --git a/app/Http/Controllers/PortfolioController.php b/app/Http/Controllers/PortfolioController.php index c5f6295f4..26279e22b 100644 --- a/app/Http/Controllers/PortfolioController.php +++ b/app/Http/Controllers/PortfolioController.php @@ -203,7 +203,7 @@ class PortfolioController extends Controller ->pluck('status_id'); }); - return $media->map(function($sid) use($id) { + return $media->map(function($sid) { return StatusService::get($sid); }) ->filter(function($post) { diff --git a/app/Http/Controllers/ProfileAliasController.php b/app/Http/Controllers/ProfileAliasController.php index 559dcb9a6..c022d4724 100644 --- a/app/Http/Controllers/ProfileAliasController.php +++ b/app/Http/Controllers/ProfileAliasController.php @@ -50,7 +50,7 @@ class ProfileAliasController extends Controller $webfingerService = WebfingerService::lookup($acct); $webfingerUrl = WebfingerService::rawGet($acct); - if (! $webfingerService || ! isset($webfingerService['url']) || ! $webfingerUrl || empty($webfingerUrl)) { + if (! $webfingerService || ! isset($webfingerService['url']) || ! $webfingerUrl) { return back()->with('error', 'Invalid account, cannot add alias at this time.'); } $alias = new ProfileAlias; diff --git a/app/Http/Controllers/RemoteAuthController.php b/app/Http/Controllers/RemoteAuthController.php index a9e8b8eee..990df92e6 100644 --- a/app/Http/Controllers/RemoteAuthController.php +++ b/app/Http/Controllers/RemoteAuthController.php @@ -593,7 +593,7 @@ class RemoteAuthController extends Controller } } catch (\GuzzleHttp\Exception\RequestException $e) { return; - } catch (Exception $e) { + } catch (\Exception $e) { return []; } } diff --git a/app/Http/Controllers/SeasonalController.php b/app/Http/Controllers/SeasonalController.php index a9f1f98cb..6aa7fe097 100644 --- a/app/Http/Controllers/SeasonalController.php +++ b/app/Http/Controllers/SeasonalController.php @@ -125,7 +125,7 @@ class SeasonalController extends Controller ]; }); - $res = Cache::remember($userKey, $userTtl, function() use($uid, $pid, $epochStart, $epochEnd, $request) { + $res = Cache::remember($userKey, $userTtl, function() use($pid, $epochStart, $epochEnd, $request) { return [ 'account' => [ 'user_id' => $request->user()->id, diff --git a/app/Http/Requests/Status/StoreStatusEditRequest.php b/app/Http/Requests/Status/StoreStatusEditRequest.php index 5ec5ce8e4..9e66c59f5 100644 --- a/app/Http/Requests/Status/StoreStatusEditRequest.php +++ b/app/Http/Requests/Status/StoreStatusEditRequest.php @@ -44,7 +44,7 @@ class StoreStatusEditRequest extends FormRequest public function rules(): array { return [ - 'status' => 'sometimes|max:'.config_cache('pixelfed.max_caption_length', 500), + 'status' => 'sometimes|max:'.config_cache('pixelfed.max_caption_length'), 'spoiler_text' => 'nullable|string|max:140', 'sensitive' => 'sometimes|boolean', 'media_ids' => [ diff --git a/app/Jobs/AvatarPipeline/AvatarOptimize.php b/app/Jobs/AvatarPipeline/AvatarOptimize.php index 34c0e9d8c..fafa0d75f 100644 --- a/app/Jobs/AvatarPipeline/AvatarOptimize.php +++ b/app/Jobs/AvatarPipeline/AvatarOptimize.php @@ -116,7 +116,7 @@ class AvatarOptimize implements ShouldQueue $avatar->cdn_url = null; $avatar->save(); } - } catch (Exception $e) { + } catch (\Exception $e) { } } diff --git a/app/Jobs/FollowPipeline/FollowPipeline.php b/app/Jobs/FollowPipeline/FollowPipeline.php index 0df16206a..9aade23cb 100644 --- a/app/Jobs/FollowPipeline/FollowPipeline.php +++ b/app/Jobs/FollowPipeline/FollowPipeline.php @@ -84,7 +84,7 @@ class FollowPipeline implements ShouldQueue $notification->item_id = $target->id; $notification->item_type = "App\Profile"; $notification->save(); - } catch (Exception $e) { + } catch (\Exception $e) { Log::error($e); } diff --git a/app/Jobs/GroupPipeline/GroupMediaPipeline.php b/app/Jobs/GroupPipeline/GroupMediaPipeline.php index 1155e5465..94bec8e51 100644 --- a/app/Jobs/GroupPipeline/GroupMediaPipeline.php +++ b/app/Jobs/GroupPipeline/GroupMediaPipeline.php @@ -11,6 +11,8 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Redis; use App\Services\MediaStorageService; +use Illuminate\Support\Facades\Storage; +use Illuminate\Http\File; class GroupMediaPipeline implements ShouldQueue { diff --git a/app/Jobs/GroupPipeline/LikePipeline.php b/app/Jobs/GroupPipeline/LikePipeline.php index bd3e668f7..a7996f73c 100644 --- a/app/Jobs/GroupPipeline/LikePipeline.php +++ b/app/Jobs/GroupPipeline/LikePipeline.php @@ -85,7 +85,7 @@ class LikePipeline implements ShouldQueue $notification->item_type = "App\Status"; $notification->save(); - } catch (Exception $e) { + } catch (\Exception $e) { } } diff --git a/app/Jobs/GroupPipeline/NewStatusPipeline.php b/app/Jobs/GroupPipeline/NewStatusPipeline.php index d791d81a4..52a8c553a 100644 --- a/app/Jobs/GroupPipeline/NewStatusPipeline.php +++ b/app/Jobs/GroupPipeline/NewStatusPipeline.php @@ -11,6 +11,7 @@ use App\Services\StatusService; use App\Status; use App\Util\Lexer\Autolink; use App\Util\Lexer\Extractor; +use App\Jobs\MentionPipeline\MentionPipeline; use DB; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -58,7 +59,7 @@ class NewStatusPipeline implements ShouldQueue } if (count($this->mentions)) { - $this->storeMentions($this->mentions); + $this->storeMentions(); } } @@ -90,10 +91,6 @@ class NewStatusPipeline implements ShouldQueue }); } - - if (count($this->mentions)) { - $this->storeMentions(); - } StatusService::del($status->id); } diff --git a/app/Jobs/GroupsPipeline/ImageS3UploadPipeline.php b/app/Jobs/GroupsPipeline/ImageS3UploadPipeline.php index b1015fb6a..bb3672449 100644 --- a/app/Jobs/GroupsPipeline/ImageS3UploadPipeline.php +++ b/app/Jobs/GroupsPipeline/ImageS3UploadPipeline.php @@ -16,6 +16,7 @@ use GuzzleHttp\Exception\ClientException; use Aws\S3\Exception\S3Exception; use GuzzleHttp\Exception\ConnectException; use League\Flysystem\UnableToWriteFile; +use Illuminate\Support\Facades\Log; class ImageS3UploadPipeline implements ShouldQueue { @@ -86,7 +87,7 @@ class ImageS3UploadPipeline implements ShouldQueue protected function handleResilientStore($storagePath, $path, $name) { $attempts = 0; - return retry(4, function() use($storagePath, $path, $name, $attempts) { + return retry(4, function() use($storagePath, $path, $name) { self::$attempts++; usleep(100000); $baseDisk = self::$attempts > 1 ? $this->getAltDriver() : config('filesystems.cloud'); diff --git a/app/Jobs/ImageOptimizePipeline/ImageUpdate.php b/app/Jobs/ImageOptimizePipeline/ImageUpdate.php index 2c74f8d6d..62569bae5 100644 --- a/app/Jobs/ImageOptimizePipeline/ImageUpdate.php +++ b/app/Jobs/ImageOptimizePipeline/ImageUpdate.php @@ -118,7 +118,7 @@ class ImageUpdate implements ShouldQueue $disk = Storage::disk(config('filesystems.default')); $localFs = config('filesystems.default') === 'local'; - if (! $path || empty($path)) { + if (! $path) { return 0; } diff --git a/app/Jobs/ImportPipeline/ImportInstagram.php b/app/Jobs/ImportPipeline/ImportInstagram.php index baf5728b7..49c42e35e 100644 --- a/app/Jobs/ImportPipeline/ImportInstagram.php +++ b/app/Jobs/ImportPipeline/ImportInstagram.php @@ -72,7 +72,7 @@ class ImportInstagram implements ShouldQueue if(!$min->lt($taken_at)) { $taken_at = Carbon::now(); } - } catch (Exception $e) { + } catch (\Exception $e) { } $filename = last( explode('/', $import['path']) ); @@ -85,7 +85,7 @@ class ImportInstagram implements ShouldQueue } DB::transaction(function() use( - $fs, $job, $profile, $caption, $taken_at, $filename, + $fs, $profile, $caption, $taken_at, $filename, $monthHash, $userHash, $importData ) { $status = new Status(); diff --git a/app/Jobs/InboxPipeline/DeleteWorker.php b/app/Jobs/InboxPipeline/DeleteWorker.php index 2e4eae9fb..d40d2db77 100644 --- a/app/Jobs/InboxPipeline/DeleteWorker.php +++ b/app/Jobs/InboxPipeline/DeleteWorker.php @@ -71,7 +71,7 @@ class DeleteWorker implements ShouldQueue return; } - if(empty($headers) || empty($payload)) { + if(!$headers || !$payload) { Log::info("DeleteWorker: Empty headers or payload, skipping job"); return; } diff --git a/app/Jobs/InboxPipeline/InboxValidator.php b/app/Jobs/InboxPipeline/InboxValidator.php index 1a441e9f5..0f6e8c525 100644 --- a/app/Jobs/InboxPipeline/InboxValidator.php +++ b/app/Jobs/InboxPipeline/InboxValidator.php @@ -73,7 +73,7 @@ class InboxValidator implements ShouldQueue return; } - if(empty($headers) || empty($payload) || !isset($headers['signature']) || !isset($headers['date'])) { + if(!$headers || !$payload || !isset($headers['signature']) || !isset($headers['date'])) { Log::info("InboxValidator: Invalid headers or payload structure, skipping job"); return; } @@ -97,7 +97,7 @@ class InboxValidator implements ShouldQueue return; } - if(empty($profile) || empty($headers) || empty($payload)) { + if(!$profile || !$headers || !$payload) { return; } @@ -233,7 +233,7 @@ class InboxValidator implements ShouldQueue } $res = json_decode($res->body(), true, 8); - if(!$res || empty($res) || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { + if(!$res || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { return; } if($res['publicKey']['id'] !== $actor->key_id) { diff --git a/app/Jobs/InboxPipeline/InboxWorker.php b/app/Jobs/InboxPipeline/InboxWorker.php index 7e3d7f49b..365fbdb5d 100644 --- a/app/Jobs/InboxPipeline/InboxWorker.php +++ b/app/Jobs/InboxPipeline/InboxWorker.php @@ -64,7 +64,7 @@ class InboxWorker implements ShouldQueue return; } - if(empty($headers) || empty($payload) || !isset($headers['signature']) || !isset($headers['date'])) { + if(!$headers || !$payload || !isset($headers['signature']) || !isset($headers['date'])) { Log::info("InboxWorker: Invalid headers or payload structure, skipping job"); return; } @@ -201,7 +201,7 @@ class InboxWorker implements ShouldQueue } $res = json_decode($res->body(), true, 8); - if(!$res || empty($res) || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { + if(!$res || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { return; } if($res['publicKey']['id'] !== $actor->key_id) { diff --git a/app/Jobs/LikePipeline/LikePipeline.php b/app/Jobs/LikePipeline/LikePipeline.php index a6d7bd1c7..48cb2f828 100644 --- a/app/Jobs/LikePipeline/LikePipeline.php +++ b/app/Jobs/LikePipeline/LikePipeline.php @@ -102,7 +102,7 @@ class LikePipeline implements ShouldQueue $notification->item_type = "App\Status"; $notification->save(); - } catch (Exception $e) { + } catch (\Exception $e) { Log::warning("LikePipeline: Failed to create notification for like {$like->id}: " . $e->getMessage()); } diff --git a/app/Jobs/ProfilePipeline/HandleUpdateActivity.php b/app/Jobs/ProfilePipeline/HandleUpdateActivity.php index 69129816f..0c6096ea7 100644 --- a/app/Jobs/ProfilePipeline/HandleUpdateActivity.php +++ b/app/Jobs/ProfilePipeline/HandleUpdateActivity.php @@ -44,7 +44,7 @@ class HandleUpdateActivity implements ShouldQueue return; } - if (empty($payload) || ! isset($payload['actor'])) { + if (! $payload || ! isset($payload['actor'])) { Log::info("HandleUpdateActivity: Invalid payload or missing actor, skipping job"); return; } diff --git a/app/Jobs/ProfilePipeline/ProfileMigrationMoveFollowersPipeline.php b/app/Jobs/ProfilePipeline/ProfileMigrationMoveFollowersPipeline.php index b479cf871..6e5a31bc7 100644 --- a/app/Jobs/ProfilePipeline/ProfileMigrationMoveFollowersPipeline.php +++ b/app/Jobs/ProfilePipeline/ProfileMigrationMoveFollowersPipeline.php @@ -96,7 +96,7 @@ class ProfileMigrationMoveFollowersPipeline implements ShouldBeUniqueUntilProces $followerProfile = Profile::find($follower->profile_id); (new FollowerController)->sendFollow($followerProfile, $ne); } - } catch (Exception $e) { + } catch (\Exception $e) { Log::error($e); } } diff --git a/app/Jobs/RemoteFollowPipeline/RemoteFollowImportRecent.php b/app/Jobs/RemoteFollowPipeline/RemoteFollowImportRecent.php index 394c2cfb8..8715ca157 100644 --- a/app/Jobs/RemoteFollowPipeline/RemoteFollowImportRecent.php +++ b/app/Jobs/RemoteFollowPipeline/RemoteFollowImportRecent.php @@ -15,7 +15,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Log; use Storage; -use Zttp\Zttp; +use Illuminate\Support\Facades\Http; use App\Util\ActivityPub\Helpers; use App\Services\MediaPathService; @@ -65,7 +65,7 @@ class RemoteFollowImportRecent implements ShouldQueue if(Helpers::validateUrl($url) == false) { return; } - $response = Zttp::withHeaders([ + $response = Http::withHeaders([ 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', ])->get($url); @@ -201,7 +201,7 @@ class RemoteFollowImportRecent implements ShouldQueue Log::info(count($attachments).' media found...'); if ($count !== 0) { - NewStatusPipeline::dispatch($status, $status->media->first()); + NewStatusPipeline::dispatch($status); } } @@ -232,7 +232,7 @@ class RemoteFollowImportRecent implements ShouldQueue @unlink($file); return true; - } catch (Exception $e) { + } catch (\Exception $e) { return false; } } diff --git a/app/Jobs/RemoteFollowPipeline/RemoteFollowPipeline.php b/app/Jobs/RemoteFollowPipeline/RemoteFollowPipeline.php index ead3c10ec..b2aa285e3 100644 --- a/app/Jobs/RemoteFollowPipeline/RemoteFollowPipeline.php +++ b/app/Jobs/RemoteFollowPipeline/RemoteFollowPipeline.php @@ -14,7 +14,7 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; -use Zttp\Zttp; +use Illuminate\Support\Facades\Http; class RemoteFollowPipeline implements ShouldQueue { @@ -81,7 +81,7 @@ class RemoteFollowPipeline implements ShouldQueue $handlerStack = GuzzleHttpSignatures::defaultHandlerFromContext($context); $client = new Client(['handler' => $handlerStack]); - $response = Zttp::withHeaders([ + $response = Http::withHeaders([ 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', ])->get($url); @@ -136,7 +136,7 @@ class RemoteFollowPipeline implements ShouldQueue $res = $this->response; $url = $res['inbox']; - $activity = Zttp::withHeaders(['Content-Type' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'])->post($url, [ + $activity = Http::withHeaders(['Content-Type' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'])->post($url, [ 'type' => 'Follow', 'object' => $this->follower->url(), ]); diff --git a/app/Jobs/StoryPipeline/StoryFetch.php b/app/Jobs/StoryPipeline/StoryFetch.php index 050137839..acf65d578 100644 --- a/app/Jobs/StoryPipeline/StoryFetch.php +++ b/app/Jobs/StoryPipeline/StoryFetch.php @@ -663,7 +663,7 @@ class StoryFetch implements ShouldQueue */ private function getAllowedMimeTypes(): array { - $mediaTypes = config_cache('pixelfed.media_types', 'image/jpeg,image/png'); + $mediaTypes = config_cache('pixelfed.media_types'); return array_map('trim', explode(',', $mediaTypes)); } diff --git a/app/Jobs/VideoPipeline/VideoThumbnail.php b/app/Jobs/VideoPipeline/VideoThumbnail.php index ebcb4cf7e..7d3f8a3aa 100644 --- a/app/Jobs/VideoPipeline/VideoThumbnail.php +++ b/app/Jobs/VideoPipeline/VideoThumbnail.php @@ -104,7 +104,7 @@ class VideoThumbnail implements ShouldQueue, ShouldBeUniqueUntilProcessing if(config('media.hls.enabled')) { VideoHlsPipeline::dispatch($media)->onQueue('mmo'); } - } catch (Exception $e) { + } catch (\Exception $e) { } diff --git a/app/Jobs/VideoPipeline/VideoThumbnailToCloudPipeline.php b/app/Jobs/VideoPipeline/VideoThumbnailToCloudPipeline.php index 87931bd7a..d2977a562 100644 --- a/app/Jobs/VideoPipeline/VideoThumbnailToCloudPipeline.php +++ b/app/Jobs/VideoPipeline/VideoThumbnailToCloudPipeline.php @@ -132,7 +132,7 @@ class VideoThumbnailToCloudPipeline implements ShouldQueue, ShouldBeUniqueUntilP if(str_starts_with($media->media_path, 'public/m/_v2/') && str_ends_with($media->media_path, '.mp4')) { Storage::disk('local')->delete($media->media_path); } - } catch (Exception $e) { + } catch (\Exception $e) { } if($media->status_id) { diff --git a/app/Mail/ConfirmEmail.php b/app/Mail/ConfirmEmail.php index 874f249eb..e044c967d 100644 --- a/app/Mail/ConfirmEmail.php +++ b/app/Mail/ConfirmEmail.php @@ -11,6 +11,8 @@ class ConfirmEmail extends Mailable { use Queueable, SerializesModels; + protected $verify; + /** * Create a new message instance. * diff --git a/app/Mail/PasswordChange.php b/app/Mail/PasswordChange.php index 8cade5d95..1ff256d50 100644 --- a/app/Mail/PasswordChange.php +++ b/app/Mail/PasswordChange.php @@ -11,6 +11,8 @@ class PasswordChange extends Mailable { use Queueable, SerializesModels; + protected $user; + /** * Create a new message instance. * diff --git a/app/Observers/StatusHashtagObserver.php b/app/Observers/StatusHashtagObserver.php index cac223d51..75b611935 100644 --- a/app/Observers/StatusHashtagObserver.php +++ b/app/Observers/StatusHashtagObserver.php @@ -45,7 +45,7 @@ class StatusHashtagObserver implements ShouldHandleEventsAfterCommit */ public function deleted(StatusHashtag $hashtag) { - StatusHashtagService::del($hashtag->hashtag_id, $hashtag->status_id); + StatusHashtagService::del($hashtag->hashtag_id); DB::table('hashtags')->where('id', $hashtag->hashtag_id)->decrement('cached_count'); if($hashtag->status_visibility && $hashtag->status_visibility === 'public') { HashtagRemoveFanoutPipeline::dispatch($hashtag->status_id, $hashtag->hashtag_id)->onQueue('feed'); @@ -71,6 +71,6 @@ class StatusHashtagObserver implements ShouldHandleEventsAfterCommit */ public function forceDeleted(StatusHashtag $hashtag) { - StatusHashtagService::del($hashtag->hashtag_id, $hashtag->status_id); + StatusHashtagService::del($hashtag->hashtag_id); } } diff --git a/app/Rules/ExpoPushTokenRule.php b/app/Rules/ExpoPushTokenRule.php index 27fb9670b..2e9e3ff58 100644 --- a/app/Rules/ExpoPushTokenRule.php +++ b/app/Rules/ExpoPushTokenRule.php @@ -14,7 +14,7 @@ class ExpoPushTokenRule implements ValidationRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { - if (! $value || empty($value)) { + if (! $value) { $fail('The :attribute must not be empty.'); } diff --git a/app/Services/Account/RemoteAuthService.php b/app/Services/Account/RemoteAuthService.php index 4412352a5..a34ee4cdf 100644 --- a/app/Services/Account/RemoteAuthService.php +++ b/app/Services/Account/RemoteAuthService.php @@ -42,7 +42,7 @@ class RemoteAuthService return false; } catch (ConnectionException $e) { return false; - } catch (Exception $e) { + } catch (\Exception $e) { return false; } @@ -129,7 +129,7 @@ class RemoteAuthService return false; } catch (ConnectionException $e) { return false; - } catch (Exception $e) { + } catch (\Exception $e) { return false; } $json = $res->json(); @@ -153,7 +153,7 @@ class RemoteAuthService return false; } catch (ConnectionException $e) { return false; - } catch (Exception $e) { + } catch (\Exception $e) { return false; } $json = $res->json(); @@ -182,7 +182,7 @@ class RemoteAuthService return; } catch (ConnectionException $e) { return; - } catch (Exception $e) { + } catch (\Exception $e) { return; } diff --git a/app/Services/ActivityPubFetchService.php b/app/Services/ActivityPubFetchService.php index 761be5c77..a15576716 100644 --- a/app/Services/ActivityPubFetchService.php +++ b/app/Services/ActivityPubFetchService.php @@ -105,7 +105,7 @@ class ActivityPubFetchService return; } catch (ConnectionException $e) { return; - } catch (Exception $e) { + } catch (\Exception $e) { return; } diff --git a/app/Services/AutospamService.php b/app/Services/AutospamService.php index 3164d14d0..ff3c7cb5e 100644 --- a/app/Services/AutospamService.php +++ b/app/Services/AutospamService.php @@ -73,7 +73,7 @@ class AutospamService return Cache::remember(self::MODEL_CACHE_KEY, 86400, function () { $res = Storage::get(self::MODEL_FILE_PATH); - if (! $res || empty($res)) { + if (! $res) { return null; } diff --git a/app/Services/AvatarService.php b/app/Services/AvatarService.php index af578fdef..38bfb82d4 100644 --- a/app/Services/AvatarService.php +++ b/app/Services/AvatarService.php @@ -10,6 +10,7 @@ use App\Profile; use App\Jobs\AvatarPipeline\AvatarStorageLargePurge; use League\Flysystem\UnableToCheckDirectoryExistence; use League\Flysystem\UnableToRetrieveMetadata; +use Exception; class AvatarService { diff --git a/app/Services/CollectionService.php b/app/Services/CollectionService.php index ae9ea8112..e3622f6e0 100644 --- a/app/Services/CollectionService.php +++ b/app/Services/CollectionService.php @@ -131,7 +131,7 @@ class CollectionService public static function getThumb($id) { $item = self::getItems($id, 0, 1); - if(!$item || empty($item)) { + if(!$item) { return url('/storage/no-preview.png'); } $status = StatusService::get($item[0]); diff --git a/app/Services/ConfigCacheService.php b/app/Services/ConfigCacheService.php index 527c86026..c38e2024d 100644 --- a/app/Services/ConfigCacheService.php +++ b/app/Services/ConfigCacheService.php @@ -4,6 +4,7 @@ namespace App\Services; use App\Models\ConfigCache as ConfigCacheModel; use Cache; +use Exception; use Illuminate\Database\QueryException; class ConfigCacheService diff --git a/app/Services/FetchCacheService.php b/app/Services/FetchCacheService.php index 2e23fb009..4c96410d3 100644 --- a/app/Services/FetchCacheService.php +++ b/app/Services/FetchCacheService.php @@ -62,7 +62,7 @@ class FetchCacheService Cache::put($key, 1, $ttl); return false; - } catch (Exception $e) { + } catch (\Exception $e) { Cache::put($key, 1, $ttl); return false; diff --git a/app/Services/FilesystemService.php b/app/Services/FilesystemService.php index b52f002f4..a10aad188 100644 --- a/app/Services/FilesystemService.php +++ b/app/Services/FilesystemService.php @@ -12,6 +12,8 @@ use League\Flysystem\FilesystemException; use League\Flysystem\UnableToListContents; use League\Flysystem\FileAttributes; use League\Flysystem\UnableToWriteFile; +use League\Flysystem\UnableToReadFile; +use League\Flysystem\UnableToDeleteFile; class FilesystemService { diff --git a/app/Services/GroupService.php b/app/Services/GroupService.php index ac1a1a1c6..e55d3e206 100644 --- a/app/Services/GroupService.php +++ b/app/Services/GroupService.php @@ -28,7 +28,7 @@ class GroupService $res = Cache::remember( self::key($id), 1209600, - function() use($id, $pid) { + function() use($id) { $group = (new Group)->withoutRelations()->whereNull('status')->find($id); if(!$group) { diff --git a/app/Services/Groups/GroupPostService.php b/app/Services/Groups/GroupPostService.php index a043be134..767260134 100644 --- a/app/Services/Groups/GroupPostService.php +++ b/app/Services/Groups/GroupPostService.php @@ -9,6 +9,8 @@ use League\Fractal; use League\Fractal\Serializer\ArraySerializer; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use App\Transformer\Api\GroupPostTransformer; +use Illuminate\Http\Request; +use App\Models\Group; class GroupPostService { diff --git a/app/Services/InstanceService.php b/app/Services/InstanceService.php index 85ffe714a..c477c3296 100644 --- a/app/Services/InstanceService.php +++ b/app/Services/InstanceService.php @@ -6,6 +6,7 @@ use App\Instance; use App\Util\Blurhash\Blurhash; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Storage; class InstanceService { diff --git a/app/Services/Internal/BeagleService.php b/app/Services/Internal/BeagleService.php index 0f284e93c..e22bfdfa5 100644 --- a/app/Services/Internal/BeagleService.php +++ b/app/Services/Internal/BeagleService.php @@ -31,7 +31,7 @@ class BeagleService return; } catch (ConnectionException $e) { return; - } catch (Exception $e) { + } catch (\Exception $e) { return; } @@ -72,7 +72,7 @@ class BeagleService return; } catch (ConnectionException $e) { return; - } catch (Exception $e) { + } catch (\Exception $e) { return; } diff --git a/app/Services/Internal/SoftwareUpdateService.php b/app/Services/Internal/SoftwareUpdateService.php index 492596bf7..46fd4124f 100644 --- a/app/Services/Internal/SoftwareUpdateService.php +++ b/app/Services/Internal/SoftwareUpdateService.php @@ -60,7 +60,7 @@ class SoftwareUpdateService return; } catch (ConnectionException $e) { return; - } catch (Exception $e) { + } catch (\Exception $e) { return; } diff --git a/app/Services/LandingService.php b/app/Services/LandingService.php index f70f3d41a..798d1935b 100644 --- a/app/Services/LandingService.php +++ b/app/Services/LandingService.php @@ -74,10 +74,10 @@ class LandingService 'uploader' => [ 'max_photo_size' => (int) (config_cache('pixelfed.max_photo_size') * 1024), 'max_caption_length' => (int) config_cache('pixelfed.max_caption_length'), - 'max_altext_length' => (int) config_cache('pixelfed.max_altext_length', 150), + 'max_altext_length' => (int) config_cache('pixelfed.max_altext_length'), 'album_limit' => (int) config_cache('pixelfed.max_album_length'), 'image_quality' => (int) config_cache('pixelfed.image_quality'), - 'max_collection_length' => (int) config('pixelfed.max_collection_length', 18), + 'max_collection_length' => (int) config('pixelfed.max_collection_length'), 'optimize_image' => (bool) config_cache('pixelfed.optimize_image'), 'optimize_video' => (bool) config_cache('pixelfed.optimize_video'), 'media_types' => config_cache('pixelfed.media_types'), diff --git a/app/Services/NotificationAppGatewayService.php b/app/Services/NotificationAppGatewayService.php index c22d2c2e2..e8b2e9624 100644 --- a/app/Services/NotificationAppGatewayService.php +++ b/app/Services/NotificationAppGatewayService.php @@ -23,7 +23,7 @@ class NotificationAppGatewayService } $apiKey = config('instance.notifications.nag.api_key'); - if (! $apiKey || empty($apiKey) || strlen($apiKey) !== 45) { + if (! $apiKey || strlen($apiKey) !== 45) { return false; } @@ -64,7 +64,7 @@ class NotificationAppGatewayService public static function isValidExpoPushToken($token) { - if (! $token || empty($token)) { + if (! $token) { return false; } @@ -89,19 +89,19 @@ class NotificationAppGatewayService return false; } - if (! $userToken || empty($userToken) || ! self::isValidExpoPushToken($userToken)) { + if (! $userToken || ! self::isValidExpoPushToken($userToken)) { return false; } $types = PushNotificationService::NOTIFY_TYPES; - if (! $type || empty($type) || ! in_array($type, $types)) { + if (! $type || ! in_array($type, $types)) { return false; } $apiKey = config('instance.notifications.nag.api_key'); - if (! $apiKey || empty($apiKey)) { + if (! $apiKey) { return false; } $url = 'https://'.config('instance.notifications.nag.endpoint').'/api/v1/relay/deliver'; diff --git a/app/Services/ResilientMediaStorageService.php b/app/Services/ResilientMediaStorageService.php index f087cef05..e84bcda3b 100644 --- a/app/Services/ResilientMediaStorageService.php +++ b/app/Services/ResilientMediaStorageService.php @@ -9,6 +9,7 @@ use GuzzleHttp\Exception\ClientException; use Aws\S3\Exception\S3Exception; use GuzzleHttp\Exception\ConnectException; use League\Flysystem\UnableToWriteFile; +use Illuminate\Support\Facades\Log; class ResilientMediaStorageService { @@ -34,7 +35,7 @@ class ResilientMediaStorageService public static function handleResilientStore($storagePath, $path, $name) { $attempts = 0; - return retry(4, function() use($storagePath, $path, $name, $attempts) { + return retry(4, function() use($storagePath, $path, $name) { self::$attempts++; usleep(100000); $baseDisk = self::$attempts > 1 ? self::getAltDriver() : config('filesystems.cloud'); diff --git a/app/Services/StoryIndexService.php b/app/Services/StoryIndexService.php index 6be1aad9b..cb392452e 100644 --- a/app/Services/StoryIndexService.php +++ b/app/Services/StoryIndexService.php @@ -238,7 +238,10 @@ class StoryIndexService { $lockKey = $this->rebuildLockKey(); - $lockAcquired = Redis::set($lockKey, '1', 'EX', self::REBUILD_LOCK_TTL, 'NX'); + $lockAcquired = Redis::setnx($lockKey, '1'); + if ($lockAcquired) { + Redis::expire($lockKey, self::REBUILD_LOCK_TTL); + } if (! $lockAcquired) { return ['status' => 'already_rebuilding', 'message' => 'Index rebuild already in progress']; diff --git a/app/Services/WebfingerService.php b/app/Services/WebfingerService.php index ca5e7d667..f97ed8d68 100644 --- a/app/Services/WebfingerService.php +++ b/app/Services/WebfingerService.php @@ -20,7 +20,7 @@ class WebfingerService if (! $n) { return false; } - if (empty($n) || ! str_starts_with($n, 'https://')) { + if (! str_starts_with($n, 'https://')) { return false; } $host = parse_url($n, PHP_URL_HOST); diff --git a/app/Util/ActivityPub/DiscoverActor.php b/app/Util/ActivityPub/DiscoverActor.php index 6680d944d..4e41cf059 100644 --- a/app/Util/ActivityPub/DiscoverActor.php +++ b/app/Util/ActivityPub/DiscoverActor.php @@ -2,7 +2,7 @@ namespace App\Util\ActivityPub; -use Zttp\Zttp; +use Illuminate\Support\Facades\Http; class DiscoverActor { @@ -17,7 +17,7 @@ class DiscoverActor public function fetch() { - $res = Zttp::withHeaders([ + $res = Http::withHeaders([ 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', 'User-Agent' => 'PixelfedBot - https://pixelfed.org', ])->get($this->url); diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index 84b62f906..11cafddd4 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -182,7 +182,7 @@ class Helpers return $uri->toString(); - } catch (UriException $e) { + } catch (UriException|\Exception $e) { return false; } } @@ -302,7 +302,7 @@ class Helpers $uri = Uri::new($url); $host = $uri->getHost(); - if (! $host || empty($host)) { + if (! $host) { return false; } @@ -338,7 +338,7 @@ class Helpers return Cache::remember($key, $ttl, function () use ($url) { $res = ActivityPubFetchService::get($url); - if (! $res || empty($res)) { + if (! $res) { return false; } $res = json_decode($res, true, 8); @@ -477,7 +477,6 @@ class Helpers public static function isValidStatusData(?array $res): bool { return $res && - ! empty($res) && ! isset($res['error']) && isset($res['@context']) && isset($res['published']); diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index b84ec8140..9db018196 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -30,6 +30,8 @@ use App\Services\AccountService; use App\Services\FollowerService; use App\Services\NotificationAppGatewayService; use App\Services\PollService; +use App\Models\PollVote; +use App\User; use App\Services\PushNotificationService; use App\Services\ReblogService; use App\Services\RelationshipService; @@ -473,7 +475,7 @@ class Inbox ] ); - if (count($activity['attachment'])) { + if (count($activity['attachment'] ?? [])) { $photos = 0; $videos = 0; $allowed = explode(',', config_cache('pixelfed.media_types')); diff --git a/app/Util/Lexer/Classifier.php b/app/Util/Lexer/Classifier.php index 61f7b694c..0a233fb97 100644 --- a/app/Util/Lexer/Classifier.php +++ b/app/Util/Lexer/Classifier.php @@ -39,7 +39,6 @@ class Classifier public function tokenize(string $string): Collection { if ($this->tokenizer) { - /** @var array */ $tokens = call_user_func($this->tokenizer, $string); return collect($tokens); diff --git a/composer.json b/composer.json index 084182c7f..cd428dbf9 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "license": "AGPL-3.0-only", "type": "project", "require": { - "php": "^8.2|^8.3|^8.4", + "php": "^8.3|^8.4", "ext-bcmath": "*", "ext-ctype": "*", "ext-curl": "*", @@ -16,9 +16,10 @@ "bacon/bacon-qr-code": "^3.0", "brick/math": "^0.11", "buzz/laravel-h-captcha": "^1.0.4", - "doctrine/dbal": "^3.0", "endroid/qr-code": "^6.0", + "guzzlehttp/guzzle": "^7.10", "intervention/image": "^3.11.2", + "intervention/image-driver-vips": "^1.0", "jenssegers/agent": "^2.6", "laravel-notification-channels/expo": "^2.0.0", "laravel-notification-channels/webpush": "^10.2", @@ -33,8 +34,9 @@ "league/iso3166": "^2.1|^4.0", "league/oauth2-client": "^2.8", "league/uri": "^7.4", + "nesbot/carbon": "^3.10", "pbmedia/laravel-ffmpeg": "^8.0", - "phpseclib/phpseclib": "~2.0", + "phpseclib/phpseclib": "~3.0", "pixelfed/fractal": "^0.18.0", "pixelfed/laravel-snowflake": "^2.0", "pragmarx/google2fa": "^8.0", diff --git a/composer.lock b/composer.lock index 142a4a22e..7f36813c2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d4d3258bc9d1e7e2dc5f5e93bced6384", + "content-hash": "1d3b4afc0a00a1eadb2bddc3be9211c9", "packages": [ { "name": "aws/aws-crt-php", @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.352.1", + "version": "3.359.9", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "d25aec970dbf6af823b30d11d5c8cd73ef8a0a4c" + "reference": "754b25dae2f50b568b55735931a3cd73263ac5ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d25aec970dbf6af823b30d11d5c8cd73ef8a0a4c", - "reference": "d25aec970dbf6af823b30d11d5c8cd73ef8a0a4c", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/754b25dae2f50b568b55735931a3cd73263ac5ae", + "reference": "754b25dae2f50b568b55735931a3cd73263ac5ae", "shasum": "" }, "require": { @@ -84,7 +84,7 @@ "guzzlehttp/psr7": "^2.4.5", "mtdowling/jmespath.php": "^2.8.0", "php": ">=8.1", - "psr/http-message": "^2.0" + "psr/http-message": "^1.0 || ^2.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", @@ -153,9 +153,9 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.352.1" + "source": "https://github.com/aws/aws-sdk-php/tree/3.359.9" }, - "time": "2025-08-04T18:19:17+00:00" + "time": "2025-11-10T19:14:56+00:00" }, { "name": "bacon/bacon-qr-code", @@ -328,26 +328,26 @@ }, { "name": "carbonphp/carbon-doctrine-types", - "version": "2.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/dbal": "<3.7.0 || >=4.0.0" + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "doctrine/dbal": "^3.7.0", + "doctrine/dbal": "^4.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -377,7 +377,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { @@ -393,20 +393,20 @@ "type": "tidelift" } ], - "time": "2023-12-11T17:09:12+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "dasprid/enum", - "version": "1.0.6", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, "require": { @@ -441,9 +441,9 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2024-08-09T14:30:48+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { "name": "defuse/php-encryption", @@ -587,288 +587,34 @@ }, "time": "2024-07-08T12:26:09+00:00" }, - { - "name": "doctrine/dbal", - "version": "3.10.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "1cf840d696373ea0d58ad0a8875c0fadcfc67214" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/1cf840d696373ea0d58ad0a8875c0fadcfc67214", - "reference": "1cf840d696373ea0d58ad0a8875c0fadcfc67214", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "conflict": { - "doctrine/cache": "< 1.11" - }, - "require-dev": { - "doctrine/cache": "^1.11|^2.0", - "doctrine/coding-standard": "13.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.17", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.23", - "slevomat/coding-standard": "8.16.2", - "squizlabs/php_codesniffer": "3.13.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.10.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2025-07-10T21:11:04+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" - }, - "dist": { - "type": "zip", - "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 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" - }, - "time": "2025-04-07T20:06:18+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2024-05-22T20:47:39+00:00" - }, { "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/", @@ -913,7 +659,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": [ { @@ -929,7 +675,7 @@ "type": "tidelift" } ], - "time": "2024-02-18T20:23:39+00:00" + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/lexer", @@ -1010,26 +756,26 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.5.2", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/a8af23a8e9d622505baa2997465782cbe8bb7fc7", + "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^12", - "ergebnis/phpunit-slow-test-detector": "^2.14", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "doctrine/coding-standard": "^14", + "ergebnis/phpunit-slow-test-detector": "^2.20", + "phpstan/phpstan": "^2.1.31", + "phpunit/phpunit": "^10.5.58" }, "bin": [ "bin/sql-formatter" @@ -1059,35 +805,34 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.3" }, - "time": "2025-01-24T11:45:48+00:00" + "time": "2025-10-26T09:35:14+00:00" }, { "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": { @@ -1118,7 +863,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": [ { @@ -1126,7 +871,7 @@ "type": "github" } ], - "time": "2024-10-09T13:47:03+00:00" + "time": "2025-10-31T18:51:33+00:00" }, { "name": "egulias/email-validator", @@ -1316,20 +1061,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.18.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1371,9 +1116,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" }, - "time": "2024-11-01T03:51:45+00:00" + "time": "2025-10-17T16:34:55+00:00" }, { "name": "firebase/php-jwt", @@ -1573,22 +1318,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.3", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "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" @@ -1679,7 +1424,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1695,20 +1440,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:37:11+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1716,7 +1461,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": { @@ -1762,7 +1507,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.2.0" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -1778,20 +1523,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:27:01+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { @@ -1807,7 +1552,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" @@ -1878,7 +1623,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.1" + "source": "https://github.com/guzzle/psr7/tree/2.8.0" }, "funding": [ { @@ -1894,20 +1639,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T12:30:47+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": { @@ -1916,7 +1661,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", @@ -1964,7 +1709,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": [ { @@ -1980,7 +1725,7 @@ "type": "tidelift" } ], - "time": "2025-02-03T10:55:03+00:00" + "time": "2025-08-22T14:27:06+00:00" }, { "name": "intervention/gif", @@ -2126,18 +1871,92 @@ ], "time": "2025-07-30T13:13:19+00:00" }, + { + "name": "intervention/image-driver-vips", + "version": "1.0.10", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image-driver-vips.git", + "reference": "da09b4ce34ea7b023688f4a00c288b6ff47c5b21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image-driver-vips/zipball/da09b4ce34ea7b023688f4a00c288b6ff47c5b21", + "reference": "da09b4ce34ea7b023688f4a00c288b6ff47c5b21", + "shasum": "" + }, + "require": { + "intervention/image": "^3.11.0", + "jcupitt/vips": "^2.4", + "php": "^8.1" + }, + "require-dev": { + "ext-fileinfo": "*", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Intervention\\Image\\Drivers\\Vips\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + }, + { + "name": "Thomas Picquet", + "email": "thomas@sctr.net" + } + ], + "description": "libvips driver for Intervention Image", + "homepage": "https://image.intervention.io/", + "keywords": [ + "image", + "libvips", + "vips" + ], + "support": { + "issues": "https://github.com/Intervention/image-driver-vips/issues", + "source": "https://github.com/Intervention/image-driver-vips/tree/1.0.10" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + }, + { + "url": "https://ko-fi.com/interventionphp", + "type": "ko_fi" + } + ], + "time": "2025-10-15T15:19:56+00:00" + }, { "name": "jaybizzle/crawler-detect", - "version": "v1.3.5", + "version": "v1.3.6", "source": { "type": "git", "url": "https://github.com/JayBizzle/Crawler-Detect.git", - "reference": "fbf1a3e81d61b088e7af723fb3c7a4ee92ac7e34" + "reference": "61f2ef1ad2d0ae922c265931cb0a8032a1ed2813" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/fbf1a3e81d61b088e7af723fb3c7a4ee92ac7e34", - "reference": "fbf1a3e81d61b088e7af723fb3c7a4ee92ac7e34", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/61f2ef1ad2d0ae922c265931cb0a8032a1ed2813", + "reference": "61f2ef1ad2d0ae922c265931cb0a8032a1ed2813", "shasum": "" }, "require": { @@ -2174,9 +1993,70 @@ ], "support": { "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", - "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.3.5" + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.3.6" }, - "time": "2025-06-11T17:58:05+00:00" + "time": "2025-09-30T16:22:43+00:00" + }, + { + "name": "jcupitt/vips", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/libvips/php-vips.git", + "reference": "a54c1cceea581b592a199edd61a7c06f44a24c08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libvips/php-vips/zipball/a54c1cceea581b592a199edd61a7c06f44a24c08", + "reference": "a54c1cceea581b592a199edd61a7c06f44a24c08", + "shasum": "" + }, + "require": { + "ext-ffi": "*", + "php": ">=7.4", + "psr/log": "^1.1.3|^2.0|^3.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpdocumentor/shim": "^3.3", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jcupitt\\Vips\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Cupitt", + "email": "jcupitt@gmail.com", + "homepage": "https://github.com/jcupitt", + "role": "Developer" + } + ], + "description": "A high-level interface to the libvips image processing library.", + "homepage": "https://github.com/libvips/php-vips", + "keywords": [ + "image", + "libvips", + "processing" + ], + "support": { + "issues": "https://github.com/libvips/php-vips/issues", + "source": "https://github.com/libvips/php-vips/tree/v2.5.0" + }, + "time": "2025-04-04T17:10:13+00:00" }, { "name": "jenssegers/agent", @@ -2393,20 +2273,20 @@ }, { "name": "laravel/framework", - "version": "v12.21.0", + "version": "v12.37.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "ac8c4e73bf1b5387b709f7736d41427e6af1c93b" + "reference": "3c3c4ad30f5b528b164a7c09aa4ad03118c4c125" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ac8c4e73bf1b5387b709f7736d41427e6af1c93b", - "reference": "ac8c4e73bf1b5387b709f7736d41427e6af1c93b", + "url": "https://api.github.com/repos/laravel/framework/zipball/3c3c4ad30f5b528b164a7c09aa4ad03118c4c125", + "reference": "3c3c4ad30f5b528b164a7c09aa4ad03118c4c125", "shasum": "" }, "require": { - "brick/math": "^0.11|^0.12|^0.13", + "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", @@ -2442,7 +2322,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", @@ -2478,6 +2360,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", @@ -2510,7 +2393,8 @@ "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", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^10.7.0", "pda/pheanstalk": "^5.0.6|^7.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", @@ -2535,7 +2419,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).", @@ -2604,20 +2488,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-07-22T15:41:55+00:00" + "time": "2025-11-04T15:39:33+00:00" }, { "name": "laravel/helpers", - "version": "v1.7.2", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/laravel/helpers.git", - "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70" + "reference": "d0094b4bc4364560c8ee3a9e956596d760d4afab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/helpers/zipball/672d79d5b5f65dc821e57783fa11f22c4d762d70", - "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70", + "url": "https://api.github.com/repos/laravel/helpers/zipball/d0094b4bc4364560c8ee3a9e956596d760d4afab", + "reference": "d0094b4bc4364560c8ee3a9e956596d760d4afab", "shasum": "" }, "require": { @@ -2659,22 +2543,22 @@ "laravel" ], "support": { - "source": "https://github.com/laravel/helpers/tree/v1.7.2" + "source": "https://github.com/laravel/helpers/tree/v1.8.1" }, - "time": "2025-01-24T15:41:25+00:00" + "time": "2025-09-02T15:31:25+00:00" }, { "name": "laravel/horizon", - "version": "v5.33.1", + "version": "v5.39.0", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "50057bca1f1dcc9fbd5ff6d65143833babd784b3" + "reference": "bf8f5242f48cff5870e7b30620d872077effe9da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/50057bca1f1dcc9fbd5ff6d65143833babd784b3", - "reference": "50057bca1f1dcc9fbd5ff6d65143833babd784b3", + "url": "https://api.github.com/repos/laravel/horizon/zipball/bf8f5242f48cff5870e7b30620d872077effe9da", + "reference": "bf8f5242f48cff5870e7b30620d872077effe9da", "shasum": "" }, "require": { @@ -2695,13 +2579,13 @@ "require-dev": { "mockery/mockery": "^1.0", "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.0|^10.4|^11.5", - "predis/predis": "^1.1|^2.0" + "phpstan/phpstan": "^1.10|^2.0", + "phpunit/phpunit": "^9.0|^10.4|^11.5|^12.0", + "predis/predis": "^1.1|^2.0|^3.0" }, "suggest": { "ext-redis": "Required to use the Redis PHP driver.", - "predis/predis": "Required when not using the Redis PHP driver (^1.1|^2.0)." + "predis/predis": "Required when not using the Redis PHP driver (^1.1|^2.0|^3.0)." }, "type": "library", "extra": { @@ -2739,9 +2623,9 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.33.1" + "source": "https://github.com/laravel/horizon/tree/v5.39.0" }, - "time": "2025-06-16T13:48:30+00:00" + "time": "2025-11-04T14:35:53+00:00" }, { "name": "laravel/passport", @@ -2821,16 +2705,16 @@ }, { "name": "laravel/prompts", - "version": "v0.3.6", + "version": "v0.3.7", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077" + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a1891d362714bc40c8d23b0b1d7090f022ea27cc", + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc", "shasum": "" }, "require": { @@ -2847,8 +2731,8 @@ "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" + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -2874,9 +2758,9 @@ "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.6" + "source": "https://github.com/laravel/prompts/tree/v0.3.7" }, - "time": "2025-07-07T14:17:42+00:00" + "time": "2025-09-19T13:47:56+00:00" }, { "name": "laravel/pulse", @@ -2967,16 +2851,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v2.0.4", + "version": "v2.0.6", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" + "reference": "038ce42edee619599a1debb7e81d7b3759492819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/038ce42edee619599a1debb7e81d7b3759492819", + "reference": "038ce42edee619599a1debb7e81d7b3759492819", "shasum": "" }, "require": { @@ -3024,7 +2908,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-03-19T13:51:03+00:00" + "time": "2025-10-09T13:42:30+00:00" }, { "name": "laravel/tinker", @@ -3157,34 +3041,34 @@ }, { "name": "lcobucci/clock", - "version": "3.3.1", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" + "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", - "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/a3139d9e97d47826f27e6a17bb63f13621f86058", + "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.3.0 || ~8.4.0 || ~8.5.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.29", - "lcobucci/coding-standard": "^11.1.0", + "infection/infection": "^0.31", + "lcobucci/coding-standard": "^11.2.0", "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.10.25", - "phpstan/phpstan-deprecation-rules": "^1.1.3", - "phpstan/phpstan-phpunit": "^1.3.13", - "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^11.3.6" + "phpstan/phpstan": "^2.0.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0.0", + "phpstan/phpstan-strict-rules": "^2.0.0", + "phpunit/phpunit": "^12.0.0" }, "type": "library", "autoload": { @@ -3205,7 +3089,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.3.1" + "source": "https://github.com/lcobucci/clock/tree/3.5.0" }, "funding": [ { @@ -3217,26 +3101,26 @@ "type": "patreon" } ], - "time": "2024-09-24T20:45:14+00:00" + "time": "2025-10-27T09:03:17+00:00" }, { "name": "lcobucci/jwt", - "version": "5.5.0", + "version": "5.6.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "a835af59b030d3f2967725697cf88300f579088e" + "reference": "bb3e9f21e4196e8afc41def81ef649c164bca25e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a835af59b030d3f2967725697cf88300f579088e", - "reference": "a835af59b030d3f2967725697cf88300f579088e", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/bb3e9f21e4196e8afc41def81ef649c164bca25e", + "reference": "bb3e9f21e4196e8afc41def81ef649c164bca25e", "shasum": "" }, "require": { "ext-openssl": "*", "ext-sodium": "*", - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "psr/clock": "^1.0" }, "require-dev": { @@ -3278,7 +3162,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/5.5.0" + "source": "https://github.com/lcobucci/jwt/tree/5.6.0" }, "funding": [ { @@ -3290,7 +3174,7 @@ "type": "patreon" } ], - "time": "2025-01-26T21:29:45+00:00" + "time": "2025-10-17T11:30:53+00:00" }, { "name": "league/commonmark", @@ -3537,16 +3421,16 @@ }, { "name": "league/flysystem", - "version": "3.30.0", + "version": "3.30.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e" + "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", + "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", "shasum": "" }, "require": { @@ -3614,22 +3498,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.30.2" }, - "time": "2025-06-25T13:29:59+00:00" + "time": "2025-11-10T17:13:11+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.29.0", + "version": "3.30.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" + "reference": "d286e896083bed3190574b8b088b557b59eb66f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d286e896083bed3190574b8b088b557b59eb66f5", + "reference": "d286e896083bed3190574b8b088b557b59eb66f5", "shasum": "" }, "require": { @@ -3669,22 +3553,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.30.1" }, - "time": "2024-08-17T13:10:48+00:00" + "time": "2025-10-20T15:27:33+00:00" }, { "name": "league/flysystem-local", - "version": "3.30.0", + "version": "3.30.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d", + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d", "shasum": "" }, "require": { @@ -3718,9 +3602,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2" }, - "time": "2025-05-21T10:34:19+00:00" + "time": "2025-11-10T11:23:37+00:00" }, { "name": "league/iso3166", @@ -4546,16 +4430,16 @@ }, { "name": "nesbot/carbon", - "version": "3.10.2", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24" + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24", - "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", "shasum": "" }, "require": { @@ -4573,13 +4457,13 @@ "require-dev": { "doctrine/dbal": "^3.6.3 || ^4.0", "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.75.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", "phpmd/phpmd": "^2.15.0", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.17", - "phpunit/phpunit": "^10.5.46", - "squizlabs/php_codesniffer": "^3.13.0" + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4" }, "bin": [ "bin/carbon" @@ -4647,29 +4531,29 @@ "type": "tidelift" } ], - "time": "2025-08-02T09:36:06+00:00" + "time": "2025-09-06T13:39:36+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", @@ -4679,6 +4563,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -4707,35 +4594,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.7", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2" + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2", + "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", "shasum": "" }, "require": { - "php": "8.0 - 8.4" + "php": "8.0 - 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": { @@ -4753,6 +4640,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -4793,22 +4683,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.7" + "source": "https://github.com/nette/utils/tree/v4.0.8" }, - "time": "2025-06-03T04:55:08+00:00" + "time": "2025-08-06T21:43:34+00:00" }, { "name": "nikic/php-parser", - "version": "v5.6.0", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56" + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/221b0d0fdf1369c71047ad1d18bb5880017bbc56", - "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", "shasum": "" }, "require": { @@ -4827,7 +4717,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -4851,37 +4741,37 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" }, - "time": "2025-07-27T20:03:57+00:00" + "time": "2025-10-21T19:32:17+00:00" }, { "name": "nunomaduro/termwind", - "version": "v2.3.1", + "version": "v2.3.2", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123" + "reference": "eb61920a53057a7debd718a5b89c2178032b52c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/eb61920a53057a7debd718a5b89c2178032b52c0", + "reference": "eb61920a53057a7debd718a5b89c2178032b52c0", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.2.6" + "symfony/console": "^7.3.4" }, "require-dev": { - "illuminate/console": "^11.44.7", - "laravel/pint": "^1.22.0", + "illuminate/console": "^11.46.1", + "laravel/pint": "^1.25.1", "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.2", - "phpstan/phpstan": "^1.12.25", + "pestphp/pest": "^2.36.0 || ^3.8.4", + "phpstan/phpstan": "^1.12.32", "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.2.6", + "symfony/var-dumper": "^7.3.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4924,7 +4814,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.2" }, "funding": [ { @@ -4940,7 +4830,7 @@ "type": "github" } ], - "time": "2025-05-08T08:14:37+00:00" + "time": "2025-10-18T11:10:27+00:00" }, { "name": "nyholm/psr7", @@ -5022,24 +4912,26 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v3.0.0", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", "shasum": "" }, "require": { "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^9", - "vimeo/psalm": "^4|^5" + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" }, "type": "library", "autoload": { @@ -5085,7 +4977,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2024-05-08T12:36:18+00:00" + "time": "2025-09-24T15:06:41+00:00" }, { "name": "paragonie/random_compat", @@ -5139,16 +5031,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v2.1.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb" + "reference": "547e2dc4d45107440e76c17ab5a46e4252460158" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a673d5f310477027cead2e2f2b6db5d8368157cb", - "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/547e2dc4d45107440e76c17ab5a46e4252460158", + "reference": "547e2dc4d45107440e76c17ab5a46e4252460158", "shasum": "" }, "require": { @@ -5156,8 +5048,10 @@ "php-64bit": "*" }, "require-dev": { - "phpunit/phpunit": "^7|^8|^9", - "vimeo/psalm": "^4|^5" + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^7|^8|^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" }, "suggest": { "ext-sodium": "Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." @@ -5171,7 +5065,10 @@ "autoload": { "files": [ "autoload.php" - ] + ], + "psr-4": { + "ParagonIE\\Sodium\\": "namespaced/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5224,9 +5121,9 @@ ], "support": { "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v2.1.0" + "source": "https://github.com/paragonie/sodium_compat/tree/v2.4.0" }, - "time": "2024-09-04T12:51:01+00:00" + "time": "2025-10-06T08:47:40+00:00" }, { "name": "pbmedia/laravel-ffmpeg", @@ -5398,16 +5295,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.3", + "version": "1.9.4", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d" }, "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/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", + "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", "shasum": "" }, "require": { @@ -5415,7 +5312,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": { @@ -5457,7 +5354,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.4" }, "funding": [ { @@ -5469,36 +5366,36 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:41:07+00:00" + "time": "2025-08-21T11:53:16+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.48", + "version": "3.0.47", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61" + "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/eaa7be704b8b93a6913b69eb7f645a59d7731b61", - "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9d6ca36a6c2dd434765b1071b2644a1c683b385d", + "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d", "shasum": "" }, "require": { - "php": ">=5.3.3" + "paragonie/constant_time_encoding": "^1|^2|^3", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": ">=5.6.1" }, "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "*" }, "suggest": { + "ext-dom": "Install the DOM extension to load XML formatted public keys.", "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.", - "ext-xml": "Install the XML extension to load XML formatted public keys." + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, "type": "library", "autoload": { @@ -5506,7 +5403,7 @@ "phpseclib/bootstrap.php" ], "psr-4": { - "phpseclib\\": "phpseclib/" + "phpseclib3\\": "phpseclib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5563,7 +5460,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.48" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.47" }, "funding": [ { @@ -5579,7 +5476,7 @@ "type": "tidelift" } ], - "time": "2024-12-14T21:03:54+00:00" + "time": "2025-10-06T01:07:24+00:00" }, { "name": "pixelfed/fractal", @@ -6284,16 +6181,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.10", + "version": "v0.12.14", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22" + "reference": "95c29b3756a23855a30566b745d218bee690bef2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/95c29b3756a23855a30566b745d218bee690bef2", + "reference": "95c29b3756a23855a30566b745d218bee690bef2", "shasum": "" }, "require": { @@ -6308,11 +6205,12 @@ "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": [ @@ -6356,9 +6254,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.10" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.14" }, - "time": "2025-08-04T12:39:37+00:00" + "time": "2025-10-27T17:15:31+00:00" }, { "name": "pusher/pusher-php-server", @@ -6543,20 +6441,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.0", + "version": "4.9.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0" + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -6615,9 +6513,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.0" + "source": "https://github.com/ramsey/uuid/tree/4.9.1" }, - "time": "2025-06-25T14:20:11+00:00" + "time": "2025-09-04T20:59:21+00:00" }, { "name": "resend/resend-php", @@ -6796,16 +6694,16 @@ }, { "name": "spatie/laravel-backup", - "version": "9.3.4", + "version": "9.3.6", "source": { "type": "git", "url": "https://github.com/spatie/laravel-backup.git", - "reference": "707e27eb1746296ac7e111179ec5da842f64e235" + "reference": "d378a07b580aa8bf440b50decdbab7b5d6f63c46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/707e27eb1746296ac7e111179ec5da842f64e235", - "reference": "707e27eb1746296ac7e111179ec5da842f64e235", + "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/d378a07b580aa8bf440b50decdbab7b5d6f63c46", + "reference": "d378a07b580aa8bf440b50decdbab7b5d6f63c46", "shasum": "" }, "require": { @@ -6833,7 +6731,7 @@ "league/flysystem-aws-s3-v3": "^2.0|^3.0", "mockery/mockery": "^1.4", "orchestra/testbench": "^8.0|^9.0|^10.0", - "pestphp/pest": "^1.20|^2.0|^3.0", + "pestphp/pest": "^1.20|^2.0|^3.0|^4.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.1", @@ -6880,7 +6778,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/9.3.4" + "source": "https://github.com/spatie/laravel-backup/tree/9.3.6" }, "funding": [ { @@ -6892,7 +6790,7 @@ "type": "other" } ], - "time": "2025-07-25T07:51:20+00:00" + "time": "2025-11-05T11:25:01+00:00" }, { "name": "spatie/laravel-image-optimizer", @@ -7226,20 +7124,20 @@ }, { "name": "spomky-labs/pki-framework", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/pki-framework.git", - "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae" + "reference": "bf6f55a9d9eb25b7781640221cb54f5c727850d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/eced5b5ce70518b983ff2be486e902bbd15135ae", - "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/bf6f55a9d9eb25b7781640221cb54f5c727850d7", + "reference": "bf6f55a9d9eb25b7781640221cb54f5c727850d7", "shasum": "" }, "require": { - "brick/math": "^0.10|^0.11|^0.12|^0.13", + "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14", "ext-mbstring": "*", "php": ">=8.1" }, @@ -7247,7 +7145,7 @@ "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", "ext-gmp": "*", "ext-openssl": "*", - "infection/infection": "^0.28|^0.29", + "infection/infection": "^0.28|^0.29|^0.31", "php-parallel-lint/php-parallel-lint": "^1.3", "phpstan/extension-installer": "^1.3|^2.0", "phpstan/phpstan": "^1.8|^2.0", @@ -7257,8 +7155,8 @@ "phpunit/phpunit": "^10.1|^11.0|^12.0", "rector/rector": "^1.0|^2.0", "roave/security-advisories": "dev-latest", - "symfony/string": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", "symplify/easy-coding-standard": "^12.0" }, "suggest": { @@ -7319,7 +7217,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/pki-framework/issues", - "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.3.0" + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.0" }, "funding": [ { @@ -7331,7 +7229,7 @@ "type": "patreon" } ], - "time": "2025-06-13T08:35:04+00:00" + "time": "2025-10-22T08:24:34+00:00" }, { "name": "stevebauman/purify", @@ -7401,16 +7299,16 @@ }, { "name": "symfony/cache", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6" + "reference": "1277a1ec61c8d93ea61b2a59738f1deb9bfb6701" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", - "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", + "url": "https://api.github.com/repos/symfony/cache/zipball/1277a1ec61c8d93ea61b2a59738f1deb9bfb6701", + "reference": "1277a1ec61c8d93ea61b2a59738f1deb9bfb6701", "shasum": "" }, "require": { @@ -7479,7 +7377,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.3.2" + "source": "https://github.com/symfony/cache/tree/v7.3.6" }, "funding": [ { @@ -7499,7 +7397,7 @@ "type": "tidelift" } ], - "time": "2025-07-30T17:13:41+00:00" + "time": "2025-10-30T13:22:58+00:00" }, { "name": "symfony/cache-contracts", @@ -7653,16 +7551,16 @@ }, { "name": "symfony/console", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1" + "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5f360ebc65c55265a74d23d7fe27f957870158a1", - "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1", + "url": "https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a", + "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a", "shasum": "" }, "require": { @@ -7727,7 +7625,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.2" + "source": "https://github.com/symfony/console/tree/v7.3.6" }, "funding": [ { @@ -7747,20 +7645,20 @@ "type": "tidelift" } ], - "time": "2025-07-30T17:13:41+00:00" + "time": "2025-11-04T01:21:42+00:00" }, { "name": "symfony/css-selector", - "version": "v7.3.0", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "84321188c4754e64273b46b406081ad9b18e8614" }, "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/84321188c4754e64273b46b406081ad9b18e8614", + "reference": "84321188c4754e64273b46b406081ad9b18e8614", "shasum": "" }, "require": { @@ -7796,7 +7694,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + "source": "https://github.com/symfony/css-selector/tree/v7.3.6" }, "funding": [ { @@ -7807,12 +7705,16 @@ "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-29T17:24:25+00:00" }, { "name": "symfony/deprecation-contracts", @@ -7883,16 +7785,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3" + "reference": "bbe40bfab84323d99dab491b716ff142410a92a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/bbe40bfab84323d99dab491b716ff142410a92a8", + "reference": "bbe40bfab84323d99dab491b716ff142410a92a8", "shasum": "" }, "require": { @@ -7940,7 +7842,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.3.2" + "source": "https://github.com/symfony/error-handler/tree/v7.3.6" }, "funding": [ { @@ -7960,20 +7862,20 @@ "type": "tidelift" } ], - "time": "2025-07-07T08:17:57+00:00" + "time": "2025-10-31T19:12:50+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.3.0", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", "shasum": "" }, "require": { @@ -8024,7 +7926,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.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3" }, "funding": [ { @@ -8035,12 +7937,16 @@ "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-04-22T09:11:45+00:00" + "time": "2025-08-13T11:49:31+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -8120,16 +8026,16 @@ }, { "name": "symfony/finder", - "version": "v7.3.2", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + "reference": "9f696d2f1e340484b4683f7853b273abff94421f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f", + "reference": "9f696d2f1e340484b4683f7853b273abff94421f", "shasum": "" }, "require": { @@ -8164,7 +8070,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.2" + "source": "https://github.com/symfony/finder/tree/v7.3.5" }, "funding": [ { @@ -8184,20 +8090,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-10-15T18:45:57+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.24", + "version": "v6.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "6d78fe8abecd547c159b8a49f7c88610630b7da2" + "reference": "c9e69c185c4a845f9d46958cdb0dc7aa847f3981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/6d78fe8abecd547c159b8a49f7c88610630b7da2", - "reference": "6d78fe8abecd547c159b8a49f7c88610630b7da2", + "url": "https://api.github.com/repos/symfony/http-client/zipball/c9e69c185c4a845f9d46958cdb0dc7aa847f3981", + "reference": "c9e69c185c4a845f9d46958cdb0dc7aa847f3981", "shasum": "" }, "require": { @@ -8205,6 +8111,7 @@ "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -8261,7 +8168,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.24" + "source": "https://github.com/symfony/http-client/tree/v6.4.28" }, "funding": [ { @@ -8281,7 +8188,7 @@ "type": "tidelift" } ], - "time": "2025-07-14T16:38:25+00:00" + "time": "2025-11-05T17:39:22+00:00" }, { "name": "symfony/http-client-contracts", @@ -8363,16 +8270,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6" + "reference": "6379e490d6ecfc5c4224ff3a754b90495ecd135c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6877c122b3a6cc3695849622720054f6e6fa5fa6", - "reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6379e490d6ecfc5c4224ff3a754b90495ecd135c", + "reference": "6379e490d6ecfc5c4224ff3a754b90495ecd135c", "shasum": "" }, "require": { @@ -8422,7 +8329,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.3.2" + "source": "https://github.com/symfony/http-foundation/tree/v7.3.6" }, "funding": [ { @@ -8442,20 +8349,20 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:47:49+00:00" + "time": "2025-11-06T11:05:57+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6ecc895559ec0097e221ed2fd5eb44d5fede083c" + "reference": "f9a34dc0196677250e3609c2fac9de9e1551a262" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6ecc895559ec0097e221ed2fd5eb44d5fede083c", - "reference": "6ecc895559ec0097e221ed2fd5eb44d5fede083c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9a34dc0196677250e3609c2fac9de9e1551a262", + "reference": "f9a34dc0196677250e3609c2fac9de9e1551a262", "shasum": "" }, "require": { @@ -8540,7 +8447,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.3.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.3.6" }, "funding": [ { @@ -8560,20 +8467,20 @@ "type": "tidelift" } ], - "time": "2025-07-31T10:45:04+00:00" + "time": "2025-11-06T20:58:12+00:00" }, { "name": "symfony/mailer", - "version": "v7.3.2", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b" + "reference": "fd497c45ba9c10c37864e19466b090dcb60a50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d43e84d9522345f96ad6283d5dfccc8c1cfc299b", - "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b", + "url": "https://api.github.com/repos/symfony/mailer/zipball/fd497c45ba9c10c37864e19466b090dcb60a50ba", + "reference": "fd497c45ba9c10c37864e19466b090dcb60a50ba", "shasum": "" }, "require": { @@ -8624,7 +8531,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.2" + "source": "https://github.com/symfony/mailer/tree/v7.3.5" }, "funding": [ { @@ -8644,7 +8551,7 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:36:08+00:00" + "time": "2025-10-24T14:27:20+00:00" }, { "name": "symfony/mailgun-mailer", @@ -8721,16 +8628,16 @@ }, { "name": "symfony/mime", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "url": "https://api.github.com/repos/symfony/mime/zipball/b1b828f69cbaf887fa835a091869e55df91d0e35", + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35", "shasum": "" }, "require": { @@ -8785,7 +8692,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.2" + "source": "https://github.com/symfony/mime/tree/v7.3.4" }, "funding": [ { @@ -8805,11 +8712,11 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-09-16T08:38:17+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -8868,7 +8775,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -8879,6 +8786,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" @@ -8888,16 +8799,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.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": { @@ -8946,7 +8857,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -8957,16 +8868,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": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -9029,7 +8944,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" }, "funding": [ { @@ -9040,6 +8955,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" @@ -9049,7 +8968,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -9110,7 +9029,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -9121,6 +9040,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" @@ -9130,7 +9053,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -9191,7 +9114,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -9202,6 +9125,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" @@ -9211,7 +9138,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -9238,7 +9165,171 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.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-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.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-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -9249,10 +9340,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -9262,7 +9349,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -9271,7 +9358,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" }, "funding": [ { @@ -9282,25 +9369,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-02T08:10:11+00:00" + "time": "2025-06-24T13:30:11+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.32.0", + "name": "symfony/polyfill-php85", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", "shasum": "" }, "require": { @@ -9318,7 +9409,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php85\\": "" }, "classmap": [ "Resources/stubs" @@ -9338,7 +9429,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -9347,7 +9438,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" }, "funding": [ { @@ -9358,16 +9449,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": "2025-06-23T16:12:55+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -9426,7 +9521,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" }, "funding": [ { @@ -9437,6 +9532,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" @@ -9446,16 +9545,16 @@ }, { "name": "symfony/process", - "version": "v7.3.0", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", "shasum": "" }, "require": { @@ -9487,7 +9586,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" + "source": "https://github.com/symfony/process/tree/v7.3.4" }, "funding": [ { @@ -9498,12 +9597,16 @@ "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-04-17T09:11:12+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -9590,16 +9693,16 @@ }, { "name": "symfony/routing", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4" + "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "url": "https://api.github.com/repos/symfony/routing/zipball/c97abe725f2a1a858deca629a6488c8fc20c3091", + "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091", "shasum": "" }, "require": { @@ -9651,7 +9754,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.3.2" + "source": "https://github.com/symfony/routing/tree/v7.3.6" }, "funding": [ { @@ -9671,20 +9774,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:36:08+00:00" + "time": "2025-11-05T07:57:47+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -9738,7 +9841,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -9749,25 +9852,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-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca" + "reference": "f96476035142921000338bad71e5247fbc138872" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca", + "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", + "reference": "f96476035142921000338bad71e5247fbc138872", "shasum": "" }, "require": { @@ -9782,7 +9889,6 @@ }, "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/translation-contracts": "^2.5|^3.0", @@ -9825,7 +9931,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.2" + "source": "https://github.com/symfony/string/tree/v7.3.4" }, "funding": [ { @@ -9845,20 +9951,20 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:47:49+00:00" + "time": "2025-09-11T14:36:48+00:00" }, { "name": "symfony/translation", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "81b48f4daa96272efcce9c7a6c4b58e629df3c90" + "reference": "ec25870502d0c7072d086e8ffba1420c85965174" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/81b48f4daa96272efcce9c7a6c4b58e629df3c90", - "reference": "81b48f4daa96272efcce9c7a6c4b58e629df3c90", + "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174", "shasum": "" }, "require": { @@ -9925,7 +10031,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.2" + "source": "https://github.com/symfony/translation/tree/v7.3.4" }, "funding": [ { @@ -9945,20 +10051,20 @@ "type": "tidelift" } ], - "time": "2025-07-30T17:31:46+00:00" + "time": "2025-09-07T11:39:36+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -10007,7 +10113,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -10018,12 +10124,16 @@ "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-27T08:32:26+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/uid", @@ -10101,16 +10211,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.3.2", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "53205bea27450dc5c65377518b3275e126d45e75" + "reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/53205bea27450dc5c65377518b3275e126d45e75", - "reference": "53205bea27450dc5c65377518b3275e126d45e75", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/476c4ae17f43a9a36650c69879dcf5b1e6ae724d", + "reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d", "shasum": "" }, "require": { @@ -10164,7 +10274,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.2" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.5" }, "funding": [ { @@ -10184,20 +10294,20 @@ "type": "tidelift" } ], - "time": "2025-07-29T20:02:46+00:00" + "time": "2025-09-27T09:00:46+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "05b3e90654c097817325d6abd284f7938b05f467" + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/05b3e90654c097817325d6abd284f7938b05f467", - "reference": "05b3e90654c097817325d6abd284f7938b05f467", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", "shasum": "" }, "require": { @@ -10245,7 +10355,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.3.2" + "source": "https://github.com/symfony/var-exporter/tree/v7.3.4" }, "funding": [ { @@ -10265,7 +10375,7 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:47:49+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10577,79 +10687,21 @@ } ], "time": "2025-05-07T09:11:18+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" } ], "packages-dev": [ { "name": "brianium/paratest", - "version": "v7.8.3", + "version": "v7.8.4", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "a585c346ddf1bec22e51e20b5387607905604a71" + "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/a585c346ddf1bec22e51e20b5387607905604a71", - "reference": "a585c346ddf1bec22e51e20b5387607905604a71", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/130a9bf0e269ee5f5b320108f794ad03e275cad4", + "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4", "shasum": "" }, "require": { @@ -10658,26 +10710,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.9 || ^12.0.4", - "phpunit/php-file-iterator": "^5.1.0 || ^6", - "phpunit/php-timer": "^7.0.1 || ^8", - "phpunit/phpunit": "^11.5.11 || ^12.0.6", - "sebastian/environment": "^7.2.0 || ^8", - "symfony/console": "^6.4.17 || ^7.2.1", - "symfony/process": "^6.4.19 || ^7.2.4" + "phpunit/php-code-coverage": "^11.0.10", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-timer": "^7.0.1", + "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.1.6", - "phpstan/phpstan-deprecation-rules": "^2.0.1", - "phpstan/phpstan-phpunit": "^2.0.4", - "phpstan/phpstan-strict-rules": "^2.0.3", - "squizlabs/php_codesniffer": "^3.11.3", - "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", @@ -10717,7 +10769,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.8.3" + "source": "https://github.com/paratestphp/paratest/tree/v7.8.4" }, "funding": [ { @@ -10729,7 +10781,55 @@ "type": "paypal" } ], - "time": "2025-03-05T08:29:11+00:00" + "time": "2025-06-23T06:07:21+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + }, + "dist": { + "type": "zip", + "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 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" }, { "name": "fakerphp/faker", @@ -10796,16 +10896,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": { @@ -10815,10 +10915,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" }, @@ -10845,7 +10945,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": [ { @@ -10853,20 +10953,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.3", + "version": "2.18.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "59a123a3d459c5a23055802237cb317f609867e5" + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", - "reference": "59a123a3d459c5a23055802237cb317f609867e5", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", "shasum": "" }, "require": { @@ -10916,7 +11016,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.3" + "source": "https://github.com/filp/whoops/tree/2.18.4" }, "funding": [ { @@ -10924,7 +11024,7 @@ "type": "github" } ], - "time": "2025-06-16T00:02:10+00:00" + "time": "2025-08-08T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -11039,16 +11139,16 @@ }, { "name": "laravel/pint", - "version": "v1.24.0", + "version": "v1.25.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "0345f3b05f136801af8c339f9d16ef29e6b4df8a" + "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/0345f3b05f136801af8c339f9d16ef29e6b4df8a", - "reference": "0345f3b05f136801af8c339f9d16ef29e6b4df8a", + "url": "https://api.github.com/repos/laravel/pint/zipball/5016e263f95d97670d71b9a987bd8996ade6d8d9", + "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9", "shasum": "" }, "require": { @@ -11059,9 +11159,9 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.82.2", - "illuminate/view": "^11.45.1", - "larastan/larastan": "^3.5.0", + "friendsofphp/php-cs-fixer": "^3.87.2", + "illuminate/view": "^11.46.0", + "larastan/larastan": "^3.7.1", "laravel-zero/framework": "^11.45.0", "mockery/mockery": "^1.6.12", "nunomaduro/termwind": "^2.3.1", @@ -11072,9 +11172,6 @@ ], "type": "project", "autoload": { - "files": [ - "overrides/Runner/Parallel/ProcessFactory.php" - ], "psr-4": { "App\\": "app/", "Database\\Seeders\\": "database/seeders/", @@ -11104,20 +11201,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-07-10T18:09:32+00:00" + "time": "2025-09-19T02:57:12+00:00" }, { "name": "laravel/telescope", - "version": "v5.10.2", + "version": "v5.15.0", "source": { "type": "git", "url": "https://github.com/laravel/telescope.git", - "reference": "6d249d93ab06dc147ac62ea02b4272c2e7a24b72" + "reference": "cbdd61b025dddeccaffefc3b54d327c4e0a410b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/6d249d93ab06dc147ac62ea02b4272c2e7a24b72", - "reference": "6d249d93ab06dc147ac62ea02b4272c2e7a24b72", + "url": "https://api.github.com/repos/laravel/telescope/zipball/cbdd61b025dddeccaffefc3b54d327c4e0a410b6", + "reference": "cbdd61b025dddeccaffefc3b54d327c4e0a410b6", "shasum": "" }, "require": { @@ -11171,9 +11268,9 @@ ], "support": { "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v5.10.2" + "source": "https://github.com/laravel/telescope/tree/v5.15.0" }, - "time": "2025-07-24T05:26:13+00:00" + "time": "2025-10-23T15:19:35+00:00" }, { "name": "mockery/mockery", @@ -11419,38 +11516,38 @@ }, { "name": "pestphp/pest", - "version": "v3.8.2", + "version": "v3.8.4", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "c6244a8712968dbac88eb998e7ff3b5caa556b0d" + "reference": "72cf695554420e21858cda831d5db193db102574" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/c6244a8712968dbac88eb998e7ff3b5caa556b0d", - "reference": "c6244a8712968dbac88eb998e7ff3b5caa556b0d", + "url": "https://api.github.com/repos/pestphp/pest/zipball/72cf695554420e21858cda831d5db193db102574", + "reference": "72cf695554420e21858cda831d5db193db102574", "shasum": "" }, "require": { - "brianium/paratest": "^7.8.3", - "nunomaduro/collision": "^8.8.0", - "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.1.0", + "pestphp/pest-plugin-arch": "^3.1.1", "pestphp/pest-plugin-mutate": "^3.0.5", "php": "^8.2.0", - "phpunit/phpunit": "^11.5.15" + "phpunit/phpunit": "^11.5.33" }, "conflict": { "filp/whoops": "<2.16.0", - "phpunit/phpunit": ">11.5.15", + "phpunit/phpunit": ">11.5.33", "sebastian/exporter": "<6.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^3.4.0", - "pestphp/pest-plugin-type-coverage": "^3.5.0", - "symfony/process": "^7.2.5" + "pestphp/pest-plugin-type-coverage": "^3.6.1", + "symfony/process": "^7.3.0" }, "bin": [ "bin/pest" @@ -11515,7 +11612,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.8.2" + "source": "https://github.com/pestphp/pest/tree/v3.8.4" }, "funding": [ { @@ -11527,7 +11624,7 @@ "type": "github" } ], - "time": "2025-04-17T10:53:02+00:00" + "time": "2025-08-20T19:12:42+00:00" }, { "name": "pestphp/pest-plugin", @@ -11914,16 +12011,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", + "version": "5.6.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9", "shasum": "" }, "require": { @@ -11972,9 +12069,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3" }, - "time": "2025-04-13T19:20:35+00:00" + "time": "2025-08-01T19:43:32+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -12036,16 +12133,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -12077,22 +12174,22 @@ "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.2.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-07-13T07:04:09+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.10", + "version": "11.0.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76" + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", "shasum": "" }, "require": { @@ -12149,7 +12246,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/show" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" }, "funding": [ { @@ -12169,7 +12266,7 @@ "type": "tidelift" } ], - "time": "2025-06-18T08:56:18+00:00" + "time": "2025-08-27T14:37:49+00:00" }, { "name": "phpunit/php-file-iterator", @@ -12418,16 +12515,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.15", + "version": "11.5.33", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c" + "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", - "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5965e9ff57546cb9137c0ff6aa78cb7442b05cf6", + "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6", "shasum": "" }, "require": { @@ -12437,24 +12534,24 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.0", + "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.9", + "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.3", - "sebastian/comparator": "^6.3.1", + "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.2", + "sebastian/type": "^5.1.3", "sebastian/version": "^5.0.2", "staabm/side-effects-detector": "^1.0.5" }, @@ -12499,7 +12596,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.15" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.33" }, "funding": [ { @@ -12510,12 +12607,20 @@ "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-03-23T16:02:11+00:00" + "time": "2025-08-16T05:19:02+00:00" }, { "name": "sebastian/cli-parser", @@ -12689,16 +12794,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": { @@ -12757,15 +12862,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", @@ -12970,16 +13087,16 @@ }, { "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": { @@ -12993,7 +13110,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -13036,15 +13153,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", @@ -13282,23 +13411,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": { @@ -13334,28 +13463,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.2", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { @@ -13391,15 +13532,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.2" + "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": "2025-03-18T13:35:50+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { "name": "sebastian/version", @@ -13615,6 +13768,64 @@ } ], "time": "2024-03-03T12:36:25+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.12.1", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", + "php": "^7.2 || ^8.0" + }, + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" + }, + "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.12.1" + }, + "time": "2025-10-29T15:56:20+00:00" } ], "aliases": [], @@ -13623,7 +13834,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.2|^8.3|^8.4", + "php": "^8.3|^8.4", "ext-bcmath": "*", "ext-ctype": "*", "ext-curl": "*", diff --git a/config/app.php b/config/app.php index 4b0a32d06..6417aea9f 100644 --- a/config/app.php +++ b/config/app.php @@ -150,6 +150,7 @@ return [ /* * Package Service Providers... */ + ProtoneMedia\LaravelFFMpeg\Support\ServiceProvider::class, /* * Application Service Providers... @@ -215,7 +216,7 @@ return [ 'PrettyNumber' => App\Util\Lexer\PrettyNumber::class, 'Purify' => Stevebauman\Purify\Facades\Purify::class, - 'FFMpeg' => Pbmedia\LaravelFFMpeg\FFMpegFacade::class, + 'FFMpeg' => ProtoneMedia\LaravelFFMpeg\Support\FFMpeg::class, 'Captcha' => Buzz\LaravelHCaptcha\CaptchaFacade::class, ], diff --git a/config/database.php b/config/database.php index 2a3cf3393..8a7c4ba6b 100644 --- a/config/database.php +++ b/config/database.php @@ -160,12 +160,5 @@ return [ 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DATABASE_PULSE', 2), ], - ], - - 'dbal' => [ - 'types' => [ - 'timestamp' => TimestampType::class, - ], - ], ]; diff --git a/resources/lang/de/settings.php b/resources/lang/de/settings.php index c27129b9c..784ba996f 100644 --- a/resources/lang/de/settings.php +++ b/resources/lang/de/settings.php @@ -9,14 +9,12 @@ return [ 'notifications' => 'Benachrichtigungen', 'password' => 'Passwort', 'privacy' => 'Privatsphäre', - 'relationships' => 'Beziehungen', 'security' => 'Sicherheit', 'timelines' => 'Zeitleisten', 'applications' => 'Anwendungen', 'developers' => 'Entwicklung', 'import' => 'Import', 'export' => 'Export', - 'labs' => 'Labs', 'parental_controls' => 'Elterliche Kontrolle', 'submit' => 'Absenden', diff --git a/resources/lang/de/web.php b/resources/lang/de/web.php index d94d041d8..eb6f0934f 100644 --- a/resources/lang/de/web.php +++ b/resources/lang/de/web.php @@ -197,15 +197,6 @@ return [ 'emptyFeed' => 'Wir können keine Beiträge mit diesem Hashtag finden' ], - 'report' => [ - 'report' => 'Melden', - 'selectReason' => 'Wähle einen Grund', - 'reported' => 'Gemeldet', - 'sendingReport' => 'Sende Meldung', - 'thanksMsg' => 'Danke für deine Meldung! Damit erhöhst du die Sicherheit der Community!', - 'contactAdminMsg' => 'Wenn du die Administration wegen diesem Beitrag oder dieser Meldung kontaktieren möchtest', - ], - 'report' => [ 'report' => 'Melden', 'selectReason' => 'Einen Grund auswählen', diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 5a772eca0..2dde12eed 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -2,19 +2,6 @@ return [ - /* - |-------------------------------------------------------------------------- - | Authentication Language Lines - |-------------------------------------------------------------------------- - | - | The following language lines are used during authentication for various - | messages that we need to display to the user. You are free to modify - | these language lines according to your application's requirements. - | - */ - - 'failed' => 'These credentials do not match our records.', - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 'verifyYourEmailAddress' => ' - Verify Your Email Address', 'loginTitle' => 'Account Login', 'failed' => 'These credentials do not match our records.', diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index 087178127..435ff4364 100644 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -10,14 +10,12 @@ return [ 'notifications' => 'Notifications', 'password' => 'Password', 'privacy' => 'Privacy', - 'relationships' => 'Relationships', 'security' => 'Security', 'timelines' => 'Timelines', 'applications' => 'Applications', 'developers' => 'Developers', 'import' => 'Import', 'export' => 'Export', - 'labs' => 'Labs', 'parental_controls' => 'Parental Controls', 'submit' => 'Submit', diff --git a/resources/lang/en/web.php b/resources/lang/en/web.php index a1a90f0c3..53b4e759f 100644 --- a/resources/lang/en/web.php +++ b/resources/lang/en/web.php @@ -311,7 +311,6 @@ return [ 'create_new_filter' => 'Create new Filter', 'filter_title' => 'Filter Title', 'edit_filter' => 'Edit Filter', - 'create_filter' => 'Create Filter', 'advance_mode' => 'Advanced Mode', 'simple_mode' => 'Simple Mode', 'keywords' => 'Keywords', diff --git a/resources/lang/es/settings.php b/resources/lang/es/settings.php index ae0f0628b..7475bfa98 100644 --- a/resources/lang/es/settings.php +++ b/resources/lang/es/settings.php @@ -9,14 +9,12 @@ return [ 'notifications' => 'Notificaciones', 'password' => 'Contraseña', 'privacy' => 'Privacidad', - 'relationships' => 'Relaciones', 'security' => 'Seguridad', 'timelines' => 'Líneas Temporales', 'applications' => 'Aplicaciones', 'developers' => 'Desarrolladoras', 'import' => 'Importar', 'export' => 'Exportar', - 'labs' => 'Labs', 'parental_controls' => 'Control Parental', 'submit' => 'Enviar', diff --git a/resources/lang/fr/settings.php b/resources/lang/fr/settings.php index cf0a7803d..21b8f69db 100644 --- a/resources/lang/fr/settings.php +++ b/resources/lang/fr/settings.php @@ -9,14 +9,12 @@ return [ 'notifications' => 'Notifications', 'password' => 'Mot de passe', 'privacy' => 'Confidentialité', - 'relationships' => 'Relations', 'security' => 'Sécurité', 'timelines' => 'Fil d’actualité', 'applications' => 'Applications', 'developers' => 'Développement', 'import' => 'Import', 'export' => 'Export', - 'labs' => 'Labo', 'parental_controls' => 'Contrôle parental', 'submit' => 'Enregistrer', diff --git a/resources/lang/pt/settings.php b/resources/lang/pt/settings.php index f22acf86c..50ef97bed 100644 --- a/resources/lang/pt/settings.php +++ b/resources/lang/pt/settings.php @@ -10,14 +10,12 @@ return [ 'notifications' => 'Notificações', 'password' => 'Senha', 'privacy' => 'Privacidade', - 'relationships' => 'Relacionamentos', 'security' => 'Segurança', 'timelines' => 'Linhas do Tempo', 'applications' => 'Aplicativos', 'developers' => 'Desenvolvedores', 'import' => 'Importar', 'export' => 'Exportar', - 'labs' => 'Laboratórios', 'parental_controls' => 'Controles Parentais', 'submit' => 'Enviar', diff --git a/resources/lang/tr/settings.php b/resources/lang/tr/settings.php index 42dc34e00..cd9aadc0e 100644 --- a/resources/lang/tr/settings.php +++ b/resources/lang/tr/settings.php @@ -9,7 +9,6 @@ return [ 'notifications' => 'Bildirimler', 'password' => 'Parola', 'privacy' => 'Gizlilik', - 'relationships' => 'İlişkiler', 'security' => 'Güvenlik', 'timelines' => 'Akış', 'applications' => 'Uygulamalar', diff --git a/tests/Unit/CryptoTest.php b/tests/Unit/CryptoTest.php index a9d9f7959..7cdb2ea1b 100644 --- a/tests/Unit/CryptoTest.php +++ b/tests/Unit/CryptoTest.php @@ -2,7 +2,8 @@ namespace Tests\Unit; -use phpseclib\Crypt\RSA; +use phpseclib3\Crypt\PublicKeyLoader; +use phpseclib3\Crypt\RSA; use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; @@ -16,18 +17,18 @@ class CryptoTest extends TestCase #[Test] public function libraryInstalled() { - $this->assertTrue(class_exists('\phpseclib\Crypt\RSA')); + $this->assertTrue(class_exists('\phpseclib3\Crypt\RSA')); } #[Test] public function RSASigning() { - $rsa = new RSA(); - extract($rsa->createKey()); - $rsa->loadKey($privatekey); + $private = RSA::createKey(); + $publicKey = $private->getPublicKey(); + $plaintext = 'pixelfed rsa test'; - $signature = $rsa->sign($plaintext); - $rsa->loadKey($publickey); - $this->assertTrue($rsa->verify($plaintext, $signature)); + $signature = $private->sign($plaintext); + + $this->assertTrue($publicKey->verify($plaintext, $signature)); } }