diff --git a/app/Console/Commands/Grap.php b/app/Console/Commands/Grap.php index ea06f527..b24d2507 100644 --- a/app/Console/Commands/Grap.php +++ b/app/Console/Commands/Grap.php @@ -4,6 +4,7 @@ namespace App\Console\Commands; use App\Actions\PlayerPerSeason; use App\Console\Commands\Grapper\Sofascore\Grapper; +use App\Console\Commands\Grapper\Sofascore\GrapperTest; use App\Console\Commands\Grapper\Sofascore\Helper\SetStorage; use App\Console\Commands\Grapper\Sofascore\MakeExcel; use App\Console\Commands\Grapper\Sofascore\Rose; @@ -16,14 +17,18 @@ use Illuminate\Console\Command; class Grap extends Command { public static $options = []; + public static string $storage; + public static string $zipfile; + public static string $folder; + public static string $excel; public static string $useragent = '4'; - protected $signature = 'grp {id=0} {day=0} {--folder=} {--d} {--r} {--f}'; + protected $signature = 'grp {id=0} {day=0} {--folder=} {--d} {--r} {--f} {--R} {--S}'; public function handle() { @@ -33,25 +38,28 @@ class Grap extends Command self::$options['base_url'] = 'https://www.sofascore.com/'; if (! self::$options['id']) { - $txt = 'PARAMETERS' . PHP_EOL; - $txt .= '--d debug' . PHP_EOL; - $txt .= '--r restart range' . PHP_EOL; - $txt .= '--f force' . PHP_EOL; - $txt .= '--folder' . PHP_EOL; - $txt .= '-----------------------------------------------------------' . PHP_EOL; - $txt .= 'FUNCTION' . PHP_EOL; - $txt .= ' 1 grapper DAILY & subDays ( default 3)' . PHP_EOL; - $txt .= ' 2 grapper DATE' . PHP_EOL; - $txt .= ' 3 grapper RANGE' . PHP_EOL; - $txt .= ' 4 grapper ROSE' . PHP_EOL; - $txt .= ' 5 import to excel from folder' . PHP_EOL; - $txt .= ' 6 playeer/season' . PHP_EOL; - $txt .= ' 7 settings to local' . PHP_EOL; - $txt .= ' 11 move SQL' . PHP_EOL; + $txt = 'PARAMETERS'.PHP_EOL; + $txt .= '--d debug'.PHP_EOL; + $txt .= '--r restart range'.PHP_EOL; + $txt .= '--f force'.PHP_EOL; + $txt .= '--R read file'.PHP_EOL; + $txt .= '--S save to file'.PHP_EOL; + $txt .= '--folder'.PHP_EOL; + $txt .= '-----------------------------------------------------------'.PHP_EOL; + $txt .= 'FUNCTION'.PHP_EOL; + $txt .= ' 1 grapper DAILY & subDays ( default 3)'.PHP_EOL; + $txt .= ' 2 grapper DATE'.PHP_EOL; + $txt .= ' 3 grapper RANGE'.PHP_EOL; + $txt .= ' 4 grapper ROSE'.PHP_EOL; + $txt .= ' 5 import to excel from folder'.PHP_EOL; + $txt .= ' 6 playeer/season'.PHP_EOL; + $txt .= ' 7 settings to local'.PHP_EOL; + $txt .= ' 11 move SQL'.PHP_EOL; + $txt .= ' 12 testing url for grapping'.PHP_EOL; Notice::note($txt, 'b', 1); } - Notice::note('Task Id ' . self::$options['id'], 'gb'); + Notice::note('Task Id '.self::$options['id'], 'gb'); switch (self::$options['id']) { @@ -111,6 +119,10 @@ class Grap extends Command SqlMover::run(); break; + case '12': + GrapperTest::load(); + break; + default: Notice::note('function not implemented yet', 'br', 1); } diff --git a/app/Console/Commands/Grapper/Sofascore/GrapperTest.php b/app/Console/Commands/Grapper/Sofascore/GrapperTest.php new file mode 100644 index 00000000..29d368c4 --- /dev/null +++ b/app/Console/Commands/Grapper/Sofascore/GrapperTest.php @@ -0,0 +1,66 @@ +loadHTML(mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8')); + libxml_clear_errors(); + + // 3. Use XPath to query specific HTML elements + $xpath = new DOMXPath($dom); + + // Example: Target match rows or team names (Update classes based on actual DOM structure) + // Modern livescore sites often use classes like '.event__match' or '.event__participant' + $teams = $xpath->query("//div[contains(@class, 'event__participant')]"); + + foreach ($teams as $team) { + echo trim($team->nodeValue).PHP_EOL; + } + + Notice::note($data, 'p', 1); + } +} diff --git a/app/Console/Commands/Grapper/Sofascore/Helper/CurlLivescore.php b/app/Console/Commands/Grapper/Sofascore/Helper/CurlLivescore.php new file mode 100644 index 00000000..25ce3eaa --- /dev/null +++ b/app/Console/Commands/Grapper/Sofascore/Helper/CurlLivescore.php @@ -0,0 +1,61 @@ +components([ + // ToggleButtons::make('status') + // ->columnSpanFull() + // ->hiddenLabel() + // ->inline() + // ->default(1) + // ->options([ + // '1' => 'Soccer', + // '3' => 'Basketball', + // '2' => 'Ice Hockey', + // '5' => 'Tennis', + // '27' => 'Horse Racing', + // ]) + // ->icons([ + // '1' => 'icon-soccerball', + // '3' => 'icon-basketball', + // '2' => 'icon-icehockey', + // '5' => 'icon-tennisball', + // '27' => 'icon-horseracing', + // ]), Grid::make([ 'default' => 1, 'sm' => 3, @@ -67,10 +86,10 @@ class Statistic extends BaseDashboard Select::make('league_id') ->live() ->searchable() - ->prefixIconColor(fn(Get $get): string => $get('league_id') ? 'success' : 'danger') + ->prefixIconColor(fn (Get $get): string => $get('league_id') ? 'success' : 'danger') ->prefixIcon('phosphor-trophy-fill') ->hiddenLabel() - ->options(fn() => LoadStatisticFixturesLeaguesOptions::load(1)) + ->options(fn () => LoadStatisticFixturesLeaguesOptions::load(1)) ->placeholder('League') ->afterStateUpdated(function (callable $set, $state) { $set('match_id', null); @@ -81,7 +100,7 @@ class Statistic extends BaseDashboard Select::make('match_id') ->live() ->hiddenLabel() - ->prefixIconColor(fn(Get $get): string => $get('match_id') ? 'success' : 'danger') + ->prefixIconColor(fn (Get $get): string => $get('match_id') ? 'success' : 'danger') ->prefixIcon('phosphor-calendar-check-fill') ->options(function (Get $get) { return LoadStatisticFixturesMatchOptions::load($get('league_id')); @@ -105,12 +124,11 @@ class Statistic extends BaseDashboard } }) ->prefixIcon('phosphor-users-three-fill') - ->hidden(fn(Get $get) => $get('similar_past_matches') != 'none') + ->hidden(fn (Get $get) => $get('similar_past_matches') != 'none') ->options(function (Get $get) { if ($get('match_id')) { $res = StatisticFixtures::where('id', $get('match_id'))->first(); - $arr = []; if ($res) { $arr[$res->home_id] = SofaScoreRosa::query()->where('ss_team_id', $res->home_id)->value('ss_team_name'); @@ -134,9 +152,9 @@ class Statistic extends BaseDashboard Action::make('iconInfo') ->color('success') ->icon('phosphor-question-fill') - ->tooltip(fn() => 'Team Position') + ->tooltip(fn () => 'Team Position') ) - ->hidden(fn(Get $get) => $get('similar_past_matches') != 'none') + ->hidden(fn (Get $get) => $get('similar_past_matches') != 'none') ->default('all') ->selectablePlaceholder(false) ->options([ @@ -189,13 +207,13 @@ class Statistic extends BaseDashboard ->hiddenLabel() ->prefix('SPM') ->placeholder('Similar Past Matches') - ->suffix(fn(Get $get): string|HtmlString => $get('similar_past_matches') != 'none' ? new HtmlString('
± ' . $get('accuracy') . '
') : '') + ->suffix(fn (Get $get): string|HtmlString => $get('similar_past_matches') != 'none' ? new HtmlString('
± '.$get('accuracy').'
') : '') ->prefixAction( Action::make('iconInfo') ->icon('phosphor-question-fill') // ->color(fn(Get $get): string => $get('similar_past_matches') != 'none' ? 'success' : 'primary') ->color('success') - ->tooltip(fn() => $this->tooltip_similar_past_matches()) + ->tooltip(fn () => $this->tooltip_similar_past_matches()) ) ->default('none') ->selectablePlaceholder(false) @@ -212,7 +230,7 @@ class Statistic extends BaseDashboard Slider::make('accuracy') ->live() ->hiddenLabel() - ->hidden(fn(Get $get) => $get('similar_past_matches') == 'none') + ->hidden(fn (Get $get) => $get('similar_past_matches') == 'none') ->fillTrack() ->minValue(0) ->maxValue(0.25) @@ -228,17 +246,17 @@ class Statistic extends BaseDashboard ->hiddenLabel() ->allowHtml() ->placeholder('Player') - ->hidden(fn(Get $get) => $get('similar_past_matches') != 'none') - ->prefixIconColor(fn(Get $get): string => $get('similar_past_matches') == 'none' ? 'success' : '') + ->hidden(fn (Get $get) => $get('similar_past_matches') != 'none') + ->prefixIconColor(fn (Get $get): string => $get('similar_past_matches') == 'none' ? 'success' : '') ->prefixIcon('icon-player') ->preload() ->searchable() - ->extraAttributes(fn() => ['id' => 'player_selector']) + ->extraAttributes(fn () => ['id' => 'player_selector']) ->suffixAction( Action::make('iconInfo') ->icon('phosphor-question-fill') ->color('success') - ->tooltip(fn() => $this->tooltip_player_info()) + ->tooltip(fn () => $this->tooltip_player_info()) ) ->options(function (Get $get) { return LoadPlayer::load($get); @@ -249,7 +267,7 @@ class Statistic extends BaseDashboard ->placeholder('Time on field') ->prefixIcon('phosphor-watch-fill') ->default('all') - ->hidden(fn(Get $get) => ! $get('ss_player_id')) + ->hidden(fn (Get $get) => ! $get('ss_player_id')) ->prefixIconColor('success') ->selectablePlaceholder(false) ->options([ @@ -289,7 +307,7 @@ class Statistic extends BaseDashboard ->placeholder('All Seasons') ->prefixIconColor('success') // ->prefixIconColor(fn(Get $get): string => $get('season') ? 'success' : 'primary') - ->hidden(fn(Get $get) => $get('season_or_date') == 'date') + ->hidden(fn (Get $get) => $get('season_or_date') == 'date') ->prefixIcon('phosphor-calendar-star-fill') ->preload() ->options(function (Get $get) { @@ -298,30 +316,30 @@ class Statistic extends BaseDashboard DatePicker::make('start_date') ->live() ->hiddenLabel() - ->hidden(fn(Get $get) => $get('season_or_date') == 'season') + ->hidden(fn (Get $get) => $get('season_or_date') == 'season') ->native(false) - ->prefixIconColor(fn(Get $get): string => $get('start_date') ? 'success' : 'primary') + ->prefixIconColor(fn (Get $get): string => $get('start_date') ? 'success' : 'primary') ->prefixIcon('phosphor-calendar-fill') ->prefix('Start') ->suffixAction( Action::make('clear_start') ->icon('phosphor-x') ->color('gray') - ->action(fn(Set $set) => $set('start_date', null)) + ->action(fn (Set $set) => $set('start_date', null)) ), DatePicker::make('end_date') ->live() ->hiddenLabel() - ->hidden(fn(Get $get) => $get('season_or_date') == 'season') + ->hidden(fn (Get $get) => $get('season_or_date') == 'season') ->native(false) - ->prefixIconColor(fn(Get $get): string => $get('end_date') ? 'success' : 'primary') + ->prefixIconColor(fn (Get $get): string => $get('end_date') ? 'success' : 'primary') ->prefixIcon('phosphor-calendar-fill') ->prefix('End') ->suffixAction( Action::make('clear_end') ->icon('phosphor-x') ->color('gray') - ->action(fn(Set $set) => $set('end_date', null)) + ->action(fn (Set $set) => $set('end_date', null)) ), ]); } diff --git a/composer.json b/composer.json index cbe5e486..c6515c37 100644 --- a/composer.json +++ b/composer.json @@ -21,6 +21,7 @@ "laravel/tinker": "*", "mongodb/laravel-mongodb": "^5.1", "mongodb/mongodb": "^2.2", + "neitanod/forceutf8": "^2.0", "outhebox/blade-flags": "*", "phpoffice/phpspreadsheet": "^5.9", "spatie/simple-excel": "^3.9", diff --git a/composer.lock b/composer.lock index 3e0f5cd2..881aecbc 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": "b00c887f246ff78cec67da8281097834", + "content-hash": "8d70480aebb8cfe694d402279beba062", "packages": [ { "name": "agencetwogether/hookshelper", @@ -2946,16 +2946,16 @@ }, { "name": "laravel/framework", - "version": "v12.65.0", + "version": "v12.67.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "99a8fb3153f962a323377d6742be08da86bcccb8" + "reference": "fe2cdaba052cbb9f350761ccefc7ac221cbdf0b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/99a8fb3153f962a323377d6742be08da86bcccb8", - "reference": "99a8fb3153f962a323377d6742be08da86bcccb8", + "url": "https://api.github.com/repos/laravel/framework/zipball/fe2cdaba052cbb9f350761ccefc7ac221cbdf0b5", + "reference": "fe2cdaba052cbb9f350761ccefc7ac221cbdf0b5", "shasum": "" }, "require": { @@ -3164,20 +3164,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-08-05T15:33:16+00:00" + "time": "2026-08-18T13:37:47+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.22", + "version": "v0.3.23", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "02b89b39e8972a998db4d5d4ad4719239dd4aee4" + "reference": "b7b4c35e5bc47450f6b6238c6cc9c47ba19b2221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/02b89b39e8972a998db4d5d4ad4719239dd4aee4", - "reference": "02b89b39e8972a998db4d5d4ad4719239dd4aee4", + "url": "https://api.github.com/repos/laravel/prompts/zipball/b7b4c35e5bc47450f6b6238c6cc9c47ba19b2221", + "reference": "b7b4c35e5bc47450f6b6238c6cc9c47ba19b2221", "shasum": "" }, "require": { @@ -3221,9 +3221,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.22" + "source": "https://github.com/laravel/prompts/tree/v0.3.23" }, - "time": "2026-08-04T14:50:50+00:00" + "time": "2026-08-11T18:58:24+00:00" }, { "name": "laravel/serializable-closure", @@ -3357,16 +3357,16 @@ }, { "name": "league/commonmark", - "version": "2.9.2", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "72e9a87efcf41a8e83be3ed0866b69d77565cb12" + "reference": "d2d1aa8b35e072966c89bc0c66cf926e56767dc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/72e9a87efcf41a8e83be3ed0866b69d77565cb12", - "reference": "72e9a87efcf41a8e83be3ed0866b69d77565cb12", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d2d1aa8b35e072966c89bc0c66cf926e56767dc4", + "reference": "d2d1aa8b35e072966c89bc0c66cf926e56767dc4", "shasum": "" }, "require": { @@ -3403,7 +3403,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.10-dev" + "dev-main": "2.11-dev" } }, "autoload": { @@ -3460,7 +3460,7 @@ "type": "tidelift" } ], - "time": "2026-08-11T00:58:45+00:00" + "time": "2026-08-11T16:06:25+00:00" }, { "name": "league/config", @@ -4091,16 +4091,16 @@ }, { "name": "livewire/livewire", - "version": "v4.4.0", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "514b29d5a23594d4e4846494f580268b20c2f11e" + "reference": "0c925c55b4a5c134f2fb147efa4b9f53a837d866" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/514b29d5a23594d4e4846494f580268b20c2f11e", - "reference": "514b29d5a23594d4e4846494f580268b20c2f11e", + "url": "https://api.github.com/repos/livewire/livewire/zipball/0c925c55b4a5c134f2fb147efa4b9f53a837d866", + "reference": "0c925c55b4a5c134f2fb147efa4b9f53a837d866", "shasum": "" }, "require": { @@ -4155,7 +4155,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v4.4.0" + "source": "https://github.com/livewire/livewire/tree/v4.4.1" }, "funding": [ { @@ -4163,7 +4163,7 @@ "type": "github" } ], - "time": "2026-08-10T15:24:22+00:00" + "time": "2026-08-18T11:39:06+00:00" }, { "name": "maennchen/zipstream-php", @@ -4352,24 +4352,24 @@ }, { "name": "masterminds/html5", - "version": "2.10.1", + "version": "2.11.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "fd5018f6815fff903946d0564977b44ce8010e29" + "reference": "a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fd5018f6815fff903946d0564977b44ce8010e29", - "reference": "fd5018f6815fff903946d0564977b44ce8010e29", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7", + "reference": "a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7", "shasum": "" }, "require": { "ext-dom": "*", - "php": ">=5.3.0" + "php": ">=7.4" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9 || ^10" + "phpunit/phpunit": "^6 || ^7 || ^8 || ^9 || ^10" }, "type": "library", "extra": { @@ -4413,9 +4413,9 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.10.1" + "source": "https://github.com/Masterminds/html5-php/tree/2.11.0" }, - "time": "2026-06-23T18:43:15+00:00" + "time": "2026-08-18T06:18:41+00:00" }, { "name": "maxmind-db/reader", @@ -4705,24 +4705,24 @@ }, { "name": "mongodb/mongodb", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/mongodb/mongo-php-library.git", - "reference": "bbb13f969e37e047fd822527543df55fdc1c9298" + "url": "https://github.com/mongodb/mongo-php-library", + "reference": "12e56461166d915e3dd8e4969ad0940ed5207d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/bbb13f969e37e047fd822527543df55fdc1c9298", - "reference": "bbb13f969e37e047fd822527543df55fdc1c9298", + "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/12e56461166d915e3dd8e4969ad0940ed5207d88", + "reference": "12e56461166d915e3dd8e4969ad0940ed5207d88", "shasum": "" }, "require": { "composer-runtime-api": "^2.0", - "ext-mongodb": "^2.2", + "ext-mongodb": "^2.3", "php": "^8.1", "psr/log": "^1.1.4|^2|^3", - "symfony/polyfill-php85": "^1.32" + "symfony/polyfill-php85": "^1.33" }, "replace": { "mongodb/builder": "*" @@ -4774,11 +4774,7 @@ "mongodb", "persistence" ], - "support": { - "issues": "https://github.com/mongodb/mongo-php-library/issues", - "source": "https://github.com/mongodb/mongo-php-library/tree/2.2.0" - }, - "time": "2026-02-11T11:39:56+00:00" + "time": "2026-04-28T12:50:06+00:00" }, { "name": "monolog/monolog", @@ -4883,6 +4879,47 @@ ], "time": "2026-01-02T08:56:05+00:00" }, + { + "name": "neitanod/forceutf8", + "version": "v2.0.4", + "source": { + "type": "git", + "url": "https://github.com/neitanod/forceutf8.git", + "reference": "c1fbe70bfb5ad41b8ec5785056b0e308b40d4831" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/neitanod/forceutf8/zipball/c1fbe70bfb5ad41b8ec5785056b0e308b40d4831", + "reference": "c1fbe70bfb5ad41b8ec5785056b0e308b40d4831", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "ForceUTF8\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastián Grignoli", + "email": "grignoli@gmail.com" + } + ], + "description": "PHP Class Encoding featuring popular Encoding::toUTF8() function --formerly known as forceUTF8()-- that fixes mixed encoded strings.", + "homepage": "https://github.com/neitanod/forceutf8", + "support": { + "issues": "https://github.com/neitanod/forceutf8/issues", + "source": "https://github.com/neitanod/forceutf8/tree/master" + }, + "time": "2019-12-10T14:09:14+00:00" + }, { "name": "nesbot/carbon", "version": "3.13.2", @@ -5064,16 +5101,16 @@ }, { "name": "nette/schema", - "version": "v1.3.5", + "version": "v1.3.6", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + "reference": "c54350438cd6914616f790a49cb424605f421562" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", - "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "url": "https://api.github.com/repos/nette/schema/zipball/c54350438cd6914616f790a49cb424605f421562", + "reference": "c54350438cd6914616f790a49cb424605f421562", "shasum": "" }, "require": { @@ -5125,9 +5162,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.5" + "source": "https://github.com/nette/schema/tree/v1.3.6" }, - "time": "2026-02-23T03:47:12+00:00" + "time": "2026-08-16T21:58:41+00:00" }, { "name": "nette/utils", @@ -5781,16 +5818,16 @@ }, { "name": "pragmarx/google2fa", - "version": "v9.0.0", + "version": "v9.1.0", "source": { "type": "git", "url": "https://github.com/antonioribeiro/google2fa.git", - "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf" + "reference": "f00bc788c555adfb6765c437ff3538e59cd88af1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/e6bc62dd6ae83acc475f57912e27466019a1f2cf", - "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/f00bc788c555adfb6765c437ff3538e59cd88af1", + "reference": "f00bc788c555adfb6765c437ff3538e59cd88af1", "shasum": "" }, "require": { @@ -5798,8 +5835,11 @@ "php": "^7.1|^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^7.5.15|^8.5|^9.0" + "phpstan/phpstan": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.0|^2.0", + "phpunit/phpunit": "~9|~10|~11|~12|~13", + "psalm/plugin-phpunit": "^0.19|^0.20", + "vimeo/psalm": "^5.26|^6.13" }, "type": "library", "autoload": { @@ -5822,14 +5862,23 @@ "keywords": [ "2fa", "Authentication", + "MFA", "Two Factor Authentication", - "google2fa" + "google-authenticator", + "google2fa", + "hotp", + "otp", + "rfc4226", + "rfc6238", + "totp" ], "support": { + "docs": "https://github.com/antonioribeiro/google2fa#readme", "issues": "https://github.com/antonioribeiro/google2fa/issues", - "source": "https://github.com/antonioribeiro/google2fa/tree/v9.0.0" + "security": "https://github.com/antonioribeiro/google2fa/security/policy", + "source": "https://github.com/antonioribeiro/google2fa" }, - "time": "2025-09-19T22:51:08+00:00" + "time": "2026-08-15T13:22:01+00:00" }, { "name": "pragmarx/google2fa-qrcode", @@ -10171,16 +10220,16 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/fruitcake/laravel-debugbar.git", - "reference": "389157fb616e5c5d19d16a88fd9bfcf3e3248e9b" + "reference": "18d1c1c64cc5d7794a2c52a2165fe6121e28ed44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/389157fb616e5c5d19d16a88fd9bfcf3e3248e9b", - "reference": "389157fb616e5c5d19d16a88fd9bfcf3e3248e9b", + "url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/18d1c1c64cc5d7794a2c52a2165fe6121e28ed44", + "reference": "18d1c1c64cc5d7794a2c52a2165fe6121e28ed44", "shasum": "" }, "require": { @@ -10255,7 +10304,7 @@ ], "support": { "issues": "https://github.com/fruitcake/laravel-debugbar/issues", - "source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.4.1" + "source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.4.2" }, "funding": [ { @@ -10267,7 +10316,7 @@ "type": "github" } ], - "time": "2026-08-03T06:23:16+00:00" + "time": "2026-08-20T12:02:04+00:00" }, { "name": "brianium/paratest", @@ -10647,19 +10696,21 @@ }, { "name": "hamcrest/hamcrest-php", - "version": "v2.1.1", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b61cd040da1a4925bc90a51c074f5297e7c0fa52", + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-dom": "*", "php": "^7.4|^8.0" }, "replace": { @@ -10668,13 +10719,15 @@ "kodova/hamcrest-php": "*" }, "require-dev": { + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -10692,9 +10745,9 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v3.0.0" }, - "time": "2025-04-30T06:54:44+00:00" + "time": "2026-03-17T11:56:53+00:00" }, { "name": "jean85/pretty-package-versions", @@ -10908,16 +10961,16 @@ }, { "name": "laravel/sail", - "version": "v1.65.0", + "version": "v1.67.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "d4b92139858d2a189a6302ca133e494f58afe20b" + "reference": "639e03ac12cf23def171770bcab05758045b2642" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/d4b92139858d2a189a6302ca133e494f58afe20b", - "reference": "d4b92139858d2a189a6302ca133e494f58afe20b", + "url": "https://api.github.com/repos/laravel/sail/zipball/639e03ac12cf23def171770bcab05758045b2642", + "reference": "639e03ac12cf23def171770bcab05758045b2642", "shasum": "" }, "require": { @@ -10967,33 +11020,32 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2026-08-03T18:00:17+00:00" + "time": "2026-08-12T13:55:56+00:00" }, { "name": "mockery/mockery", - "version": "1.6.12", + "version": "1.6.15", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "url": "https://api.github.com/repos/mockery/mockery/zipball/967a801bd188989a5669bd280f252d51c0fdc9ee", + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", + "hamcrest/hamcrest-php": "^2.0 || ^3.0", "php": ">=7.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" + "phpunit/phpunit": "^9.6.36", + "symplify/easy-coding-standard": "^13.2.17" }, "type": "library", "autoload": { @@ -11050,7 +11102,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2024-05-16T03:13:13+00:00" + "time": "2026-08-19T19:37:52+00:00" }, { "name": "myclabs/deep-copy", @@ -12622,16 +12674,16 @@ }, { "name": "rector/rector", - "version": "2.6.1", + "version": "2.6.3", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "b8e68f058bca43e01a2e1caa51ef022d6551ed95" + "reference": "7e46709996a4b3dc59e1d6ecbb6a38ace335bd58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/b8e68f058bca43e01a2e1caa51ef022d6551ed95", - "reference": "b8e68f058bca43e01a2e1caa51ef022d6551ed95", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/7e46709996a4b3dc59e1d6ecbb6a38ace335bd58", + "reference": "7e46709996a4b3dc59e1d6ecbb6a38ace335bd58", "shasum": "" }, "require": { @@ -12670,7 +12722,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.6.1" + "source": "https://github.com/rectorphp/rector/tree/2.6.3" }, "funding": [ { @@ -12678,7 +12730,7 @@ "type": "github" } ], - "time": "2026-08-03T17:30:34+00:00" + "time": "2026-08-18T22:01:18+00:00" }, { "name": "sebastian/cli-parser",