diff --git a/.env.example b/.env.example
index a1c38110..eb423aaa 100644
--- a/.env.example
+++ b/.env.example
@@ -78,8 +78,6 @@ SESSION_SAME_SITE=strict
LOG_SLACK_WEBHOOK_URL=
-BRRR_WEBHOOK_URL=
-
FLARE_KEY=
IGNITION_OPEN_AI_KEY=
diff --git a/app/Console/Commands/ReprocessMediaImages.php b/app/Console/Commands/ReprocessMediaImages.php
index b6c86c47..c5e22d1b 100644
--- a/app/Console/Commands/ReprocessMediaImages.php
+++ b/app/Console/Commands/ReprocessMediaImages.php
@@ -6,9 +6,9 @@ namespace App\Console\Commands;
use App\Models\Media;
use Illuminate\Console\Command;
-use Illuminate\Image\ImageException;
-use Illuminate\Support\Facades\Image;
use Illuminate\Support\Facades\Storage;
+use Intervention\Image\Exceptions\DecoderException;
+use Intervention\Image\ImageManager;
class ReprocessMediaImages extends Command
{
@@ -16,7 +16,7 @@ class ReprocessMediaImages extends Command
protected $description = 'Regenerate medium and small image variants using correct aspect-ratio scaling';
- public function handle(): void
+ public function handle(ImageManager $manager): void
{
$media = Media::where('type', 'image')
->whereNotNull('image_widths')
@@ -44,10 +44,10 @@ class ReprocessMediaImages extends Command
$this->info("Processing: {$path}");
- $image = Image::fromStorage($path, 'public');
try {
- $image->width();
- } catch (ImageException) {
+ $file = Storage::disk('public')->get($path);
+ $image = $manager->read($file);
+ } catch (DecoderException) {
$this->warn(' Could not decode image, skipping.');
continue;
@@ -57,8 +57,11 @@ class ReprocessMediaImages extends Command
$extension = array_pop($filenameParts);
$basename = trim(implode('.', $filenameParts), '.');
- Storage::disk('public')->put($basename.'-medium.'.$extension, $image->scale(width: 1000)->toBytes());
- Storage::disk('public')->put($basename.'-small.'.$extension, $image->scale(width: 500)->toBytes());
+ $medium = $image->scale(width: 1000);
+ Storage::disk('public')->put($basename.'-medium.'.$extension, (string) $medium->encode());
+
+ $small = $image->scale(width: 500);
+ Storage::disk('public')->put($basename.'-small.'.$extension, (string) $small->encode());
$this->info(' Done.');
}
diff --git a/app/Http/Controllers/Admin/ContactsController.php b/app/Http/Controllers/Admin/ContactsController.php
index 211f9fa8..17e4a8a7 100644
--- a/app/Http/Controllers/Admin/ContactsController.php
+++ b/app/Http/Controllers/Admin/ContactsController.php
@@ -6,11 +6,11 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Contact;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\BadResponseException;
use Illuminate\Filesystem\Filesystem;
-use Illuminate\Http\Client\RequestException;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Arr;
-use Illuminate\Support\Facades\Http;
use Illuminate\View\View;
class ContactsController extends Controller
@@ -113,13 +113,14 @@ class ContactsController extends Controller
$avatar = null;
$contact = Contact::findOrFail($contactId);
if ($contact->homepage !== null && mb_strlen($contact->homepage) !== 0) {
+ $client = resolve(Client::class);
try {
- $response = Http::throw()->get($contact->homepage);
- } catch (RequestException $e) {
+ $response = $client->get($contact->homepage);
+ } catch (BadResponseException $e) {
return redirect('/admin/contacts/'.$contactId.'/edit')
->with('error', 'Bad resposne from contact’s homepage');
}
- $mf2 = \Mf2\parse($response->body(), $contact->homepage);
+ $mf2 = \Mf2\parse((string) $response->getBody(), $contact->homepage);
foreach ($mf2['items'] as $microformat) {
if (Arr::get($microformat, 'type.0') === 'h-card') {
$avatarURL = Arr::get($microformat, 'properties.photo.0.value');
@@ -128,8 +129,8 @@ class ContactsController extends Controller
}
if ($avatarURL !== null) {
try {
- $avatar = Http::throw()->get($avatarURL);
- } catch (RequestException $e) {
+ $avatar = $client->get($avatarURL);
+ } catch (BadResponseException $e) {
return redirect('/admin/contacts/'.$contactId.'/edit')
->with('error', 'Unable to download avatar');
}
@@ -140,7 +141,7 @@ class ContactsController extends Controller
if ($filesystem->isDirectory($directory) === false) {
$filesystem->makeDirectory($directory);
}
- $filesystem->put($directory.'/image', $avatar->body());
+ $filesystem->put($directory.'/image', $avatar->getBody());
return view('admin.contacts.getavatarsuccess', [
'homepage' => parse_url($contact->homepage, PHP_URL_HOST),
diff --git a/app/Http/Controllers/IndieAuthController.php b/app/Http/Controllers/IndieAuthController.php
index eeb59770..45b488da 100644
--- a/app/Http/Controllers/IndieAuthController.php
+++ b/app/Http/Controllers/IndieAuthController.php
@@ -5,12 +5,13 @@ declare(strict_types=1);
namespace App\Http\Controllers;
use App\Services\TokenService;
+use Exception;
+use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Uri;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
-use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use Illuminate\View\View;
use Random\RandomException;
@@ -198,13 +199,15 @@ class IndieAuthController extends Controller
}
// Otherwise we need to check the redirect_uri is in the client_id's redirect_uris
+ $guzzle = resolve(Client::class);
+
try {
- $clientInfo = Http::throw()->get($clientId);
- } catch (\Throwable) {
+ $clientInfo = $guzzle->get($clientId);
+ } catch (Exception) {
return false;
}
- $clientInfoParsed = \Mf2\parse($clientInfo->body(), $clientId);
+ $clientInfoParsed = \Mf2\parse($clientInfo->getBody()->getContents(), $clientId);
$redirectUris = $clientInfoParsed['rels']['redirect_uri'] ?? [];
diff --git a/app/Http/Controllers/MicropubMediaController.php b/app/Http/Controllers/MicropubMediaController.php
index da7c7dc2..1cca74b3 100644
--- a/app/Http/Controllers/MicropubMediaController.php
+++ b/app/Http/Controllers/MicropubMediaController.php
@@ -13,10 +13,9 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Http\UploadedFile;
-use Illuminate\Image\ImageException;
use Illuminate\Support\Carbon;
-use Illuminate\Support\Facades\Image;
use Illuminate\Support\Facades\Storage;
+use Intervention\Image\ImageManager;
use Ramsey\Uuid\Uuid;
class MicropubMediaController extends Controller
@@ -112,9 +111,12 @@ class MicropubMediaController extends Controller
$filename = Storage::disk('local')->putFile('media', $file);
+ /** @var ImageManager $manager */
+ $manager = resolve(ImageManager::class);
try {
- $width = Image::fromUpload($request->file('file'))->width();
- } catch (ImageException) {
+ $image = $manager->read($request->file('file'));
+ $width = $image->width();
+ } catch (Exception) {
// not an image
$width = null;
}
diff --git a/app/Jobs/DownloadWebMention.php b/app/Jobs/DownloadWebMention.php
index 0cb073d5..341c35c8 100644
--- a/app/Jobs/DownloadWebMention.php
+++ b/app/Jobs/DownloadWebMention.php
@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Jobs;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\FileSystem\FileSystem;
-use Illuminate\Http\Client\RequestException;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\Http;
class DownloadWebMention implements ShouldQueue
{
@@ -29,15 +29,15 @@ class DownloadWebMention implements ShouldQueue
/**
* Execute the job.
*
- * @throws RequestException
+ * @throws GuzzleException
* @throws FileNotFoundException
*/
- public function handle(): void
+ public function handle(Client $guzzle): void
{
- // 4XX and 5XX responses should throw so Laravel can catch and
- // retry these automatically.
- $response = Http::throw()->get($this->source);
- if ($response->status() === 200) {
+ $response = $guzzle->request('GET', $this->source);
+ // 4XX and 5XX responses should get Guzzle to throw an exception,
+ // Laravel should catch and retry these automatically.
+ if ($response->getStatusCode() === 200) {
$filesystem = new FileSystem;
$filename = storage_path('HTML').'/'.$this->createFilenameFromURL($this->source);
// backup file first
@@ -56,7 +56,7 @@ class DownloadWebMention implements ShouldQueue
// save new HTML
$filesystem->put(
$filename,
- $response->body()
+ (string) $response->getBody()
);
// remove backup if the same
if ($filesystem->exists($filenameBackup)) {
diff --git a/app/Jobs/NotifyBrrrOfWebMention.php b/app/Jobs/NotifyBrrrOfWebMention.php
deleted file mode 100644
index 3273b7d6..00000000
--- a/app/Jobs/NotifyBrrrOfWebMention.php
+++ /dev/null
@@ -1,56 +0,0 @@
- $this->title(),
- 'message' => "From {$this->webMention->source}",
- 'open_url' => $this->webMention->target,
- ]);
- }
-
- /**
- * Build a notification title based on the webmention type.
- */
- private function title(): string
- {
- return match ($this->webMention->type) {
- 'in-reply-to' => 'New reply',
- 'like-of' => 'New like',
- 'repost-of' => 'New repost',
- default => 'New webmention',
- };
- }
-}
diff --git a/app/Jobs/ProcessLike.php b/app/Jobs/ProcessLike.php
index 3ed065c1..49302885 100644
--- a/app/Jobs/ProcessLike.php
+++ b/app/Jobs/ProcessLike.php
@@ -5,13 +5,14 @@ declare(strict_types=1);
namespace App\Jobs;
use App\Models\Like;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Arr;
-use Illuminate\Support\Facades\Http;
use Jonnybarnes\WebmentionsParser\Authorship;
use Jonnybarnes\WebmentionsParser\Exceptions\AuthorshipParserException;
@@ -31,11 +32,13 @@ class ProcessLike implements ShouldQueue
/**
* Execute the job.
+ *
+ * @throws GuzzleException
*/
- public function handle(Authorship $authorship): int
+ public function handle(Client $client, Authorship $authorship): int
{
- $response = Http::throw()->get($this->like->url);
- $mf2 = \Mf2\parse($response->body(), $this->like->url);
+ $response = $client->request('GET', $this->like->url);
+ $mf2 = \Mf2\parse((string) $response->getBody(), $this->like->url);
if (Arr::has($mf2, 'items.0.properties.content')) {
$this->like->content = $mf2['items'][0]['properties']['content'][0]['html'];
}
diff --git a/app/Jobs/ProcessMedia.php b/app/Jobs/ProcessMedia.php
index 78aeba3e..f9d8af50 100644
--- a/app/Jobs/ProcessMedia.php
+++ b/app/Jobs/ProcessMedia.php
@@ -7,11 +7,11 @@ namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
-use Illuminate\Image\ImageException;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\Image;
use Illuminate\Support\Facades\Storage;
+use Intervention\Image\Exceptions\DecoderException;
+use Intervention\Image\ImageManager;
class ProcessMedia implements ShouldQueue
{
@@ -30,16 +30,15 @@ class ProcessMedia implements ShouldQueue
/**
* Execute the job.
*/
- public function handle(): void
+ public function handle(ImageManager $manager): void
{
// Load file
$file = Storage::disk('local')->get($this->filename);
// Open file
- $image = Image::fromStorage($this->filename, 'local');
try {
- $width = $image->width();
- } catch (ImageException) {
+ $image = $manager->read($file);
+ } catch (DecoderException) {
// not an image; delete file and end job
Storage::disk('local')->delete($this->filename);
@@ -50,15 +49,18 @@ class ProcessMedia implements ShouldQueue
Storage::disk('public')->put($this->filename, $file);
// Create smaller versions if necessary
- if ($width > 1000) {
+ if ($image->width() > 1000) {
$filenameParts = explode('.', $this->filename);
$extension = array_pop($filenameParts);
// the following achieves this data flow
// foo.bar.png => ['foo', 'bar', 'png'] => ['foo', 'bar'] => foo.bar
$basename = trim(implode('.', $filenameParts), '.');
- Storage::disk('public')->put($basename.'-medium.'.$extension, $image->scale(width: 1000)->toBytes());
- Storage::disk('public')->put($basename.'-small.'.$extension, $image->scale(width: 500)->toBytes());
+ $medium = $image->scale(width: 1000);
+ Storage::disk('public')->put($basename.'-medium.'.$extension, (string) $medium->encode());
+
+ $small = $image->scale(width: 500);
+ Storage::disk('public')->put($basename.'-small.'.$extension, (string) $small->encode());
}
// Now we can delete the locally saved image
diff --git a/app/Jobs/ProcessWebMention.php b/app/Jobs/ProcessWebMention.php
index 4ac6f5fd..6677b285 100644
--- a/app/Jobs/ProcessWebMention.php
+++ b/app/Jobs/ProcessWebMention.php
@@ -7,12 +7,13 @@ namespace App\Jobs;
use App\Exceptions\RemoteContentNotFoundException;
use App\Models\Note;
use App\Models\WebMention;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
+use GuzzleHttp\Exception\RequestException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Http\Client\ConnectionException;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\Http;
use Jonnybarnes\WebmentionsParser\Exceptions\InvalidMentionException;
use Jonnybarnes\WebmentionsParser\Parser;
use Mf2;
@@ -35,20 +36,18 @@ class ProcessWebMention implements ShouldQueue
* Execute the job.
*
* @throws RemoteContentNotFoundException
+ * @throws GuzzleException
* @throws InvalidMentionException
*/
- public function handle(Parser $parser): void
+ public function handle(Parser $parser, Client $guzzle): void
{
try {
- $response = Http::get($this->source);
- } catch (ConnectionException) {
+ $response = $guzzle->request('GET', $this->source);
+ } catch (RequestException $e) {
throw new RemoteContentNotFoundException;
}
- if ($response->failed()) {
- throw new RemoteContentNotFoundException;
- }
- $this->saveRemoteContent($response->body(), $this->source);
- $microformats = Mf2\parse($response->body(), $this->source);
+ $this->saveRemoteContent((string) $response->getBody(), $this->source);
+ $microformats = Mf2\parse((string) $response->getBody(), $this->source);
$webmentions = WebMention::where('source', $this->source)->get();
foreach ($webmentions as $webmention) {
// check webmention still references target
@@ -96,7 +95,6 @@ class ProcessWebMention implements ShouldQueue
$webmention->type = $type;
$webmention->mf2 = json_encode($microformats);
$webmention->save();
- dispatch(new NotifyBrrrOfWebMention($webmention));
}
/**
diff --git a/app/Jobs/SaveProfileImage.php b/app/Jobs/SaveProfileImage.php
index aa7d8af7..0bcbd4e7 100644
--- a/app/Jobs/SaveProfileImage.php
+++ b/app/Jobs/SaveProfileImage.php
@@ -4,14 +4,13 @@ declare(strict_types=1);
namespace App\Jobs;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\RequestException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Http\Client\ConnectionException;
-use Illuminate\Http\Client\RequestException;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Arr;
-use Illuminate\Support\Facades\Http;
use Jonnybarnes\WebmentionsParser\Authorship;
use Jonnybarnes\WebmentionsParser\Exceptions\AuthorshipParserException;
@@ -56,10 +55,12 @@ class SaveProfileImage implements ShouldQueue
&& parse_url($photo, PHP_URL_HOST) !== 'pbs.twimg.com'
&& parse_url($photo, PHP_URL_HOST) !== 'twitter.com'
) {
+ $client = resolve(Client::class);
+
try {
- $response = Http::throw()->get($photo);
- $image = $response->body();
- } catch (ConnectionException|RequestException) {
+ $response = $client->get($photo);
+ $image = $response->getBody();
+ } catch (RequestException) {
// we are opening and reading the default image so that
$default = public_path().'/assets/profile-images/default-image';
$handle = fopen($default, 'rb');
diff --git a/app/Jobs/SaveScreenshot.php b/app/Jobs/SaveScreenshot.php
index b72da7b0..4661ccfe 100755
--- a/app/Jobs/SaveScreenshot.php
+++ b/app/Jobs/SaveScreenshot.php
@@ -5,15 +5,14 @@ declare(strict_types=1);
namespace App\Jobs;
use App\Models\Bookmark;
+use GuzzleHttp\Client;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
-use Illuminate\Http\Client\PendingRequest;
-use Illuminate\Http\Client\Response;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;
+use JsonException;
class SaveScreenshot implements ShouldQueue
{
@@ -28,68 +27,77 @@ class SaveScreenshot implements ShouldQueue
/**
* Execute the job.
+ *
+ *
+ * @throws JsonException
*/
public function handle(): void
{
- $cloudConvert = Http::baseUrl('https://api.cloudconvert.com/v2')
- ->withToken(config('services.cloudconvert.token'))
- ->throw();
+ // A normal Guzzle client
+ $client = resolve(Client::class);
+ // A Guzzle client with a custom Middleware to retry the CloudConvert API requests
+ $retryClient = resolve('RetryGuzzle');
// First request that CloudConvert takes a screenshot of the URL
- $takeScreenshotJobResponse = $cloudConvert->post('/capture-website', [
- 'url' => $this->bookmark->url,
- 'output_format' => 'png',
- 'screen_width' => 1440,
- 'screen_height' => 900,
- 'wait_until' => 'networkidle0',
- 'wait_time' => 100,
+ $takeScreenshotJobResponse = $client->request('POST', 'https://api.cloudconvert.com/v2/capture-website', [
+ 'headers' => [
+ 'Authorization' => 'Bearer '.config('services.cloudconvert.token'),
+ ],
+ 'json' => [
+ 'url' => $this->bookmark->url,
+ 'output_format' => 'png',
+ 'screen_width' => 1440,
+ 'screen_height' => 900,
+ 'wait_until' => 'networkidle0',
+ 'wait_time' => 100,
+ ],
]);
- $taskId = $takeScreenshotJobResponse->json('data.id');
+ $taskId = json_decode($takeScreenshotJobResponse->getBody()->getContents(), false, 512, JSON_THROW_ON_ERROR)->data->id;
// Now wait till the status job is finished
- $screenshotJobStatusResponse = $this->pollUntilFinished($cloudConvert, $taskId);
-
- $finishedCaptureId = $screenshotJobStatusResponse->json('data.id');
-
- // Now we can create a new job to request thst the screenshot is exported to a temporary URL we can download the screenshot from
- $exportImageJob = $cloudConvert->post('/export/url', [
- 'input' => $finishedCaptureId,
- 'archive_multiple_files' => false,
+ $screenshotJobStatusResponse = $retryClient->request('GET', 'https://api.cloudconvert.com/v2/tasks/'.$taskId, [
+ 'headers' => [
+ 'Authorization' => 'Bearer '.config('services.cloudconvert.token'),
+ ],
+ 'query' => [
+ 'include' => 'payload',
+ ],
]);
- $exportImageJobId = $exportImageJob->json('data.id');
+ $finishedCaptureId = json_decode($screenshotJobStatusResponse->getBody()->getContents(), false, 512, JSON_THROW_ON_ERROR)->data->id;
+
+ // Now we can create a new job to request thst the screenshot is exported to a temporary URL we can download the screenshot from
+ $exportImageJob = $client->request('POST', 'https://api.cloudconvert.com/v2/export/url', [
+ 'headers' => [
+ 'Authorization' => 'Bearer '.config('services.cloudconvert.token'),
+ ],
+ 'json' => [
+ 'input' => $finishedCaptureId,
+ 'archive_multiple_files' => false,
+ ],
+ ]);
+
+ $exportImageJobId = json_decode($exportImageJob->getBody()->getContents(), false, 512, JSON_THROW_ON_ERROR)->data->id;
// Again, wait till the status of this export job is finished
- $finalImageUrlResponse = $this->pollUntilFinished($cloudConvert, $exportImageJobId);
+ $finalImageUrlResponse = $retryClient->request('GET', 'https://api.cloudconvert.com/v2/tasks/'.$exportImageJobId, [
+ 'headers' => [
+ 'Authorization' => 'Bearer '.config('services.cloudconvert.token'),
+ ],
+ 'query' => [
+ 'include' => 'payload',
+ ],
+ ]);
// Now we can download the screenshot and save it to the storage
- $finalImageUrl = $finalImageUrlResponse->json('data.result.files.0.url');
+ $finalImageUrl = json_decode($finalImageUrlResponse->getBody()->getContents(), false, 512, JSON_THROW_ON_ERROR)->data->result->files[0]->url;
- $finalImageUrlContent = Http::throw()->get($finalImageUrl);
+ $finalImageUrlContent = $client->request('GET', $finalImageUrl);
- Storage::disk('public')->put('/assets/img/bookmarks/'.$taskId.'.png', $finalImageUrlContent->body());
+ Storage::disk('public')->put('/assets/img/bookmarks/'.$taskId.'.png', $finalImageUrlContent->getBody()->getContents());
$this->bookmark->screenshot = $taskId;
$this->bookmark->save();
}
-
- /**
- * Poll a CloudConvert task until it reports a "finished" status.
- */
- private function pollUntilFinished(PendingRequest $client, string $taskId): Response
- {
- $attempts = 0;
-
- do {
- $response = $client->get('/tasks/'.$taskId, ['include' => 'payload']);
- $finished = $response->json('data.status') === 'finished';
- if (! $finished) {
- $attempts++;
- usleep(1_000_000); // 1 second, matches CloudConvert's own polling guidance
- }
- } while (! $finished && $attempts < 5);
-
- return $response;
- }
}
diff --git a/app/Jobs/SendWebMentions.php b/app/Jobs/SendWebMentions.php
index d8e962e3..827aaf0a 100644
--- a/app/Jobs/SendWebMentions.php
+++ b/app/Jobs/SendWebMentions.php
@@ -5,6 +5,8 @@ declare(strict_types=1);
namespace App\Jobs;
use App\Models\Note;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Psr7\Header;
use GuzzleHttp\Psr7\UriResolver;
use GuzzleHttp\Psr7\Utils;
@@ -12,7 +14,6 @@ use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
use Mf2\Parser;
@@ -31,6 +32,8 @@ class SendWebMentions implements ShouldQueue
/**
* Execute the job.
+ *
+ * @throws GuzzleException
*/
public function handle(): void
{
@@ -40,9 +43,12 @@ class SendWebMentions implements ShouldQueue
foreach ($urls as $url) {
$endpoint = $this->discoverWebmentionEndpoint($url);
if ($endpoint !== null) {
- Http::asForm()->post($endpoint, [
- 'source' => $this->note->uri,
- 'target' => $url,
+ $guzzle = resolve(Client::class);
+ $guzzle->post($endpoint, [
+ 'form_params' => [
+ 'source' => $this->note->uri,
+ 'target' => $url,
+ ],
]);
}
}
@@ -50,6 +56,8 @@ class SendWebMentions implements ShouldQueue
/**
* Discover if a URL has a webmention endpoint.
+ *
+ * @throws GuzzleException
*/
public function discoverWebmentionEndpoint(string $url): ?string
{
@@ -63,9 +71,10 @@ class SendWebMentions implements ShouldQueue
$endpoint = null;
- $response = Http::get($url);
+ $guzzle = resolve(Client::class);
+ $response = $guzzle->get($url);
// check HTTP Headers for webmention endpoint
- $links = Header::parse($response->header('Link'));
+ $links = Header::parse($response->getHeader('Link'));
foreach ($links as $link) {
if (array_key_exists('rel', $link) && mb_stristr($link['rel'], 'webmention')) {
return $this->resolveUri(trim($link[0], '<>'), $url);
@@ -73,7 +82,7 @@ class SendWebMentions implements ShouldQueue
}
// failed to find a header so parse HTML
- $html = $response->body();
+ $html = (string) $response->getBody();
if ($html === '') {
return null;
diff --git a/app/Jobs/SyndicateNoteToBluesky.php b/app/Jobs/SyndicateNoteToBluesky.php
index 582ef760..a306801b 100644
--- a/app/Jobs/SyndicateNoteToBluesky.php
+++ b/app/Jobs/SyndicateNoteToBluesky.php
@@ -5,12 +5,13 @@ declare(strict_types=1);
namespace App\Jobs;
use App\Models\Note;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\Http;
class SyndicateNoteToBluesky implements ShouldQueue
{
@@ -30,18 +31,29 @@ class SyndicateNoteToBluesky implements ShouldQueue
/**
* Execute the job.
+ *
+ * @throws GuzzleException
*/
- public function handle(): void
+ public function handle(Client $guzzle): void
{
- // no ->throw()/->retry() here — Bridgy would duplicate-publish on retry, see $tries above
- $response = Http::acceptJson()->asForm()->post('https://brid.gy/publish/webmention', [
- 'source' => $this->note->uri,
- 'target' => 'https://brid.gy/publish/bluesky',
- ]);
+ $response = $guzzle->request(
+ 'POST',
+ 'https://brid.gy/publish/webmention',
+ [
+ 'headers' => [
+ 'Accept' => 'application/json',
+ ],
+ 'form_params' => [
+ 'source' => $this->note->uri,
+ 'target' => 'https://brid.gy/publish/bluesky',
+ ],
+ 'http_errors' => false,
+ ]
+ );
- $body = $response->json();
+ $body = json_decode((string) $response->getBody(), true);
- if ($response->status() === 201) {
+ if ($response->getStatusCode() === 201) {
$this->note->bluesky_url = $body['url'];
$this->note->save();
@@ -49,7 +61,7 @@ class SyndicateNoteToBluesky implements ShouldQueue
}
throw new \RuntimeException(
- 'Bridgy publish to Bluesky failed: '.($body['error'] ?? $response->body())
+ 'Bridgy publish to Bluesky failed: '.($body['error'] ?? (string) $response->getBody())
);
}
}
diff --git a/app/Jobs/SyndicateNoteToMastodon.php b/app/Jobs/SyndicateNoteToMastodon.php
index 3f5cfcd4..456680e2 100644
--- a/app/Jobs/SyndicateNoteToMastodon.php
+++ b/app/Jobs/SyndicateNoteToMastodon.php
@@ -5,12 +5,13 @@ declare(strict_types=1);
namespace App\Jobs;
use App\Models\Note;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\Http;
class SyndicateNoteToMastodon implements ShouldQueue
{
@@ -30,18 +31,29 @@ class SyndicateNoteToMastodon implements ShouldQueue
/**
* Execute the job.
+ *
+ * @throws GuzzleException
*/
- public function handle(): void
+ public function handle(Client $guzzle): void
{
- // no ->throw()/->retry() here — Bridgy would duplicate-publish on retry, see $tries above
- $response = Http::acceptJson()->asForm()->post('https://brid.gy/publish/webmention', [
- 'source' => $this->note->uri,
- 'target' => 'https://brid.gy/publish/mastodon',
- ]);
+ $response = $guzzle->request(
+ 'POST',
+ 'https://brid.gy/publish/webmention',
+ [
+ 'headers' => [
+ 'Accept' => 'application/json',
+ ],
+ 'form_params' => [
+ 'source' => $this->note->uri,
+ 'target' => 'https://brid.gy/publish/mastodon',
+ ],
+ 'http_errors' => false,
+ ]
+ );
- $body = $response->json();
+ $body = json_decode((string) $response->getBody(), true);
- if ($response->status() === 201) {
+ if ($response->getStatusCode() === 201) {
$this->note->mastodon_url = $body['url'];
$this->note->save();
@@ -49,7 +61,7 @@ class SyndicateNoteToMastodon implements ShouldQueue
}
throw new \RuntimeException(
- 'Bridgy publish to Mastodon failed: '.($body['error'] ?? $response->body())
+ 'Bridgy publish to Mastodon failed: '.($body['error'] ?? (string) $response->getBody())
);
}
}
diff --git a/app/Models/Note.php b/app/Models/Note.php
index 89ce6b63..af7d2c3d 100644
--- a/app/Models/Note.php
+++ b/app/Models/Note.php
@@ -7,6 +7,7 @@ namespace App\Models;
use App\CommonMark\Generators\MentionGenerator;
use App\CommonMark\Renderers\MentionRenderer;
use App\Observers\NoteObserver;
+use GuzzleHttp\Client;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
@@ -19,7 +20,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Cache;
-use Illuminate\Support\Facades\Http;
use Jonnybarnes\IndieWeb\Numbers;
use Laravel\Scout\Searchable;
use League\CommonMark\Environment\Environment;
@@ -363,15 +363,18 @@ class Note extends Model
$latLng = $latitude.','.$longitude;
return Cache::get($latLng, function () use ($latLng, $latitude, $longitude) {
- $response = Http::withHeaders(['User-Agent' => 'jonnybarnes.uk, email jonny@jonnybarnes.uk'])
- ->get('https://nominatim.openstreetmap.org/reverse', [
+ $guzzle = resolve(Client::class);
+ $response = $guzzle->request('GET', 'https://nominatim.openstreetmap.org/reverse', [
+ 'query' => [
'format' => 'json',
'lat' => $latitude,
'lon' => $longitude,
'zoom' => 18,
'addressdetails' => 1,
- ]);
- $json = $response->object();
+ ],
+ 'headers' => ['User-Agent' => 'jonnybarnes.uk via Guzzle, email jonny@jonnybarnes.uk'],
+ ]);
+ $json = json_decode((string) $response->getBody());
if (isset($json->address->suburb)) {
$locality = $json->address->suburb;
if (isset($json->address->city)) {
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 224472d1..ba42853e 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,11 +2,15 @@
namespace App\Providers;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\ConnectException;
+use GuzzleHttp\HandlerStack;
+use GuzzleHttp\Middleware;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
-use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
+use Intervention\Image\ImageManager;
use Lcobucci\JWT\Configuration;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Signer\Key\InMemory;
@@ -29,6 +33,11 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
+ // configure Intervention/Image
+ $this->app->bind('Intervention\Image\ImageManager', function () {
+ return ImageManager::withDriver(config('image.driver'));
+ });
+
/**
* Paginate a standard Laravel Collection.
*
@@ -73,10 +82,39 @@ class AppServiceProvider extends ServiceProvider
);
});
+ // Configure Guzzle
+ $this->app->bind('RetryGuzzle', function () {
+ $handlerStack = HandlerStack::create();
+ $handlerStack->push(Middleware::retry(
+ function ($retries, $request, $response, $exception) {
+ // Limit the number of retries to 5
+ if ($retries >= 5) {
+ return false;
+ }
+
+ // Retry connection exceptions
+ if ($exception instanceof ConnectException) {
+ return true;
+ }
+
+ // Retry on server errors
+ if ($response && $response->getStatusCode() >= 500) {
+ return true;
+ }
+
+ // Finally for CloudConvert, retry if status is not final
+ return json_decode($response, false, 512, JSON_THROW_ON_ERROR)->data->status !== 'finished';
+ },
+ function () {
+ // Retry after 1 second
+ return 1000;
+ }
+ ));
+
+ return new Client(['handler' => $handlerStack]);
+ });
+
// Turn on Eloquent strict mode when developing
Model::shouldBeStrict(! $this->app->isProduction());
-
- // Force HTTPS URL generation in production
- URL::forceHttps($this->app->isProduction());
}
}
diff --git a/app/Services/BookmarkService.php b/app/Services/BookmarkService.php
index b873610f..25017e16 100644
--- a/app/Services/BookmarkService.php
+++ b/app/Services/BookmarkService.php
@@ -8,8 +8,10 @@ use App\Exceptions\InternetArchiveException;
use App\Jobs\ProcessBookmark;
use App\Models\Bookmark;
use App\Models\Tag;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\ClientException;
+use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Arr;
-use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
class BookmarkService
@@ -53,19 +55,21 @@ class BookmarkService
* Given a URL, attempt to save it to the Internet Archive.
*
* @throws InternetArchiveException
+ * @throws GuzzleException
*/
public function getArchiveLink(string $url): string
{
- $response = Http::get('https://web.archive.org/save/'.$url);
-
- if ($response->clientError()) {
+ $client = resolve(Client::class);
+ try {
+ $response = $client->request('GET', 'https://web.archive.org/save/'.$url);
+ } catch (ClientException $e) {
// throw an exception to be caught
throw new InternetArchiveException;
}
-
- $contentLocation = $response->header('Content-Location');
- if ($contentLocation !== '' && Str::startsWith($contentLocation, '/web')) {
- return $contentLocation;
+ if ($response->hasHeader('Content-Location')) {
+ if (Str::startsWith(Arr::get($response->getHeader('Content-Location'), 0), '/web')) {
+ return $response->getHeader('Content-Location')[0];
+ }
}
// throw an exception to be caught
diff --git a/composer.json b/composer.json
index 520d12e1..1b94abe8 100644
--- a/composer.json
+++ b/composer.json
@@ -14,8 +14,9 @@
"ext-pgsql": "*",
"ext-sodium": "*",
"cviebrock/eloquent-sluggable": "^13.0",
+ "guzzlehttp/guzzle": "^7.2",
"indieauth/client": "^1.1",
- "intervention/image": "^4.0",
+ "intervention/image": "^3",
"jonnybarnes/indieweb": "~0.2",
"jonnybarnes/webmentions-parser": "~0.5",
"laravel/framework": "^13.0",
@@ -26,7 +27,7 @@
"league/commonmark": "^2.0",
"league/flysystem-aws-s3-v3": "^3.0",
"mf2/mf2": "~0.3",
- "spatie/laravel-flare": "^3.0",
+ "spatie/laravel-flare": "^2.2",
"symfony/html-sanitizer": "^8.0",
"tempest/highlight": "^2.27",
"web-auth/webauthn-lib": "^5.0"
@@ -41,8 +42,8 @@
"laravel/sail": "^1.41",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.6",
- "phpunit/php-code-coverage": "^14.0",
- "phpunit/phpunit": "^13.0",
+ "phpunit/php-code-coverage": "^12.0",
+ "phpunit/phpunit": "^12.5.12",
"spatie/laravel-ray": "^1.12",
"spatie/x-ray": "^1.2"
},
diff --git a/composer.lock b/composer.lock
index 6af58a17..65ec1857 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "23983a4e6a8e79cb9636fe8f0e604eb7",
+ "content-hash": "30db4db4dcfdc487f28e738f0d22d68c",
"packages": [
{
"name": "aws/aws-crt-php",
@@ -62,16 +62,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.389.0",
+ "version": "3.386.1",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "e6e6649e58826c7edaa9f546f444461a25a22719"
+ "reference": "e36bc0e97e82d68acc92b9e06f5dc544913d819a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e6e6649e58826c7edaa9f546f444461a25a22719",
- "reference": "e6e6649e58826c7edaa9f546f444461a25a22719",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e36bc0e97e82d68acc92b9e06f5dc544913d819a",
+ "reference": "e36bc0e97e82d68acc92b9e06f5dc544913d819a",
"shasum": ""
},
"require": {
@@ -79,9 +79,9 @@
"ext-json": "*",
"ext-pcre": "*",
"ext-simplexml": "*",
- "guzzlehttp/guzzle": "^7.8.2 || ^8.0",
- "guzzlehttp/promises": "^2.0.3 || ^3.0",
- "guzzlehttp/psr7": "^2.6.3 || ^3.0",
+ "guzzlehttp/guzzle": "^7.4.5",
+ "guzzlehttp/promises": "^2.0",
+ "guzzlehttp/psr7": "^2.4.5",
"mtdowling/jmespath.php": "^2.9.1",
"php": ">=8.1",
"psr/http-message": "^1.0 || ^2.0",
@@ -153,22 +153,22 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.389.0"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.386.1"
},
- "time": "2026-07-24T18:05:53+00:00"
+ "time": "2026-06-23T01:24:07+00:00"
},
{
"name": "brick/math",
- "version": "0.18.0",
+ "version": "0.17.2",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad"
+ "reference": "8189e751995f9e15729c1aa2f89fa8f166ffe818"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/82944324d1c1bdb2c2618e89978d4e2ad78d69ad",
- "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad",
+ "url": "https://api.github.com/repos/brick/math/zipball/8189e751995f9e15729c1aa2f89fa8f166ffe818",
+ "reference": "8189e751995f9e15729c1aa2f89fa8f166ffe818",
"shasum": ""
},
"require": {
@@ -206,7 +206,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.18.0"
+ "source": "https://github.com/brick/math/tree/0.17.2"
},
"funding": [
{
@@ -214,7 +214,7 @@
"type": "github"
}
],
- "time": "2026-06-14T18:21:03+00:00"
+ "time": "2026-05-25T20:34:43+00:00"
},
{
"name": "carbonphp/carbon-doctrine-types",
@@ -361,16 +361,16 @@
},
{
"name": "cviebrock/eloquent-sluggable",
- "version": "13.0.1",
+ "version": "13.0.0",
"source": {
"type": "git",
"url": "https://github.com/cviebrock/eloquent-sluggable.git",
- "reference": "a0e2e342461ac04f5c41eb1c52f9bc77eafa6a03"
+ "reference": "0a023eed5bdc7da3aa9107cb2299757ce4a656e3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/a0e2e342461ac04f5c41eb1c52f9bc77eafa6a03",
- "reference": "a0e2e342461ac04f5c41eb1c52f9bc77eafa6a03",
+ "url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/0a023eed5bdc7da3aa9107cb2299757ce4a656e3",
+ "reference": "0a023eed5bdc7da3aa9107cb2299757ce4a656e3",
"shasum": ""
},
"require": {
@@ -422,7 +422,7 @@
],
"support": {
"issues": "https://github.com/cviebrock/eloquent-sluggable/issues",
- "source": "https://github.com/cviebrock/eloquent-sluggable/tree/13.0.1"
+ "source": "https://github.com/cviebrock/eloquent-sluggable/tree/13.0.0"
},
"funding": [
{
@@ -430,7 +430,7 @@
"type": "github"
}
],
- "time": "2026-07-20T13:44:42+00:00"
+ "time": "2026-03-19T14:42:10+00:00"
},
{
"name": "dflydev/dot-access-data",
@@ -988,22 +988,22 @@
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.15.1",
+ "version": "7.13.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "61443dfb33c62f308ee8add20f45b4d6e4bf8d2f"
+ "reference": "a4decaa9745dc567467970e43f183e260cfa51fd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/61443dfb33c62f308ee8add20f45b4d6e4bf8d2f",
- "reference": "61443dfb33c62f308ee8add20f45b4d6e4bf8d2f",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4decaa9745dc567467970e43f183e260cfa51fd",
+ "reference": "a4decaa9745dc567467970e43f183e260cfa51fd",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^2.5.1",
- "guzzlehttp/psr7": "^2.13",
+ "guzzlehttp/promises": "^2.5",
+ "guzzlehttp/psr7": "^2.12.3",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.5 || ^3.0",
@@ -1015,8 +1015,8 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
- "guzzle/client-integration-tests": "3.0.3",
- "guzzlehttp/test-server": "^0.7",
+ "guzzle/client-integration-tests": "3.0.2",
+ "guzzlehttp/test-server": "^0.6",
"php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.52 || ^9.6.34",
"psr/log": "^1.1 || ^2.0 || ^3.0"
@@ -1096,7 +1096,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.15.1"
+ "source": "https://github.com/guzzle/guzzle/tree/7.13.0"
},
"funding": [
{
@@ -1112,20 +1112,20 @@
"type": "tidelift"
}
],
- "time": "2026-07-18T11:23:11+00:00"
+ "time": "2026-06-29T13:31:06+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.5.1",
+ "version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29"
+ "reference": "4360e982f87f5f258bf872d094647791db2f4c8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29",
- "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e",
+ "reference": "4360e982f87f5f258bf872d094647791db2f4c8e",
"shasum": ""
},
"require": {
@@ -1180,7 +1180,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.5.1"
+ "source": "https://github.com/guzzle/promises/tree/2.5.0"
},
"funding": [
{
@@ -1196,20 +1196,20 @@
"type": "tidelift"
}
],
- "time": "2026-07-08T15:48:39+00:00"
+ "time": "2026-06-02T12:23:43+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.13.0",
+ "version": "2.12.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4"
+ "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/dad89620b7a6edb60c15858442eb2e408b45d8f4",
- "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/7ec62dc3f44aa218487dbed81a9bf9bc647be55d",
+ "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d",
"shasum": ""
},
"require": {
@@ -1299,7 +1299,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.13.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.12.3"
},
"funding": [
{
@@ -1315,20 +1315,20 @@
"type": "tidelift"
}
],
- "time": "2026-07-16T22:23:49+00:00"
+ "time": "2026-06-23T15:21:08+00:00"
},
{
"name": "guzzlehttp/uri-template",
- "version": "v1.0.10",
+ "version": "v1.0.8",
"source": {
"type": "git",
"url": "https://github.com/guzzle/uri-template.git",
- "reference": "f6c24c21f42b990e9a58912b332d0874df6ba839"
+ "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/uri-template/zipball/f6c24c21f42b990e9a58912b332d0874df6ba839",
- "reference": "f6c24c21f42b990e9a58912b332d0874df6ba839",
+ "url": "https://api.github.com/repos/guzzle/uri-template/zipball/9c19128923b05a5d7355e5d2318d7808b7e33bbd",
+ "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd",
"shasum": ""
},
"require": {
@@ -1385,7 +1385,7 @@
],
"support": {
"issues": "https://github.com/guzzle/uri-template/issues",
- "source": "https://github.com/guzzle/uri-template/tree/v1.0.10"
+ "source": "https://github.com/guzzle/uri-template/tree/v1.0.8"
},
"funding": [
{
@@ -1401,7 +1401,7 @@
"type": "tidelift"
}
],
- "time": "2026-07-17T13:53:03+00:00"
+ "time": "2026-06-23T13:02:23+00:00"
},
{
"name": "indieauth/client",
@@ -1556,26 +1556,26 @@
},
{
"name": "intervention/gif",
- "version": "5.0.1",
+ "version": "4.2.4",
"source": {
"type": "git",
"url": "https://github.com/Intervention/gif.git",
- "reference": "bb395af960deffe64d70c976b4df9283f68e762d"
+ "reference": "c3598a16ebe7690cd55640c44144a9df383ea73c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Intervention/gif/zipball/bb395af960deffe64d70c976b4df9283f68e762d",
- "reference": "bb395af960deffe64d70c976b4df9283f68e762d",
+ "url": "https://api.github.com/repos/Intervention/gif/zipball/c3598a16ebe7690cd55640c44144a9df383ea73c",
+ "reference": "c3598a16ebe7690cd55640c44144a9df383ea73c",
"shasum": ""
},
"require": {
- "php": "^8.3"
+ "php": "^8.1"
},
"require-dev": {
"phpstan/phpstan": "^2.1",
- "phpunit/phpunit": "^12.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
"slevomat/coding-standard": "~8.0",
- "squizlabs/php_codesniffer": "^4"
+ "squizlabs/php_codesniffer": "^3.8"
},
"type": "library",
"autoload": {
@@ -1594,7 +1594,7 @@
"homepage": "https://intervention.io/"
}
],
- "description": "PHP GIF Encoder/Decoder",
+ "description": "Native PHP GIF Encoder/Decoder",
"homepage": "https://github.com/intervention/gif",
"keywords": [
"animation",
@@ -1604,7 +1604,7 @@
],
"support": {
"issues": "https://github.com/Intervention/gif/issues",
- "source": "https://github.com/Intervention/gif/tree/5.0.1"
+ "source": "https://github.com/Intervention/gif/tree/4.2.4"
},
"funding": [
{
@@ -1620,31 +1620,31 @@
"type": "ko_fi"
}
],
- "time": "2026-05-03T06:04:47+00:00"
+ "time": "2026-01-04T09:27:23+00:00"
},
{
"name": "intervention/image",
- "version": "4.2.0",
+ "version": "3.11.8",
"source": {
"type": "git",
"url": "https://github.com/Intervention/image.git",
- "reference": "830907fc5397dfc2a51a4e90322d586989fc8364"
+ "reference": "cf04c8dd245697f701057c13d4bfe140d584e738"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Intervention/image/zipball/830907fc5397dfc2a51a4e90322d586989fc8364",
- "reference": "830907fc5397dfc2a51a4e90322d586989fc8364",
+ "url": "https://api.github.com/repos/Intervention/image/zipball/cf04c8dd245697f701057c13d4bfe140d584e738",
+ "reference": "cf04c8dd245697f701057c13d4bfe140d584e738",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "intervention/gif": "^5",
- "php": "^8.3"
+ "intervention/gif": "^4.2",
+ "php": "^8.1"
},
"require-dev": {
"mockery/mockery": "^1.6",
"phpstan/phpstan": "^2.1",
- "phpunit/phpunit": "^12.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
"slevomat/coding-standard": "~8.0",
"squizlabs/php_codesniffer": "^4"
},
@@ -1680,7 +1680,7 @@
],
"support": {
"issues": "https://github.com/Intervention/image/issues",
- "source": "https://github.com/Intervention/image/tree/4.2.0"
+ "source": "https://github.com/Intervention/image/tree/3.11.8"
},
"funding": [
{
@@ -1696,7 +1696,7 @@
"type": "ko_fi"
}
],
- "time": "2026-07-09T13:07:14+00:00"
+ "time": "2026-05-01T08:20:10+00:00"
},
{
"name": "jonnybarnes/indieweb",
@@ -1801,16 +1801,16 @@
},
{
"name": "laravel/framework",
- "version": "v13.22.0",
+ "version": "v13.17.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "d354afa45334cdac523fbc015f203a78d7e2f5c6"
+ "reference": "0802b7a81f3252d78200b8037ac183a686a529f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/d354afa45334cdac523fbc015f203a78d7e2f5c6",
- "reference": "d354afa45334cdac523fbc015f203a78d7e2f5c6",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/0802b7a81f3252d78200b8037ac183a686a529f0",
+ "reference": "0802b7a81f3252d78200b8037ac183a686a529f0",
"shasum": ""
},
"require": {
@@ -1889,7 +1889,6 @@
"illuminate/filesystem": "self.version",
"illuminate/hashing": "self.version",
"illuminate/http": "self.version",
- "illuminate/image": "self.version",
"illuminate/json-schema": "self.version",
"illuminate/log": "self.version",
"illuminate/macroable": "self.version",
@@ -1916,7 +1915,6 @@
"ext-gmp": "*",
"fakerphp/faker": "^1.24",
"guzzlehttp/psr7": "^2.9",
- "intervention/image": "^4.0",
"laravel/pint": "^1.18",
"league/flysystem-aws-s3-v3": "^3.25.1",
"league/flysystem-ftp": "^3.25.1",
@@ -1953,7 +1951,6 @@
"ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).",
"fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).",
"filp/whoops": "Required for friendly error pages in development (^2.14.3).",
- "intervention/image": "Required to use the image processing features (^4.0).",
"laravel/tinker": "Required to use the tinker console command (^2.0).",
"league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).",
"league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).",
@@ -2024,20 +2021,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2026-07-24T20:38:48+00:00"
+ "time": "2026-06-23T19:42:45+00:00"
},
{
"name": "laravel/horizon",
- "version": "v5.48.1",
+ "version": "v5.47.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/horizon.git",
- "reference": "7953b21becabb83974ab93111ffa4d9439dcac07"
+ "reference": "a6ac142293ad02db4d7cccb961dd32f56ef1462d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/horizon/zipball/7953b21becabb83974ab93111ffa4d9439dcac07",
- "reference": "7953b21becabb83974ab93111ffa4d9439dcac07",
+ "url": "https://api.github.com/repos/laravel/horizon/zipball/a6ac142293ad02db4d7cccb961dd32f56ef1462d",
+ "reference": "a6ac142293ad02db4d7cccb961dd32f56ef1462d",
"shasum": ""
},
"require": {
@@ -2102,9 +2099,9 @@
],
"support": {
"issues": "https://github.com/laravel/horizon/issues",
- "source": "https://github.com/laravel/horizon/tree/v5.48.1"
+ "source": "https://github.com/laravel/horizon/tree/v5.47.2"
},
- "time": "2026-07-20T15:53:58+00:00"
+ "time": "2026-06-03T15:11:37+00:00"
},
{
"name": "laravel/prompts",
@@ -2303,16 +2300,16 @@
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.15",
+ "version": "v2.0.13",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661"
+ "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/dccd8bcb851bb03fcc005df650b708b57cc52661",
- "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce",
+ "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce",
"shasum": ""
},
"require": {
@@ -2360,7 +2357,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2026-07-21T16:49:22+00:00"
+ "time": "2026-04-16T14:03:50+00:00"
},
{
"name": "laravel/tinker",
@@ -2506,16 +2503,16 @@
},
{
"name": "league/commonmark",
- "version": "2.8.3",
+ "version": "2.8.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7"
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/1902f60f984235023acbe03db6ad614a37b3c3e7",
- "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b",
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b",
"shasum": ""
},
"require": {
@@ -2537,8 +2534,8 @@
"github/gfm": "0.29.0",
"michelf/php-markdown": "^1.4 || ^2.0",
"nyholm/psr7": "^1.5",
- "phpstan/phpstan": "^2.0.0",
- "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0",
+ "phpstan/phpstan": "^1.8.2",
+ "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
"scrutinizer/ocular": "^1.8.1",
"symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0",
"symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0",
@@ -2609,7 +2606,7 @@
"type": "tidelift"
}
],
- "time": "2026-07-12T15:29:16+00:00"
+ "time": "2026-03-19T13:16:38+00:00"
},
{
"name": "league/config",
@@ -2695,16 +2692,16 @@
},
{
"name": "league/flysystem",
- "version": "3.35.2",
+ "version": "3.35.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "b277b5dc3d56650b68904117124e79c851e12376"
+ "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b277b5dc3d56650b68904117124e79c851e12376",
- "reference": "b277b5dc3d56650b68904117124e79c851e12376",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f23af6c5aafd958a7593029a271d77baf5ed793c",
+ "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c",
"shasum": ""
},
"require": {
@@ -2772,22 +2769,22 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.35.2"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.35.1"
},
- "time": "2026-07-06T14:42:07+00:00"
+ "time": "2026-06-25T06:52:23+00:00"
},
{
"name": "league/flysystem-aws-s3-v3",
- "version": "3.35.2",
+ "version": "3.35.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
- "reference": "8475ef9adfc6498b85469e2abec6fe3118cd08c4"
+ "reference": "3f93d3f4bd5c12a5dfb34a7267c40b1bc4587b94"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/8475ef9adfc6498b85469e2abec6fe3118cd08c4",
- "reference": "8475ef9adfc6498b85469e2abec6fe3118cd08c4",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/3f93d3f4bd5c12a5dfb34a7267c40b1bc4587b94",
+ "reference": "3f93d3f4bd5c12a5dfb34a7267c40b1bc4587b94",
"shasum": ""
},
"require": {
@@ -2827,9 +2824,9 @@
"storage"
],
"support": {
- "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.35.2"
+ "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.35.1"
},
- "time": "2026-07-01T23:25:49+00:00"
+ "time": "2026-06-25T06:51:08+00:00"
},
{
"name": "league/flysystem-local",
@@ -2882,16 +2879,16 @@
},
{
"name": "league/mime-type-detection",
- "version": "1.17.0",
+ "version": "1.16.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
- "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76"
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76",
- "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
"shasum": ""
},
"require": {
@@ -2901,7 +2898,7 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.2",
"phpstan/phpstan": "^0.12.68",
- "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0"
+ "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
},
"type": "library",
"autoload": {
@@ -2922,7 +2919,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
- "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0"
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
},
"funding": [
{
@@ -2934,7 +2931,7 @@
"type": "tidelift"
}
],
- "time": "2026-07-09T11:49:27+00:00"
+ "time": "2024-09-21T08:32:55+00:00"
},
{
"name": "league/uri",
@@ -3285,16 +3282,16 @@
},
{
"name": "mtdowling/jmespath.php",
- "version": "2.9.2",
+ "version": "2.9.1",
"source": {
"type": "git",
"url": "https://github.com/jmespath/jmespath.php.git",
- "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8"
+ "reference": "9c208ba27ae7d90853c288b3795d6702eb251d34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/2157c5e50e813ec6a96c1eed3be7f64a20fb32a8",
- "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8",
+ "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9c208ba27ae7d90853c288b3795d6702eb251d34",
+ "reference": "9c208ba27ae7d90853c288b3795d6702eb251d34",
"shasum": ""
},
"require": {
@@ -3345,22 +3342,22 @@
],
"support": {
"issues": "https://github.com/jmespath/jmespath.php/issues",
- "source": "https://github.com/jmespath/jmespath.php/tree/2.9.2"
+ "source": "https://github.com/jmespath/jmespath.php/tree/2.9.1"
},
- "time": "2026-07-06T18:56:19+00:00"
+ "time": "2026-06-11T10:43:56+00:00"
},
{
"name": "nesbot/carbon",
- "version": "3.13.1",
+ "version": "3.13.0",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2"
+ "reference": "40f6618f052df16b545f626fbf9a878e6497d16a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/2937ad3d1d2c506fd2bc97d571438a95641f44e2",
- "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/40f6618f052df16b545f626fbf9a878e6497d16a",
+ "reference": "40f6618f052df16b545f626fbf9a878e6497d16a",
"shasum": ""
},
"require": {
@@ -3452,7 +3449,7 @@
"type": "tidelift"
}
],
- "time": "2026-07-09T18:23:49+00:00"
+ "time": "2026-06-18T13:49:15+00:00"
},
{
"name": "nette/schema",
@@ -3523,16 +3520,16 @@
},
{
"name": "nette/utils",
- "version": "v4.1.5",
+ "version": "v4.1.4",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0"
+ "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/b043439dbdf954e6c28b5ea7e34b0100f83165e0",
- "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0",
+ "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7",
+ "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7",
"shasum": ""
},
"require": {
@@ -3552,7 +3549,7 @@
},
"suggest": {
"ext-gd": "to use Image",
- "ext-iconv": "to use Strings::chr(), ord() and reverse()",
+ "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
"ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
"ext-json": "to use Nette\\Utils\\Json",
"ext-mbstring": "to use Strings::lower() etc...",
@@ -3608,25 +3605,26 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.1.5"
+ "source": "https://github.com/nette/utils/tree/v4.1.4"
},
- "time": "2026-07-17T23:02:45+00:00"
+ "time": "2026-05-11T20:49:54+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.8.0",
+ "version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f"
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
- "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
+ "ext-ctype": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"php": ">=7.4"
@@ -3665,9 +3663,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
- "time": "2026-07-04T14:30:18+00:00"
+ "time": "2025-12-06T11:56:16+00:00"
},
{
"name": "nunomaduro/termwind",
@@ -4120,16 +4118,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "2.3.3",
+ "version": "2.3.2",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3"
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3",
- "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a",
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a",
"shasum": ""
},
"require": {
@@ -4161,9 +4159,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2"
},
- "time": "2026-07-08T07:01:06+00:00"
+ "time": "2026-01-25T14:56:51+00:00"
},
{
"name": "psr/clock",
@@ -4919,28 +4917,98 @@
"time": "2026-03-11T13:48:28+00:00"
},
{
- "name": "spatie/flare-client-php",
- "version": "3.3.1",
+ "name": "spatie/error-solutions",
+ "version": "2.0.5",
"source": {
"type": "git",
- "url": "https://github.com/spatie/flare-client-php.git",
- "reference": "e045814eefd9f5862ec69aec6fc53b03838e2c92"
+ "url": "https://github.com/spatie/error-solutions.git",
+ "reference": "0392eff7f36f01249a6e9f8eb22a7d54651881bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/e045814eefd9f5862ec69aec6fc53b03838e2c92",
- "reference": "e045814eefd9f5862ec69aec6fc53b03838e2c92",
+ "url": "https://api.github.com/repos/spatie/error-solutions/zipball/0392eff7f36f01249a6e9f8eb22a7d54651881bc",
+ "reference": "0392eff7f36f01249a6e9f8eb22a7d54651881bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.2"
+ },
+ "require-dev": {
+ "illuminate/broadcasting": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/cache": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
+ "livewire/livewire": "^2.11|^3.5.20|^4.0",
+ "openai-php/client": "^0.13.0",
+ "orchestra/testbench": "8.22.3|^9.0|^10.0|^11.0",
+ "pestphp/pest": "^2.20|^3.0",
+ "phpstan/phpstan": "^2.1",
+ "psr/simple-cache": "^3.0",
+ "psr/simple-cache-implementation": "^3.0",
+ "spatie/ray": "^1.28",
+ "symfony/cache": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/process": "^5.4|^6.0|^7.0|^8.0",
+ "vlucas/phpdotenv": "^5.5"
+ },
+ "suggest": {
+ "openai-php/client": "Require get solutions from OpenAI",
+ "simple-cache-implementation": "To cache solutions from OpenAI"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\ErrorSolutions\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ruben Van Assche",
+ "email": "ruben@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "This is my package error-solutions",
+ "homepage": "https://github.com/spatie/error-solutions",
+ "keywords": [
+ "error-solutions",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/error-solutions/issues",
+ "source": "https://github.com/spatie/error-solutions/tree/2.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-27T15:32:49+00:00"
+ },
+ {
+ "name": "spatie/flare-client-php",
+ "version": "2.10.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/flare-client-php.git",
+ "reference": "056aa9cb10e41d7490d51d2f15875143e6d12ce2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/056aa9cb10e41d7490d51d2f15875143e6d12ce2",
+ "reference": "056aa9cb10e41d7490d51d2f15875143e6d12ce2",
"shasum": ""
},
"require": {
"ext-curl": "*",
- "guzzlehttp/guzzle": "^7.9|^8.0",
- "monolog/monolog": "^3.0",
- "php": "^8.1",
+ "guzzlehttp/guzzle": "^7.9",
+ "php": "^8.2",
"psr/container": "^2.0",
"spatie/backtrace": "^1.8.0",
- "spatie/flare-daemon": "^0.3",
- "symfony/console": "^5.2|^6.0|^7.0|^8.0",
+ "spatie/error-solutions": "^2.0",
"symfony/http-foundation": "^5.2|^6.0|^7.0|^8.0",
"symfony/mime": "^5.2|^6.0|^7.0|^8.0",
"symfony/process": "^5.2|^6.0|^7.0|^8.0",
@@ -4950,16 +5018,14 @@
"friendsofphp/php-cs-fixer": "^3.89",
"pestphp/pest": "^2.36.0|^3.0|^4.0",
"phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "^2.0",
- "phpstan/phpstan-deprecation-rules": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "spatie/invade": "^2.1",
+ "phpstan/phpstan-deprecation-rules": "^1.2",
+ "phpstan/phpstan-phpunit": "^1.4",
"spatie/pest-plugin-snapshots": "^2.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.x-dev"
+ "dev-main": "1.3.x-dev"
}
},
"autoload": {
@@ -4981,7 +5047,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/3.3.1"
+ "source": "https://github.com/spatie/flare-client-php/tree/2.10.2"
},
"funding": [
{
@@ -4989,94 +5055,25 @@
"type": "github"
}
],
- "time": "2026-07-22T06:40:58+00:00"
- },
- {
- "name": "spatie/flare-daemon",
- "version": "0.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/spatie/flare-daemon.git",
- "reference": "dfa1d156aac231a619f78974c983a78391e1e034"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-daemon/zipball/dfa1d156aac231a619f78974c983a78391e1e034",
- "reference": "dfa1d156aac231a619f78974c983a78391e1e034",
- "shasum": ""
- },
- "require": {
- "composer-runtime-api": "^2.2",
- "ext-zlib": "*",
- "php": "^8.1"
- },
- "require-dev": {
- "laravel/pint": "^1.0",
- "pestphp/pest": "^3.0 || ^4.0",
- "phpstan/phpstan": "^2.1",
- "react/async": "^4.3",
- "spatie/flare-daemon-runtime": "*",
- "spatie/ray": "^1.28",
- "symfony/process": "^7.2"
- },
- "bin": [
- "bin/flare-daemon"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Spatie\\FlareDaemon\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Alex Vanderbist",
- "email": "alex@spatie.be",
- "role": "Developer"
- }
- ],
- "description": "Local HTTP daemon for asynchronous Flare delivery",
- "homepage": "https://github.com/spatie/flare-daemon",
- "keywords": [
- "error-tracking",
- "flare",
- "flare-daemon",
- "performance-monitoring",
- "spatie"
- ],
- "support": {
- "issues": "https://github.com/spatie/flare-daemon/issues",
- "source": "https://github.com/spatie/flare-daemon/tree/0.3.0"
- },
- "funding": [
- {
- "url": "https://github.com/spatie",
- "type": "github"
- }
- ],
- "time": "2026-07-02T15:29:10+00:00"
+ "time": "2026-02-23T14:14:53+00:00"
},
{
"name": "spatie/laravel-error-share",
- "version": "1.0.10",
+ "version": "1.0.9",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-error-share.git",
- "reference": "f13247bff7d7849e5279cf78777191f53cb12568"
+ "reference": "52e65ee35a7f782e27460cb307cc97cec8332793"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-error-share/zipball/f13247bff7d7849e5279cf78777191f53cb12568",
- "reference": "f13247bff7d7849e5279cf78777191f53cb12568",
+ "url": "https://api.github.com/repos/spatie/laravel-error-share/zipball/52e65ee35a7f782e27460cb307cc97cec8332793",
+ "reference": "52e65ee35a7f782e27460cb307cc97cec8332793",
"shasum": ""
},
"require": {
- "illuminate/contracts": "^10.0|^11.0|^12.50|^13.0",
- "php": "^8.1",
+ "illuminate/contracts": "^12.50|^13.0",
+ "php": "^8.2",
"spatie/laravel-package-tools": "^1.16"
},
"require-dev": {
@@ -5132,7 +5129,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-error-share/issues",
- "source": "https://github.com/spatie/laravel-error-share/tree/1.0.10"
+ "source": "https://github.com/spatie/laravel-error-share/tree/1.0.9"
},
"funding": [
{
@@ -5140,46 +5137,51 @@
"type": "github"
}
],
- "time": "2026-07-03T07:49:45+00:00"
+ "time": "2026-05-11T08:16:59+00:00"
},
{
"name": "spatie/laravel-flare",
- "version": "3.3.0",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-flare.git",
- "reference": "6ef59eeba3bdf7561be849919f6058ad484ed151"
+ "reference": "c2722a270ba2653baef2c9e29b893e28955717ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-flare/zipball/6ef59eeba3bdf7561be849919f6058ad484ed151",
- "reference": "6ef59eeba3bdf7561be849919f6058ad484ed151",
+ "url": "https://api.github.com/repos/spatie/laravel-flare/zipball/c2722a270ba2653baef2c9e29b893e28955717ce",
+ "reference": "c2722a270ba2653baef2c9e29b893e28955717ce",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
- "illuminate/support": "^10.0|^11.47|^12.42|^13.0",
+ "illuminate/support": "^11.46|^12.0|^13.0",
"php": "^8.2",
- "spatie/flare-client-php": "^3.3.0",
+ "spatie/error-solutions": "^2.0",
+ "spatie/flare-client-php": "^2.10.2",
"spatie/laravel-error-share": "^1.0.3",
- "symfony/console": "^6.4|^7.2.1|^8.0",
- "symfony/var-dumper": "^6.4|^7.2.3|^8.0"
+ "symfony/console": "^7.2.1|^8.0",
+ "symfony/var-dumper": "^7.2.3|^8.0"
},
"require-dev": {
- "laravel/serializable-closure": "^1.3|^2.0",
- "livewire/livewire": "^3.6.0|^4.2",
+ "laravel/serializable-closure": "^2.0",
+ "livewire/livewire": "^3.6.0|^4.0",
"mockery/mockery": "^1.6.12",
- "orchestra/testbench": "^8.31|^9.14|^10.8|^11.0",
+ "openai-php/client": "^0.8.5",
+ "orchestra/testbench": "^9.14|^10.8|^11.0",
"pestphp/pest": "^2.34|^3.7.4|^4.1",
"pestphp/pest-plugin-laravel": "^2.4|^3.0|^4.0",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0.1",
"phpstan/phpstan-phpunit": "^1.3.16|^2.0.4",
- "spatie/ray": "^1.45",
"vlucas/phpdotenv": "^5.6.1"
},
+ "suggest": {
+ "openai-php/client": "Required to get solutions from OpenAI",
+ "psr/simple-cache-implementation": "Used to cache solutions from OpenAI"
+ },
"type": "library",
"extra": {
"laravel": {
@@ -5226,7 +5228,7 @@
"type": "github"
}
],
- "time": "2026-07-15T08:06:53+00:00"
+ "time": "2026-04-08T13:26:20+00:00"
},
{
"name": "spatie/laravel-package-tools",
@@ -5291,20 +5293,20 @@
},
{
"name": "spomky-labs/cbor-php",
- "version": "3.3.0",
+ "version": "3.2.3",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/cbor-php.git",
- "reference": "013d13da69cf28b1ae501887daceccc850ca1c76"
+ "reference": "dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/013d13da69cf28b1ae501887daceccc850ca1c76",
- "reference": "013d13da69cf28b1ae501887daceccc850ca1c76",
+ "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32",
+ "reference": "dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32",
"shasum": ""
},
"require": {
- "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18",
+ "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17",
"ext-mbstring": "*",
"php": ">=8.0"
},
@@ -5346,7 +5348,7 @@
],
"support": {
"issues": "https://github.com/Spomky-Labs/cbor-php/issues",
- "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.3.0"
+ "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.2.3"
},
"funding": [
{
@@ -5358,44 +5360,45 @@
"type": "patreon"
}
],
- "time": "2026-07-15T18:56:27+00:00"
+ "time": "2026-04-01T12:15:20+00:00"
},
{
"name": "spomky-labs/pki-framework",
- "version": "1.5.0",
+ "version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/pki-framework.git",
- "reference": "e0d61661962560c1cedfef02b51b431e720aae78"
+ "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/e0d61661962560c1cedfef02b51b431e720aae78",
- "reference": "e0d61661962560c1cedfef02b51b431e720aae78",
+ "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/aa576cbd07128075bef97ac2f8af9854e67513d8",
+ "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8",
"shasum": ""
},
"require": {
- "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18",
+ "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17",
"ext-mbstring": "*",
- "php": ">=8.1"
+ "php": ">=8.1",
+ "psr/clock": "^1.0"
},
"require-dev": {
"ekino/phpstan-banned-code": "^1.0|^2.0|^3.0",
"ext-gmp": "*",
"ext-openssl": "*",
- "infection/infection": "^0.28|^0.29|^0.31",
+ "infection/infection": "^0.28|^0.29|^0.31|^0.32",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpstan/extension-installer": "^1.3|^2.0",
"phpstan/phpstan": "^1.8|^2.0",
"phpstan/phpstan-deprecation-rules": "^1.0|^2.0",
"phpstan/phpstan-phpunit": "^1.1|^2.0",
"phpstan/phpstan-strict-rules": "^1.3|^2.0",
- "phpunit/phpunit": "^10.1|^11.0|^12.0",
+ "phpunit/phpunit": "^10.1|^11.0|^12.0|^13.0",
"rector/rector": "^1.0|^2.0",
"roave/security-advisories": "dev-latest",
"symfony/string": "^6.4|^7.0|^8.0",
"symfony/var-dumper": "^6.4|^7.0|^8.0",
- "symplify/easy-coding-standard": "^12.0 || ^13.0"
+ "symplify/easy-coding-standard": "^12.0|^13.0"
},
"suggest": {
"ext-bcmath": "For better performance (or GMP)",
@@ -5455,7 +5458,7 @@
],
"support": {
"issues": "https://github.com/Spomky-Labs/pki-framework/issues",
- "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.5.0"
+ "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.2"
},
"funding": [
{
@@ -5467,7 +5470,7 @@
"type": "patreon"
}
],
- "time": "2026-07-16T10:28:45+00:00"
+ "time": "2026-03-23T22:56:56+00:00"
},
{
"name": "symfony/clock",
@@ -8635,16 +8638,16 @@
},
{
"name": "vlucas/phpdotenv",
- "version": "v5.6.4",
+ "version": "v5.6.3",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b"
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b",
- "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc",
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc",
"shasum": ""
},
"require": {
@@ -8703,7 +8706,7 @@
],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
- "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4"
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3"
},
"funding": [
{
@@ -8715,7 +8718,7 @@
"type": "tidelift"
}
],
- "time": "2026-07-06T19:11:50+00:00"
+ "time": "2025-12-27T19:49:13+00:00"
},
{
"name": "voku/portable-ascii",
@@ -8793,20 +8796,20 @@
},
{
"name": "web-auth/cose-lib",
- "version": "4.6.0",
+ "version": "4.5.2",
"source": {
"type": "git",
"url": "https://github.com/web-auth/cose-lib.git",
- "reference": "3afe04df137baf97c5c3e28c5ee6f05536405148"
+ "reference": "5b38660f90070a8e45f3dbc9528ade3b608dd77d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/3afe04df137baf97c5c3e28c5ee6f05536405148",
- "reference": "3afe04df137baf97c5c3e28c5ee6f05536405148",
+ "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/5b38660f90070a8e45f3dbc9528ade3b608dd77d",
+ "reference": "5b38660f90070a8e45f3dbc9528ade3b608dd77d",
"shasum": ""
},
"require": {
- "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17|^0.18",
+ "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17",
"ext-json": "*",
"ext-openssl": "*",
"php": ">=8.1",
@@ -8848,7 +8851,7 @@
],
"support": {
"issues": "https://github.com/web-auth/cose-lib/issues",
- "source": "https://github.com/web-auth/cose-lib/tree/4.6.0"
+ "source": "https://github.com/web-auth/cose-lib/tree/4.5.2"
},
"funding": [
{
@@ -8860,7 +8863,7 @@
"type": "patreon"
}
],
- "time": "2026-07-16T10:19:49+00:00"
+ "time": "2026-05-03T09:49:50+00:00"
},
{
"name": "web-auth/webauthn-lib",
@@ -9018,16 +9021,16 @@
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
- "version": "v4.4.0",
+ "version": "v4.3.0",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/laravel-debugbar.git",
- "reference": "80ef956bda9e1a5824037d6f2cd06e73092e5634"
+ "reference": "3d76ea8d78b82225b92789de65fc630c1cd8e80c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/80ef956bda9e1a5824037d6f2cd06e73092e5634",
- "reference": "80ef956bda9e1a5824037d6f2cd06e73092e5634",
+ "url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/3d76ea8d78b82225b92789de65fc630c1cd8e80c",
+ "reference": "3d76ea8d78b82225b92789de65fc630c1cd8e80c",
"shasum": ""
},
"require": {
@@ -9035,12 +9038,11 @@
"illuminate/session": "^11|^12|^13.0",
"illuminate/support": "^11|^12|^13.0",
"php": "^8.2",
- "php-debugbar/php-debugbar": "^3.8.0",
+ "php-debugbar/php-debugbar": "^3.7.2",
"php-debugbar/symfony-bridge": "^1.1"
},
"require-dev": {
"larastan/larastan": "^3",
- "laravel/ai": "^0.8",
"laravel/octane": "^2",
"laravel/pennant": "^1",
"laravel/pint": "^1",
@@ -9102,7 +9104,7 @@
],
"support": {
"issues": "https://github.com/fruitcake/laravel-debugbar/issues",
- "source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.4.0"
+ "source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.3.0"
},
"funding": [
{
@@ -9114,7 +9116,7 @@
"type": "github"
}
],
- "time": "2026-07-04T08:30:57+00:00"
+ "time": "2026-06-04T07:54:01+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",
@@ -9817,16 +9819,16 @@
},
{
"name": "laravel/sail",
- "version": "v1.64.0",
+ "version": "v1.63.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "08cacd3e72d6798df3fa8bd4b5d55d0f7f920625"
+ "reference": "51bbce3f803c1d386cabbb44e618c955a12ff5fc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/08cacd3e72d6798df3fa8bd4b5d55d0f7f920625",
- "reference": "08cacd3e72d6798df3fa8bd4b5d55d0f7f920625",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/51bbce3f803c1d386cabbb44e618c955a12ff5fc",
+ "reference": "51bbce3f803c1d386cabbb44e618c955a12ff5fc",
"shasum": ""
},
"require": {
@@ -9876,7 +9878,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2026-07-17T15:09:35+00:00"
+ "time": "2026-06-18T08:54:14+00:00"
},
{
"name": "mockery/mockery",
@@ -10023,23 +10025,23 @@
},
{
"name": "nunomaduro/collision",
- "version": "v8.9.5",
+ "version": "v8.9.4",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec"
+ "reference": "716af8f95a470e9094cfca09ed897b023be191a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/fb53eacd509a1d303858e2d20cfebf2d630254ec",
- "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5",
+ "reference": "716af8f95a470e9094cfca09ed897b023be191a5",
"shasum": ""
},
"require": {
"filp/whoops": "^2.18.4",
"nunomaduro/termwind": "^2.4.0",
"php": "^8.2.0",
- "symfony/console": "^7.4.14 || ^8.1.1"
+ "symfony/console": "^7.4.8 || ^8.0.8"
},
"conflict": {
"laravel/framework": "<11.48.0 || >=14.0.0",
@@ -10047,12 +10049,12 @@
},
"require-dev": {
"brianium/paratest": "^7.8.5",
- "larastan/larastan": "^3.10.0",
- "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.20.0",
- "laravel/pint": "^1.29.3",
- "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.3.5",
- "pestphp/pest": "^3.8.5 || ^4.7.5 || ^5.0.0",
- "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.2"
+ "larastan/larastan": "^3.9.6",
+ "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0",
+ "laravel/pint": "^1.29.1",
+ "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1",
+ "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0",
+ "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0"
},
"type": "library",
"extra": {
@@ -10115,7 +10117,7 @@
"type": "patreon"
}
],
- "time": "2026-07-15T19:09:14+00:00"
+ "time": "2026-04-21T14:04:20+00:00"
},
{
"name": "permafrost-dev/code-snippets",
@@ -10364,16 +10366,16 @@
},
{
"name": "php-debugbar/php-debugbar",
- "version": "v3.8.0",
+ "version": "v3.7.6",
"source": {
"type": "git",
"url": "https://github.com/php-debugbar/php-debugbar.git",
- "reference": "18ced90d4b882ed449b2278fea8692f8f7d1c13c"
+ "reference": "1690ee1728827f9deb4b60457fa387cf44672c56"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/18ced90d4b882ed449b2278fea8692f8f7d1c13c",
- "reference": "18ced90d4b882ed449b2278fea8692f8f7d1c13c",
+ "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/1690ee1728827f9deb4b60457fa387cf44672c56",
+ "reference": "1690ee1728827f9deb4b60457fa387cf44672c56",
"shasum": ""
},
"require": {
@@ -10415,7 +10417,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.8-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
@@ -10450,7 +10452,7 @@
],
"support": {
"issues": "https://github.com/php-debugbar/php-debugbar/issues",
- "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.8.0"
+ "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.7.6"
},
"funding": [
{
@@ -10462,7 +10464,7 @@
"type": "github"
}
],
- "time": "2026-07-02T12:38:20+00:00"
+ "time": "2026-04-30T07:31:44+00:00"
},
{
"name": "php-debugbar/symfony-bridge",
@@ -10726,35 +10728,33 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "14.2.3",
+ "version": "12.5.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "82f6e49ff224e2cde923d74425e583a883910783"
+ "reference": "186dab580576598076de6818596d12b61801880e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/82f6e49ff224e2cde923d74425e583a883910783",
- "reference": "82f6e49ff224e2cde923d74425e583a883910783",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e",
+ "reference": "186dab580576598076de6818596d12b61801880e",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
- "ext-mbstring": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^5.8.0",
- "php": ">=8.4",
- "phpunit/php-text-template": "^6.0",
- "sebastian/complexity": "^6.0",
- "sebastian/environment": "^9.3.2",
- "sebastian/git-state": "^1.0",
- "sebastian/lines-of-code": "^5.0.1",
- "sebastian/version": "^7.0",
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.3",
+ "phpunit/php-text-template": "^5.0",
+ "sebastian/complexity": "^5.0",
+ "sebastian/environment": "^8.1.2",
+ "sebastian/lines-of-code": "^4.0.1",
+ "sebastian/version": "^6.0",
"theseer/tokenizer": "^2.0.1"
},
"require-dev": {
- "phpunit/phpunit": "^13.2.2"
+ "phpunit/phpunit": "^12.5.28"
},
"suggest": {
"ext-pcov": "PHP extension that provides line coverage",
@@ -10763,7 +10763,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "14.2.x-dev"
+ "dev-main": "12.5.x-dev"
}
},
"autoload": {
@@ -10792,7 +10792,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.2.3"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.7"
},
"funding": [
{
@@ -10812,32 +10812,32 @@
"type": "tidelift"
}
],
- "time": "2026-07-06T15:04:02+00:00"
+ "time": "2026-06-01T13:24:19+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "7.0.0",
+ "version": "6.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50"
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6e5aa1fb0a95b1703d83e721299ee18bb4e2de50",
- "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "7.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -10865,7 +10865,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
"security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.0"
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1"
},
"funding": [
{
@@ -10885,28 +10885,28 @@
"type": "tidelift"
}
],
- "time": "2026-02-06T04:33:26+00:00"
+ "time": "2026-02-02T14:04:18+00:00"
},
{
"name": "phpunit/php-invoker",
- "version": "7.0.0",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88"
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88",
- "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406",
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
"ext-pcntl": "*",
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"suggest": {
"ext-pcntl": "*"
@@ -10914,7 +10914,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "7.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -10941,52 +10941,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
"security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/7.0.0"
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpunit/php-invoker",
- "type": "tidelift"
}
],
- "time": "2026-02-06T04:34:47+00:00"
+ "time": "2025-02-07T04:58:58+00:00"
},
{
"name": "phpunit/php-text-template",
- "version": "6.0.0",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4"
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4",
- "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53",
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -11013,52 +11001,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
"security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/6.0.0"
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpunit/php-text-template",
- "type": "tidelift"
}
],
- "time": "2026-02-06T04:36:37+00:00"
+ "time": "2025-02-07T04:59:16+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "9.0.0",
+ "version": "8.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6"
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a0e12065831f6ab0d83120dc61513eb8d9a966f6",
- "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "9.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -11085,70 +11061,56 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
"security": "https://github.com/sebastianbergmann/php-timer/security/policy",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/9.0.0"
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpunit/php-timer",
- "type": "tidelift"
}
],
- "time": "2026-02-06T04:37:53+00:00"
+ "time": "2025-02-07T04:59:38+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "13.2.5",
+ "version": "12.5.30",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "2beef9f448c9e04914a273c89ff6d039f8b97bc8"
+ "reference": "900400a5b616d6fb306f9549f6da33ba615d3fbb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2beef9f448c9e04914a273c89ff6d039f8b97bc8",
- "reference": "2beef9f448c9e04914a273c89ff6d039f8b97bc8",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/900400a5b616d6fb306f9549f6da33ba615d3fbb",
+ "reference": "900400a5b616d6fb306f9549f6da33ba615d3fbb",
"shasum": ""
},
"require": {
"ext-dom": "*",
- "ext-filter": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
+ "ext-xml": "*",
"ext-xmlwriter": "*",
"myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
- "php": ">=8.4.1",
- "phpunit/php-code-coverage": "^14.2.3",
- "phpunit/php-file-iterator": "^7.0.0",
- "phpunit/php-invoker": "^7.0.0",
- "phpunit/php-text-template": "^6.0.0",
- "phpunit/php-timer": "^9.0.0",
- "sebastian/cli-parser": "^5.0.0",
- "sebastian/comparator": "^8.3.0",
- "sebastian/diff": "^9.0",
- "sebastian/environment": "^9.3.2",
- "sebastian/exporter": "^8.1.1",
- "sebastian/file-filter": "^1.0",
- "sebastian/git-state": "^1.0",
- "sebastian/global-state": "^9.0.1",
- "sebastian/object-enumerator": "^8.0.0",
- "sebastian/recursion-context": "^8.0.0",
- "sebastian/type": "^7.0.1",
- "sebastian/version": "^7.0.0",
+ "php": ">=8.3",
+ "phpunit/php-code-coverage": "^12.5.7",
+ "phpunit/php-file-iterator": "^6.0.1",
+ "phpunit/php-invoker": "^6.0.0",
+ "phpunit/php-text-template": "^5.0.0",
+ "phpunit/php-timer": "^8.0.0",
+ "sebastian/cli-parser": "^4.2.1",
+ "sebastian/comparator": "^7.1.8",
+ "sebastian/diff": "^7.0.0",
+ "sebastian/environment": "^8.1.2",
+ "sebastian/exporter": "^7.0.3",
+ "sebastian/global-state": "^8.0.3",
+ "sebastian/object-enumerator": "^7.0.0",
+ "sebastian/recursion-context": "^7.0.1",
+ "sebastian/type": "^6.0.4",
+ "sebastian/version": "^6.0.0",
"staabm/side-effects-detector": "^1.0.5"
},
"bin": [
@@ -11157,7 +11119,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "13.2-dev"
+ "dev-main": "12.5-dev"
}
},
"autoload": {
@@ -11189,7 +11151,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/13.2.5"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.30"
},
"funding": [
{
@@ -11197,32 +11159,32 @@
"type": "other"
}
],
- "time": "2026-07-25T06:59:14+00:00"
+ "time": "2026-06-15T13:12:30+00:00"
},
{
"name": "sebastian/cli-parser",
- "version": "5.0.0",
+ "version": "4.2.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca"
+ "reference": "7d05781b13f7dec9043a629a21d086ed74582a15"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/48a4654fa5e48c1c81214e9930048a572d4b23ca",
- "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15",
+ "reference": "7d05781b13f7dec9043a629a21d086ed74582a15",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "4.2-dev"
}
},
"autoload": {
@@ -11246,7 +11208,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
"security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.0"
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1"
},
"funding": [
{
@@ -11266,31 +11228,31 @@
"type": "tidelift"
}
],
- "time": "2026-02-06T04:39:44+00:00"
+ "time": "2026-05-17T05:29:34+00:00"
},
{
"name": "sebastian/comparator",
- "version": "8.3.0",
+ "version": "7.1.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "c025fc7604afab3f195fab7cdaf72327331af241"
+ "reference": "7c65c1e79836812819705b473a90c12399542485"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c025fc7604afab3f195fab7cdaf72327331af241",
- "reference": "c025fc7604afab3f195fab7cdaf72327331af241",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485",
+ "reference": "7c65c1e79836812819705b473a90c12399542485",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-mbstring": "*",
- "php": ">=8.4",
- "sebastian/diff": "^9.0",
- "sebastian/exporter": "^8.1.0"
+ "php": ">=8.3",
+ "sebastian/diff": "^7.0",
+ "sebastian/exporter": "^7.0.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.2"
+ "phpunit/phpunit": "^12.5.25"
},
"suggest": {
"ext-bcmath": "For comparing BcMath\\Number objects"
@@ -11298,7 +11260,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "8.3-dev"
+ "dev-main": "7.1-dev"
}
},
"autoload": {
@@ -11338,7 +11300,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/8.3.0"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8"
},
"funding": [
{
@@ -11358,33 +11320,33 @@
"type": "tidelift"
}
],
- "time": "2026-06-05T03:06:45+00:00"
+ "time": "2026-05-21T04:45:25+00:00"
},
{
"name": "sebastian/complexity",
- "version": "6.0.0",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "c5651c795c98093480df79350cb050813fc7a2f3"
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c5651c795c98093480df79350cb050813fc7a2f3",
- "reference": "c5651c795c98093480df79350cb050813fc7a2f3",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb",
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb",
"shasum": ""
},
"require": {
"nikic/php-parser": "^5.0",
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -11408,53 +11370,41 @@
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
"security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/6.0.0"
+ "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/complexity",
- "type": "tidelift"
}
],
- "time": "2026-02-06T04:41:32+00:00"
+ "time": "2025-02-07T04:55:25+00:00"
},
{
"name": "sebastian/diff",
- "version": "9.0.0",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226"
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a3fb6a298a265ff487a91bbea46e03cd01dbb226",
- "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f",
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.2",
- "symfony/process": "^7.4.13"
+ "phpunit/phpunit": "^12.0",
+ "symfony/process": "^7.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "9.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -11487,47 +11437,35 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/9.0.0"
+ "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/diff",
- "type": "tidelift"
}
],
- "time": "2026-06-05T03:04:51+00:00"
+ "time": "2025-02-07T04:55:46+00:00"
},
{
"name": "sebastian/environment",
- "version": "9.3.2",
+ "version": "8.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e"
+ "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e",
- "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439",
+ "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.1.11"
+ "phpunit/phpunit": "^12.5.26"
},
"suggest": {
"ext-posix": "*"
@@ -11535,7 +11473,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "9.3-dev"
+ "dev-main": "8.1-dev"
}
},
"autoload": {
@@ -11563,7 +11501,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/9.3.2"
+ "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2"
},
"funding": [
{
@@ -11583,34 +11521,34 @@
"type": "tidelift"
}
],
- "time": "2026-05-25T13:41:38+00:00"
+ "time": "2026-05-25T13:40:20+00:00"
},
{
"name": "sebastian/exporter",
- "version": "8.1.1",
+ "version": "7.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "cfaa77c750dcad6f44c9bac8f62ac486e1c82c26"
+ "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/cfaa77c750dcad6f44c9bac8f62ac486e1c82c26",
- "reference": "cfaa77c750dcad6f44c9bac8f62ac486e1c82c26",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23",
+ "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": ">=8.4",
- "sebastian/recursion-context": "^8.0"
+ "php": ">=8.3",
+ "sebastian/recursion-context": "^7.0.1"
},
"require-dev": {
- "phpunit/phpunit": "^13.2.4"
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "8.1-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -11653,7 +11591,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/8.1.1"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3"
},
"funding": [
{
@@ -11673,173 +11611,35 @@
"type": "tidelift"
}
],
- "time": "2026-07-13T11:35:11+00:00"
- },
- {
- "name": "sebastian/file-filter",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/file-filter.git",
- "reference": "33a26f394330f6faa7684bb9cc73afb7727aae93"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/file-filter/zipball/33a26f394330f6faa7684bb9cc73afb7727aae93",
- "reference": "33a26f394330f6faa7684bb9cc73afb7727aae93",
- "shasum": ""
- },
- "require": {
- "php": ">=8.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^13.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for filtering files",
- "homepage": "https://github.com/sebastianbergmann/file-filter",
- "support": {
- "issues": "https://github.com/sebastianbergmann/file-filter/issues",
- "security": "https://github.com/sebastianbergmann/file-filter/security/policy",
- "source": "https://github.com/sebastianbergmann/file-filter/tree/1.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/file-filter",
- "type": "tidelift"
- }
- ],
- "time": "2026-04-22T07:20:04+00:00"
- },
- {
- "name": "sebastian/git-state",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/git-state.git",
- "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/git-state/zipball/792a952e0eba55b6960a48aeceb9f371aad1f76b",
- "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b",
- "shasum": ""
- },
- "require": {
- "php": ">=8.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^13.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for describing the state of a Git checkout",
- "homepage": "https://github.com/sebastianbergmann/git-state",
- "support": {
- "issues": "https://github.com/sebastianbergmann/git-state/issues",
- "security": "https://github.com/sebastianbergmann/git-state/security/policy",
- "source": "https://github.com/sebastianbergmann/git-state/tree/1.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/git-state",
- "type": "tidelift"
- }
- ],
- "time": "2026-03-21T12:54:28+00:00"
+ "time": "2026-05-20T04:37:17+00:00"
},
{
"name": "sebastian/global-state",
- "version": "9.0.1",
+ "version": "8.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945"
+ "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ba68ba79da690cf7eddefd3ce5b78b20b9ba9945",
- "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9",
+ "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9",
"shasum": ""
},
"require": {
- "php": ">=8.4",
- "sebastian/object-reflector": "^6.0",
- "sebastian/recursion-context": "^8.0"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0.1"
},
"require-dev": {
"ext-dom": "*",
- "phpunit/phpunit": "^13.1.13"
+ "phpunit/phpunit": "^12.5.28"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "9.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -11865,7 +11665,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/9.0.1"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3"
},
"funding": [
{
@@ -11885,33 +11685,33 @@
"type": "tidelift"
}
],
- "time": "2026-06-01T15:11:33+00:00"
+ "time": "2026-06-01T15:10:33+00:00"
},
{
"name": "sebastian/lines-of-code",
- "version": "5.0.2",
+ "version": "4.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "d1b6f8fce682505dbd048977f1abedf1b8ad3ff8"
+ "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d1b6f8fce682505dbd048977f1abedf1b8ad3ff8",
- "reference": "d1b6f8fce682505dbd048977f1abedf1b8ad3ff8",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e",
+ "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^5.8.0",
- "php": ">=8.4"
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.2.4"
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -11935,7 +11735,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
"security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.2"
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1"
},
"funding": [
{
@@ -11955,34 +11755,34 @@
"type": "tidelift"
}
],
- "time": "2026-07-09T08:42:34+00:00"
+ "time": "2026-05-19T16:22:07+00:00"
},
{
"name": "sebastian/object-enumerator",
- "version": "8.0.0",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5"
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b39ab125fd9a7434b0ecbc4202eebce11a98cfc5",
- "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894",
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894",
"shasum": ""
},
"require": {
- "php": ">=8.4",
- "sebastian/object-reflector": "^6.0",
- "sebastian/recursion-context": "^8.0"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "8.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -12005,52 +11805,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
"security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/8.0.0"
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/object-enumerator",
- "type": "tidelift"
}
],
- "time": "2026-02-06T04:46:36+00:00"
+ "time": "2025-02-07T04:57:48+00:00"
},
{
"name": "sebastian/object-reflector",
- "version": "6.0.0",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200"
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3ca042c2c60b0eab094f8a1b6a7093f4d4c72200",
- "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a",
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -12073,52 +11861,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/object-reflector/issues",
"security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/6.0.0"
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/object-reflector",
- "type": "tidelift"
}
],
- "time": "2026-02-06T04:47:13+00:00"
+ "time": "2025-02-07T04:58:17+00:00"
},
{
"name": "sebastian/recursion-context",
- "version": "8.0.0",
+ "version": "7.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e"
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e",
- "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "8.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -12149,7 +11925,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.0"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1"
},
"funding": [
{
@@ -12169,32 +11945,32 @@
"type": "tidelift"
}
],
- "time": "2026-02-06T04:51:28+00:00"
+ "time": "2025-08-13T04:44:59+00:00"
},
{
"name": "sebastian/type",
- "version": "7.0.1",
+ "version": "6.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "fee0309275847fefd7636167085e379c1dbf6990"
+ "reference": "82ff822c2edc46724be9f7411d3163021f602773"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fee0309275847fefd7636167085e379c1dbf6990",
- "reference": "fee0309275847fefd7636167085e379c1dbf6990",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773",
+ "reference": "82ff822c2edc46724be9f7411d3163021f602773",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^13.1.10"
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "7.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -12218,7 +11994,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"security": "https://github.com/sebastianbergmann/type/security/policy",
- "source": "https://github.com/sebastianbergmann/type/tree/7.0.1"
+ "source": "https://github.com/sebastianbergmann/type/tree/6.0.4"
},
"funding": [
{
@@ -12238,29 +12014,29 @@
"type": "tidelift"
}
],
- "time": "2026-05-20T06:49:11+00:00"
+ "time": "2026-05-20T06:45:45+00:00"
},
{
"name": "sebastian/version",
- "version": "7.0.0",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
- "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b"
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b",
- "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c",
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "7.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -12284,27 +12060,15 @@
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
"security": "https://github.com/sebastianbergmann/version/security/policy",
- "source": "https://github.com/sebastianbergmann/version/tree/7.0.0"
+ "source": "https://github.com/sebastianbergmann/version/tree/6.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/version",
- "type": "tidelift"
}
],
- "time": "2026-02-06T04:52:52+00:00"
+ "time": "2025-02-07T05:00:38+00:00"
},
{
"name": "spatie/laravel-ray",
diff --git a/config/flare.php b/config/flare.php
index 0b8c6187..9edd19f5 100644
--- a/config/flare.php
+++ b/config/flare.php
@@ -1,6 +1,8 @@
env('FLARE_KEY'),
+ /*
+ |
+ |--------------------------------------------------------------------------
+ | Flare Base URL
+ |--------------------------------------------------------------------------
+ |
+ | Which server should be used to send the reports/traces to.
+ |
+ */
+ 'base_url' => env('FLARE_BASE_URL', Api::BASE_URL),
+
/*
|--------------------------------------------------------------------------
| Collects
@@ -34,6 +47,22 @@ return [
extra: []
),
+ /*
+ |--------------------------------------------------------------------------
+ | Attribute providers
+ |--------------------------------------------------------------------------
+ |
+ | When sending an error report or trace to Flare attributes can be added to
+ | the report or trace for common entries. An example of such an entry is
+ | the currently authenticated user. In an attribute provider you can
+ | specify which attributes should be sent.
+ |
+ */
+
+ 'attribute_providers' => [
+ 'user' => LaravelUserAttributesProvider::class,
+ ],
+
/*
|--------------------------------------------------------------------------
| Censor data
@@ -59,49 +88,19 @@ return [
'X-XSRF-TOKEN',
],
'client_ips' => false,
- 'cookies' => false,
- 'session' => false,
],
/*
|--------------------------------------------------------------------------
- | Sender
+ | Reporting log statements
|--------------------------------------------------------------------------
|
- | The sender is responsible for sending the error reports and traces to
- | Flare. By default, Laravel Flare sends them over HTTP. To use the local
- | Flare daemon, switch the sender class to
- | `Spatie\FlareClient\Senders\DaemonSender::class` and set `daemon_url`.
- | The daemon sender defaults to localhost on port 8787 and uses its own
- | default timeouts and fallback sender config unless you override them.
+ | If this setting is `false` log statements won't be sent as events to Flare,
+ | no matter which error level you specified in the Flare log channel.
|
*/
- 'sender' => [
- 'class' => LaravelHttpSender::class,
- 'config' => [
- 'timeout' => 10,
- ],
- ],
-
- // Daemon sender example
- // 'sender' => [
- // 'class' => \Spatie\FlareClient\Senders\DaemonSender::class,
- // 'config' => [
- // 'daemon_url' => env('FLARE_DAEMON_URL', 'http://127.0.0.1:8787'),
- // ],
- // ],
-
- /*
- |--------------------------------------------------------------------------
- | Report
- |--------------------------------------------------------------------------
- |
- | Flare reports errors and exceptions happening within your application.
- |
- */
-
- 'report' => env('FLARE_REPORT', true),
+ 'send_logs_as_events' => true,
/*
|--------------------------------------------------------------------------
@@ -110,27 +109,10 @@ return [
| When reporting errors, you can specify which error levels should be
| reported. By default, all error levels are reported by setting
| this value to `null`.
- */
+ */
'report_error_levels' => null,
- /*
- |--------------------------------------------------------------------------
- | Override grouping
- |--------------------------------------------------------------------------
- |
- | Flare will try to group errors and exceptions as best as possible, that
- | being said, sometimes you might want to override the grouping. You can
- | do this by adding exception classes to this array which should always
- | be grouped by exception class, exception message or exception class
- | and message.
- |
- */
-
- 'overridden_groupings' => [
- // Illuminate\Http\Client\ConnectionException::class => Spatie\FlareClient\Enums\OverriddenGrouping::ExceptionMessageAndClass,
- ],
-
/*
|--------------------------------------------------------------------------
| Share button
@@ -144,6 +126,40 @@ return [
'enable_share_button' => true,
+ /*
+ |--------------------------------------------------------------------------
+ | Override grouping
+ |--------------------------------------------------------------------------
+ |
+ | Flare will try to group errors and exceptions as best as possible, that
+ | being said, sometimes you might want to override the grouping. You can
+ | do this by adding exception classes to this array which should always
+ | be grouped by exception class, exception message or exception class
+ | and message.
+ |
+ */
+
+ 'overridden_groupings' => [
+ // Illuminate\Http\Client\ConnectionException::class => Spatie\FlareClient\Enums\OverriddenGrouping::ExceptionMessageAndClass,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Sender
+ |--------------------------------------------------------------------------
+ |
+ | The sender is responsible for sending the error reports and traces to
+ | Flare it can be configured if needed.
+ |
+ */
+
+ 'sender' => [
+ 'class' => LaravelHttpSender::class,
+ 'config' => [
+ 'timeout' => 10,
+ ],
+ ],
+
/*
|--------------------------------------------------------------------------
| Trace
@@ -154,7 +170,7 @@ return [
|
*/
- 'trace' => env('FLARE_TRACE', true),
+ 'trace' => env('FLARE_TRACE', false),
/*
|--------------------------------------------------------------------------
@@ -167,35 +183,26 @@ return [
| which means that 10% of the traces will be recorded.
|
*/
-
'sampler' => [
'class' => RateSampler::class,
'config' => [
- 'rate' => env('FLARE_SAMPLER_RATE', 0.1),
+ 'rate' => 0.1,
],
],
/*
|--------------------------------------------------------------------------
- | Log
+ | Trace limits
|--------------------------------------------------------------------------
|
- | Logging show you an overview of log entries within your application.
+ | Limits for the tracing data. These limits are used to prevent
+ | the tracing data from growing too large.
|
*/
-
- 'log' => env('FLARE_LOG', false),
-
- /*
- |--------------------------------------------------------------------------
- | Minimal log level
- |--------------------------------------------------------------------------
- |
- | You can specify the minimal (Monolog) log level that should be sent to Flare.
- | Log levels lower than the specified level will be ignored.
- | If null all log levels will be sent to Flare.
- |
- */
-
- 'minimal_log_level' => null,
+ 'trace_limits' => [
+ 'max_spans' => 512,
+ 'max_attributes_per_span' => 128,
+ 'max_span_events_per_span' => 128,
+ 'max_attributes_per_span_event' => 128,
+ ],
];
diff --git a/config/image.php b/config/image.php
new file mode 100644
index 00000000..b984a0f0
--- /dev/null
+++ b/config/image.php
@@ -0,0 +1,22 @@
+ Driver::class,
+
+];
diff --git a/config/services.php b/config/services.php
index 7a5cdfa5..b784e544 100644
--- a/config/services.php
+++ b/config/services.php
@@ -39,8 +39,4 @@ return [
'token' => env('CLOUDCONVERT_API_TOKEN'),
],
- 'brrr' => [
- 'webhook_url' => env('BRRR_WEBHOOK_URL'),
- ],
-
];
diff --git a/package-lock.json b/package-lock.json
index 05c9ad3c..55d97494 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -121,9 +121,9 @@
}
},
"node_modules/@csstools/css-calc": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz",
- "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz",
+ "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==",
"dev": true,
"funding": [
{
@@ -168,9 +168,9 @@
}
},
"node_modules/@csstools/css-syntax-patches-for-csstree": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz",
- "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz",
+ "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==",
"dev": true,
"funding": [
{
@@ -237,9 +237,9 @@
}
},
"node_modules/@csstools/selector-resolve-nested": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.1.tgz",
- "integrity": "sha512-j3vdQu0XwLME5qOTWxm8cnmvsf423R2YL6DbKklCHZwkDm7UdKNu6RPlw4REIJhSlKBICY3B70/7QZdicLqZgg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz",
+ "integrity": "sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==",
"dev": true,
"funding": [
{
@@ -725,9 +725,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
- "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -782,9 +782,9 @@
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz",
- "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz",
+ "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1019,9 +1019,9 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/types": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz",
- "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==",
+ "version": "8.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz",
+ "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1135,16 +1135,16 @@
}
},
"node_modules/brace-expansion": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz",
- "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==",
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
+ "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^4.0.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
}
},
"node_modules/braces": {
@@ -1418,9 +1418,9 @@
}
},
"node_modules/eslint": {
- "version": "10.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.0.tgz",
- "integrity": "sha512-nuKKvN+oIBO0koN7Tm7dlkmnkc21mtt0QJLwAKzjLq14y6lRTdVG36MZHJ8eQHwdJMwZbQNMlPOYedMq/oVJvQ==",
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.6.0.tgz",
+ "integrity": "sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==",
"dev": true,
"license": "MIT",
"workspaces": [
@@ -1430,7 +1430,7 @@
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.2",
"@eslint/config-array": "^0.23.5",
- "@eslint/config-helpers": "^0.7.0",
+ "@eslint/config-helpers": "^0.6.0",
"@eslint/core": "^1.2.1",
"@eslint/plugin-kit": "^0.7.2",
"@humanfs/node": "^0.16.6",
@@ -1454,7 +1454,7 @@
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
- "minimatch": "^10.2.5",
+ "minimatch": "^10.2.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3"
},
@@ -1655,9 +1655,9 @@
"license": "MIT"
},
"node_modules/fast-uri": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz",
- "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz",
+ "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==",
"dev": true,
"funding": [
{
@@ -1749,9 +1749,9 @@
}
},
"node_modules/flatted": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.3.tgz",
- "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true,
"license": "ISC"
},
@@ -1836,9 +1836,9 @@
}
},
"node_modules/globby": {
- "version": "16.2.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.2.tgz",
- "integrity": "sha512-NLvV9ubZ6NDsJaOpKPy3cQeJpKi9DcWiyCiFUpJPA0YihRqiE6RWaLUmgNNPr8MgPpLZjnBjSmou7uZBRJv9wA==",
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.0.tgz",
+ "integrity": "sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1857,9 +1857,9 @@
}
},
"node_modules/globby/node_modules/ignore": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz",
- "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2137,9 +2137,9 @@
}
},
"node_modules/lightningcss": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
- "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
"dev": true,
"license": "MPL-2.0",
"dependencies": {
@@ -2153,23 +2153,23 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "lightningcss-android-arm64": "1.33.0",
- "lightningcss-darwin-arm64": "1.33.0",
- "lightningcss-darwin-x64": "1.33.0",
- "lightningcss-freebsd-x64": "1.33.0",
- "lightningcss-linux-arm-gnueabihf": "1.33.0",
- "lightningcss-linux-arm64-gnu": "1.33.0",
- "lightningcss-linux-arm64-musl": "1.33.0",
- "lightningcss-linux-x64-gnu": "1.33.0",
- "lightningcss-linux-x64-musl": "1.33.0",
- "lightningcss-win32-arm64-msvc": "1.33.0",
- "lightningcss-win32-x64-msvc": "1.33.0"
+ "lightningcss-android-arm64": "1.32.0",
+ "lightningcss-darwin-arm64": "1.32.0",
+ "lightningcss-darwin-x64": "1.32.0",
+ "lightningcss-freebsd-x64": "1.32.0",
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-linux-arm64-gnu": "1.32.0",
+ "lightningcss-linux-arm64-musl": "1.32.0",
+ "lightningcss-linux-x64-gnu": "1.32.0",
+ "lightningcss-linux-x64-musl": "1.32.0",
+ "lightningcss-win32-arm64-msvc": "1.32.0",
+ "lightningcss-win32-x64-msvc": "1.32.0"
}
},
"node_modules/lightningcss-android-arm64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
- "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
"cpu": [
"arm64"
],
@@ -2188,9 +2188,9 @@
}
},
"node_modules/lightningcss-cli": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli/-/lightningcss-cli-1.33.0.tgz",
- "integrity": "sha512-/tBcBZlBFFxy1iYKDC/HSH/NEjv7Frq6dmDVKRbhGJQI/gFJIJ1/4ZXclxJkd0eEjBjDc5MY0YugHcvJVVGJVg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli/-/lightningcss-cli-1.32.0.tgz",
+ "integrity": "sha512-IFb/ChmSEbeWU3xeRybR6WFlJXCvfDS84//PUzLrRACgvoWrwRJBmcPS9azSo7LMh5QqEuyKanPBByhKM5z01Q==",
"dev": true,
"hasInstallScript": true,
"license": "MPL-2.0",
@@ -2208,23 +2208,23 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "lightningcss-cli-android-arm64": "1.33.0",
- "lightningcss-cli-darwin-arm64": "1.33.0",
- "lightningcss-cli-darwin-x64": "1.33.0",
- "lightningcss-cli-freebsd-x64": "1.33.0",
- "lightningcss-cli-linux-arm-gnueabihf": "1.33.0",
- "lightningcss-cli-linux-arm64-gnu": "1.33.0",
- "lightningcss-cli-linux-arm64-musl": "1.33.0",
- "lightningcss-cli-linux-x64-gnu": "1.33.0",
- "lightningcss-cli-linux-x64-musl": "1.33.0",
- "lightningcss-cli-win32-arm64-msvc": "1.33.0",
- "lightningcss-cli-win32-x64-msvc": "1.33.0"
+ "lightningcss-cli-android-arm64": "1.32.0",
+ "lightningcss-cli-darwin-arm64": "1.32.0",
+ "lightningcss-cli-darwin-x64": "1.32.0",
+ "lightningcss-cli-freebsd-x64": "1.32.0",
+ "lightningcss-cli-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-cli-linux-arm64-gnu": "1.32.0",
+ "lightningcss-cli-linux-arm64-musl": "1.32.0",
+ "lightningcss-cli-linux-x64-gnu": "1.32.0",
+ "lightningcss-cli-linux-x64-musl": "1.32.0",
+ "lightningcss-cli-win32-arm64-msvc": "1.32.0",
+ "lightningcss-cli-win32-x64-msvc": "1.32.0"
}
},
"node_modules/lightningcss-cli-android-arm64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-android-arm64/-/lightningcss-cli-android-arm64-1.33.0.tgz",
- "integrity": "sha512-c0Xd7Gxaw3mNOyrb9ET1JH3JjuB69GY/6pHO4vgwEbIoHCXAt6DBg6kxr5t/oZL9LRxdnZCXF+o0Evz6kuR/xA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-android-arm64/-/lightningcss-cli-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-4O3QY+VdgpBZLIq4crcKOEPVAXX0p7zDoykuTVstRtyolg9XU8CntdtbxcMPSC4SkzAuM/W4KsnPAzmv6Jb5LA==",
"cpu": [
"arm64"
],
@@ -2243,9 +2243,9 @@
}
},
"node_modules/lightningcss-cli-darwin-arm64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-darwin-arm64/-/lightningcss-cli-darwin-arm64-1.33.0.tgz",
- "integrity": "sha512-sso5hSFPis7ldw2FcBopsZviSVAXWRGX8ybUwMhQHssTlERenQJ88WihZs08tCdSnQULo2kunnrGhh4VjRw8Fg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-darwin-arm64/-/lightningcss-cli-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-Xx+zeD7bDKJZwbd1N63TJfIUHEtYspf+tqObdnQEJEvZAwmGfA4iEGrkCRT8R57tDRBDSXg3XHMDDvo/cq7gBQ==",
"cpu": [
"arm64"
],
@@ -2264,9 +2264,9 @@
}
},
"node_modules/lightningcss-cli-darwin-x64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-darwin-x64/-/lightningcss-cli-darwin-x64-1.33.0.tgz",
- "integrity": "sha512-/aDYpMv2QKpJoSIwvwpIs4tIX9SCU894eospSm55FR5MxDZkJDy4fEX6elsXkHCBDqbAknb4qd2h/oDMLTC4Ew==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-darwin-x64/-/lightningcss-cli-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-fYWANZ8RJDpI0tBcPQ7oBOYihfXmgDBHR4lZ6d4z7rcRLlZAOeI00mTO0IXAKfSm/UgnatjM4aBuNlLh8L9noA==",
"cpu": [
"x64"
],
@@ -2285,9 +2285,9 @@
}
},
"node_modules/lightningcss-cli-freebsd-x64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-freebsd-x64/-/lightningcss-cli-freebsd-x64-1.33.0.tgz",
- "integrity": "sha512-kK9u4IEAvt3+1m7lkloyfZNfXykXq2vCH7lgZ5aEqa8VuBZYqvcAIQ4Qt1593QJxbko9HEKUP0erdSxw7k7eFw==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-freebsd-x64/-/lightningcss-cli-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-TJm7z1Ghvo9FKAza2KvfkFgH/9rcV1xAhCYQZlLrV0CiuTZ17uzLobBWb9oelGWUG+wTnEs6XEl4h/ve61YySg==",
"cpu": [
"x64"
],
@@ -2306,9 +2306,9 @@
}
},
"node_modules/lightningcss-cli-linux-arm-gnueabihf": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-arm-gnueabihf/-/lightningcss-cli-linux-arm-gnueabihf-1.33.0.tgz",
- "integrity": "sha512-4bHmUlYCb8WKdPKx2yhk8y/kD034JVuUatDMWav0uU/hEIYJrxPimWBJJ4w2lgpcWchVnk/Kuihs4vaLjO/ozw==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-arm-gnueabihf/-/lightningcss-cli-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-/jS9L5p3eexs5QJvARiDGxibz1umKJmmtff86fWXl3r7RbEUFrMAD4q1WhAR7DurRFgc1YWld6r0mX1YHEYttA==",
"cpu": [
"arm"
],
@@ -2327,9 +2327,9 @@
}
},
"node_modules/lightningcss-cli-linux-arm64-gnu": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-arm64-gnu/-/lightningcss-cli-linux-arm64-gnu-1.33.0.tgz",
- "integrity": "sha512-DkYmkBix3icAZKZsxGsjBAj59CIV0zflZtsT66lCPd2z3OqBLJlhKRrw4TlAW7mIkYeOEYWKVz/G00ZGXNse4A==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-arm64-gnu/-/lightningcss-cli-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-PSdjwcRtSrJpsaqnY3ebnCfDOJ5ePi8s/0ItL3CX1b1Eu0iy44xo7MjgES1ZOQ2ntOthPRqaGsbAiVBLbgFLYQ==",
"cpu": [
"arm64"
],
@@ -2351,9 +2351,9 @@
}
},
"node_modules/lightningcss-cli-linux-arm64-musl": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-arm64-musl/-/lightningcss-cli-linux-arm64-musl-1.33.0.tgz",
- "integrity": "sha512-euNOhzo1ysRl719HfFzRe9r9usWO2Z/Nb8RnmqXxb/kvzOgAv2BcflpoTu6tWhSrbHX6YS/WP6mMFrmII6T7Hw==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-arm64-musl/-/lightningcss-cli-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-t6DdpXFtEdonZHzRgH8cmqhC2o4tl0KrD33cDBBniJz5TmWS20MJxb4YEr4WqBLksqW8GE399HJo+g8/YVuKcA==",
"cpu": [
"arm64"
],
@@ -2375,9 +2375,9 @@
}
},
"node_modules/lightningcss-cli-linux-x64-gnu": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-x64-gnu/-/lightningcss-cli-linux-x64-gnu-1.33.0.tgz",
- "integrity": "sha512-9Q4DAglm17bLhA+HZPB+vxjrHXdhR/8U44zyc8MQNA5Rw+tisvcoR/lv4iuBUFn2qreYVRWQq0wP0rgdhTSxyQ==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-x64-gnu/-/lightningcss-cli-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-QMQllbHYkbkQ4N+v8OGExQlGHBc3YZIcKlVkYucQQj66thkFQsRjmv8p5q3iCB0inNsCoSZ8lBspugkU1iPlPg==",
"cpu": [
"x64"
],
@@ -2399,9 +2399,9 @@
}
},
"node_modules/lightningcss-cli-linux-x64-musl": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-x64-musl/-/lightningcss-cli-linux-x64-musl-1.33.0.tgz",
- "integrity": "sha512-+EobHdqxQ21SUMF8OU0qcizNIrLpPDaPTKQCaGbra9gL3NrW3ELG+exZl5y+WzJsEjLZ0hhjbCFjHUL/03H2JA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-linux-x64-musl/-/lightningcss-cli-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-dMSWdk4kMAi5f+J1xetxRCDQOvPix2whT0UdjuwP8r/5Xcdl2SQU/c80MQzu1S82kVDEANs1vHVEHp/+26LUnA==",
"cpu": [
"x64"
],
@@ -2423,9 +2423,9 @@
}
},
"node_modules/lightningcss-cli-win32-arm64-msvc": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-win32-arm64-msvc/-/lightningcss-cli-win32-arm64-msvc-1.33.0.tgz",
- "integrity": "sha512-iwQ+8rHQy3ewC4c43Ik3UZ8TCC/rjShP3r/8TOPw4fT8wQmW7dS3BNNHPK+LWz9qNrObATJ4MZEEZVRneckOBw==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-win32-arm64-msvc/-/lightningcss-cli-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-MJo22OqSp9FLV10nTRDJQhP6zkEBFqBFQe9mnjfCs+G1Ft+QimIPmC+gBqZHFXveOBOsjFLzU72q0FPvRWFmZQ==",
"cpu": [
"arm64"
],
@@ -2444,9 +2444,9 @@
}
},
"node_modules/lightningcss-cli-win32-x64-msvc": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-cli-win32-x64-msvc/-/lightningcss-cli-win32-x64-msvc-1.33.0.tgz",
- "integrity": "sha512-sgtNPw2gxnY8OzCCMTKCkHSIiBYb/wfXLpLMmDIJFzcX2OETY+VOnQd7OBHx+hVSlrMU7iWL6oJ5rc+nQwteVA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-cli-win32-x64-msvc/-/lightningcss-cli-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-nOBHLPeePXZpGR4Ptp+gkOIkr9pxlq2dFmO954ol5zBi/iOKxuD1hUTIQ7aG+ldKIx4eH9jwoTfZ6owUkm1paA==",
"cpu": [
"x64"
],
@@ -2465,9 +2465,9 @@
}
},
"node_modules/lightningcss-darwin-arm64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
- "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
"cpu": [
"arm64"
],
@@ -2486,9 +2486,9 @@
}
},
"node_modules/lightningcss-darwin-x64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
- "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
"cpu": [
"x64"
],
@@ -2507,9 +2507,9 @@
}
},
"node_modules/lightningcss-freebsd-x64": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
- "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
"cpu": [
"x64"
],
@@ -2528,9 +2528,9 @@
}
},
"node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
- "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
"cpu": [
"arm"
],
@@ -2549,9 +2549,9 @@
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
- "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
"cpu": [
"arm64"
],
@@ -2573,9 +2573,9 @@
}
},
"node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
- "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
"cpu": [
"arm64"
],
@@ -2597,9 +2597,9 @@
}
},
"node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
- "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
"cpu": [
"x64"
],
@@ -2621,9 +2621,9 @@
}
},
"node_modules/lightningcss-linux-x64-musl": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
- "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
"cpu": [
"x64"
],
@@ -2645,9 +2645,9 @@
}
},
"node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
- "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
"cpu": [
"arm64"
],
@@ -2666,9 +2666,9 @@
}
},
"node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
- "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
"cpu": [
"x64"
],
@@ -2808,9 +2808,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.16",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
- "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
+ "version": "3.3.15",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
+ "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
"dev": true,
"funding": [
{
@@ -2953,9 +2953,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
- "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2966,9 +2966,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz",
- "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==",
+ "version": "8.5.16",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz",
+ "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==",
"dev": true,
"funding": [
{
@@ -2986,7 +2986,7 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.16",
+ "nanoid": "^3.3.12",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -3236,9 +3236,9 @@
}
},
"node_modules/string-width": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz",
- "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==",
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
+ "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3269,9 +3269,9 @@
}
},
"node_modules/stylelint": {
- "version": "17.14.1",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.14.1.tgz",
- "integrity": "sha512-xVQwyiuxALUBNB2fBe0tmNemg9KqLtdj3T64mioFDar79B2cU8LIyz+3KL6LdiHs9NkeNfwxpKSaIVOY8f112g==",
+ "version": "17.14.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.14.0.tgz",
+ "integrity": "sha512-8xkHPpdqYryeIsOgfsYTmr6cIeC4nLYWk5S8BPxpodq8mIuepggkMljsHewWfuAjj/+qpRKou2QerhjMH3iasg==",
"dev": true,
"funding": [
{
@@ -3287,7 +3287,7 @@
"dependencies": {
"@csstools/css-calc": "^3.2.1",
"@csstools/css-parser-algorithms": "^4.0.0",
- "@csstools/css-syntax-patches-for-csstree": "^1.1.6",
+ "@csstools/css-syntax-patches-for-csstree": "^1.1.5",
"@csstools/css-tokenizer": "^4.0.0",
"@csstools/media-query-list-parser": "^5.0.0",
"@csstools/selector-resolve-nested": "^4.0.0",
@@ -3299,9 +3299,9 @@
"debug": "^4.4.3",
"fast-glob": "^3.3.3",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^11.1.5",
+ "file-entry-cache": "^11.1.3",
"global-modules": "^2.0.0",
- "globby": "^16.2.1",
+ "globby": "^16.2.0",
"globjoin": "^0.1.4",
"html-tags": "^5.1.0",
"ignore": "^7.0.5",
@@ -3311,12 +3311,12 @@
"micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"picocolors": "^1.1.1",
- "postcss": "^8.5.16",
+ "postcss": "^8.5.15",
"postcss-safe-parser": "^7.0.1",
"postcss-selector-parser": "^7.1.4",
"postcss-value-parser": "^4.2.0",
"string-width": "^8.2.1",
- "supports-hyperlinks": "^4.5.0",
+ "supports-hyperlinks": "^4.4.0",
"svg-tags": "^1.0.0",
"table": "^6.9.0",
"write-file-atomic": "^7.0.1"
@@ -3400,9 +3400,9 @@
}
},
"node_modules/stylelint/node_modules/ignore": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz",
- "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"dev": true,
"license": "MIT",
"engines": {
diff --git a/public/assets/css/app.css.map b/public/assets/css/app.css.map
index ca57ea2f..b817d58d 100644
--- a/public/assets/css/app.css.map
+++ b/public/assets/css/app.css.map
@@ -1 +1 @@
-{"version":3,"mappings":"AACA,aCGE,uCAOA,oFASA,8DAMA,4CAMA,qBAKA,+CAMA,8BAMA,gEAMA,qDAQA,mEAOA,qCAKA,gCAKA,gCACE,wGDhFJ,YGAE,oaAwBA,kEIxBA,0BAIA,oBAIA,iIAME,0BAIA,uBAIA,iDAIE,yEAME,uBAON,oDPvCF,kBO+CE,SACE,oBLhDF,wHAOE,yBAIA,+BAKA,gDAKE,kCAAqC,2CGrBzC,+HAOE,aACE,qCAIA,mCAMF,6DAKE,gDAQJ,4MD/BA,sFAME,+CENF,gBACE,oDAKE,wBAMF,gMAQE,4DAME,uBAUJ,8CACE,2BACE,yDAQE,gBAAiB,8CAST,0KAahB,iEAIA,kGAKA,4DAIA,qDAIA","sources":["resources/css/app.css","resources/css/reset.css","resources/css/header.css","resources/css/notes.css","resources/css/colours.css","resources/css/layout.css","resources/css/pagination.css","resources/css/theme-selector.css"],"sourcesContent":["/* First thing we need to do is declare our cascade layers */\n@layer reset, base, components;\n\n@import url('reset.css');\n@import url('colours.css');\n@import url('layout.css');\n@import url('header.css');\n@import url('notes.css');\n@import url('pagination.css');\n@import url('theme-selector.css');\n","@layer reset {\n /* Sourced from https://piccalil.li/blog/a-more-modern-css-reset/ */\n\n /* Box sizing rules */\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n /* Prevent font size inflation */\n html {\n /* stylelint-disable property-no-vendor-prefix */\n -moz-text-size-adjust: none;\n -webkit-text-size-adjust: none;\n /* stylelint-enable property-no-vendor-prefix */\n text-size-adjust: none;\n }\n\n /* Remove default margin in favour of better control in authored CSS */\n body, h1, h2, h3, h4, p,\n figure, blockquote, dl, dd {\n margin-block-end: 0;\n }\n\n /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */\n ul[role='list'],\n ol[role='list'] {\n list-style: none;\n }\n\n /* Set core body defaults */\n body {\n line-height: 1.5;\n }\n\n /* Set shorter line heights on headings and interactive elements */\n h1, h2, h3, h4,\n button, input, label {\n line-height: 1.1;\n }\n\n /* Balance text wrapping on headings */\n h1, h2,\n h3, h4 {\n text-wrap: balance;\n }\n\n /* A elements that don't have a class get default styles */\n a:not([class]) {\n text-decoration-skip-ink: auto;\n color: currentcolor;\n }\n\n /* Make images easier to work with */\n img,\n picture {\n max-width: 100%;\n height: auto;\n display: block;\n }\n\n /* Inherit fonts for inputs and buttons */\n input, button,\n textarea, select {\n font-family: inherit;\n font-size: inherit;\n }\n\n /* Make sure textareas without a rows attribute are not tiny */\n textarea:not([rows]) {\n min-height: 10em;\n }\n\n /* Anything that has been anchored to should have extra scroll margin */\n :target {\n scroll-margin-block: 5ex;\n }\n\n /* Disable view transition animations for users who don’t want them */\n @media (prefers-reduced-motion) {\n ::view-transition-group(*),\n ::view-transition-old(*),\n ::view-transition-new(*) {\n animation: none !important;\n }\n }\n}\n","@layer components {\n body > header {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto auto;\n align-items: baseline;\n gap: 1rem;\n\n a {\n text-decoration: none;\n }\n\n h1 {\n margin: 0;\n text-wrap: nowrap;\n }\n\n nav {\n display: flex;\n flex-direction: row;\n gap: .5rem;\n\n @media screen and (width <= 1100px) {\n grid-row: 2;\n grid-column: 1 / span 3;\n flex-wrap: wrap;\n }\n }\n }\n}\n","@layer components {\n .note {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--clr-border);\n border-radius: var(--border-radius);\n padding: 1ex 2ex;\n\n .e-content {\n > p:first-child {\n margin-block-start: 0;\n }\n\n .u-photo {\n width: 100%;\n height: auto;\n }\n }\n\n .syndication-links {\n display: flex;\n flex-direction: row;\n gap: 1ex;\n\n svg {\n border-radius: 4px;\n width: auto;\n height: 1lh;\n }\n }\n }\n\n .reply-to {\n font-size: 85%;\n margin-inline: 2ex;\n padding-inline: 1ex;\n border: 1px solid var(--clr-border);\n border-bottom: none;\n border-top-left-radius: var(--border-radius);\n border-top-right-radius: var(--border-radius);\n }\n}\n","@layer base {\n :root {\n color-scheme: light dark;\n\n --primary-hue: 307;\n --clr-text: light-dark(\n oklch(5% 0.1 var(--primary-hue)),\n oklch(100% 0.1 var(--primary-hue))\n );\n --clr-background: light-dark(\n oklch(100% 0.1 var(--primary-hue)),\n oklch(15% 0.15 var(--primary-hue))\n );\n --clr-border: light-dark(\n oklch(90% 0.2 var(--primary-hue)),\n oklch(25% 0.1 var(--primary-hue))\n );\n\n /* Adding snow fall colour whilst we are using it */\n --clr-snow-fall: light-dark(\n oklch(25% 0.15 var(--primary-hue)),\n oklch(85% 0.2 var(--primary-hue))\n );\n }\n\n body {\n background-color: var(--clr-background);\n color: var(--clr-text);\n }\n}\n","@layer base {\n :root {\n --border-radius: 8px;\n }\n\n html {\n font-size: 125%;\n }\n\n body {\n display: grid;\n grid-template-columns: 1fr min(80ch, 80vw) 1fr;\n grid-template-rows: min-content 1fr min-content;\n padding-inline: 4vw;\n\n > header {\n grid-column: 1/-1;\n }\n\n > main {\n grid-column: 2/3;\n }\n\n > footer {\n grid-column: 1/-1;\n margin-block-start: 2ex;\n\n search form {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 1ex;\n\n input {\n min-width: 0;\n }\n }\n }\n }\n\n .h-feed {\n display: flex;\n flex-direction: column;\n gap: 2ex;\n }\n}\n\n@layer components {\n .h-entry {\n pre {\n padding: 1rem;\n }\n }\n}\n\n","@layer components {\n .pagination {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n\n div {\n display: flex;\n flex-direction: row;\n gap: 1ex;\n }\n }\n}\n","@layer components {\n #theme-selector {\n button {\n appearance: none;\n border: none;\n background: none;\n\n &:hover {\n cursor: pointer;\n }\n }\n\n /* This is the element with the [popover] attribute */\n #theme-selector-dropdown {\n position: absolute;\n position-area: block-end span-inline-start;\n margin: 0;\n border: 2px solid var(--clr-border);\n background-color: var(--clr-background);\n color: var(--clr-text);\n\n fieldset {\n border: 0;\n display: flex;\n flex-direction: row;\n gap: 1ch;\n\n input {\n display: none;\n }\n }\n }\n\n /*\n * This is the element with the [popover] attribute\n * Here we are styling the open and closing animations\n */\n @media (prefers-reduced-motion: no-preference) {\n #theme-selector-dropdown {\n &:popover-open {\n transform: translateY(0) scale(1);\n opacity: 1;\n\n /*\n * Start styles for the opening transition.\n * Added to :popover-open, but after the opened styles.\n */\n @starting-style {\n transform: translateY(30px) scale(0);\n opacity: 0;\n }\n }\n\n /*\n * End styles for the closing transition.\n */\n transform: translateY(0) scale(0);\n opacity: 0;\n\n /*\n * Enumerate transitioning properties, including display and overlay.\n */\n transition: transform, opacity, display allow-discrete, overlay allow-discrete;\n transition-duration: 0.5s;\n transform-origin: top right;\n }\n }\n }\n\n ::view-transition-group(changing-theme) {\n animation-duration: 1.25s;\n }\n\n ::view-transition-new(changing-theme),\n ::view-transition-old(changing-theme) {\n mix-blend-mode: normal;\n }\n\n ::view-transition-new(changing-theme) {\n animation-name: reveal;\n }\n\n ::view-transition-old(changing-theme) {\n animation: none;\n }\n\n @keyframes reveal {\n from {\n clip-path: polygon(-30% 0, -30% 0, -15% 100%, -10% 115%);\n }\n\n to {\n clip-path: polygon(-30% 0, 130% 0, 115% 100%, -10% 115%);\n }\n }\n}\n"],"names":[]}
\ No newline at end of file
+{"version":3,"mappings":"AACA,aCGE,uCAOA,oFASA,8DAMA,4CAMA,qBAKA,+CAMA,8BAMA,gEAMA,qDAQA,mEAOA,qCAKA,gCAKA,gCACE,wGDhFJ,YEAE,oaAwBA,kECxBA,0BAIA,oBAIA,iIAME,0BAIA,uBAIA,iDAIE,yEAME,uBAON,oDHvCF,kBG+CE,SACE,oBChDF,wHAOE,yBAIA,+BAKA,gDAKE,kCAAqC,2CCrBzC,+HAOE,aACE,qCAIA,mCAMF,6DAKE,gDAQJ,4MC/BA,sFAME,+CCNF,gBACE,oDAKE,wBAMF,gMAQE,4DAME,uBAUJ,8CACE,2BACE,yDAQE,gBAAiB,8CAST,0KAahB,iEAIA,kGAKA,4DAIA,qDAIA","sources":["resources/css/app.css","resources/css/layout.css","resources/css/colours.css","resources/css/reset.css","resources/css/theme-selector.css","resources/css/header.css","resources/css/pagination.css","resources/css/notes.css"],"sourcesContent":["/* First thing we need to do is declare our cascade layers */\n@layer reset, base, components;\n\n@import url('reset.css');\n@import url('colours.css');\n@import url('layout.css');\n@import url('header.css');\n@import url('notes.css');\n@import url('pagination.css');\n@import url('theme-selector.css');\n","@layer base {\n :root {\n --border-radius: 8px;\n }\n\n html {\n font-size: 125%;\n }\n\n body {\n display: grid;\n grid-template-columns: 1fr min(80ch, 80vw) 1fr;\n grid-template-rows: min-content 1fr min-content;\n padding-inline: 4vw;\n\n > header {\n grid-column: 1/-1;\n }\n\n > main {\n grid-column: 2/3;\n }\n\n > footer {\n grid-column: 1/-1;\n margin-block-start: 2ex;\n\n search form {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 1ex;\n\n input {\n min-width: 0;\n }\n }\n }\n }\n\n .h-feed {\n display: flex;\n flex-direction: column;\n gap: 2ex;\n }\n}\n\n@layer components {\n .h-entry {\n pre {\n padding: 1rem;\n }\n }\n}\n\n","@layer base {\n :root {\n color-scheme: light dark;\n\n --primary-hue: 307;\n --clr-text: light-dark(\n oklch(5% 0.1 var(--primary-hue)),\n oklch(100% 0.1 var(--primary-hue))\n );\n --clr-background: light-dark(\n oklch(100% 0.1 var(--primary-hue)),\n oklch(15% 0.15 var(--primary-hue))\n );\n --clr-border: light-dark(\n oklch(90% 0.2 var(--primary-hue)),\n oklch(25% 0.1 var(--primary-hue))\n );\n\n /* Adding snow fall colour whilst we are using it */\n --clr-snow-fall: light-dark(\n oklch(25% 0.15 var(--primary-hue)),\n oklch(85% 0.2 var(--primary-hue))\n );\n }\n\n body {\n background-color: var(--clr-background);\n color: var(--clr-text);\n }\n}\n","@layer reset {\n /* Sourced from https://piccalil.li/blog/a-more-modern-css-reset/ */\n\n /* Box sizing rules */\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n /* Prevent font size inflation */\n html {\n /* stylelint-disable property-no-vendor-prefix */\n -moz-text-size-adjust: none;\n -webkit-text-size-adjust: none;\n /* stylelint-enable property-no-vendor-prefix */\n text-size-adjust: none;\n }\n\n /* Remove default margin in favour of better control in authored CSS */\n body, h1, h2, h3, h4, p,\n figure, blockquote, dl, dd {\n margin-block-end: 0;\n }\n\n /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */\n ul[role='list'],\n ol[role='list'] {\n list-style: none;\n }\n\n /* Set core body defaults */\n body {\n line-height: 1.5;\n }\n\n /* Set shorter line heights on headings and interactive elements */\n h1, h2, h3, h4,\n button, input, label {\n line-height: 1.1;\n }\n\n /* Balance text wrapping on headings */\n h1, h2,\n h3, h4 {\n text-wrap: balance;\n }\n\n /* A elements that don't have a class get default styles */\n a:not([class]) {\n text-decoration-skip-ink: auto;\n color: currentcolor;\n }\n\n /* Make images easier to work with */\n img,\n picture {\n max-width: 100%;\n height: auto;\n display: block;\n }\n\n /* Inherit fonts for inputs and buttons */\n input, button,\n textarea, select {\n font-family: inherit;\n font-size: inherit;\n }\n\n /* Make sure textareas without a rows attribute are not tiny */\n textarea:not([rows]) {\n min-height: 10em;\n }\n\n /* Anything that has been anchored to should have extra scroll margin */\n :target {\n scroll-margin-block: 5ex;\n }\n\n /* Disable view transition animations for users who don’t want them */\n @media (prefers-reduced-motion) {\n ::view-transition-group(*),\n ::view-transition-old(*),\n ::view-transition-new(*) {\n animation: none !important;\n }\n }\n}\n","@layer components {\n #theme-selector {\n button {\n appearance: none;\n border: none;\n background: none;\n\n &:hover {\n cursor: pointer;\n }\n }\n\n /* This is the element with the [popover] attribute */\n #theme-selector-dropdown {\n position: absolute;\n position-area: block-end span-inline-start;\n margin: 0;\n border: 2px solid var(--clr-border);\n background-color: var(--clr-background);\n color: var(--clr-text);\n\n fieldset {\n border: 0;\n display: flex;\n flex-direction: row;\n gap: 1ch;\n\n input {\n display: none;\n }\n }\n }\n\n /*\n * This is the element with the [popover] attribute\n * Here we are styling the open and closing animations\n */\n @media (prefers-reduced-motion: no-preference) {\n #theme-selector-dropdown {\n &:popover-open {\n transform: translateY(0) scale(1);\n opacity: 1;\n\n /*\n * Start styles for the opening transition.\n * Added to :popover-open, but after the opened styles.\n */\n @starting-style {\n transform: translateY(30px) scale(0);\n opacity: 0;\n }\n }\n\n /*\n * End styles for the closing transition.\n */\n transform: translateY(0) scale(0);\n opacity: 0;\n\n /*\n * Enumerate transitioning properties, including display and overlay.\n */\n transition: transform, opacity, display allow-discrete, overlay allow-discrete;\n transition-duration: 0.5s;\n transform-origin: top right;\n }\n }\n }\n\n ::view-transition-group(changing-theme) {\n animation-duration: 1.25s;\n }\n\n ::view-transition-new(changing-theme),\n ::view-transition-old(changing-theme) {\n mix-blend-mode: normal;\n }\n\n ::view-transition-new(changing-theme) {\n animation-name: reveal;\n }\n\n ::view-transition-old(changing-theme) {\n animation: none;\n }\n\n @keyframes reveal {\n from {\n clip-path: polygon(-30% 0, -30% 0, -15% 100%, -10% 115%);\n }\n\n to {\n clip-path: polygon(-30% 0, 130% 0, 115% 100%, -10% 115%);\n }\n }\n}\n","@layer components {\n body > header {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto auto;\n align-items: baseline;\n gap: 1rem;\n\n a {\n text-decoration: none;\n }\n\n h1 {\n margin: 0;\n text-wrap: nowrap;\n }\n\n nav {\n display: flex;\n flex-direction: row;\n gap: .5rem;\n\n @media screen and (width <= 1100px) {\n grid-row: 2;\n grid-column: 1 / span 3;\n flex-wrap: wrap;\n }\n }\n }\n}\n","@layer components {\n .pagination {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n\n div {\n display: flex;\n flex-direction: row;\n gap: 1ex;\n }\n }\n}\n","@layer components {\n .note {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--clr-border);\n border-radius: var(--border-radius);\n padding: 1ex 2ex;\n\n .e-content {\n > p:first-child {\n margin-block-start: 0;\n }\n\n .u-photo {\n width: 100%;\n height: auto;\n }\n }\n\n .syndication-links {\n display: flex;\n flex-direction: row;\n gap: 1ex;\n\n svg {\n border-radius: 4px;\n width: auto;\n height: 1lh;\n }\n }\n }\n\n .reply-to {\n font-size: 85%;\n margin-inline: 2ex;\n padding-inline: 1ex;\n border: 1px solid var(--clr-border);\n border-bottom: none;\n border-top-left-radius: var(--border-radius);\n border-top-right-radius: var(--border-radius);\n }\n}\n"],"names":[]}
\ No newline at end of file
diff --git a/tests/Feature/Admin/ContactsTest.php b/tests/Feature/Admin/ContactsTest.php
index 44320b9d..9fc338eb 100644
--- a/tests/Feature/Admin/ContactsTest.php
+++ b/tests/Feature/Admin/ContactsTest.php
@@ -6,9 +6,12 @@ namespace Tests\Feature\Admin;
use App\Models\Contact;
use App\Models\User;
+use GuzzleHttp\Client;
+use GuzzleHttp\Handler\MockHandler;
+use GuzzleHttp\HandlerStack;
+use GuzzleHttp\Psr7\Response;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\UploadedFile;
-use Illuminate\Support\Facades\Http;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase;
@@ -138,12 +141,14 @@ class ContactsTest extends TestCase
HTML;
- $file = file_get_contents(__DIR__.'/../../aaron.png');
- Http::fake([
- '*' => Http::sequence()
- ->push($html, 200, ['Content-Type' => 'text/html'])
- ->push($file, 200, ['Content-Type' => 'image/png']),
+ $file = fopen(__DIR__.'/../../aaron.png', 'rb');
+ $mock = new MockHandler([
+ new Response(200, ['Content-Type' => 'text/html'], $html),
+ new Response(200, ['Content-Type' => 'image/png'], $file),
]);
+ $handler = HandlerStack::create($mock);
+ $client = new Client(['handler' => $handler]);
+ $this->app->instance(Client::class, $client);
$user = User::factory()->make();
$contact = Contact::factory()->create([
'homepage' => 'https://tantek.com',
@@ -160,9 +165,12 @@ class ContactsTest extends TestCase
#[Test]
public function getting_remote_avatar_fails_gracefully_with_remote_not_found(): void
{
- Http::fake([
- '*' => Http::response('', 404),
+ $mock = new MockHandler([
+ new Response(404),
]);
+ $handler = HandlerStack::create($mock);
+ $client = new Client(['handler' => $handler]);
+ $this->app->instance(Client::class, $client);
$user = User::factory()->make();
$contact = Contact::factory()->create();
@@ -179,11 +187,13 @@ class ContactsTest extends TestCase
HTML;
- Http::fake([
- '*' => Http::sequence()
- ->push($html, 200, ['Content-Type' => 'text/html'])
- ->push('', 404),
+ $mock = new MockHandler([
+ new Response(200, ['Content-Type' => 'text/html'], $html),
+ new Response(404),
]);
+ $handler = HandlerStack::create($mock);
+ $client = new Client(['handler' => $handler]);
+ $this->app->instance(Client::class, $client);
$user = User::factory()->make();
$contact = Contact::factory()->create();
diff --git a/tests/Feature/IndieAuthTest.php b/tests/Feature/IndieAuthTest.php
index b32f4420..534fe452 100644
--- a/tests/Feature/IndieAuthTest.php
+++ b/tests/Feature/IndieAuthTest.php
@@ -5,11 +5,14 @@ declare(strict_types=1);
namespace Tests\Feature;
use App\Models\User;
+use GuzzleHttp\Client;
+use GuzzleHttp\Handler\MockHandler;
+use GuzzleHttp\HandlerStack;
+use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Psr7\Uri;
use GuzzleHttp\Psr7\UriResolver;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Cache;
-use Illuminate\Support\Facades\Http;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase;
@@ -266,9 +269,12 @@ class IndieAuthTest extends TestCase