diff --git a/README-EN.md b/README-EN.md
index 03282a5b..9feb4016 100644
--- a/README-EN.md
+++ b/README-EN.md
@@ -40,7 +40,7 @@ Welcome to participate in internationalization work, click [here](https://github
- Section H&R
- TGBot
## System Requirements
-- PHP: 8.2|8.3|8.4, must have extensions: bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3
+- PHP: 8.2|8.3|8.4|8.5, must have extensions: bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3
- Mysql: 5.7 latest version or above
- Redis:4.0.0 or above
- Others: supervisor, rsync
diff --git a/README.md b/README.md
index 4d6e8335..f58c49c4 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@
- TGBot
## 系统要求
-- PHP: 8.2|8.3|8.4,必须扩展:bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3
+- PHP: 8.2|8.3|8.4|8.5,必须扩展:bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3
- Mysql: 5.7 最新版或以上版本
- Redis:4.0.0 或以上版本
- 其他:supervisor, rsync
diff --git a/app/Filament/Resources/TorrentCustomFields/Pages/ListTorrentCustomFields.php b/app/Filament/Resources/TorrentCustomFields/Pages/ListTorrentCustomFields.php
new file mode 100644
index 00000000..980981e2
--- /dev/null
+++ b/app/Filament/Resources/TorrentCustomFields/Pages/ListTorrentCustomFields.php
@@ -0,0 +1,19 @@
+components([
+ TextInput::make('name')
+ ->label(__('label.field.name'))
+ ->helperText(__('label.field.name_help'))
+ ->alphaDash()
+ ->required(),
+ TextInput::make('label')
+ ->label(__('label.field.field_label'))
+ ->required(),
+ Select::make('type')
+ ->options((new Field())->getTypeRadioOptions())
+ ->label(__('label.field.type'))
+ ->required(),
+ Checkbox::make('required')
+ ->label(__('label.field.required')),
+ Textarea::make('help')
+ ->label(__('label.field.help'))
+ ->rows(3),
+ Textarea::make('options')
+ ->label(__('label.field.options'))
+ ->rows(3)
+ ->hiddenJs("\$get('type') !== 'radio' && \$get('type') !== 'checkbox' && \$get('type') !== 'select'")
+ ->helperText(__('label.field.options_help')),
+ Checkbox::make('is_single_row')
+ ->label(__('label.field.is_single_row')),
+ TextInput::make('priority')
+ ->label(__('label.priority'))
+ ->numeric(),
+ Textarea::make('display')
+ ->label(__('label.field.display'))
+ ->rows(3)
+ ->helperText(__('label.search_box.custom_fields_display_help')),
+
+ ])
+ ->columns(1);
+ }
+}
diff --git a/app/Filament/Resources/TorrentCustomFields/Tables/TorrentCustomFieldsTable.php b/app/Filament/Resources/TorrentCustomFields/Tables/TorrentCustomFieldsTable.php
new file mode 100644
index 00000000..9f32829b
--- /dev/null
+++ b/app/Filament/Resources/TorrentCustomFields/Tables/TorrentCustomFieldsTable.php
@@ -0,0 +1,40 @@
+columns([
+ TextColumn::make('id'),
+ TextColumn::make('name')->label(__('label.field.name')),
+ TextColumn::make('label')->label(__('label.field.field_label')),
+ TextColumn::make('type')->label(__('label.field.type')),
+ IconColumn::make('required')->boolean()->label(__('label.field.required')),
+ IconColumn::make('is_single_row')->boolean()->label(__('label.field.is_single_row')),
+ TextColumn::make('priority')->label(__('label.priority')),
+ ])
+ ->filters([
+ //
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ ]),
+ ]);
+ }
+}
diff --git a/app/Filament/Resources/TorrentCustomFields/TorrentCustomFieldResource.php b/app/Filament/Resources/TorrentCustomFields/TorrentCustomFieldResource.php
new file mode 100644
index 00000000..27d06b6b
--- /dev/null
+++ b/app/Filament/Resources/TorrentCustomFields/TorrentCustomFieldResource.php
@@ -0,0 +1,59 @@
+ ListTorrentCustomFields::route('/'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/User/UserPasskeyResource.php b/app/Filament/Resources/User/UserPasskeyResource.php
new file mode 100644
index 00000000..69b4cb59
--- /dev/null
+++ b/app/Filament/Resources/User/UserPasskeyResource.php
@@ -0,0 +1,102 @@
+schema([
+ //
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ Tables\Columns\TextColumn::make('id')->sortable()
+ ,
+ Tables\Columns\TextColumn::make('user_id')
+ ->formatStateUsing(fn($state) => username_for_admin($state))
+ ->label(__('label.username'))
+ ,
+ Tables\Columns\TextColumn::make('AAGUID')
+ ->label("AAGUID")
+ ,
+ Tables\Columns\TextColumn::make('credential_id')
+ ->label(__('passkey.fields.credential_id'))
+ ,
+ Tables\Columns\TextColumn::make('counter')
+ ->label(__('passkey.fields.counter'))
+ ,
+ Tables\Columns\TextColumn::make('created_at')
+ ->label(__('label.created_at'))
+ ,
+ ])
+ ->defaultSort('id', 'desc')
+ ->filters([
+ Tables\Filters\Filter::make('user_id')
+ ->form([
+ Forms\Components\TextInput::make('uid')
+ ->label(__('label.username'))
+ ->placeholder('UID')
+ ,
+ ])->query(function (Builder $query, array $data) {
+ return $query->when($data['uid'], fn(Builder $query, $value) => $query->where("user_id", $value));
+ })
+ ,
+ Tables\Filters\Filter::make('credential_id')
+ ->form([
+ Forms\Components\TextInput::make('credential_id')
+ ->label(__('passkey.fields.credential_id'))
+ ->placeholder('Credential ID')
+ ,
+ ])->query(function (Builder $query, array $data) {
+ return $query->when($data['credential_id'], fn(Builder $query, $value) => $query->where("credential_id", $value));
+ })
+ ,
+ ])
+ ->actions([
+ Tables\Actions\DeleteAction::make(),
+ ])
+ ->bulkActions([
+ Tables\Actions\DeleteBulkAction::make(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ManageUserPasskey::route('/'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/User/UserPasskeyResource/Pages/ManageUserPasskey.php b/app/Filament/Resources/User/UserPasskeyResource/Pages/ManageUserPasskey.php
new file mode 100644
index 00000000..fb0455b1
--- /dev/null
+++ b/app/Filament/Resources/User/UserPasskeyResource/Pages/ManageUserPasskey.php
@@ -0,0 +1,17 @@
+requestId, $this->beginUid, $this->endUid, $this->idStr, $this->idRedisKey
);
do_log("$logPrefix, job start ...");
+
$haremAdditionFactor = Setting::get('bonus.harem_addition');
$officialAdditionFactor = Setting::get('bonus.official_addition');
$donortimes_bonus = Setting::get('bonus.donortimes');
diff --git a/app/Models/Passkey.php b/app/Models/Passkey.php
new file mode 100644
index 00000000..ad0c8f78
--- /dev/null
+++ b/app/Models/Passkey.php
@@ -0,0 +1,32 @@
+belongsTo(User::class, 'user_id');
+ }
+
+ public function AAGUID() {
+ $guid = $this->AAGUID;
+ return sprintf(
+ '%s-%s-%s-%s-%s',
+ substr($guid, 0, 8),
+ substr($guid, 8, 4),
+ substr($guid, 12, 4),
+ substr($guid, 16, 4),
+ substr($guid, 20, 12)
+ );
+ }
+
+}
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index 3448477d..e007c51f 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -16,6 +16,7 @@ use App\Models\SecondIcon;
use App\Models\Source;
use App\Models\Standard;
use App\Models\Team;
+use App\Models\TorrentCustomField;
use App\Models\User;
use App\Policies\CodecPolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
@@ -34,6 +35,7 @@ class AuthServiceProvider extends ServiceProvider
Category::class => CodecPolicy::class,
Icon::class => CodecPolicy::class,
SecondIcon::class => CodecPolicy::class,
+ TorrentCustomField::class => CodecPolicy::class,
Codec::class => CodecPolicy::class,
AudioCodec::class => CodecPolicy::class,
diff --git a/app/Repositories/CleanupRepository.php b/app/Repositories/CleanupRepository.php
index 3f7b075a..f1c8fbef 100644
--- a/app/Repositories/CleanupRepository.php
+++ b/app/Repositories/CleanupRepository.php
@@ -37,7 +37,7 @@ class CleanupRepository extends BaseRepository
private static int $oneTaskSeconds = 0;
- private static int $scanSize = 1000;
+ private static int $scanSize = 500;
public static function recordBatch(\Redis $redis, $uid, $torrentId)
{
diff --git a/app/Repositories/UserPasskeyRepository.php b/app/Repositories/UserPasskeyRepository.php
new file mode 100644
index 00000000..a91c7ff6
--- /dev/null
+++ b/app/Repositories/UserPasskeyRepository.php
@@ -0,0 +1,252 @@
+getRequestHost(), $formats);
+ }
+
+ public static function getCreateArgs($userId, $userName)
+ {
+ $WebAuthn = self::createWebAuthn();
+
+ $passkey = Passkey::query()->where('user_id', '=', $userId)->get();
+
+ $credentialIds = array_map(function ($item) {
+ return hex2bin($item['credential_id']);
+ }, $passkey->toArray());
+
+ $createArgs = $WebAuthn->getCreateArgs(bin2hex($userId), $userName, $userName, 60 * 4, true, 'preferred', null, $credentialIds);
+
+ NexusDB::cache_put("{$userId}_passkey_challenge", $WebAuthn->getChallenge(), 60 * 4);
+
+ return $createArgs;
+ }
+
+ public static function processCreate($userId, $clientDataJSON, $attestationObject)
+ {
+ $WebAuthn = self::createWebAuthn();
+
+ $clientDataJSON = !empty($clientDataJSON) ? base64_decode($clientDataJSON) : null;
+ $attestationObject = !empty($attestationObject) ? base64_decode($attestationObject) : null;
+ $challenge = NexusDB::cache_get("{$userId}_passkey_challenge") ?? null;
+
+ $data = $WebAuthn->processCreate($clientDataJSON, $attestationObject, $challenge, false, true, false);
+
+ self::insertUserPasskey(
+ $userId,
+ bin2hex($data->AAGUID),
+ bin2hex($data->credentialId),
+ $data->credentialPublicKey,
+ $data->signatureCounter
+ );
+
+ return true;
+ }
+
+ public static function getGetArgs()
+ {
+ $WebAuthn = self::createWebAuthn();
+
+ $getArgs = $WebAuthn->getGetArgs(null, 60 * 4, true, true, true, true, true, 'preferred');
+
+ return $getArgs;
+ }
+
+ public static function insertUserPasskey($userId, $AAGUID, $credentialId, $publicKey, $counter)
+ {
+ $params = [
+ 'user_id' => $userId,
+ 'AAGUID' => $AAGUID,
+ 'credential_id' => $credentialId,
+ 'public_key' => $publicKey,
+ 'counter' => $counter,
+ ];
+ Passkey::query()->create($params);
+ }
+
+ public static function processGet($challenge, $id, $clientDataJSON, $authenticatorData, $signature, $userHandle)
+ {
+ $WebAuthn = self::createWebAuthn();
+
+ $clientDataJSON = !empty($clientDataJSON) ? base64_decode($clientDataJSON) : null;
+ $id = !empty($id) ? base64_decode($id) : null;
+ $authenticatorData = !empty($authenticatorData) ? base64_decode($authenticatorData) : null;
+ $signature = !empty($signature) ? base64_decode($signature) : null;
+ $userHandle = !empty($userHandle) ? base64_decode($userHandle) : null;
+ $challenge = !empty($challenge) ? base64_decode($challenge) : null;
+
+ $passkey = Passkey::query()->where('credential_id', '=', bin2hex($id))->first();
+ $credentialPublicKey = $passkey->public_key;
+
+ if ($credentialPublicKey === null) {
+ throw new RuntimeException(nexus_trans('passkey.passkey_unknown'));
+ }
+
+ if ($userHandle !== bin2hex($passkey->user_id)) {
+ throw new RuntimeException(nexus_trans('passkey.passkey_invalid'));
+ }
+
+ try {
+ $WebAuthn->processGet($clientDataJSON, $authenticatorData, $signature, $credentialPublicKey, $challenge, null, 'preferred');
+ } catch (Exception $e) {
+ throw new RuntimeException(nexus_trans('passkey.passkey_error') . "\n" . $e->getMessage());
+ }
+
+ $user = $passkey->user;
+ if (!$user) {
+ throw new RuntimeException(nexus_trans('passkey.passkey_user_not_found'));
+ }
+ $user->checkIsNormal();
+
+ $ip = getip();
+ $userRep = new UserRepository();
+ $userRep->saveLoginLog($user->id, $ip, 'Web', true);
+
+ logincookie($user->id, $user->auth_key);
+ return true;
+ }
+
+ public static function delete($userId, $credentialId)
+ {
+ return Passkey::query()->where('user_id', '=', $userId)->where('credential_id', '=', $credentialId)->delete();
+ }
+
+ public static function getList($userId)
+ {
+ return Passkey::query()->where('user_id', '=', $userId)->get();
+ }
+
+ public static function getAaguids()
+ {
+ return NexusDB::remember("aaguids", 60 * 60 * 24 * 14, function () {
+ return json_decode(file_get_contents("https://raw.githubusercontent.com/passkeydeveloper/passkey-authenticator-aaguids/refs/heads/main/combined_aaguid.json"), true);
+ });
+ }
+
+ private static $passkeyvg = 'data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20216%20216%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%2F%3E%3Cpath%20style%3D%22fill%3Anone%22%20d%3D%22M0%200h216v216H0z%22%2F%3E%3Cpath%20d%3D%22M172.32%2096.79c0%2013.78-8.48%2025.5-20.29%2029.78l7.14%2011.83-10.57%2013%2010.57%2012.71-17.04%2022.87-12.01-12.82V125.7c-10.68-4.85-18.15-15.97-18.15-28.91%200-17.4%2013.51-31.51%2030.18-31.51%2016.66%200%2030.17%2014.11%2030.17%2031.51m-30.18%204.82c4.02%200%207.28-3.4%207.28-7.6s-3.26-7.61-7.28-7.61-7.28%203.4-7.28%207.61c-.01%204.2%203.26%207.6%207.28%207.6%22%20style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23353535%22%2F%3E%3Cpath%20d%3D%22M172.41%2096.88c0%2013.62-8.25%2025.23-19.83%2029.67l6.58%2011.84-9.73%2013%209.73%2012.71-17.03%2023.05v-85.54c4.02%200%207.28-3.41%207.28-7.6%200-4.2-3.26-7.61-7.28-7.61V65.28c16.73%200%2030.28%2014.15%2030.28%2031.6m-52.17%2034.55c-9.75-8-16.3-20.3-17.2-34.27H50.8c-10.96%200-19.84%209.01-19.84%2020.13v25.17c0%205.56%204.44%2010.07%209.92%2010.07h69.44c5.48%200%209.92-4.51%209.92-10.07z%22%20style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%22%2F%3E%3Cpath%20d%3D%22M73.16%2091.13c-2.42-.46-4.82-.89-7.11-1.86-8.65-3.63-13.69-10.32-15.32-19.77-1.12-6.47-.59-12.87%202.03-18.92%203.72-8.6%2010.39-13.26%2019.15-14.84%205.24-.94%2010.46-.73%2015.5%201.15%207.59%202.82%2012.68%208.26%2015.03%2016.24%202.38%208.05%202.03%2016.1-1.56%2023.72-3.72%207.96-10.21%2012.23-18.42%2013.9-.68.14-1.37.27-2.05.41-2.41-.03-4.83-.03-7.25-.03%22%20style%3D%22fill%3A%23141313%22%2F%3E%3C%2Fsvg%3E';
+
+ public static function renderLogin()
+ {
+ printf('
', self::$passkeyvg, nexus_trans('passkey.passkey'), nexus_trans('passkey.passkey'));
+ ?>
+
+ %s
%s', nexus_trans('passkey.passkey_create'), nexus_trans('passkey.passkey_desc'));
+ ?>
+
+ | %s | ', nexus_trans('passkey.passkey_empty'));
+ } else {
+ $AAGUIDS = self::getAaguids();
+ foreach ($passkeys as $passkey) {
+ ?>
+
+
+
+ AAGUID()];
+ if (isset($meta)) {
+ printf('  %s (%s)', $meta['icon_dark'], $meta['name'], $meta['name'], $passkey->credential_id);
+ } else {
+ printf('  %s', self::$passkeyvg, $passkey->credential_id, $passkey->credential_id);
+ }
+ printf(' %s%s ', nexus_trans('passkey.passkey_created_at'), gettime($passkey->created_at));
+ printf(' ', $passkey->credential_id, nexus_trans('passkey.passkey_delete'))
+ ?>
+
+ |
+
+
+
+
+ =8.2 <8.5",
+ "php": ">=8.2 <8.6",
"ext-bcmath": "*",
"ext-curl": "*",
"ext-gd": "*",
@@ -49,6 +49,7 @@
"laravel/passport": "^12.0",
"laravel/sanctum": "^4.0",
"laravel/tinker": "^2.5",
+ "lbuchs/webauthn": "^2.2",
"league/flysystem-sftp-v3": "^3.0",
"meilisearch/meilisearch-php": "^1.0",
"orangehill/iseed": "^3.0",
diff --git a/composer.lock b/composer.lock
index 0013333a..62b57582 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "282076e99007f806ed211e60021107e0",
+ "content-hash": "a4e381852542cfa642548a084130dc77",
"packages": [
{
"name": "anourvalar/eloquent-serialize",
- "version": "1.3.4",
+ "version": "1.3.5",
"source": {
"type": "git",
"url": "https://github.com/AnourValar/eloquent-serialize.git",
- "reference": "0934a98866e02b73e38696961a9d7984b834c9d9"
+ "reference": "1a7dead8d532657e5358f8f27c0349373517681e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/0934a98866e02b73e38696961a9d7984b834c9d9",
- "reference": "0934a98866e02b73e38696961a9d7984b834c9d9",
+ "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/1a7dead8d532657e5358f8f27c0349373517681e",
+ "reference": "1a7dead8d532657e5358f8f27c0349373517681e",
"shasum": ""
},
"require": {
@@ -68,9 +68,9 @@
],
"support": {
"issues": "https://github.com/AnourValar/eloquent-serialize/issues",
- "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.3.4"
+ "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.3.5"
},
- "time": "2025-07-30T15:45:57+00:00"
+ "time": "2025-12-04T13:38:21+00:00"
},
{
"name": "blade-ui-kit/blade-heroicons",
@@ -224,16 +224,16 @@
},
{
"name": "brick/math",
- "version": "0.14.0",
+ "version": "0.14.1",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2"
+ "reference": "f05858549e5f9d7bb45875a75583240a38a281d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2",
- "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2",
+ "url": "https://api.github.com/repos/brick/math/zipball/f05858549e5f9d7bb45875a75583240a38a281d0",
+ "reference": "f05858549e5f9d7bb45875a75583240a38a281d0",
"shasum": ""
},
"require": {
@@ -272,7 +272,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.14.0"
+ "source": "https://github.com/brick/math/tree/0.14.1"
},
"funding": [
{
@@ -280,7 +280,7 @@
"type": "github"
}
],
- "time": "2025-08-29T12:40:03+00:00"
+ "time": "2025-11-24T14:40:29+00:00"
},
{
"name": "calebporzio/sushi",
@@ -407,16 +407,16 @@
},
{
"name": "chillerlan/php-qrcode",
- "version": "5.0.4",
+ "version": "5.0.5",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git",
- "reference": "390393e97a6e42ccae0e0d6205b8d4200f7ddc43"
+ "reference": "7b66282572fc14075c0507d74d9837dab25b38d6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/390393e97a6e42ccae0e0d6205b8d4200f7ddc43",
- "reference": "390393e97a6e42ccae0e0d6205b8d4200f7ddc43",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/7b66282572fc14075c0507d74d9837dab25b38d6",
+ "reference": "7b66282572fc14075c0507d74d9837dab25b38d6",
"shasum": ""
},
"require": {
@@ -427,7 +427,7 @@
"require-dev": {
"chillerlan/php-authenticator": "^4.3.1 || ^5.2.1",
"ext-fileinfo": "*",
- "phan/phan": "^5.5.1",
+ "phan/phan": "^5.5.2",
"phpcompatibility/php-compatibility": "10.x-dev",
"phpmd/phpmd": "^2.15",
"phpunit/phpunit": "^9.6",
@@ -496,7 +496,7 @@
"type": "Ko-Fi"
}
],
- "time": "2025-09-19T17:30:27+00:00"
+ "time": "2025-11-23T23:51:44+00:00"
},
{
"name": "chillerlan/php-settings-container",
@@ -566,16 +566,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.5.8",
+ "version": "1.5.10",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "719026bb30813accb68271fee7e39552a58e9f65"
+ "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/719026bb30813accb68271fee7e39552a58e9f65",
- "reference": "719026bb30813accb68271fee7e39552a58e9f65",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63",
+ "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63",
"shasum": ""
},
"require": {
@@ -622,7 +622,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.8"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.10"
},
"funding": [
{
@@ -634,7 +634,7 @@
"type": "github"
}
],
- "time": "2025-08-20T18:49:47+00:00"
+ "time": "2025-12-08T15:06:51+00:00"
},
{
"name": "cybercog/laravel-clickhouse",
@@ -642,25 +642,25 @@
"source": {
"type": "git",
"url": "https://github.com/cybercog/laravel-clickhouse.git",
- "reference": "ba90e0916ab0b7af594fa6c3874de9091afbd923"
+ "reference": "7b7aa5eb856c9d94ca450b7c7ff45d7a8a1381c5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cybercog/laravel-clickhouse/zipball/ba90e0916ab0b7af594fa6c3874de9091afbd923",
- "reference": "ba90e0916ab0b7af594fa6c3874de9091afbd923",
+ "url": "https://api.github.com/repos/cybercog/laravel-clickhouse/zipball/7b7aa5eb856c9d94ca450b7c7ff45d7a8a1381c5",
+ "reference": "7b7aa5eb856c9d94ca450b7c7ff45d7a8a1381c5",
"shasum": ""
},
"require": {
- "illuminate/console": "^8.0|^9.0|^10.1.3|^11.0|^12.0",
- "illuminate/contracts": "^8.0|^9.0|^10.1.3|^11.0|^12.0",
- "illuminate/filesystem": "^8.0|^9.0|^10.1.3|^11.0|^12.0",
- "illuminate/support": "^8.0|^9.0|^10.1.3|^11.0|^12.0",
- "php": "^7.4|^8.0",
+ "illuminate/console": "^11.0|^12.0",
+ "illuminate/contracts": "^11.0|^12.0",
+ "illuminate/filesystem": "^11.0|^12.0",
+ "illuminate/support": "^11.0|^12.0",
+ "php": "^8.2",
"smi2/phpclickhouse": "^1.5.3"
},
"require-dev": {
- "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
- "phpunit/phpunit": "^9.6|^10.5|^11.5"
+ "orchestra/testbench": "^9.0|^10.0",
+ "phpunit/phpunit": "^11.5"
},
"default-branch": true,
"type": "library",
@@ -712,7 +712,7 @@
"type": "custom"
}
],
- "time": "2025-06-16T07:24:59+00:00"
+ "time": "2025-11-23T12:00:05+00:00"
},
{
"name": "danharrin/date-format-converter",
@@ -1130,29 +1130,28 @@
},
{
"name": "dragonmantank/cron-expression",
- "version": "v3.4.0",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "8c784d071debd117328803d86b2097615b457500"
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
- "reference": "8c784d071debd117328803d86b2097615b457500",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013",
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013",
"shasum": ""
},
"require": {
- "php": "^7.2|^8.0",
- "webmozart/assert": "^1.0"
+ "php": "^8.2|^8.3|^8.4|^8.5"
},
"replace": {
"mtdowling/cron-expression": "^1.0"
},
"require-dev": {
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.0",
- "phpunit/phpunit": "^7.0|^8.0|^9.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.32|^2.1.31",
+ "phpunit/phpunit": "^8.5.48|^9.0"
},
"type": "library",
"extra": {
@@ -1183,7 +1182,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": [
{
@@ -1191,7 +1190,7 @@
"type": "github"
}
],
- "time": "2024-10-09T13:47:03+00:00"
+ "time": "2025-10-31T18:51:33+00:00"
},
{
"name": "egulias/email-validator",
@@ -1440,16 +1439,16 @@
},
{
"name": "filament/actions",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/actions.git",
- "reference": "4ec445a337f5d547469896dff3d4f30c5c394d71"
+ "reference": "8c436949d3fa5cc79a2aeb0b6d1741c5555e9d33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/actions/zipball/4ec445a337f5d547469896dff3d4f30c5c394d71",
- "reference": "4ec445a337f5d547469896dff3d4f30c5c394d71",
+ "url": "https://api.github.com/repos/filamentphp/actions/zipball/8c436949d3fa5cc79a2aeb0b6d1741c5555e9d33",
+ "reference": "8c436949d3fa5cc79a2aeb0b6d1741c5555e9d33",
"shasum": ""
},
"require": {
@@ -1458,7 +1457,7 @@
"filament/infolists": "self.version",
"filament/notifications": "self.version",
"filament/support": "self.version",
- "league/csv": "^9.16",
+ "league/csv": "^9.27",
"openspout/openspout": "^4.23",
"php": "^8.2"
},
@@ -1485,20 +1484,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:20+00:00"
+ "time": "2025-12-09T09:55:17+00:00"
},
{
"name": "filament/filament",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/panels.git",
- "reference": "5aeda3f8bb64e85ec3eb16bc7f5bee65b134f66c"
+ "reference": "2387e41380a304c411d420b17e965e11a8e24711"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/panels/zipball/5aeda3f8bb64e85ec3eb16bc7f5bee65b134f66c",
- "reference": "5aeda3f8bb64e85ec3eb16bc7f5bee65b134f66c",
+ "url": "https://api.github.com/repos/filamentphp/panels/zipball/2387e41380a304c411d420b17e965e11a8e24711",
+ "reference": "2387e41380a304c411d420b17e965e11a8e24711",
"shasum": ""
},
"require": {
@@ -1512,7 +1511,7 @@
"filament/tables": "self.version",
"filament/widgets": "self.version",
"php": "^8.2",
- "pragmarx/google2fa": "^8.0",
+ "pragmarx/google2fa": "^8.0|^9.0",
"pragmarx/google2fa-qrcode": "^3.0"
},
"type": "library",
@@ -1542,20 +1541,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:23+00:00"
+ "time": "2025-12-09T09:56:39+00:00"
},
{
"name": "filament/forms",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/forms.git",
- "reference": "d6482a25e5f0a876a24a638df221c52011678363"
+ "reference": "6f4843f45906e0583997d2543fb747e07720a774"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/forms/zipball/d6482a25e5f0a876a24a638df221c52011678363",
- "reference": "d6482a25e5f0a876a24a638df221c52011678363",
+ "url": "https://api.github.com/repos/filamentphp/forms/zipball/6f4843f45906e0583997d2543fb747e07720a774",
+ "reference": "6f4843f45906e0583997d2543fb747e07720a774",
"shasum": ""
},
"require": {
@@ -1592,20 +1591,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:24+00:00"
+ "time": "2025-12-09T09:53:27+00:00"
},
{
"name": "filament/infolists",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/infolists.git",
- "reference": "0817b9c0e5e15e0e19b57e01322083b80cf4b715"
+ "reference": "0a85cf19262610d607d873644d4fb33e620fe126"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/infolists/zipball/0817b9c0e5e15e0e19b57e01322083b80cf4b715",
- "reference": "0817b9c0e5e15e0e19b57e01322083b80cf4b715",
+ "url": "https://api.github.com/repos/filamentphp/infolists/zipball/0a85cf19262610d607d873644d4fb33e620fe126",
+ "reference": "0a85cf19262610d607d873644d4fb33e620fe126",
"shasum": ""
},
"require": {
@@ -1637,20 +1636,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:20+00:00"
+ "time": "2025-11-28T11:18:41+00:00"
},
{
"name": "filament/notifications",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/notifications.git",
- "reference": "33c1d2291747873838c0eedea73c9f7e9784eee7"
+ "reference": "f8657e9b98f549f316daf74cf24a659b85a10e12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/notifications/zipball/33c1d2291747873838c0eedea73c9f7e9784eee7",
- "reference": "33c1d2291747873838c0eedea73c9f7e9784eee7",
+ "url": "https://api.github.com/repos/filamentphp/notifications/zipball/f8657e9b98f549f316daf74cf24a659b85a10e12",
+ "reference": "f8657e9b98f549f316daf74cf24a659b85a10e12",
"shasum": ""
},
"require": {
@@ -1684,20 +1683,66 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:25+00:00"
+ "time": "2025-11-28T11:21:34+00:00"
},
{
- "name": "filament/schemas",
- "version": "v4.1.0",
+ "name": "filament/query-builder",
+ "version": "v4.3.1",
"source": {
"type": "git",
- "url": "https://github.com/filamentphp/schemas.git",
- "reference": "d5709fcc269c268436ae74292338f77e4f5a2aa4"
+ "url": "https://github.com/filamentphp/query-builder.git",
+ "reference": "2f7e138801e7630c56a7588651497a7f468a9149"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/schemas/zipball/d5709fcc269c268436ae74292338f77e4f5a2aa4",
- "reference": "d5709fcc269c268436ae74292338f77e4f5a2aa4",
+ "url": "https://api.github.com/repos/filamentphp/query-builder/zipball/2f7e138801e7630c56a7588651497a7f468a9149",
+ "reference": "2f7e138801e7630c56a7588651497a7f468a9149",
+ "shasum": ""
+ },
+ "require": {
+ "filament/actions": "self.version",
+ "filament/forms": "self.version",
+ "filament/schemas": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\QueryBuilder\\QueryBuilderServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Filament\\QueryBuilder\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A powerful query builder component for Filament.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2025-12-09T09:54:30+00:00"
+ },
+ {
+ "name": "filament/schemas",
+ "version": "v4.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/schemas.git",
+ "reference": "02ec53daed03d2feae75832db0920c4357079133"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/schemas/zipball/02ec53daed03d2feae75832db0920c4357079133",
+ "reference": "02ec53daed03d2feae75832db0920c4357079133",
"shasum": ""
},
"require": {
@@ -1729,20 +1774,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:21+00:00"
+ "time": "2025-12-05T14:53:55+00:00"
},
{
"name": "filament/support",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/support.git",
- "reference": "4fc9653075d5be21154da130386826b7d9230ae6"
+ "reference": "7c644018cc5c9a74503039ecf7ff10f340123a8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/support/zipball/4fc9653075d5be21154da130386826b7d9230ae6",
- "reference": "4fc9653075d5be21154da130386826b7d9230ae6",
+ "url": "https://api.github.com/repos/filamentphp/support/zipball/7c644018cc5c9a74503039ecf7ff10f340123a8c",
+ "reference": "7c644018cc5c9a74503039ecf7ff10f340123a8c",
"shasum": ""
},
"require": {
@@ -1787,25 +1832,26 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:19+00:00"
+ "time": "2025-12-05T14:53:38+00:00"
},
{
"name": "filament/tables",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/tables.git",
- "reference": "c3dc3ff22cc76b4ed21353c66b3669d0c5c4cd9c"
+ "reference": "93227775fff27b0662c5f82e2e7ca6ad20cdf42c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/tables/zipball/c3dc3ff22cc76b4ed21353c66b3669d0c5c4cd9c",
- "reference": "c3dc3ff22cc76b4ed21353c66b3669d0c5c4cd9c",
+ "url": "https://api.github.com/repos/filamentphp/tables/zipball/93227775fff27b0662c5f82e2e7ca6ad20cdf42c",
+ "reference": "93227775fff27b0662c5f82e2e7ca6ad20cdf42c",
"shasum": ""
},
"require": {
"filament/actions": "self.version",
"filament/forms": "self.version",
+ "filament/query-builder": "self.version",
"filament/support": "self.version",
"php": "^8.2"
},
@@ -1832,20 +1878,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-29T08:02:20+00:00"
+ "time": "2025-12-09T09:54:45+00:00"
},
{
"name": "filament/widgets",
- "version": "v4.1.0",
+ "version": "v4.3.1",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/widgets.git",
- "reference": "5ad3577cf0d3f485678c617facb009f7cef978ac"
+ "reference": "555102cf4aea7f24977d24dd36f4bad0f7be528c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filamentphp/widgets/zipball/5ad3577cf0d3f485678c617facb009f7cef978ac",
- "reference": "5ad3577cf0d3f485678c617facb009f7cef978ac",
+ "url": "https://api.github.com/repos/filamentphp/widgets/zipball/555102cf4aea7f24977d24dd36f4bad0f7be528c",
+ "reference": "555102cf4aea7f24977d24dd36f4bad0f7be528c",
"shasum": ""
},
"require": {
@@ -1876,7 +1922,7 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
- "time": "2025-09-21T21:08:23+00:00"
+ "time": "2025-12-09T09:56:57+00:00"
},
{
"name": "firebase/php-jwt",
@@ -2017,31 +2063,31 @@
},
{
"name": "fruitcake/php-cors",
- "version": "v1.3.0",
+ "version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/php-cors.git",
- "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b"
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b",
- "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b",
+ "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
"shasum": ""
},
"require": {
- "php": "^7.4|^8.0",
- "symfony/http-foundation": "^4.4|^5.4|^6|^7"
+ "php": "^8.1",
+ "symfony/http-foundation": "^5.4|^6.4|^7.3|^8"
},
"require-dev": {
- "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan": "^2",
"phpunit/phpunit": "^9",
- "squizlabs/php_codesniffer": "^3.5"
+ "squizlabs/php_codesniffer": "^4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "1.3-dev"
}
},
"autoload": {
@@ -2072,7 +2118,7 @@
],
"support": {
"issues": "https://github.com/fruitcake/php-cors/issues",
- "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0"
+ "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0"
},
"funding": [
{
@@ -2084,7 +2130,7 @@
"type": "github"
}
],
- "time": "2023-10-12T05:21:21+00:00"
+ "time": "2025-12-03T09:33:47+00:00"
},
{
"name": "geoip2/geoip2",
@@ -2810,16 +2856,16 @@
},
{
"name": "kirschbaum-development/eloquent-power-joins",
- "version": "4.2.8",
+ "version": "4.2.11",
"source": {
"type": "git",
"url": "https://github.com/kirschbaum-development/eloquent-power-joins.git",
- "reference": "d67c7e2efa886d2ef8bb29e86c3ddb9438ac6390"
+ "reference": "0e3e3372992e4bf82391b3c7b84b435c3db73588"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/d67c7e2efa886d2ef8bb29e86c3ddb9438ac6390",
- "reference": "d67c7e2efa886d2ef8bb29e86c3ddb9438ac6390",
+ "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/0e3e3372992e4bf82391b3c7b84b435c3db73588",
+ "reference": "0e3e3372992e4bf82391b3c7b84b435c3db73588",
"shasum": ""
},
"require": {
@@ -2867,22 +2913,22 @@
],
"support": {
"issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues",
- "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.8"
+ "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.11"
},
- "time": "2025-08-14T18:43:05+00:00"
+ "time": "2025-12-17T00:37:48+00:00"
},
{
"name": "laravel/framework",
- "version": "v12.32.5",
+ "version": "v12.43.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "77b2740391cd2a825ba59d6fada45e9b8b9bcc5a"
+ "reference": "195b893593a9298edee177c0844132ebaa02102f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/77b2740391cd2a825ba59d6fada45e9b8b9bcc5a",
- "reference": "77b2740391cd2a825ba59d6fada45e9b8b9bcc5a",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/195b893593a9298edee177c0844132ebaa02102f",
+ "reference": "195b893593a9298edee177c0844132ebaa02102f",
"shasum": ""
},
"require": {
@@ -2970,6 +3016,7 @@
"illuminate/process": "self.version",
"illuminate/queue": "self.version",
"illuminate/redis": "self.version",
+ "illuminate/reflection": "self.version",
"illuminate/routing": "self.version",
"illuminate/session": "self.version",
"illuminate/support": "self.version",
@@ -2994,13 +3041,13 @@
"league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10",
"opis/json-schema": "^2.4.1",
- "orchestra/testbench-core": "^10.6.5",
+ "orchestra/testbench-core": "^10.8.1",
"pda/pheanstalk": "^5.0.6|^7.0.0",
"php-http/discovery": "^1.15",
"phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
"predis/predis": "^2.3|^3.0",
- "resend/resend-php": "^0.10.0",
+ "resend/resend-php": "^0.10.0|^1.0",
"symfony/cache": "^7.2.0",
"symfony/http-client": "^7.2.0",
"symfony/psr-http-message-bridge": "^7.2.0",
@@ -3034,7 +3081,7 @@
"predis/predis": "Required to use the predis connector (^2.3|^3.0).",
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
- "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).",
+ "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).",
"symfony/cache": "Required to PSR-6 cache bridge (^7.2).",
"symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).",
"symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).",
@@ -3056,6 +3103,7 @@
"src/Illuminate/Filesystem/functions.php",
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Log/functions.php",
+ "src/Illuminate/Reflection/helpers.php",
"src/Illuminate/Support/functions.php",
"src/Illuminate/Support/helpers.php"
],
@@ -3064,7 +3112,8 @@
"Illuminate\\Support\\": [
"src/Illuminate/Macroable/",
"src/Illuminate/Collections/",
- "src/Illuminate/Conditionable/"
+ "src/Illuminate/Conditionable/",
+ "src/Illuminate/Reflection/"
]
}
},
@@ -3088,20 +3137,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2025-09-30T17:39:22+00:00"
+ "time": "2025-12-16T18:53:08+00:00"
},
{
"name": "laravel/horizon",
- "version": "v5.34.0",
+ "version": "v5.41.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/horizon.git",
- "reference": "c110ff6ed494b57beb6b4102a92bb4bf896bb774"
+ "reference": "eb6738246ab9d3450b705126b9794dfb0ea371b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/horizon/zipball/c110ff6ed494b57beb6b4102a92bb4bf896bb774",
- "reference": "c110ff6ed494b57beb6b4102a92bb4bf896bb774",
+ "url": "https://api.github.com/repos/laravel/horizon/zipball/eb6738246ab9d3450b705126b9794dfb0ea371b3",
+ "reference": "eb6738246ab9d3450b705126b9794dfb0ea371b3",
"shasum": ""
},
"require": {
@@ -3121,9 +3170,8 @@
},
"require-dev": {
"mockery/mockery": "^1.0",
- "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
+ "orchestra/testbench": "^7.55|^8.36|^9.15|^10.8",
"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": {
@@ -3166,9 +3214,9 @@
],
"support": {
"issues": "https://github.com/laravel/horizon/issues",
- "source": "https://github.com/laravel/horizon/tree/v5.34.0"
+ "source": "https://github.com/laravel/horizon/tree/v5.41.0"
},
- "time": "2025-09-12T15:15:45+00:00"
+ "time": "2025-12-14T15:55:28+00:00"
},
{
"name": "laravel/passport",
@@ -3248,16 +3296,16 @@
},
{
"name": "laravel/prompts",
- "version": "v0.3.7",
+ "version": "v0.3.8",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc"
+ "reference": "096748cdfb81988f60090bbb839ce3205ace0d35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/a1891d362714bc40c8d23b0b1d7090f022ea27cc",
- "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35",
+ "reference": "096748cdfb81988f60090bbb839ce3205ace0d35",
"shasum": ""
},
"require": {
@@ -3273,7 +3321,7 @@
"require-dev": {
"illuminate/collections": "^10.0|^11.0|^12.0",
"mockery/mockery": "^1.5",
- "pestphp/pest": "^2.3|^3.4",
+ "pestphp/pest": "^2.3|^3.4|^4.0",
"phpstan/phpstan": "^1.12.28",
"phpstan/phpstan-mockery": "^1.1.3"
},
@@ -3301,22 +3349,22 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.3.7"
+ "source": "https://github.com/laravel/prompts/tree/v0.3.8"
},
- "time": "2025-09-19T13:47:56+00:00"
+ "time": "2025-11-21T20:52:52+00:00"
},
{
"name": "laravel/sanctum",
- "version": "v4.2.0",
+ "version": "v4.2.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/sanctum.git",
- "reference": "fd6df4f79f48a72992e8d29a9c0ee25422a0d677"
+ "reference": "f5fb373be39a246c74a060f2cf2ae2c2145b3664"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sanctum/zipball/fd6df4f79f48a72992e8d29a9c0ee25422a0d677",
- "reference": "fd6df4f79f48a72992e8d29a9c0ee25422a0d677",
+ "url": "https://api.github.com/repos/laravel/sanctum/zipball/f5fb373be39a246c74a060f2cf2ae2c2145b3664",
+ "reference": "f5fb373be39a246c74a060f2cf2ae2c2145b3664",
"shasum": ""
},
"require": {
@@ -3330,9 +3378,8 @@
},
"require-dev": {
"mockery/mockery": "^1.6",
- "orchestra/testbench": "^9.0|^10.0",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^11.3"
+ "orchestra/testbench": "^9.15|^10.8",
+ "phpstan/phpstan": "^1.10"
},
"type": "library",
"extra": {
@@ -3367,20 +3414,20 @@
"issues": "https://github.com/laravel/sanctum/issues",
"source": "https://github.com/laravel/sanctum"
},
- "time": "2025-07-09T19:45:24+00:00"
+ "time": "2025-11-21T13:59:03+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.5",
+ "version": "v2.0.7",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "3832547db6e0e2f8bb03d4093857b378c66eceed"
+ "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3832547db6e0e2f8bb03d4093857b378c66eceed",
- "reference": "3832547db6e0e2f8bb03d4093857b378c66eceed",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
+ "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
"shasum": ""
},
"require": {
@@ -3389,7 +3436,7 @@
"require-dev": {
"illuminate/support": "^10.0|^11.0|^12.0",
"nesbot/carbon": "^2.67|^3.0",
- "pestphp/pest": "^2.36|^3.0",
+ "pestphp/pest": "^2.36|^3.0|^4.0",
"phpstan/phpstan": "^2.0",
"symfony/var-dumper": "^6.2.0|^7.0.0"
},
@@ -3428,20 +3475,20 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2025-09-22T17:29:40+00:00"
+ "time": "2025-11-21T20:52:36+00:00"
},
{
"name": "laravel/tinker",
- "version": "v2.10.1",
+ "version": "v2.10.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
- "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3"
+ "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3",
- "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/3bcb5f62d6f837e0f093a601e26badafb127bd4c",
+ "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c",
"shasum": ""
},
"require": {
@@ -3492,40 +3539,85 @@
],
"support": {
"issues": "https://github.com/laravel/tinker/issues",
- "source": "https://github.com/laravel/tinker/tree/v2.10.1"
+ "source": "https://github.com/laravel/tinker/tree/v2.10.2"
},
- "time": "2025-01-27T14:24:01+00:00"
+ "time": "2025-11-20T16:29:12+00:00"
},
{
- "name": "lcobucci/clock",
- "version": "3.3.1",
+ "name": "lbuchs/webauthn",
+ "version": "v2.2.0",
"source": {
"type": "git",
- "url": "https://github.com/lcobucci/clock.git",
- "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b"
+ "url": "https://github.com/lbuchs/WebAuthn.git",
+ "reference": "20adb4a240c3997bd8cac7dc4dde38ab0bea0ed1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b",
- "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b",
+ "url": "https://api.github.com/repos/lbuchs/WebAuthn/zipball/20adb4a240c3997bd8cac7dc4dde38ab0bea0ed1",
+ "reference": "20adb4a240c3997bd8cac7dc4dde38ab0bea0ed1",
"shasum": ""
},
"require": {
- "php": "~8.2.0 || ~8.3.0 || ~8.4.0",
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "lbuchs\\WebAuthn\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lukas Buchs",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple PHP WebAuthn (FIDO2) server library",
+ "homepage": "https://github.com/lbuchs/webauthn",
+ "keywords": [
+ "Authentication",
+ "webauthn"
+ ],
+ "support": {
+ "issues": "https://github.com/lbuchs/WebAuthn/issues",
+ "source": "https://github.com/lbuchs/WebAuthn/tree/v2.2.0"
+ },
+ "time": "2024-07-04T07:17:40+00:00"
+ },
+ {
+ "name": "lcobucci/clock",
+ "version": "3.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lcobucci/clock.git",
+ "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/lcobucci/clock/zipball/a3139d9e97d47826f27e6a17bb63f13621f86058",
+ "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058",
+ "shasum": ""
+ },
+ "require": {
+ "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": {
@@ -3546,7 +3638,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": [
{
@@ -3558,26 +3650,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": {
@@ -3619,7 +3711,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": [
{
@@ -3631,20 +3723,20 @@
"type": "patreon"
}
],
- "time": "2025-01-26T21:29:45+00:00"
+ "time": "2025-10-17T11:30:53+00:00"
},
{
"name": "league/commonmark",
- "version": "2.7.1",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "10732241927d3971d28e7ea7b5712721fa2296ca"
+ "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca",
- "reference": "10732241927d3971d28e7ea7b5712721fa2296ca",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
+ "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
"shasum": ""
},
"require": {
@@ -3681,7 +3773,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.8-dev"
+ "dev-main": "2.9-dev"
}
},
"autoload": {
@@ -3738,7 +3830,7 @@
"type": "tidelift"
}
],
- "time": "2025-07-20T12:47:49+00:00"
+ "time": "2025-11-26T21:48:24+00:00"
},
{
"name": "league/config",
@@ -3824,16 +3916,16 @@
},
{
"name": "league/csv",
- "version": "9.26.0",
+ "version": "9.27.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
- "reference": "7fce732754d043f3938899e5183e2d0f3d31b571"
+ "reference": "26de738b8fccf785397d05ee2fc07b6cd8749797"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/csv/zipball/7fce732754d043f3938899e5183e2d0f3d31b571",
- "reference": "7fce732754d043f3938899e5183e2d0f3d31b571",
+ "url": "https://api.github.com/repos/thephpleague/csv/zipball/26de738b8fccf785397d05ee2fc07b6cd8749797",
+ "reference": "26de738b8fccf785397d05ee2fc07b6cd8749797",
"shasum": ""
},
"require": {
@@ -3911,7 +4003,7 @@
"type": "github"
}
],
- "time": "2025-10-01T11:24:54+00:00"
+ "time": "2025-10-25T08:35:20+00:00"
},
{
"name": "league/event",
@@ -3969,16 +4061,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": {
@@ -4046,22 +4138,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-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": {
@@ -4095,9 +4187,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/flysystem-sftp-v3",
@@ -4294,33 +4386,38 @@
},
{
"name": "league/uri",
- "version": "7.5.1",
+ "version": "7.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
- "reference": "81fb5145d2644324614cc532b28efd0215bda430"
+ "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430",
- "reference": "81fb5145d2644324614cc532b28efd0215bda430",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
+ "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
"shasum": ""
},
"require": {
- "league/uri-interfaces": "^7.5",
- "php": "^8.1"
+ "league/uri-interfaces": "^7.7",
+ "php": "^8.1",
+ "psr/http-factory": "^1"
},
"conflict": {
"league/uri-schemes": "^1.0"
},
"suggest": {
"ext-bcmath": "to improve IPV4 host parsing",
+ "ext-dom": "to convert the URI into an HTML anchor tag",
"ext-fileinfo": "to create Data URI from file contennts",
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
+ "ext-uri": "to use the PHP native URI class",
"jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain",
"league/uri-components": "Needed to easily manipulate URI objects components",
+ "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP",
"php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle WHATWG URL",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -4348,6 +4445,7 @@
"description": "URI manipulation library",
"homepage": "https://uri.thephpleague.com",
"keywords": [
+ "URN",
"data-uri",
"file-uri",
"ftp",
@@ -4360,9 +4458,11 @@
"psr-7",
"query-string",
"querystring",
+ "rfc2141",
"rfc3986",
"rfc3987",
"rfc6570",
+ "rfc8141",
"uri",
"uri-template",
"url",
@@ -4372,7 +4472,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri/tree/7.5.1"
+ "source": "https://github.com/thephpleague/uri/tree/7.7.0"
},
"funding": [
{
@@ -4380,34 +4480,37 @@
"type": "github"
}
],
- "time": "2024-12-08T08:40:02+00:00"
+ "time": "2025-12-07T16:02:06+00:00"
},
{
"name": "league/uri-components",
- "version": "7.5.1",
+ "version": "7.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-components.git",
- "reference": "4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f"
+ "reference": "005f8693ce8c1f16f80e88a05cbf08da04c1c374"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f",
- "reference": "4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f",
+ "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/005f8693ce8c1f16f80e88a05cbf08da04c1c374",
+ "reference": "005f8693ce8c1f16f80e88a05cbf08da04c1c374",
"shasum": ""
},
"require": {
- "league/uri": "^7.5",
+ "league/uri": "^7.7",
"php": "^8.1"
},
"suggest": {
+ "bakame/aide-uri": "A polyfill for PHP8.1 until PHP8.4 to add support to PHP Native URI parser",
"ext-bcmath": "to improve IPV4 host parsing",
"ext-fileinfo": "to create Data URI from file contennts",
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
"ext-mbstring": "to use the sorting algorithm of URLSearchParams",
"jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain",
+ "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP",
"php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle WHATWG URL",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -4454,7 +4557,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-components/tree/7.5.1"
+ "source": "https://github.com/thephpleague/uri-components/tree/7.7.0"
},
"funding": [
{
@@ -4462,26 +4565,25 @@
"type": "github"
}
],
- "time": "2024-12-08T08:40:02+00:00"
+ "time": "2025-12-07T16:02:56+00:00"
},
{
"name": "league/uri-interfaces",
- "version": "7.5.0",
+ "version": "7.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
- "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742"
+ "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
- "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
+ "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
"shasum": ""
},
"require": {
"ext-filter": "*",
"php": "^8.1",
- "psr/http-factory": "^1",
"psr/http-message": "^1.1 || ^2.0"
},
"suggest": {
@@ -4489,6 +4591,7 @@
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
"php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle WHATWG URL",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -4513,7 +4616,7 @@
"homepage": "https://nyamsprod.com"
}
],
- "description": "Common interfaces and classes for URI representation and interaction",
+ "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI",
"homepage": "https://uri.thephpleague.com",
"keywords": [
"data-uri",
@@ -4538,7 +4641,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0"
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0"
},
"funding": [
{
@@ -4546,20 +4649,20 @@
"type": "github"
}
],
- "time": "2024-12-08T08:18:47+00:00"
+ "time": "2025-12-07T16:03:21+00:00"
},
{
"name": "livewire/livewire",
- "version": "v3.6.4",
+ "version": "v3.7.3",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
- "reference": "ef04be759da41b14d2d129e670533180a44987dc"
+ "reference": "a5384df9fbd3eaf02e053bc49aabc8ace293fc1c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/livewire/zipball/ef04be759da41b14d2d129e670533180a44987dc",
- "reference": "ef04be759da41b14d2d129e670533180a44987dc",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/a5384df9fbd3eaf02e053bc49aabc8ace293fc1c",
+ "reference": "a5384df9fbd3eaf02e053bc49aabc8ace293fc1c",
"shasum": ""
},
"require": {
@@ -4614,7 +4717,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
- "source": "https://github.com/livewire/livewire/tree/v3.6.4"
+ "source": "https://github.com/livewire/livewire/tree/v3.7.3"
},
"funding": [
{
@@ -4622,7 +4725,7 @@
"type": "github"
}
],
- "time": "2025-07-17T05:12:15+00:00"
+ "time": "2025-12-19T02:00:29+00:00"
},
{
"name": "masterminds/html5",
@@ -4693,16 +4796,16 @@
},
{
"name": "maxmind-db/reader",
- "version": "v1.12.1",
+ "version": "v1.13.1",
"source": {
"type": "git",
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
- "reference": "815939e006b7e68062b540ec9e86aaa8be2b6ce4"
+ "reference": "2194f58d0f024ce923e685cdf92af3daf9951908"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/815939e006b7e68062b540ec9e86aaa8be2b6ce4",
- "reference": "815939e006b7e68062b540ec9e86aaa8be2b6ce4",
+ "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/2194f58d0f024ce923e685cdf92af3daf9951908",
+ "reference": "2194f58d0f024ce923e685cdf92af3daf9951908",
"shasum": ""
},
"require": {
@@ -4715,12 +4818,13 @@
"friendsofphp/php-cs-fixer": "3.*",
"phpstan/phpstan": "*",
"phpunit/phpunit": ">=8.0.0,<10.0.0",
- "squizlabs/php_codesniffer": "3.*"
+ "squizlabs/php_codesniffer": "4.*"
},
"suggest": {
"ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
- "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
+ "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups",
+ "maxmind-db/reader-ext": "C extension for significantly faster IP lookups (install via PIE: pie install maxmind-db/reader-ext)"
},
"type": "library",
"autoload": {
@@ -4750,22 +4854,22 @@
],
"support": {
"issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
- "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.12.1"
+ "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.13.1"
},
- "time": "2025-05-05T20:56:32+00:00"
+ "time": "2025-11-21T22:24:26+00:00"
},
{
"name": "maxmind/web-service-common",
- "version": "v0.10.0",
+ "version": "v0.11.0",
"source": {
"type": "git",
"url": "https://github.com/maxmind/web-service-common-php.git",
- "reference": "d7c7c42fc31bff26e0ded73a6e187bcfb193f9c4"
+ "reference": "5b9e3d3472213361eebdb3ab8879e91b8952091b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/d7c7c42fc31bff26e0ded73a6e187bcfb193f9c4",
- "reference": "d7c7c42fc31bff26e0ded73a6e187bcfb193f9c4",
+ "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/5b9e3d3472213361eebdb3ab8879e91b8952091b",
+ "reference": "5b9e3d3472213361eebdb3ab8879e91b8952091b",
"shasum": ""
},
"require": {
@@ -4778,7 +4882,7 @@
"friendsofphp/php-cs-fixer": "3.*",
"phpstan/phpstan": "*",
"phpunit/phpunit": "^8.0 || ^9.0",
- "squizlabs/php_codesniffer": "3.*"
+ "squizlabs/php_codesniffer": "4.*"
},
"type": "library",
"autoload": {
@@ -4801,9 +4905,9 @@
"homepage": "https://github.com/maxmind/web-service-common-php",
"support": {
"issues": "https://github.com/maxmind/web-service-common-php/issues",
- "source": "https://github.com/maxmind/web-service-common-php/tree/v0.10.0"
+ "source": "https://github.com/maxmind/web-service-common-php/tree/v0.11.0"
},
- "time": "2024-11-14T23:14:52+00:00"
+ "time": "2025-11-20T18:33:17+00:00"
},
{
"name": "meilisearch/meilisearch-php",
@@ -4990,16 +5094,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.10.3",
+ "version": "3.11.0",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f"
+ "reference": "bdb375400dcd162624531666db4799b36b64e4a1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f",
- "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/bdb375400dcd162624531666db4799b36b64e4a1",
+ "reference": "bdb375400dcd162624531666db4799b36b64e4a1",
"shasum": ""
},
"require": {
@@ -5007,9 +5111,9 @@
"ext-json": "*",
"php": "^8.1",
"psr/clock": "^1.0",
- "symfony/clock": "^6.3.12 || ^7.0",
+ "symfony/clock": "^6.3.12 || ^7.0 || ^8.0",
"symfony/polyfill-mbstring": "^1.0",
- "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0"
+ "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0"
},
"provide": {
"psr/clock-implementation": "1.0"
@@ -5091,7 +5195,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-06T13:39:36+00:00"
+ "time": "2025-12-02T21:04:28+00:00"
},
{
"name": "nette/php-generator",
@@ -5167,25 +5271,25 @@
},
{
"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",
@@ -5195,6 +5299,9 @@
}
},
"autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
"classmap": [
"src/"
]
@@ -5223,26 +5330,26 @@
],
"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.8",
+ "version": "v4.1.0",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede"
+ "reference": "fa1f0b8261ed150447979eb22e373b7b7ad5a8e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede",
- "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede",
+ "url": "https://api.github.com/repos/nette/utils/zipball/fa1f0b8261ed150447979eb22e373b7b7ad5a8e0",
+ "reference": "fa1f0b8261ed150447979eb22e373b7b7ad5a8e0",
"shasum": ""
},
"require": {
- "php": "8.0 - 8.5"
+ "php": "8.2 - 8.5"
},
"conflict": {
"nette/finder": "<3",
@@ -5265,7 +5372,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-master": "4.1-dev"
}
},
"autoload": {
@@ -5312,22 +5419,22 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.0.8"
+ "source": "https://github.com/nette/utils/tree/v4.1.0"
},
- "time": "2025-08-06T21:43:34+00:00"
+ "time": "2025-12-01T17:49:23+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.6.1",
+ "version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2"
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
- "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
@@ -5370,37 +5477,37 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
- "time": "2025-08-13T20:13:15+00:00"
+ "time": "2025-12-06T11:56:16+00:00"
},
{
"name": "nunomaduro/termwind",
- "version": "v2.3.1",
+ "version": "v2.3.3",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
- "reference": "dfa08f390e509967a15c22493dc0bac5733d9123"
+ "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123",
- "reference": "dfa08f390e509967a15c22493dc0bac5733d9123",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017",
+ "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "^8.2",
- "symfony/console": "^7.2.6"
+ "symfony/console": "^7.3.6"
},
"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 || ^4.1.3",
+ "phpstan/phpstan": "^1.12.32",
"phpstan/phpstan-strict-rules": "^1.6.2",
- "symfony/var-dumper": "^7.2.6",
+ "symfony/var-dumper": "^7.3.5",
"thecodingmachine/phpstan-strict-rules": "^1.0.0"
},
"type": "library",
@@ -5443,7 +5550,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.3"
},
"funding": [
{
@@ -5459,7 +5566,7 @@
"type": "github"
}
],
- "time": "2025-05-08T08:14:37+00:00"
+ "time": "2025-11-20T02:34:59+00:00"
},
{
"name": "nyholm/psr7",
@@ -5541,16 +5648,16 @@
},
{
"name": "openspout/openspout",
- "version": "v4.28.5",
+ "version": "v4.32.0",
"source": {
"type": "git",
"url": "https://github.com/openspout/openspout.git",
- "reference": "ab05a09fe6fce57c90338f83280648a9786ce36b"
+ "reference": "41f045c1f632e1474e15d4c7bc3abcb4a153563d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/openspout/openspout/zipball/ab05a09fe6fce57c90338f83280648a9786ce36b",
- "reference": "ab05a09fe6fce57c90338f83280648a9786ce36b",
+ "url": "https://api.github.com/repos/openspout/openspout/zipball/41f045c1f632e1474e15d4c7bc3abcb4a153563d",
+ "reference": "41f045c1f632e1474e15d4c7bc3abcb4a153563d",
"shasum": ""
},
"require": {
@@ -5560,17 +5667,17 @@
"ext-libxml": "*",
"ext-xmlreader": "*",
"ext-zip": "*",
- "php": "~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"ext-zlib": "*",
- "friendsofphp/php-cs-fixer": "^3.68.3",
- "infection/infection": "^0.29.10",
- "phpbench/phpbench": "^1.4.0",
- "phpstan/phpstan": "^2.1.2",
- "phpstan/phpstan-phpunit": "^2.0.4",
- "phpstan/phpstan-strict-rules": "^2",
- "phpunit/phpunit": "^11.5.4"
+ "friendsofphp/php-cs-fixer": "^3.86.0",
+ "infection/infection": "^0.31.2",
+ "phpbench/phpbench": "^1.4.1",
+ "phpstan/phpstan": "^2.1.22",
+ "phpstan/phpstan-phpunit": "^2.0.7",
+ "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpunit/phpunit": "^12.3.7"
},
"suggest": {
"ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)",
@@ -5618,7 +5725,7 @@
],
"support": {
"issues": "https://github.com/openspout/openspout/issues",
- "source": "https://github.com/openspout/openspout/tree/v4.28.5"
+ "source": "https://github.com/openspout/openspout/tree/v4.32.0"
},
"funding": [
{
@@ -5630,7 +5737,7 @@
"type": "github"
}
],
- "time": "2025-01-30T13:51:11+00:00"
+ "time": "2025-09-03T16:03:54+00:00"
},
{
"name": "orangehill/iseed",
@@ -6018,16 +6125,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "3.0.46",
+ "version": "3.0.48",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6"
+ "reference": "64065a5679c50acb886e82c07aa139b0f757bb89"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6",
- "reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/64065a5679c50acb886e82c07aa139b0f757bb89",
+ "reference": "64065a5679c50acb886e82c07aa139b0f757bb89",
"shasum": ""
},
"require": {
@@ -6108,7 +6215,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/3.0.46"
+ "source": "https://github.com/phpseclib/phpseclib/tree/3.0.48"
},
"funding": [
{
@@ -6124,20 +6231,20 @@
"type": "tidelift"
}
],
- "time": "2025-06-26T16:29:55+00:00"
+ "time": "2025-12-15T11:51:42+00:00"
},
{
"name": "pragmarx/google2fa",
- "version": "v8.0.3",
+ "version": "v9.0.0",
"source": {
"type": "git",
"url": "https://github.com/antonioribeiro/google2fa.git",
- "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad"
+ "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad",
- "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/e6bc62dd6ae83acc475f57912e27466019a1f2cf",
+ "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf",
"shasum": ""
},
"require": {
@@ -6174,27 +6281,27 @@
],
"support": {
"issues": "https://github.com/antonioribeiro/google2fa/issues",
- "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.3"
+ "source": "https://github.com/antonioribeiro/google2fa/tree/v9.0.0"
},
- "time": "2024-09-05T11:56:40+00:00"
+ "time": "2025-09-19T22:51:08+00:00"
},
{
"name": "pragmarx/google2fa-qrcode",
- "version": "v3.0.1",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/antonioribeiro/google2fa-qrcode.git",
- "reference": "c23ebcc3a50de0d1566016a6dd1486e183bb78e1"
+ "reference": "ce4d8a729b6c93741c607cfb2217acfffb5bf76b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/antonioribeiro/google2fa-qrcode/zipball/c23ebcc3a50de0d1566016a6dd1486e183bb78e1",
- "reference": "c23ebcc3a50de0d1566016a6dd1486e183bb78e1",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa-qrcode/zipball/ce4d8a729b6c93741c607cfb2217acfffb5bf76b",
+ "reference": "ce4d8a729b6c93741c607cfb2217acfffb5bf76b",
"shasum": ""
},
"require": {
"php": ">=7.1",
- "pragmarx/google2fa": "^4.0|^5.0|^6.0|^7.0|^8.0"
+ "pragmarx/google2fa": ">=4.0"
},
"require-dev": {
"bacon/bacon-qr-code": "^2.0",
@@ -6241,9 +6348,9 @@
],
"support": {
"issues": "https://github.com/antonioribeiro/google2fa-qrcode/issues",
- "source": "https://github.com/antonioribeiro/google2fa-qrcode/tree/v3.0.1"
+ "source": "https://github.com/antonioribeiro/google2fa-qrcode/tree/v3.0.0"
},
- "time": "2025-09-19T23:02:26+00:00"
+ "time": "2021-08-15T12:53:48+00:00"
},
{
"name": "psr/cache",
@@ -6708,16 +6815,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.12",
+ "version": "v0.12.18",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7"
+ "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/cd23863404a40ccfaf733e3af4db2b459837f7e7",
- "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ddff0ac01beddc251786fe70367cd8bbdb258196",
+ "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196",
"shasum": ""
},
"require": {
@@ -6725,18 +6832,19 @@
"ext-tokenizer": "*",
"nikic/php-parser": "^5.0 || ^4.0",
"php": "^8.0 || ^7.4",
- "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
- "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
+ "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
},
"conflict": {
"symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.2"
+ "bamarni/composer-bin-plugin": "^1.2",
+ "composer/class-map-generator": "^1.6"
},
"suggest": {
+ "composer/class-map-generator": "Improved tab completion performance with better class discovery.",
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
- "ext-pdo-sqlite": "The doc command requires SQLite to work.",
"ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
},
"bin": [
@@ -6780,9 +6888,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.12"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.18"
},
- "time": "2025-09-20T13:46:31+00:00"
+ "time": "2025-12-17T14:35:46+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -6906,20 +7014,20 @@
},
{
"name": "ramsey/uuid",
- "version": "4.9.1",
+ "version": "4.9.2",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440"
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440",
- "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0",
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0",
"shasum": ""
},
"require": {
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
+ "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
},
@@ -6978,9 +7086,9 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.9.1"
+ "source": "https://github.com/ramsey/uuid/tree/4.9.2"
},
- "time": "2025-09-04T20:59:21+00:00"
+ "time": "2025-12-14T04:43:48+00:00"
},
{
"name": "react/promise",
@@ -7644,16 +7752,16 @@
},
{
"name": "stichoza/google-translate-php",
- "version": "v5.3.0",
+ "version": "v5.3.1",
"source": {
"type": "git",
"url": "https://github.com/Stichoza/google-translate-php.git",
- "reference": "2891310296cc115786d7c135a47a4ed53cd38df1"
+ "reference": "4d9a267ac063c16967df67dcba30a71fbfb5f550"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Stichoza/google-translate-php/zipball/2891310296cc115786d7c135a47a4ed53cd38df1",
- "reference": "2891310296cc115786d7c135a47a4ed53cd38df1",
+ "url": "https://api.github.com/repos/Stichoza/google-translate-php/zipball/4d9a267ac063c16967df67dcba30a71fbfb5f550",
+ "reference": "4d9a267ac063c16967df67dcba30a71fbfb5f550",
"shasum": ""
},
"require": {
@@ -7693,7 +7801,7 @@
],
"support": {
"issues": "https://github.com/Stichoza/google-translate-php/issues",
- "source": "https://github.com/Stichoza/google-translate-php/tree/v5.3.0"
+ "source": "https://github.com/Stichoza/google-translate-php/tree/v5.3.1"
},
"funding": [
{
@@ -7721,26 +7829,25 @@
"type": "patreon"
}
],
- "time": "2025-05-20T08:38:25+00:00"
+ "time": "2025-11-01T22:45:28+00:00"
},
{
"name": "symfony/clock",
- "version": "v7.3.0",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
- "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24"
+ "reference": "832119f9b8dbc6c8e6f65f30c5969eca1e88764f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
- "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
+ "url": "https://api.github.com/repos/symfony/clock/zipball/832119f9b8dbc6c8e6f65f30c5969eca1e88764f",
+ "reference": "832119f9b8dbc6c8e6f65f30c5969eca1e88764f",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "psr/clock": "^1.0",
- "symfony/polyfill-php83": "^1.28"
+ "php": ">=8.4",
+ "psr/clock": "^1.0"
},
"provide": {
"psr/clock-implementation": "1.0"
@@ -7779,7 +7886,7 @@
"time"
],
"support": {
- "source": "https://github.com/symfony/clock/tree/v7.3.0"
+ "source": "https://github.com/symfony/clock/tree/v8.0.0"
},
"funding": [
{
@@ -7790,25 +7897,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2025-11-12T15:46:48+00:00"
},
{
"name": "symfony/console",
- "version": "v7.3.4",
+ "version": "v7.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
+ "reference": "6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
- "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
+ "url": "https://api.github.com/repos/symfony/console/zipball/6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e",
+ "reference": "6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e",
"shasum": ""
},
"require": {
@@ -7816,7 +7927,7 @@
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^7.2"
+ "symfony/string": "^7.2|^8.0"
},
"conflict": {
"symfony/dependency-injection": "<6.4",
@@ -7830,16 +7941,16 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/lock": "^6.4|^7.0",
- "symfony/messenger": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0",
- "symfony/stopwatch": "^6.4|^7.0",
- "symfony/var-dumper": "^6.4|^7.0"
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -7873,7 +7984,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.3.4"
+ "source": "https://github.com/symfony/console/tree/v7.4.1"
},
"funding": [
{
@@ -7893,24 +8004,24 @@
"type": "tidelift"
}
],
- "time": "2025-09-22T15:31:00+00:00"
+ "time": "2025-12-05T15:23:39+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v7.3.0",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2"
+ "reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2",
- "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/6225bd458c53ecdee056214cb4a2ffaf58bd592b",
+ "reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.4"
},
"type": "library",
"autoload": {
@@ -7942,7 +8053,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/v8.0.0"
},
"funding": [
{
@@ -7953,12 +8064,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-30T14:17:19+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -8029,32 +8144,33 @@
},
{
"name": "symfony/error-handler",
- "version": "v7.3.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4"
+ "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/99f81bc944ab8e5dae4f21b4ca9972698bbad0e4",
- "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2",
+ "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^6.4|^7.0"
+ "symfony/polyfill-php85": "^1.32",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"conflict": {
"symfony/deprecation-contracts": "<2.5",
"symfony/http-kernel": "<6.4"
},
"require-dev": {
- "symfony/console": "^6.4|^7.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/serializer": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4|^7.0|^8.0",
"symfony/webpack-encore-bundle": "^1.0|^2.0"
},
"bin": [
@@ -8086,7 +8202,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.4"
+ "source": "https://github.com/symfony/error-handler/tree/v7.4.0"
},
"funding": [
{
@@ -8106,28 +8222,28 @@
"type": "tidelift"
}
],
- "time": "2025-09-11T10:12:26+00:00"
+ "time": "2025-11-05T14:29:59+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.3.3",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191"
+ "reference": "573f95783a2ec6e38752979db139f09fec033f03"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191",
- "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03",
+ "reference": "573f95783a2ec6e38752979db139f09fec033f03",
"shasum": ""
},
"require": {
- "php": ">=8.2",
+ "php": ">=8.4",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
- "symfony/dependency-injection": "<6.4",
+ "symfony/security-http": "<7.4",
"symfony/service-contracts": "<2.5"
},
"provide": {
@@ -8136,13 +8252,14 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/error-handler": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/config": "^7.4|^8.0",
+ "symfony/dependency-injection": "^7.4|^8.0",
+ "symfony/error-handler": "^7.4|^8.0",
+ "symfony/expression-language": "^7.4|^8.0",
+ "symfony/framework-bundle": "^7.4|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^6.4|^7.0"
+ "symfony/stopwatch": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -8170,7 +8287,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.3"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0"
},
"funding": [
{
@@ -8190,7 +8307,7 @@
"type": "tidelift"
}
],
- "time": "2025-08-13T11:49:31+00:00"
+ "time": "2025-10-30T14:17:19+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -8270,23 +8387,23 @@
},
{
"name": "symfony/finder",
- "version": "v7.3.2",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe"
+ "reference": "340b9ed7320570f319028a2cbec46d40535e94bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe",
- "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/340b9ed7320570f319028a2cbec46d40535e94bd",
+ "reference": "340b9ed7320570f319028a2cbec46d40535e94bd",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
- "symfony/filesystem": "^6.4|^7.0"
+ "symfony/filesystem": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -8314,7 +8431,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.4.0"
},
"funding": [
{
@@ -8334,27 +8451,28 @@
"type": "tidelift"
}
],
- "time": "2025-07-15T13:41:35+00:00"
+ "time": "2025-11-05T05:42:40+00:00"
},
{
"name": "symfony/html-sanitizer",
- "version": "v7.3.3",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/html-sanitizer.git",
- "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12"
+ "reference": "5b0bbcc3600030b535dd0b17a0e8c56243f96d7f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/8740fc48979f649dee8b8fc51a2698e5c190bf12",
- "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12",
+ "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/5b0bbcc3600030b535dd0b17a0e8c56243f96d7f",
+ "reference": "5b0bbcc3600030b535dd0b17a0e8c56243f96d7f",
"shasum": ""
},
"require": {
"ext-dom": "*",
"league/uri": "^6.5|^7.0",
"masterminds/html5": "^2.7.2",
- "php": ">=8.2"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"type": "library",
"autoload": {
@@ -8387,7 +8505,7 @@
"sanitizer"
],
"support": {
- "source": "https://github.com/symfony/html-sanitizer/tree/v7.3.3"
+ "source": "https://github.com/symfony/html-sanitizer/tree/v7.4.0"
},
"funding": [
{
@@ -8407,27 +8525,26 @@
"type": "tidelift"
}
],
- "time": "2025-08-12T10:34:03+00:00"
+ "time": "2025-10-30T13:39:42+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v7.3.4",
+ "version": "v7.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "c061c7c18918b1b64268771aad04b40be41dd2e6"
+ "reference": "bd1af1e425811d6f077db240c3a588bdb405cd27"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c061c7c18918b1b64268771aad04b40be41dd2e6",
- "reference": "c061c7c18918b1b64268771aad04b40be41dd2e6",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/bd1af1e425811d6f077db240c3a588bdb405cd27",
+ "reference": "bd1af1e425811d6f077db240c3a588bdb405cd27",
"shasum": ""
},
"require": {
"php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/polyfill-mbstring": "~1.1",
- "symfony/polyfill-php83": "^1.27"
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "^1.1"
},
"conflict": {
"doctrine/dbal": "<3.6",
@@ -8436,13 +8553,13 @@
"require-dev": {
"doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
- "symfony/cache": "^6.4.12|^7.1.5",
- "symfony/clock": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/mime": "^6.4|^7.0",
- "symfony/rate-limiter": "^6.4|^7.0"
+ "symfony/cache": "^6.4.12|^7.1.5|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^6.4|^7.0|^8.0",
+ "symfony/rate-limiter": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -8470,7 +8587,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.4"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.4.1"
},
"funding": [
{
@@ -8490,29 +8607,29 @@
"type": "tidelift"
}
],
- "time": "2025-09-16T08:38:17+00:00"
+ "time": "2025-12-07T11:13:10+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.3.4",
+ "version": "v7.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "b796dffea7821f035047235e076b60ca2446e3cf"
+ "reference": "f6e6f0a5fa8763f75a504b930163785fb6dd055f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b796dffea7821f035047235e076b60ca2446e3cf",
- "reference": "b796dffea7821f035047235e076b60ca2446e3cf",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f6e6f0a5fa8763f75a504b930163785fb6dd055f",
+ "reference": "f6e6f0a5fa8763f75a504b930163785fb6dd055f",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/error-handler": "^6.4|^7.0",
- "symfony/event-dispatcher": "^7.3",
- "symfony/http-foundation": "^7.3",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^7.3|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@@ -8522,6 +8639,7 @@
"symfony/console": "<6.4",
"symfony/dependency-injection": "<6.4",
"symfony/doctrine-bridge": "<6.4",
+ "symfony/flex": "<2.10",
"symfony/form": "<6.4",
"symfony/http-client": "<6.4",
"symfony/http-client-contracts": "<2.5",
@@ -8539,27 +8657,27 @@
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
- "symfony/browser-kit": "^6.4|^7.0",
- "symfony/clock": "^6.4|^7.0",
- "symfony/config": "^6.4|^7.0",
- "symfony/console": "^6.4|^7.0",
- "symfony/css-selector": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/dom-crawler": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/finder": "^6.4|^7.0",
+ "symfony/browser-kit": "^6.4|^7.0|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/css-selector": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/dom-crawler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
"symfony/http-client-contracts": "^2.5|^3",
- "symfony/process": "^6.4|^7.0",
- "symfony/property-access": "^7.1",
- "symfony/routing": "^6.4|^7.0",
- "symfony/serializer": "^7.1",
- "symfony/stopwatch": "^6.4|^7.0",
- "symfony/translation": "^6.4|^7.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^7.1|^8.0",
+ "symfony/routing": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^7.1|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/translation": "^6.4|^7.0|^8.0",
"symfony/translation-contracts": "^2.5|^3",
- "symfony/uid": "^6.4|^7.0",
- "symfony/validator": "^6.4|^7.0",
- "symfony/var-dumper": "^6.4|^7.0",
- "symfony/var-exporter": "^6.4|^7.0",
+ "symfony/uid": "^6.4|^7.0|^8.0",
+ "symfony/validator": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0",
"twig/twig": "^3.12"
},
"type": "library",
@@ -8588,7 +8706,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.4"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.4.2"
},
"funding": [
{
@@ -8608,20 +8726,20 @@
"type": "tidelift"
}
],
- "time": "2025-09-27T12:32:17+00:00"
+ "time": "2025-12-08T07:43:37+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.3.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "ab97ef2f7acf0216955f5845484235113047a31d"
+ "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/ab97ef2f7acf0216955f5845484235113047a31d",
- "reference": "ab97ef2f7acf0216955f5845484235113047a31d",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/a3d9eea8cfa467ece41f0f54ba28185d74bd53fd",
+ "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd",
"shasum": ""
},
"require": {
@@ -8629,8 +8747,8 @@
"php": ">=8.2",
"psr/event-dispatcher": "^1",
"psr/log": "^1|^2|^3",
- "symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/mime": "^7.2",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^7.2|^8.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@@ -8641,10 +8759,10 @@
"symfony/twig-bridge": "<6.4"
},
"require-dev": {
- "symfony/console": "^6.4|^7.0",
- "symfony/http-client": "^6.4|^7.0",
- "symfony/messenger": "^6.4|^7.0",
- "symfony/twig-bridge": "^6.4|^7.0"
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/twig-bridge": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -8672,7 +8790,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.3.4"
+ "source": "https://github.com/symfony/mailer/tree/v7.4.0"
},
"funding": [
{
@@ -8692,24 +8810,25 @@
"type": "tidelift"
}
],
- "time": "2025-09-17T05:51:54+00:00"
+ "time": "2025-11-21T15:26:00+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.3.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35"
+ "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/b1b828f69cbaf887fa835a091869e55df91d0e35",
- "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/bdb02729471be5d047a3ac4a69068748f1a6be7a",
+ "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0"
},
@@ -8724,11 +8843,11 @@
"egulias/email-validator": "^2.1.10|^3.1|^4",
"league/html-to-markdown": "^5.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0",
- "symfony/property-access": "^6.4|^7.0",
- "symfony/property-info": "^6.4|^7.0",
- "symfony/serializer": "^6.4.3|^7.0.3"
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^6.4|^7.0|^8.0",
+ "symfony/property-info": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4.3|^7.0.3|^8.0"
},
"type": "library",
"autoload": {
@@ -8760,7 +8879,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.3.4"
+ "source": "https://github.com/symfony/mime/tree/v7.4.0"
},
"funding": [
{
@@ -8780,7 +8899,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-16T08:38:17+00:00"
+ "time": "2025-11-16T10:14:42+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -9693,16 +9812,16 @@
},
{
"name": "symfony/process",
- "version": "v7.3.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b"
+ "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b",
- "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b",
+ "url": "https://api.github.com/repos/symfony/process/zipball/7ca8dc2d0dcf4882658313aba8be5d9fd01026c8",
+ "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8",
"shasum": ""
},
"require": {
@@ -9734,7 +9853,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.3.4"
+ "source": "https://github.com/symfony/process/tree/v7.4.0"
},
"funding": [
{
@@ -9754,26 +9873,26 @@
"type": "tidelift"
}
],
- "time": "2025-09-11T10:12:26+00:00"
+ "time": "2025-10-16T11:21:06+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
- "version": "v7.3.0",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
- "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f"
+ "reference": "0101ff8bd0506703b045b1670960302d302a726c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f",
- "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f",
+ "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/0101ff8bd0506703b045b1670960302d302a726c",
+ "reference": "0101ff8bd0506703b045b1670960302d302a726c",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/http-message": "^1.0|^2.0",
- "symfony/http-foundation": "^6.4|^7.0"
+ "symfony/http-foundation": "^6.4|^7.0|^8.0"
},
"conflict": {
"php-http/discovery": "<1.15",
@@ -9783,11 +9902,12 @@
"nyholm/psr7": "^1.1",
"php-http/discovery": "^1.15",
"psr/log": "^1.1.4|^2|^3",
- "symfony/browser-kit": "^6.4|^7.0",
- "symfony/config": "^6.4|^7.0",
- "symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/framework-bundle": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0"
+ "symfony/browser-kit": "^6.4|^7.0|^8.0",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0",
+ "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0",
+ "symfony/runtime": "^6.4.13|^7.1.6|^8.0"
},
"type": "symfony-bridge",
"autoload": {
@@ -9821,7 +9941,7 @@
"psr-7"
],
"support": {
- "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.3.0"
+ "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.4.0"
},
"funding": [
{
@@ -9832,25 +9952,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-26T08:57:56+00:00"
+ "time": "2025-11-13T08:38:49+00:00"
},
{
"name": "symfony/routing",
- "version": "v7.3.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c"
+ "reference": "4720254cb2644a0b876233d258a32bf017330db7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/8dc648e159e9bac02b703b9fbd937f19ba13d07c",
- "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/4720254cb2644a0b876233d258a32bf017330db7",
+ "reference": "4720254cb2644a0b876233d258a32bf017330db7",
"shasum": ""
},
"require": {
@@ -9864,11 +9988,11 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/yaml": "^6.4|^7.0"
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -9902,7 +10026,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.3.4"
+ "source": "https://github.com/symfony/routing/tree/v7.4.0"
},
"funding": [
{
@@ -9922,20 +10046,20 @@
"type": "tidelift"
}
],
- "time": "2025-09-11T10:12:26+00:00"
+ "time": "2025-11-27T13:27:24+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": {
@@ -9989,7 +10113,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": [
{
@@ -10000,43 +10124,47 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-25T09:37:31+00:00"
+ "time": "2025-07-15T11:30:57+00:00"
},
{
"name": "symfony/string",
- "version": "v7.3.4",
+ "version": "v8.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "f96476035142921000338bad71e5247fbc138872"
+ "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872",
- "reference": "f96476035142921000338bad71e5247fbc138872",
+ "url": "https://api.github.com/repos/symfony/string/zipball/ba65a969ac918ce0cc3edfac6cdde847eba231dc",
+ "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0"
+ "php": ">=8.4",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-intl-grapheme": "^1.33",
+ "symfony/polyfill-intl-normalizer": "^1.0",
+ "symfony/polyfill-mbstring": "^1.0"
},
"conflict": {
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
- "symfony/emoji": "^7.1",
- "symfony/http-client": "^6.4|^7.0",
- "symfony/intl": "^6.4|^7.0",
+ "symfony/emoji": "^7.4|^8.0",
+ "symfony/http-client": "^7.4|^8.0",
+ "symfony/intl": "^7.4|^8.0",
"symfony/translation-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^6.4|^7.0"
+ "symfony/var-exporter": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -10075,7 +10203,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.3.4"
+ "source": "https://github.com/symfony/string/tree/v8.0.1"
},
"funding": [
{
@@ -10095,38 +10223,31 @@
"type": "tidelift"
}
],
- "time": "2025-09-11T14:36:48+00:00"
+ "time": "2025-12-01T09:13:36+00:00"
},
{
"name": "symfony/translation",
- "version": "v7.3.4",
+ "version": "v8.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "ec25870502d0c7072d086e8ffba1420c85965174"
+ "reference": "770e3b8b0ba8360958abedcabacd4203467333ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174",
- "reference": "ec25870502d0c7072d086e8ffba1420c85965174",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/770e3b8b0ba8360958abedcabacd4203467333ca",
+ "reference": "770e3b8b0ba8360958abedcabacd4203467333ca",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/translation-contracts": "^2.5|^3.0"
+ "php": ">=8.4",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/translation-contracts": "^3.6.1"
},
"conflict": {
"nikic/php-parser": "<5.0",
- "symfony/config": "<6.4",
- "symfony/console": "<6.4",
- "symfony/dependency-injection": "<6.4",
"symfony/http-client-contracts": "<2.5",
- "symfony/http-kernel": "<6.4",
- "symfony/service-contracts": "<2.5",
- "symfony/twig-bundle": "<6.4",
- "symfony/yaml": "<6.4"
+ "symfony/service-contracts": "<2.5"
},
"provide": {
"symfony/translation-implementation": "2.3|3.0"
@@ -10134,17 +10255,17 @@
"require-dev": {
"nikic/php-parser": "^5.0",
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/console": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/finder": "^6.4|^7.0",
+ "symfony/config": "^7.4|^8.0",
+ "symfony/console": "^7.4|^8.0",
+ "symfony/dependency-injection": "^7.4|^8.0",
+ "symfony/finder": "^7.4|^8.0",
"symfony/http-client-contracts": "^2.5|^3.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/intl": "^6.4|^7.0",
+ "symfony/http-kernel": "^7.4|^8.0",
+ "symfony/intl": "^7.4|^8.0",
"symfony/polyfill-intl-icu": "^1.21",
- "symfony/routing": "^6.4|^7.0",
+ "symfony/routing": "^7.4|^8.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/yaml": "^6.4|^7.0"
+ "symfony/yaml": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -10175,7 +10296,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v7.3.4"
+ "source": "https://github.com/symfony/translation/tree/v8.0.1"
},
"funding": [
{
@@ -10195,20 +10316,20 @@
"type": "tidelift"
}
],
- "time": "2025-09-07T11:39:36+00:00"
+ "time": "2025-12-01T09:13: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": {
@@ -10257,7 +10378,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": [
{
@@ -10268,25 +10389,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-27T08:32:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/uid",
- "version": "v7.3.1",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb"
+ "reference": "2498e9f81b7baa206f44de583f2f48350b90142c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb",
- "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/2498e9f81b7baa206f44de583f2f48350b90142c",
+ "reference": "2498e9f81b7baa206f44de583f2f48350b90142c",
"shasum": ""
},
"require": {
@@ -10294,7 +10419,7 @@
"symfony/polyfill-uuid": "^1.15"
},
"require-dev": {
- "symfony/console": "^6.4|^7.0"
+ "symfony/console": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -10331,7 +10456,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v7.3.1"
+ "source": "https://github.com/symfony/uid/tree/v7.4.0"
},
"funding": [
{
@@ -10342,25 +10467,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-06-27T19:55:54+00:00"
+ "time": "2025-09-25T11:02:55+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v7.3.4",
+ "version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb"
+ "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb",
- "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41fd6c4ae28c38b294b42af6db61446594a0dece",
+ "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece",
"shasum": ""
},
"require": {
@@ -10372,10 +10501,10 @@
"symfony/console": "<6.4"
},
"require-dev": {
- "symfony/console": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0",
- "symfony/uid": "^6.4|^7.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/uid": "^6.4|^7.0|^8.0",
"twig/twig": "^3.12"
},
"bin": [
@@ -10414,7 +10543,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.3.4"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.4.0"
},
"funding": [
{
@@ -10434,27 +10563,27 @@
"type": "tidelift"
}
],
- "time": "2025-09-11T10:12:26+00:00"
+ "time": "2025-10-27T20:36:44+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
- "version": "v2.3.0",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
- "reference": "0d72ac1c00084279c1816675284073c5a337c20d"
+ "reference": "f0292ccf0ec75843d65027214426b6b163b48b41"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d",
- "reference": "0d72ac1c00084279c1816675284073c5a337c20d",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41",
+ "reference": "f0292ccf0ec75843d65027214426b6b163b48b41",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"php": "^7.4 || ^8.0",
- "symfony/css-selector": "^5.4 || ^6.0 || ^7.0"
+ "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^2.0",
@@ -10487,9 +10616,9 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"support": {
"issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
- "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0"
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0"
},
- "time": "2024-12-21T16:25:41+00:00"
+ "time": "2025-12-02T11:56:42+00:00"
},
{
"name": "ueberdosis/tiptap-php",
@@ -10717,64 +10846,6 @@
}
],
"time": "2024-11-21T01:49:47+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.11.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "php": "^7.2 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.11.0"
- },
- "time": "2022-06-03T18:03:27+00:00"
}
],
"packages-dev": [
@@ -11401,23 +11472,23 @@
},
{
"name": "laravel-lang/config",
- "version": "1.14.0",
+ "version": "1.15.0",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Lang/config.git",
- "reference": "0f6a41a1d5f4bde6ff59fbfd9e349ac64b737c69"
+ "reference": "080b7cf77eeebdd7e7c267f1b2c3c7fc20408f3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravel-Lang/config/zipball/0f6a41a1d5f4bde6ff59fbfd9e349ac64b737c69",
- "reference": "0f6a41a1d5f4bde6ff59fbfd9e349ac64b737c69",
+ "url": "https://api.github.com/repos/Laravel-Lang/config/zipball/080b7cf77eeebdd7e7c267f1b2c3c7fc20408f3c",
+ "reference": "080b7cf77eeebdd7e7c267f1b2c3c7fc20408f3c",
"shasum": ""
},
"require": {
"archtechx/enums": "^1.0",
"illuminate/config": "^10.0 || ^11.0 || ^12.0",
"illuminate/support": "^10.0 || ^11.0 || ^12.0",
- "laravel-lang/locale-list": "^1.5",
+ "laravel-lang/locale-list": "^1.6",
"php": "^8.1"
},
"require-dev": {
@@ -11469,22 +11540,22 @@
],
"support": {
"issues": "https://github.com/Laravel-Lang/config/issues",
- "source": "https://github.com/Laravel-Lang/config/tree/1.14.0"
+ "source": "https://github.com/Laravel-Lang/config/tree/1.15.0"
},
- "time": "2025-04-11T07:31:54+00:00"
+ "time": "2025-12-04T09:58:46+00:00"
},
{
"name": "laravel-lang/lang",
- "version": "15.25.0",
+ "version": "15.26.3",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Lang/lang.git",
- "reference": "4db5447efd09546a2dff3f2e00cfbf182cdc0abb"
+ "reference": "a32a00e3239d33af5000b947a488387040369e5c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/4db5447efd09546a2dff3f2e00cfbf182cdc0abb",
- "reference": "4db5447efd09546a2dff3f2e00cfbf182cdc0abb",
+ "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/a32a00e3239d33af5000b947a488387040369e5c",
+ "reference": "a32a00e3239d33af5000b947a488387040369e5c",
"shasum": ""
},
"require": {
@@ -11535,20 +11606,20 @@
"issues": "https://github.com/Laravel-Lang/lang/issues",
"source": "https://github.com/Laravel-Lang/lang"
},
- "time": "2025-09-14T01:43:56+00:00"
+ "time": "2025-12-09T12:42:35+00:00"
},
{
"name": "laravel-lang/locale-list",
- "version": "1.5.1",
+ "version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Lang/locale-list.git",
- "reference": "060475db218a97a54612163112b44782024d79c1"
+ "reference": "98227230d737b32279f8376a3149be43965513c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravel-Lang/locale-list/zipball/060475db218a97a54612163112b44782024d79c1",
- "reference": "060475db218a97a54612163112b44782024d79c1",
+ "url": "https://api.github.com/repos/Laravel-Lang/locale-list/zipball/98227230d737b32279f8376a3149be43965513c6",
+ "reference": "98227230d737b32279f8376a3149be43965513c6",
"shasum": ""
},
"require": {
@@ -11592,7 +11663,7 @@
"issues": "https://github.com/Laravel-Lang/locale-list/issues",
"source": "https://github.com/Laravel-Lang/locale-list"
},
- "time": "2025-06-23T09:39:26+00:00"
+ "time": "2025-11-16T18:22:05+00:00"
},
{
"name": "laravel-lang/locales",
@@ -11669,16 +11740,16 @@
},
{
"name": "laravel-lang/native-country-names",
- "version": "1.5.1",
+ "version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Lang/native-country-names.git",
- "reference": "70eba5c3b7a4035da085123a81c076e52367b30c"
+ "reference": "22a9d18d9094fdf0b3384f37feefd3c7d91f1db9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravel-Lang/native-country-names/zipball/70eba5c3b7a4035da085123a81c076e52367b30c",
- "reference": "70eba5c3b7a4035da085123a81c076e52367b30c",
+ "url": "https://api.github.com/repos/Laravel-Lang/native-country-names/zipball/22a9d18d9094fdf0b3384f37feefd3c7d91f1db9",
+ "reference": "22a9d18d9094fdf0b3384f37feefd3c7d91f1db9",
"shasum": ""
},
"require": {
@@ -11737,20 +11808,20 @@
"issues": "https://github.com/Laravel-Lang/native-country-names/issues",
"source": "https://github.com/Laravel-Lang/native-country-names"
},
- "time": "2025-06-23T09:38:47+00:00"
+ "time": "2025-11-18T07:59:31+00:00"
},
{
"name": "laravel-lang/native-currency-names",
- "version": "1.6.1",
+ "version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Lang/native-currency-names.git",
- "reference": "b376c69778be7184f7292cb92424ac7d7415d55d"
+ "reference": "cc871b6d2574b4397728b78e4522e6cfd53cdb79"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravel-Lang/native-currency-names/zipball/b376c69778be7184f7292cb92424ac7d7415d55d",
- "reference": "b376c69778be7184f7292cb92424ac7d7415d55d",
+ "url": "https://api.github.com/repos/Laravel-Lang/native-currency-names/zipball/cc871b6d2574b4397728b78e4522e6cfd53cdb79",
+ "reference": "cc871b6d2574b4397728b78e4522e6cfd53cdb79",
"shasum": ""
},
"require": {
@@ -11806,20 +11877,20 @@
"issues": "https://github.com/Laravel-Lang/native-currency-names/issues",
"source": "https://github.com/Laravel-Lang/native-currency-names"
},
- "time": "2025-06-23T09:38:58+00:00"
+ "time": "2025-11-18T07:53:26+00:00"
},
{
"name": "laravel-lang/native-locale-names",
- "version": "2.5.1",
+ "version": "2.6.1",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Lang/native-locale-names.git",
- "reference": "38278ef43fb3460c9fb7a056ac2e8043e4faa963"
+ "reference": "a5fe634a4db570160dbf3ac68882d281fc88436e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravel-Lang/native-locale-names/zipball/38278ef43fb3460c9fb7a056ac2e8043e4faa963",
- "reference": "38278ef43fb3460c9fb7a056ac2e8043e4faa963",
+ "url": "https://api.github.com/repos/Laravel-Lang/native-locale-names/zipball/a5fe634a4db570160dbf3ac68882d281fc88436e",
+ "reference": "a5fe634a4db570160dbf3ac68882d281fc88436e",
"shasum": ""
},
"require": {
@@ -11830,7 +11901,7 @@
"require-dev": {
"illuminate/support": "^10.31 || ^11.0 || ^12.0",
"laravel-lang/locale-list": "^1.2",
- "pestphp/pest": "^2.24.3",
+ "pestphp/pest": "^2.24.3 || ^3.0",
"punic/punic": "^3.8",
"symfony/console": "^6.3 || ^7.0",
"symfony/process": "^6.3 || ^7.0",
@@ -11872,7 +11943,7 @@
"issues": "https://github.com/Laravel-Lang/native-locale-names/issues",
"source": "https://github.com/Laravel-Lang/native-locale-names"
},
- "time": "2025-06-23T09:38:52+00:00"
+ "time": "2025-11-18T08:10:42+00:00"
},
{
"name": "laravel-lang/publisher",
@@ -12117,16 +12188,16 @@
},
{
"name": "nunomaduro/collision",
- "version": "v8.8.2",
+ "version": "v8.8.3",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb"
+ "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/60207965f9b7b7a4ce15a0f75d57f9dadb105bdb",
- "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
+ "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
"shasum": ""
},
"require": {
@@ -12148,7 +12219,7 @@
"laravel/sanctum": "^4.1.1",
"laravel/tinker": "^2.10.1",
"orchestra/testbench-core": "^9.12.0 || ^10.4",
- "pestphp/pest": "^3.8.2",
+ "pestphp/pest": "^3.8.2 || ^4.0.0",
"sebastian/environment": "^7.2.1 || ^8.0"
},
"type": "library",
@@ -12212,7 +12283,7 @@
"type": "patreon"
}
],
- "time": "2025-06-25T02:12:12+00:00"
+ "time": "2025-11-20T02:55:25+00:00"
},
{
"name": "phar-io/manifest",
@@ -12669,16 +12740,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.42",
+ "version": "11.5.46",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c"
+ "reference": "75dfe79a2aa30085b7132bb84377c24062193f33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
- "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/75dfe79a2aa30085b7132bb84377c24062193f33",
+ "reference": "75dfe79a2aa30085b7132bb84377c24062193f33",
"shasum": ""
},
"require": {
@@ -12750,7 +12821,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.42"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.46"
},
"funding": [
{
@@ -12774,7 +12845,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-28T12:09:13+00:00"
+ "time": "2025-12-06T08:01:15+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -13816,16 +13887,16 @@
},
{
"name": "theseer/tokenizer",
- "version": "1.2.3",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
"shasum": ""
},
"require": {
@@ -13854,7 +13925,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
},
"funding": [
{
@@ -13862,7 +13933,7 @@
"type": "github"
}
],
- "time": "2024-03-03T12:36:25+00:00"
+ "time": "2025-11-17T20:03:58+00:00"
}
],
"aliases": [],
@@ -13874,7 +13945,7 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": ">=8.2 <8.5",
+ "php": ">=8.2",
"ext-bcmath": "*",
"ext-curl": "*",
"ext-gd": "*",
diff --git a/config/horizon.php b/config/horizon.php
index 51719726..d1afd506 100644
--- a/config/horizon.php
+++ b/config/horizon.php
@@ -191,7 +191,7 @@ return [
'maxJobs' => 0,
'memory' => 128,
'tries' => 1,
- 'timeout' => 600,
+ 'timeout' => 120,
'nice' => 0,
],
],
diff --git a/config/queue.php b/config/queue.php
index 3d29f3af..9d8bf8eb 100644
--- a/config/queue.php
+++ b/config/queue.php
@@ -66,7 +66,7 @@ return [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'nexus_queue'),
- 'retry_after' => 90,
+ 'retry_after' => 150,
'block_for' => null,
'after_commit' => true,
],
diff --git a/database/migrations/2025_04_17_091208_create_user_passkeys_table.php b/database/migrations/2025_04_17_091208_create_user_passkeys_table.php
new file mode 100644
index 00000000..9c233e49
--- /dev/null
+++ b/database/migrations/2025_04_17_091208_create_user_passkeys_table.php
@@ -0,0 +1,26 @@
+id();
+ $table->unsignedMediumInteger('user_id');
+ $table->text('AAGUID')->nullable();
+ $table->text('credential_id');
+ $table->text('public_key');
+ $table->unsignedInteger('counter')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('user_passkeys');
+ }
+};
diff --git a/include/functions.php b/include/functions.php
index 93d3cf46..0d45b176 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -160,7 +160,7 @@ function print_attachment($dlkey, $enableimage = true, $imageresizer = true)
}
do_log(sprintf("driver: %s, location: %s, url: %s", $driver, $row['location'], $url));
if($imageresizer == true)
- $onclick = " onclick=\"Previewurl('".$url."')\"";
+ $onclick = " data-zoomable data-zoom-src=\"".$url."\"";
else $onclick = "";
$return = "
".nexus_trans('attachment.size').": ".mksize($row['filesize'])."
".gettime($row['added']))."', 'styleClass', 'attach', 'x', findPosition(this)[0], 'y', findPosition(this)[1]-58);\" />";
}
@@ -240,7 +240,7 @@ function formatImg($src, $enableImageResizer, $image_max_width, $image_max_heigh
}
return addTempCode("
");
}
@@ -409,28 +409,6 @@ function format_comment($text, $strip_html = true, $xssclean = false, $newtab =
$s = preg_replace("/\[img=([^\<\r\n\"']+?)\]/i", '', $s, -1);
}
- // [flash,500,400]http://www/image.swf[/flash]
- if (strpos($s,"[flash") !== false) { //flash is not often used. Better check if it exist before hand
- if ($enableflash) {
-// $s = preg_replace("/\[flash(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(swf)))\[\/flash\]/ei", "formatFlash('\\4', '\\2', '\\3')", $s);
- $s = preg_replace_callback("/\[flash(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(swf)))\[\/flash\]/i", function ($matches) {
- return formatFlash($matches[4], $matches[2], $matches[3]);
- }, $s);
- } else {
- $s = preg_replace("/\[flash(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(swf)))\[\/flash\]/i", '', $s);
- }
- }
- //[flv,320,240]http://www/a.flv[/flv]
- if (strpos($s,"[flv") !== false) { //flv is not often used. Better check if it exist before hand
- if ($enableflash) {
-// $s = preg_replace("/\[flv(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(flv)))\[\/flv\]/ei", "formatFlv('\\4', '\\2', '\\3')", $s);
- $s = preg_replace_callback("/\[flv(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(flv)))\[\/flv\]/i", function ($matches) {
- return formatFlv($matches[4], $matches[2], $matches[3]);
- }, $s);
- } else {
- $s = preg_replace("/\[flv(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|ftp):\/\/[^\s'\"<>]+(\.(flv)))\[\/flv\]/i", '', $s);
- }
- }
//[youtube,560,315]https://www.youtube.com/watch?v=DWDL3VTCcCg&ab_channel=ESPNMMA[/youtube]
if (str_contains($s, '[youtube') && str_contains($s, 'v=')) {
$s = preg_replace_callback("/\[youtube(\,([1-9][0-9]*)\,([1-9][0-9]*))?\]((http|https):\/\/[^\s'\"<>]+)\[\/youtube\]/i", function ($matches) {
@@ -2316,7 +2294,7 @@ function validfilename($name) {
}
function validemail($email) {
- return preg_match('/^[\w.-]+@([\w.-]+\.)+[a-z]{2,6}$/is', $email);
+ return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
function validlang($langid) {
@@ -2584,7 +2562,6 @@ $cssupdatedate=($cssupdatedate ? "?".htmlspecialchars($cssupdatedate) : "");
" type="text/css" />
" type="text/css" />
" type="text/css" />
-
");
print("");
}
- print ("");
if ($add_key_shortcut != "")
print($add_key_shortcut);
print("");
@@ -3071,10 +3047,12 @@ function stdfoot() {
}
$js = <<
+
JS;
diff --git a/include/globalfunctions.php b/include/globalfunctions.php
index a222877a..269a15b8 100644
--- a/include/globalfunctions.php
+++ b/include/globalfunctions.php
@@ -1136,6 +1136,7 @@ function clear_user_cache($uid, $passkey = '')
\Nexus\Database\NexusDB::cache_del("direct_permissions:$uid");
if ($passkey) {
\Nexus\Database\NexusDB::cache_del('user_passkey_'.$passkey.'_content');//announce.php
+ \Nexus\Database\NexusDB::cache_del('user_passkey_'.$passkey.'_rss');//torrentrss.php
}
$userInfo = \App\Models\User::query()->find($uid, \App\Models\User::$commonFields);
if ($userInfo) {
diff --git a/lang/chs/lang_invite.php b/lang/chs/lang_invite.php
index ce3c0cb2..c5dd06df 100644
--- a/lang/chs/lang_invite.php
+++ b/lang/chs/lang_invite.php
@@ -51,6 +51,7 @@ $lang_invite = array
'harem_addition' => '后宫加成',
'signup_link_help' => '右键复制',
'signup_link' => '注册链接',
+ 'text_uploaded_count' => '上传种子数量',
'text_seed_torrent_count' => '当前做种数',
'text_seed_torrent_size' => '当前做种体积',
'text_seed_torrent_bonus_per_hour' => '当前纯做种时魔',
diff --git a/lang/en/lang_invite.php b/lang/en/lang_invite.php
index 84180927..1916e345 100644
--- a/lang/en/lang_invite.php
+++ b/lang/en/lang_invite.php
@@ -54,6 +54,7 @@ Best Regards,
'harem_addition' => 'Harem addition',
'signup_link_help' => 'Right click to copy',
'signup_link' => 'Signup link',
+ 'text_uploaded_count' => 'Uploaded counts',
'text_seed_torrent_count' => 'Seeding counts',
'text_seed_torrent_size' => 'Seeding size',
'text_seed_torrent_bonus_per_hour' => 'Seeding bonus per hour',
diff --git a/nexus/Field/Field.php b/nexus/Field/Field.php
index 0f2e3ac3..fbf83555 100644
--- a/nexus/Field/Field.php
+++ b/nexus/Field/Field.php
@@ -55,14 +55,13 @@ class Field
public function getTypeHuman($type)
{
- global $lang_fields;
$map = [
- self::TYPE_TEXT => $lang_fields['field_type_text'],
- self::TYPE_TEXTAREA => $lang_fields['field_type_textarea'],
- self::TYPE_RADIO => $lang_fields['field_type_radio'],
- self::TYPE_CHECKBOX => $lang_fields['field_type_checkbox'],
- self::TYPE_SELECT => $lang_fields['field_type_select'],
- self::TYPE_IMAGE => $lang_fields['field_type_image'],
+ self::TYPE_TEXT => nexus_trans('field.type.text'),
+ self::TYPE_TEXTAREA => nexus_trans('field.type.textarea'),
+ self::TYPE_RADIO => nexus_trans('field.type.radio'),
+ self::TYPE_CHECKBOX => nexus_trans('field.type.checkbox'),
+ self::TYPE_SELECT => nexus_trans('field.type.select'),
+ self::TYPE_IMAGE => nexus_trans('field.type.image'),
];
return $map[$type] ?? '';
}
@@ -439,7 +438,7 @@ JS;
$customFieldDisplay = $field['display'];
$customFieldDisplay = str_replace("<%{$field['name']}.label%>", $field['label'], $customFieldDisplay);
$customFieldDisplay = str_replace("<%{$field['name']}.value%>", $contentNotFormatted, $customFieldDisplay);
- $rowByRowHtml .= tr($field['label'], format_comment($customFieldDisplay, false), 1);
+ $rowByRowHtml .= tr($field['label'], format_comment($customFieldDisplay), 1);
} else {
$contentFormatted = $this->formatCustomFieldValue($field, true);
$rowByRowHtml .= tr($field['label'], $contentFormatted, 1);
@@ -463,13 +462,13 @@ JS;
switch ($customFieldWithValue['type']) {
case self::TYPE_TEXT:
case self::TYPE_TEXTAREA:
- $result .= $doFormatComment ? format_comment($fieldValue, false) : $fieldValue;
+ $result .= $doFormatComment ? format_comment($fieldValue) : $fieldValue;
break;
case self::TYPE_IMAGE:
if (substr($fieldValue, 0, 4) == 'http') {
$result .= $doFormatComment ? formatImg($fieldValue, true, 700, 0, "attach{$customFieldWithValue['id']}") : $fieldValue;
} else {
- $result .= $doFormatComment ? format_comment($fieldValue, false) : $fieldValue;
+ $result .= $doFormatComment ? format_comment($fieldValue) : $fieldValue;
}
break;
case self::TYPE_RADIO:
diff --git a/nexus/PTGen/PTGen.php b/nexus/PTGen/PTGen.php
index 4a875e21..52be37c4 100644
--- a/nexus/PTGen/PTGen.php
+++ b/nexus/PTGen/PTGen.php
@@ -351,9 +351,17 @@ HTML;
public function isIyuu(array $bodyArr): bool
{
- return false;
- //Not support, due to change frequently
-// return isset($bodyArr['ret']) && $bodyArr['ret'] == 200;
+ $version = (string)($bodyArr['version'] ?? '');
+ switch ($version) {
+ case '2.0.0':
+ return isset($bodyArr['ret'])
+ && intval($bodyArr['ret']) === 200
+ && isset($bodyArr['data']['format'])
+ && is_string($bodyArr['data']['format'])
+ && $bodyArr['data']['format'] !== '';
+ default:
+ return false;
+ }
}
public function listRatings(array $ptGenData, string $imdbLink, string $desc = ''): array
@@ -575,6 +583,10 @@ HTML;
do_log("$log, site: $site can not be updated: " . $exception->getMessage(), 'error');
}
}
+ if (empty($ptGenInfo)) {
+ do_log("$log, no pt gen info updated");
+ return false;
+ }
$siteIdAndRating = $this->listRatings($ptGenInfo, $torrent->url, $extra->descr);
foreach ($siteIdAndRating as $key => $value) {
if (!isset($ptGenInfo[$key]['data']) || !is_array($ptGenInfo[$key]['data'])) {
diff --git a/public/ajax.php b/public/ajax.php
index a3422bfd..41a00499 100644
--- a/public/ajax.php
+++ b/public/ajax.php
@@ -1,11 +1,14 @@
tokens()->where('id', $params['id'])->delete();
return true;
}
+
+ public static function getPasskeyCreateArgs($params)
+ {
+ global $CURUSER;
+ $rep = new \App\Repositories\UserPasskeyRepository();
+ return $rep->getCreateArgs($CURUSER['id'], $CURUSER['username']);
+ }
+
+ public static function processPasskeyCreate($params)
+ {
+ global $CURUSER;
+ $rep = new \App\Repositories\UserPasskeyRepository();
+ return $rep->processCreate($CURUSER['id'], $params['clientDataJSON'], $params['attestationObject']);
+ }
+
+ public static function deletePasskey($params)
+ {
+ global $CURUSER;
+ $rep = new \App\Repositories\UserPasskeyRepository();
+ return $rep->delete($CURUSER['id'], $params['credentialId']);
+ }
+
+ public static function getPasskeyList($params)
+ {
+ global $CURUSER;
+ $rep = new \App\Repositories\UserPasskeyRepository();
+ return $rep->getList($CURUSER['id']);
+ }
+
+ public static function getPasskeyGetArgs($params)
+ {
+ global $CURUSER;
+ $rep = new \App\Repositories\UserPasskeyRepository();
+ return $rep->getGetArgs();
+ }
+
+ public static function processPasskeyGet($params)
+ {
+ global $CURUSER;
+ $rep = new \App\Repositories\UserPasskeyRepository();
+ return $rep->processGet($params['challenge'], $params['id'], $params['clientDataJSON'], $params['authenticatorData'], $params['signature'], $params['userHandle']);
+ }
}
$class = 'AjaxInterface';
diff --git a/public/announce.php b/public/announce.php
index b0478f18..3706c21e 100644
--- a/public/announce.php
+++ b/public/announce.php
@@ -13,7 +13,7 @@ foreach (array("passkey","info_hash","peer_id","event") as $x)
$GLOBALS[$x] = $_GET[$x];
}
// get integer type port, downloaded, uploaded, left from client
-foreach (array("port","downloaded","uploaded","left","compact","no_peer_id") as $x)
+foreach (array("port","downloaded","uploaded","left") as $x)
{
$GLOBALS[$x] = intval($_GET[$x] ?? 0);
}
@@ -172,7 +172,7 @@ elseif ($az['showclienterror'] == 'yes'){
}
// check torrent based on info_hash
-$checkTorrentSql = "SELECT torrents.id, size, owner, sp_state, seeders, leechers, UNIX_TIMESTAMP(added) AS ts, added, banned, hr, approval_status, price, categories.mode FROM torrents left join categories on torrents.category = categories.id WHERE " . hash_where("info_hash", $info_hash);
+$checkTorrentSql = "SELECT torrents.id, size, owner, sp_state, seeders, leechers, times_completed, UNIX_TIMESTAMP(added) AS ts, added, banned, hr, approval_status, price, categories.mode FROM torrents left join categories on torrents.category = categories.id WHERE " . hash_where("info_hash", $info_hash);
if (!$torrent = $Cache->get_value('torrent_hash_'.$info_hash.'_content')){
$res = sql_query($checkTorrentSql);
$torrent = mysql_fetch_array($res);
@@ -251,13 +251,11 @@ $rep_dict = [
"min interval" => (int)$announce_wait,
"complete" => (int)$torrent["seeders"],
"incomplete" => (int)$torrent["leechers"],
- "peers" => [], // By default it is a array object, only when `&compact=1` then it should be a string
+ "downloaded" => (int)$torrent["times_completed"],
+ "peers" => '',
+ "peers6" => '',
];
-if ($compact == 1) {
- $rep_dict['peers'] = ''; // Change `peers` from array to string
- $rep_dict['peers6'] = ''; // If peer use IPv6 address , we should add packed string in `peers6`
-}
$GLOBALS['rep_dict'] = $rep_dict;
if ($isReAnnounce) {
do_log("$log, [YES_RE_ANNOUNCE]");
@@ -280,43 +278,11 @@ if (isset($event) && $event == "stopped") {
continue;
}
- if ($compact == 1) {
-// $peerField = filter_var($row['ip'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) ? 'peers6' : 'peers';
-// $rep_dict[$peerField] .= inet_pton($row["ip"]) . pack("n", $row["port"]);
- if (!empty($row['ipv4'])) {
- $rep_dict['peers'] .= inet_pton($row["ipv4"]) . pack("n", $row["port"]);
- }
- if (!empty($row['ipv6'])) {
- $rep_dict['peers6'] .= inet_pton($row["ipv6"]) . pack("n", $row["port"]);
- }
- } else {
-// $peer = [
-// 'ip' => $row["ip"],
-// 'port' => (int) $row["port"]
-// ];
-//
-// if ($no_peer_id == 1) {
-// $peer['peer id'] = $row["peer_id"];
-// }
-// $rep_dict['peers'][] = $peer;
- if (!empty($row['ipv4'])) {
- $peer = [
- 'peer_id' => $row['peer_id'],
- 'ip' => $row['ipv4'],
- 'port' => (int)$row['port'],
- ];
- if ($no_peer_id) unset($peer['peer_id']);
- $rep_dict['peers'][] = $peer;
- }
- if (!empty($row['ipv6'])) {
- $peer = [
- 'peer_id' => $row['peer_id'],
- 'ip' => $row['ipv6'],
- 'port' => (int)$row['port'],
- ];
- if ($no_peer_id) unset($peer['peer_id']);
- $rep_dict['peers'][] = $peer;
- }
+ if (!empty($row['ipv4'])) {
+ $rep_dict['peers'] .= inet_pton($row["ipv4"]) . pack("n", $row["port"]);
+ }
+ if (!empty($row['ipv6'])) {
+ $rep_dict['peers6'] .= inet_pton($row["ipv6"]) . pack("n", $row["port"]);
}
}
}
diff --git a/public/fields.php b/public/fields.php
index 6911a6ee..83a6f759 100644
--- a/public/fields.php
+++ b/public/fields.php
@@ -22,6 +22,7 @@ if ($action == 'view') {
begin_main_frame();
echo $field->buildFieldForm();
} elseif ($action == 'submit') {
+ die("This method is deprecated! This method is no longer available in 1.10, it does not save data correctly, please go to the management system!");
try {
$result = $field->save($_REQUEST);
nexus_redirect('fields.php?action=view');
diff --git a/public/invite.php b/public/invite.php
index 0fa79a13..d60b5397 100644
--- a/public/invite.php
+++ b/public/invite.php
@@ -100,14 +100,14 @@ if ($type == 'new'){
} else {
inviteMenu($menuSelected);
if ($menuSelected == 'invitee') {
- $whereStr = "invited_by = " . sqlesc($id);
+ $whereStr = "u.invited_by = " . sqlesc($id);
if (!empty($_GET['status'])) {
- $whereStr .= " and status = " . sqlesc($_GET['status']);
+ $whereStr .= " and u.status = " . sqlesc($_GET['status']);
}
if (!empty($_GET['enabled'])) {
- $whereStr .= " and enabled = " . sqlesc($_GET['enabled']);
+ $whereStr .= " and u.enabled = " . sqlesc($_GET['enabled']);
}
- $rel = sql_query("SELECT COUNT(*) FROM users WHERE $whereStr") or sqlerr(__FILE__, __LINE__);
+ $rel = sql_query("SELECT COUNT(*) FROM users u WHERE $whereStr") or sqlerr(__FILE__, __LINE__);
$arro = mysql_fetch_row($rel);
$number = $arro[0];
$textSelectOnePlease = nexus_trans('nexus.select_one_please');
@@ -164,13 +164,14 @@ JS;
} else {
list($pagertop, $pagerbottom, $limit) = pager($pageSize, $number, "?id=$id&menu=$menuSelected&");
$haremAdditionFactor = (float)get_setting('bonus.harem_addition');
- $ret = sql_query("SELECT id, username, email, uploaded, downloaded, status, warned, enabled, donor, email, seed_points_per_hour, seeding_torrent_count, seeding_torrent_size, last_announce_at FROM users WHERE $whereStr $limit") or sqlerr();
+ $ret = sql_query("SELECT u.id, u.username, u.email, u.uploaded, u.downloaded, u.status, u.warned, u.enabled, u.donor, u.email, u.seed_points_per_hour, u.seeding_torrent_count, u.seeding_torrent_size, u.last_announce_at, COUNT(t.id) AS torrent_count FROM users u LEFT JOIN torrents t ON t.owner = u.id WHERE $whereStr GROUP BY u.id $limit") or sqlerr();
$num = mysql_num_rows($ret);
print("
| ".$lang_invite['text_username']." |
".$lang_invite['text_email']." |
".$lang_invite['text_enabled']." |
+".$lang_invite['text_uploaded_count']." |
".$lang_invite['text_uploaded']." |
".$lang_invite['text_downloaded']." |
".$lang_invite['text_ratio']." |
@@ -212,6 +213,7 @@ JS;
".get_username($arr['id'])." |
".$arr['email']." |
".$arr['enabled']." |
+ " . $arr['torrent_count'] . " |
" . mksize($arr['uploaded']) . " |
" . mksize($arr['downloaded']) . " |
".$ratio." |
diff --git a/public/js/medium-zoom.min.js b/public/js/medium-zoom.min.js
new file mode 100644
index 00000000..dbe319a8
--- /dev/null
+++ b/public/js/medium-zoom.min.js
@@ -0,0 +1,2 @@
+/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).mediumZoom=t()}(this,(function(){"use strict";var e=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},c=window.Promise||function(e){function t(){}e(t,t)},u=function(e){var t=e.target;t!==N?-1!==x.indexOf(t)&&w({target:t}):E()},s=function(){if(!A&&k.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(S-e)>T.scrollOffset&&setTimeout(E,150)}},f=function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||E()},p=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t;if(t.background&&(N.style.background=t.background),t.container&&t.container instanceof Object&&(n.container=e({},T.container,t.container)),t.template){var i=o(t.template)?t.template:document.querySelector(t.template);n.template=i}return T=e({},T,n),x.forEach((function(e){e.dispatchEvent(a("medium-zoom:update",{detail:{zoom:j}}))})),j},g=function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(e({},T,o))},v=function(){for(var e=arguments.length,t=Array(e),o=0;o0?t.reduce((function(e,t){return[].concat(e,i(t))}),[]):x;return n.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(a("medium-zoom:detach",{detail:{zoom:j}}))})),x=x.filter((function(e){return-1===n.indexOf(e)})),j},z=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return x.forEach((function(n){n.addEventListener("medium-zoom:"+e,t,o)})),O.push({type:"medium-zoom:"+e,listener:t,options:o}),j},y=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return x.forEach((function(n){n.removeEventListener("medium-zoom:"+e,t,o)})),O=O.filter((function(o){return!(o.type==="medium-zoom:"+e&&o.listener.toString()===t.toString())})),j},b=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.target,r=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},i=void 0,r=void 0;if(T.container)if(T.container instanceof Object)i=(t=e({},t,T.container)).width-t.left-t.right-2*T.margin,r=t.height-t.top-t.bottom-2*T.margin;else{var d=(o(T.container)?T.container:document.querySelector(T.container)).getBoundingClientRect(),a=d.width,m=d.height,l=d.left,c=d.top;t=e({},t,{width:a,height:m,left:l,top:c})}i=i||t.width-2*T.margin,r=r||t.height-2*T.margin;var u=k.zoomedHd||k.original,s=n(u)?i:u.naturalWidth||i,f=n(u)?r:u.naturalHeight||r,p=u.getBoundingClientRect(),g=p.top,v=p.left,h=p.width,z=p.height,y=Math.min(Math.max(h,s),i)/h,b=Math.min(Math.max(z,f),r)/z,E=Math.min(y,b),w="scale("+E+") translate3d("+((i-h)/2-v+T.margin+t.left)/E+"px, "+((r-z)/2-g+T.margin+t.top)/E+"px, 0)";k.zoomed.style.transform=w,k.zoomedHd&&(k.zoomedHd.style.transform=w)};return new c((function(e){if(i&&-1===x.indexOf(i))e(j);else{if(k.zoomed)e(j);else{if(i)k.original=i;else{if(!(x.length>0))return void e(j);var t=x;k.original=t[0]}if(k.original.dispatchEvent(a("medium-zoom:open",{detail:{zoom:j}})),S=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,A=!0,k.zoomed=d(k.original),document.body.appendChild(N),T.template){var n=o(T.template)?T.template:document.querySelector(T.template);k.template=document.createElement("div"),k.template.appendChild(n.content.cloneNode(!0)),document.body.appendChild(k.template)}if(k.original.parentElement&&"PICTURE"===k.original.parentElement.tagName&&k.original.currentSrc&&(k.zoomed.src=k.original.currentSrc),document.body.appendChild(k.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),k.original.classList.add("medium-zoom-image--hidden"),k.zoomed.classList.add("medium-zoom-image--opened"),k.zoomed.addEventListener("click",E),k.zoomed.addEventListener("transitionend",(function t(){A=!1,k.zoomed.removeEventListener("transitionend",t),k.original.dispatchEvent(a("medium-zoom:opened",{detail:{zoom:j}})),e(j)})),k.original.getAttribute("data-zoom-src")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute("srcset"),k.zoomedHd.removeAttribute("sizes"),k.zoomedHd.removeAttribute("loading"),k.zoomedHd.src=k.zoomed.getAttribute("data-zoom-src"),k.zoomedHd.onerror=function(){clearInterval(m),console.warn("Unable to reach the zoom image target "+k.zoomedHd.src),k.zoomedHd=null,r()};var m=setInterval((function(){k.zoomedHd.complete&&(clearInterval(m),k.zoomedHd.classList.add("medium-zoom-image--opened"),k.zoomedHd.addEventListener("click",E),document.body.appendChild(k.zoomedHd),r())}),10)}else if(k.original.hasAttribute("srcset")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute("sizes"),k.zoomedHd.removeAttribute("loading");var l=k.zoomedHd.addEventListener("load",(function(){k.zoomedHd.removeEventListener("load",l),k.zoomedHd.classList.add("medium-zoom-image--opened"),k.zoomedHd.addEventListener("click",E),document.body.appendChild(k.zoomedHd),r()}))}else r()}}}))},E=function(){return new c((function(e){if(!A&&k.original){A=!0,document.body.classList.remove("medium-zoom--opened"),k.zoomed.style.transform="",k.zoomedHd&&(k.zoomedHd.style.transform=""),k.template&&(k.template.style.transition="opacity 150ms",k.template.style.opacity=0),k.original.dispatchEvent(a("medium-zoom:close",{detail:{zoom:j}})),k.zoomed.addEventListener("transitionend",(function t(){k.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(k.zoomed),k.zoomedHd&&document.body.removeChild(k.zoomedHd),document.body.removeChild(N),k.zoomed.classList.remove("medium-zoom-image--opened"),k.template&&document.body.removeChild(k.template),A=!1,k.zoomed.removeEventListener("transitionend",t),k.original.dispatchEvent(a("medium-zoom:closed",{detail:{zoom:j}})),k.original=null,k.zoomed=null,k.zoomedHd=null,k.template=null,e(j)}))}else e(j)}))},w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target;return k.original?E():b({target:t})},L=function(){return T},H=function(){return x},C=function(){return k.original},x=[],O=[],A=!1,S=0,T=l,k={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(m)?T=m:(m||"string"==typeof m)&&v(m),T=e({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},T);var N=r(T.background);document.addEventListener("click",u),document.addEventListener("keyup",f),document.addEventListener("scroll",s),window.addEventListener("resize",E);var j={open:b,close:E,toggle:w,update:p,clone:g,attach:v,detach:h,on:z,off:y,getOptions:L,getImages:H,getZoomedImage:C};return j}}));
diff --git a/public/js/nexus.js b/public/js/nexus.js
index 9a4435e7..46229f19 100644
--- a/public/js/nexus.js
+++ b/public/js/nexus.js
@@ -65,7 +65,7 @@ jQuery(document).ready(function () {
let position = getPosition(e, imgPosition)
let src = imgEle.attr("src")
if (src) {
- previewEle.attr("src", src).css(position).fadeIn("fast");
+ previewEle.stop(true, true).attr("src", src).css(position).fadeIn("fast");
}
}).on("mouseout", selector, function (e) {
// previewEle.remove()
diff --git a/public/js/passkey.js b/public/js/passkey.js
new file mode 100644
index 00000000..9a87c342
--- /dev/null
+++ b/public/js/passkey.js
@@ -0,0 +1,169 @@
+const Passkey = (() => {
+ const apiUrl = '/ajax.php';
+
+ const supported = () => {
+ return window.PublicKeyCredential;
+ }
+
+ const conditionalSupported = () => {
+ return supported() && PublicKeyCredential.isConditionalMediationAvailable;
+ }
+
+ const isCMA = async () => {
+ return await PublicKeyCredential.isConditionalMediationAvailable();
+ }
+
+ const getCreateArgs = async () => {
+ const getArgsParams = new URLSearchParams();
+ getArgsParams.set('action', 'getPasskeyCreateArgs');
+
+ const response = await fetch(apiUrl, {
+ method: 'POST',
+ body: getArgsParams,
+ });
+ const data = await response.json();
+ if (data.ret !== 0) {
+ throw new Error(data.msg);
+ }
+
+ const createArgs = data.data;
+ recursiveBase64StrToArrayBuffer(createArgs);
+ return createArgs;
+ }
+
+ const createRegistration = async () => {
+ const createArgs = await getCreateArgs();
+
+ const cred = await navigator.credentials.create(createArgs);
+
+ const processCreateParams = new URLSearchParams();
+ processCreateParams.set('action', 'processPasskeyCreate');
+ processCreateParams.set('params[transports]', cred.response.getTransports ? cred.response.getTransports() : null)
+ processCreateParams.set('params[clientDataJSON]', cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null);
+ processCreateParams.set('params[attestationObject]', cred.response.attestationObject ? arrayBufferToBase64(cred.response.attestationObject) : null);
+
+ const response = await fetch(apiUrl, {
+ method: 'POST',
+ body: processCreateParams,
+ });
+ const data = await response.json();
+ if (data.ret !== 0) {
+ throw new Error(data.msg);
+ }
+ }
+
+ const getGetArgs = async () => {
+ const getArgsParams = new URLSearchParams();
+ getArgsParams.set('action', 'getPasskeyGetArgs');
+
+ const response = await fetch(apiUrl, {
+ method: 'POST',
+ body: getArgsParams,
+ });
+ const data = await response.json();
+ if (data.ret !== 0) {
+ throw new Error(data.msg);
+ }
+
+ const getArgs = data.data;
+ recursiveBase64StrToArrayBuffer(getArgs);
+ return getArgs;
+ }
+
+ let abortController;
+
+ const checkRegistration = async (conditional, showLoading) => {
+ if (abortController) {
+ abortController.abort()
+ abortController = null;
+ }
+ if (!conditional) showLoading();
+ const getArgs = await getGetArgs();
+ if (conditional) {
+ abortController = new AbortController();
+ getArgs.signal = abortController.signal;
+ getArgs.mediation = 'conditional';
+ }
+
+ const cred = await navigator.credentials.get(getArgs);
+
+ if (conditional) showLoading();
+
+ const processGetParams = new URLSearchParams();
+ processGetParams.set('action', 'processPasskeyGet');
+ processGetParams.set('params[challenge]', arrayBufferToBase64(getArgs['publicKey']['challenge']));
+ processGetParams.set('params[id]', cred.rawId ? arrayBufferToBase64(cred.rawId) : null);
+ processGetParams.set('params[clientDataJSON]', cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null);
+ processGetParams.set('params[authenticatorData]', cred.response.authenticatorData ? arrayBufferToBase64(cred.response.authenticatorData) : null);
+ processGetParams.set('params[signature]', cred.response.signature ? arrayBufferToBase64(cred.response.signature) : null);
+ processGetParams.set('params[userHandle]', cred.response.userHandle ? arrayBufferToBase64(cred.response.userHandle) : null);
+
+ const response = await fetch(apiUrl, {
+ method: 'POST',
+ body: processGetParams,
+ });
+ const data = await response.json();
+ if (data.ret !== 0) {
+ throw new Error(data.msg);
+ }
+ }
+
+ const deleteRegistration = async (credentialId) => {
+ const deleteParams = new URLSearchParams();
+ deleteParams.set('action', 'deletePasskey');
+ deleteParams.set('params[credentialId]', credentialId);
+
+ const response = await fetch(apiUrl, {
+ method: 'POST',
+ body: deleteParams,
+ });
+ const data = await response.json();
+ if (data.ret !== 0) {
+ throw new Error(data.msg);
+ }
+ }
+
+ const recursiveBase64StrToArrayBuffer = (obj) => {
+ let prefix = '=?BINARY?B?';
+ let suffix = '?=';
+ if (typeof obj === 'object') {
+ for (let key in obj) {
+ if (typeof obj[key] === 'string') {
+ let str = obj[key];
+ if (str.substring(0, prefix.length) === prefix && str.substring(str.length - suffix.length) === suffix) {
+ str = str.substring(prefix.length, str.length - suffix.length);
+
+ let binary_string = window.atob(str);
+ let len = binary_string.length;
+ let bytes = new Uint8Array(len);
+ for (let i = 0; i < len; i++) {
+ bytes[i] = binary_string.charCodeAt(i);
+ }
+ obj[key] = bytes.buffer;
+ }
+ } else {
+ recursiveBase64StrToArrayBuffer(obj[key]);
+ }
+ }
+ }
+ }
+
+ const arrayBufferToBase64 = (buffer) => {
+ let binary = '';
+ let bytes = new Uint8Array(buffer);
+ let len = bytes.byteLength;
+ for (let i = 0; i < len; i++) {
+ binary += String.fromCharCode(bytes[i]);
+ }
+ return window.btoa(binary);
+ }
+
+ return {
+ supported: supported,
+ conditionalSupported: conditionalSupported,
+ createRegistration: createRegistration,
+ checkRegistration: checkRegistration,
+ deleteRegistration: deleteRegistration,
+ isCMA: isCMA,
+ }
+})();
diff --git a/public/login.php b/public/login.php
index 9aac3024..0520c8db 100644
--- a/public/login.php
+++ b/public/login.php
@@ -92,6 +92,7 @@ if (isset($returnto)) {
if ($useChallengeResponseAuthentication) {
print('');
}
+\App\Repositories\UserPasskeyRepository::renderLogin();
?>
");
?>
$CURUSER['id'],
'subject' => nexus_trans('offer.msg_new_offer_subject'),
'msg' => nexus_trans('offer.msg_new_offer_msg', [
- 'username' => "[url=userdetails.php?id={$CURUSER['id']}]{$CURUSER['username']}[/url]",
+ 'username' => "[url=userdetails.php?id={$CURUSER['id']}]{$CURUSER['username']}[/url]",
'offername' => "[url=offers.php?id={$id}&off_details=1]{$name}[/url]"]),
'added' => now(),
]);
@@ -147,6 +147,9 @@ if (isset($_GET['off_details']) && $_GET["off_details"]){
$res = sql_query("SELECT * FROM offers WHERE id = $id") or sqlerr(__FILE__,__LINE__);
$num = mysql_fetch_array($res);
+ if (!$num) {
+ bark($lang_offers['text_nothing_found']);
+ }
$s = $num["name"];
@@ -270,7 +273,7 @@ if (isset($_GET["allow_offer"]) && $_GET["allow_offer"]) {
$subject = nexus_trans("offer.msg_your_offer_allowed", [], $locale);
$allowedtime = date("Y-m-d H:i:s");
//sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, {$arr['userid']}, '" . $allowedtime . "', " . sqlesc($msg) . ", ".sqlesc($subject).")") or sqlerr(__FILE__, __LINE__);
-
+
\App\Models\Message::add([
'sender' => 0,
'receiver' => $arr['userid'],
@@ -278,7 +281,7 @@ if (isset($_GET["allow_offer"]) && $_GET["allow_offer"]) {
'subject' => $subject,
'added' => $allowedtime,
]);
-
+
sql_query ("UPDATE offers SET allowed = 'allowed', allowedtime = '".$allowedtime."' WHERE id = $offid") or sqlerr(__FILE__,__LINE__);
write_log("{$CURUSER['username']} allowed offer {$arr['name']}",'normal');
@@ -329,7 +332,7 @@ if (isset($_GET["finish_offer"]) && $_GET["finish_offer"]) {
}
//===use this line if you DO HAVE subject in your PM system
$subject = nexus_trans("offer.msg_your_offer", [], $locale).$arr['name'].nexus_trans("offer.msg_voted_on", [], $locale);
-
+
\App\Models\Message::add([
'sender' => 0,
'subject' => $subject,
@@ -337,7 +340,7 @@ if (isset($_GET["finish_offer"]) && $_GET["finish_offer"]) {
'added' => $finishvotetime,
'msg' => $msg,
]);
-
+
//===use this line if you DO NOT subject in your PM system
//sql_query("INSERT INTO messages (sender, receiver, added, msg) VALUES(0, $arr['userid'], '" . date("Y-m-d H:i:s") . "', " . sqlesc($msg) . ")") or sqlerr(__FILE__, __LINE__);
write_log("{$CURUSER['username']} closed poll {$arr['name']}",'normal');
@@ -508,10 +511,12 @@ if (isset($_GET["vote"]) && $_GET["vote"]){
}
else
{
- sql_query("UPDATE offers SET $vote = $vote + 1 WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__);
-
$res = sql_query("SELECT users.username, offers.userid, offers.name FROM offers LEFT JOIN users ON offers.userid = users.id WHERE offers.id = ".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__);
$arr = mysql_fetch_assoc($res);
+ if (!$arr) {
+ bark($lang_offers['text_nothing_found']);
+ }
+ sql_query("UPDATE offers SET $vote = $vote + 1 WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__);
$locale = get_user_locale($arr['userid']);
$rs = sql_query("SELECT yeah, against, allowed FROM offers WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__);
@@ -530,7 +535,7 @@ if (isset($_GET["vote"]) && $_GET["vote"]){
sql_query("UPDATE offers SET allowed='allowed', allowedtime=".sqlesc($finishtime)." WHERE id=".sqlesc($offerid)) or sqlerr(__FILE__,__LINE__);
$msg = nexus_trans("offer.msg_offer_voted_on", [], $locale)."[b][url=". get_protocol_prefix() . $BASEURL."/offers.php?id=$offerid&off_details=1]" . $arr['name'] . "[/url][/b].". nexus_trans("offer.msg_find_offer_option", [], $locale).$timeoutnote;
$subject = nexus_trans("offer.msg_your_offer_allowed", [], $locale);
-
+
\App\Models\Message::add([
'sender' => 0,
'receiver' => $arr['userid'],
@@ -556,7 +561,7 @@ if (isset($_GET["vote"]) && $_GET["vote"]){
'added' => now(),
]);
-
+
write_log("System denied offer {$arr['name']}",'normal');
}
diff --git a/public/tags.php b/public/tags.php
index c4aaf6db..c22907c9 100644
--- a/public/tags.php
+++ b/public/tags.php
@@ -228,38 +228,6 @@ insert_tag(
""
);
-insert_tag(
- $lang_tags['text_flash'],
- $lang_tags['text_flash_description'],
- $lang_tags['text_flash_syntax'],
- sprintf($lang_tags['text_flash_example'], getSchemeAndHttpHost()),
- ""
-);
-
-insert_tag(
- $lang_tags['text_flash_two'],
- $lang_tags['text_flash_two_description'],
- $lang_tags['text_flash_two_syntax'],
- sprintf($lang_tags['text_flash_two_example'], getSchemeAndHttpHost()),
- ""
-);
-
-insert_tag(
- $lang_tags['text_flv_one'],
- $lang_tags['text_flv_one_description'],
- $lang_tags['text_flv_one_syntax'],
- sprintf($lang_tags['text_flv_one_example'], getSchemeAndHttpHost()),
- ""
-);
-
-insert_tag(
- $lang_tags['text_flv_two'],
- $lang_tags['text_flv_two_description'],
- $lang_tags['text_flv_two_syntax'],
- sprintf($lang_tags['text_flv_two_example'], getSchemeAndHttpHost()),
- ""
-);
-
insert_tag(
$lang_tags['text_youtube'],
diff --git a/public/torrentrss.php b/public/torrentrss.php
index dd276b34..a95b84af 100644
--- a/public/torrentrss.php
+++ b/public/torrentrss.php
@@ -11,7 +11,7 @@ if ($cacheData && nexus_env('APP_ENV') != 'local') {
header ("Content-type: text/xml");
die($cacheData);
}
-dbconn();
+dbconn(doLogin: false);
function hex_esc($matches) {
return sprintf("%02x", ord($matches[0]));
}
@@ -19,8 +19,10 @@ $dllink = false;
$where = "";
if ($passkey){
- $res = sql_query("SELECT id, enabled, parked, passkey FROM users WHERE passkey=". sqlesc($passkey)." LIMIT 1");
- $user = mysql_fetch_array($res);
+ $user = \Nexus\Database\NexusDB::remember('user_passkey_'.$passkey.'_rss', 3600, function () use ($passkey) {
+ $res = sql_query("SELECT id, enabled, parked, passkey FROM users WHERE passkey=". sqlesc($passkey)." LIMIT 1");
+ return mysql_fetch_array($res);
+ });
if (!$user)
die("invalid passkey");
elseif ($user['enabled'] == 'no' || $user['parked'] == 'yes')
diff --git a/public/usercp.php b/public/usercp.php
index 11ebbd2b..22a29d0f 100644
--- a/public/usercp.php
+++ b/public/usercp.php
@@ -936,6 +936,9 @@ EOD;
$twoStepY .= '';
tr_small($lang_usercp['row_two_step_secret'], $twoStepY, 1);
}
+ printf('| %s | ', nexus_trans('passkey.passkey'));
+ \App\Repositories\UserPasskeyRepository::renderList($CURUSER['id']);
+ printf(' |
');
if ($disableemailchange != 'no' && $smtptype != 'none') //system-wide setting
tr_small($lang_usercp['row_email_address'], "
".$lang_usercp['text_email_address_note']."", 1);
diff --git a/public/usersearch.php b/public/usersearch.php
index 2afd2c1b..69c2d5f9 100644
--- a/public/usersearch.php
+++ b/public/usersearch.php
@@ -311,7 +311,7 @@ if (count($_GET) > 0 && !$_GET['h'])
if (strpos($email,'*') === False && strpos($email,'?') === False
&& strpos($email,'%') === False)
{
- if (validemail($email) !== 1)
+ if (!validemail($email))
{
stdmsg("Error", "Bad email.");
stdfoot();
diff --git a/resources/lang/en/field.php b/resources/lang/en/field.php
new file mode 100644
index 00000000..ede15af0
--- /dev/null
+++ b/resources/lang/en/field.php
@@ -0,0 +1,12 @@
+ [
+ 'text' => 'Short text',
+ 'textarea' => 'Long text',
+ 'radio' => 'Horizontal single select',
+ 'checkbox' => 'Horizontal multiple select',
+ 'select' => 'Vertical single select',
+ 'image' => 'Image',
+ ],
+];
diff --git a/resources/lang/en/label.php b/resources/lang/en/label.php
index 2a66aa19..def49dc2 100644
--- a/resources/lang/en/label.php
+++ b/resources/lang/en/label.php
@@ -456,4 +456,18 @@ Note: In 1.8, the 'searchbox_name' part can be omitted, i.e. the rule is 'pic/ca
'select_section' => 'Selections',
'select_section_help' => "If a selection is not defined, all options from the selection are allowed for the rule. At least one selection should be defined.",
],
+ 'field' => [
+ 'label' => 'Custom field',
+ 'name' => 'Name',
+ 'name_help' => 'Only allow digit, alphabet, underline',
+ 'field_label' => 'Display label',
+ 'type' => 'Type',
+ 'required' => 'Required',
+ 'mod_only' => 'Mod only',
+ 'help' => 'Help text',
+ 'options' => 'Options',
+ 'options_help' => 'Required when type is radio, checkbox, select. One line, one option, format: value|display text',
+ 'is_single_row' => 'Display on a single row',
+ 'display' => 'Custom display',
+ ]
];
diff --git a/resources/lang/en/passkey.php b/resources/lang/en/passkey.php
new file mode 100644
index 00000000..5185da54
--- /dev/null
+++ b/resources/lang/en/passkey.php
@@ -0,0 +1,21 @@
+ 'Passkey',
+ 'passkey' => 'Passkey',
+ 'passkey_desc' => 'Passkey are a secure and convenient way to authenticate without the need for passwords. They can be used across multiple devices.',
+ 'passkey_create' => 'Create Passkey',
+ 'passkey_empty' => 'No passkey found.',
+ 'passkey_created_at' => 'Created at:',
+ 'passkey_delete_confirm' => 'Are you sure you want to delete this passkey? This action cannot be undone.',
+ 'passkey_delete' => 'Delete',
+ 'passkey_unknown' => 'An error occurred while processing your request.',
+ 'passkey_invalid' => 'Invalid passkey data.',
+ 'passkey_error' => 'An error occurred while processing your request. Please try again later.',
+ 'passkey_user_not_found' => 'User not found.',
+ 'passkey_not_supported' => 'Your browser does not support passkey. Please use a modern browser to create and manage your passkey.',
+ 'fields' => [
+ 'credential_id' => 'Credential ID',
+ 'counter' => 'Counter',
+ ],
+];
diff --git a/resources/lang/zh_CN/field.php b/resources/lang/zh_CN/field.php
new file mode 100644
index 00000000..6e0d739d
--- /dev/null
+++ b/resources/lang/zh_CN/field.php
@@ -0,0 +1,12 @@
+ [
+ 'text' => '短文本',
+ 'textarea' => '长文本',
+ 'radio' => '横向单选',
+ 'checkbox' => '横向多选',
+ 'select' => '下拉单选',
+ 'image' => '图片',
+ ],
+];
diff --git a/resources/lang/zh_CN/label.php b/resources/lang/zh_CN/label.php
index 915d55d9..5cf33028 100644
--- a/resources/lang/zh_CN/label.php
+++ b/resources/lang/zh_CN/label.php
@@ -498,4 +498,18 @@ return [
'select_section' => '选择',
'select_section_help' => "如果某个选择未指定,其所有选项都符合此规则。必须至少指定一个选择。",
],
+ 'field' => [
+ 'label' => '自定义字段',
+ 'name' => '名称',
+ 'name_help' => '仅允许数字、字母、下划线',
+ 'field_label' => '显示标签',
+ 'type' => '类型',
+ 'required' => '不能为空',
+ 'mod_only' => '仅管理组可见',
+ 'help' => '辅助说明',
+ 'options' => '选项',
+ 'options_help' => '类型为单选、多选、下拉时必填,一行一个,格式:选项值|选项描述文本',
+ 'is_single_row' => '展示时单独一行',
+ 'display' => '自定义展示',
+ ]
];
diff --git a/resources/lang/zh_CN/passkey.php b/resources/lang/zh_CN/passkey.php
new file mode 100644
index 00000000..3b699b76
--- /dev/null
+++ b/resources/lang/zh_CN/passkey.php
@@ -0,0 +1,21 @@
+ ' 通 行 密 钥 ',
+ 'passkey' => '通行密钥',
+ 'passkey_desc' => '通行密钥是一种安全、方便的身份验证方式,无需输入密码。通行密钥可在多台设备上使用。',
+ 'passkey_create' => '创建通行密钥',
+ 'passkey_empty' => '没有通行密钥。',
+ 'passkey_created_at' => '创建于:',
+ 'passkey_delete_confirm' => '您确实要删除此通行密钥吗?此操作无法撤消。',
+ 'passkey_delete' => '删除',
+ 'passkey_unknown' => '处理您的请求时出错。',
+ 'passkey_invalid' => '通行密钥数据无效。',
+ 'passkey_error' => '处理您的请求时出错。请稍后重试。',
+ 'passkey_user_not_found' => '未找到用户。',
+ 'passkey_not_supported' => '您的浏览器不支持通行密钥。请使用现代浏览器创建和管理您的通行密钥。',
+ 'fields' => [
+ 'credential_id' => '凭据 ID',
+ 'counter' => '计数',
+ ],
+];